mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 05:22:18 -05:00
Multiloader VI
neoforge is working
This commit is contained in:
+7
-2
@@ -71,8 +71,13 @@ subprojects {
|
||||
|
||||
setupRepositories()
|
||||
|
||||
val capitalizedName =
|
||||
project.name.replaceFirstChar { it.uppercase() }
|
||||
val capitalizedName = {
|
||||
if (project.name == "neoforge") {
|
||||
"NeoForge"
|
||||
} else {
|
||||
project.name.replaceFirstChar { it.titlecase() }
|
||||
}
|
||||
}();
|
||||
|
||||
val loom = project.extensions.getByType<LoomGradleExtensionAPI>()
|
||||
loom.apply {
|
||||
|
||||
+11
-9
@@ -30,15 +30,17 @@ public class CrystallineSkyClient {
|
||||
);
|
||||
|
||||
public static void init() {
|
||||
ClientPlatformHelper.registerItemProperty(
|
||||
CrystallineItems.SKY_LIGHT.value(),
|
||||
ResourceLocation.withDefaultNamespace("level"),
|
||||
(stack, world, entity, seed) -> {
|
||||
BlockItemStateProperties state = stack.getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY);
|
||||
Integer level = state.get(LightBlock.LEVEL);
|
||||
return level != null ? level / 16.0F : 1.0F;
|
||||
}
|
||||
);
|
||||
CrystallineItems.SKY_LIGHT.onRegistered(i -> {
|
||||
ClientPlatformHelper.registerItemProperty(
|
||||
i,
|
||||
ResourceLocation.withDefaultNamespace("level"),
|
||||
(stack, world, entity, seed) -> {
|
||||
BlockItemStateProperties state = stack.getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY);
|
||||
Integer level = state.get(LightBlock.LEVEL);
|
||||
return level != null ? level / 16.0F : 1.0F;
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public static void registerKeybindings(Consumer<KeyMapping> registrar) {
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
package io.github.slimeistdev.crystalline_sky.foundation.registration;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Multimaps;
|
||||
import io.github.slimeistdev.crystalline_sky.foundation.registration.builder.BlockBuilder;
|
||||
@@ -21,7 +21,7 @@ import java.util.function.Function;
|
||||
public class CatnipRegistry {
|
||||
public final String modId;
|
||||
|
||||
private static final Multimap<Registry<?>, Registration<?, ?, ?>> REGISTRATIONS = HashMultimap.create();
|
||||
private static final Multimap<Registry<?>, Registration<?, ?, ?>> REGISTRATIONS = ArrayListMultimap.create();
|
||||
public static final Multimap<Registry<?>, Registration<?, ?, ?>> REGISTRATIONS_VIEW = Multimaps.unmodifiableMultimap(REGISTRATIONS);
|
||||
|
||||
public CatnipRegistry(String modId) {
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package io.github.slimeistdev.crystalline_sky.multiloader;
|
||||
|
||||
import dev.architectury.injectables.annotations.ExpectPlatform;
|
||||
|
||||
public class PlatformHelper {
|
||||
@ExpectPlatform
|
||||
public static boolean isDevEnv() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
+2
@@ -48,4 +48,6 @@ public abstract class CrystallineRenderTypes extends RenderType {
|
||||
}, () -> {});
|
||||
}
|
||||
}
|
||||
|
||||
public static void init() {}
|
||||
}
|
||||
|
||||
+10
@@ -2,11 +2,15 @@ package io.github.slimeistdev.crystalline_sky.fabric.mixin.client;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderType_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(RenderType.class)
|
||||
public class RenderTypeMixin implements RenderType_Duck {
|
||||
@@ -22,4 +26,10 @@ public class RenderTypeMixin implements RenderType_Duck {
|
||||
.add((RenderType) (Object) this)
|
||||
.build();
|
||||
}
|
||||
|
||||
// must do this _now_, otherwise it won't inject in time for other rendering classes to get the right block layers
|
||||
@Inject(method = "<clinit>", at = @At("RETURN"))
|
||||
private static void loadCustom(CallbackInfo ci) {
|
||||
CrystallineRenderTypes.init();
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package io.github.slimeistdev.crystalline_sky.multiloader.fabric;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
@ImplClass
|
||||
public class PlatformHelperImpl {
|
||||
public static boolean isDevEnv() {
|
||||
return FabricLoader.getInstance().isDevelopmentEnvironment();
|
||||
}
|
||||
}
|
||||
+36
-2
@@ -1,6 +1,40 @@
|
||||
package io.github.slimeistdev.crystalline_sky.multiloader.neoforge;
|
||||
|
||||
public class ItemGroupRegistrationEventImpl {
|
||||
public static void create() {
|
||||
import io.github.slimeistdev.crystalline_sky.multiloader.ItemGroupRegistrationEvent;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static net.minecraft.world.item.CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS;
|
||||
|
||||
public class ItemGroupRegistrationEventImpl implements ItemGroupRegistrationEvent {
|
||||
private final BuildCreativeModeTabContentsEvent event;
|
||||
|
||||
public ItemGroupRegistrationEventImpl(BuildCreativeModeTabContentsEvent event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceKey<CreativeModeTab> getTab() {
|
||||
return event.getTabKey();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermissions() {
|
||||
return event.hasPermissions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAfter(ItemLike reference, List<ItemStack> stacks) {
|
||||
// WARN: this is sort of hacky, but it should do for our current use cases
|
||||
ItemStack referenceStack = new ItemStack(reference.asItem());
|
||||
|
||||
for (ItemStack stack : stacks) {
|
||||
event.insertAfter(referenceStack, stack, PARENT_AND_SEARCH_TABS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package io.github.slimeistdev.crystalline_sky.multiloader.neoforge;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass;
|
||||
import net.neoforged.fml.loading.FMLLoader;
|
||||
|
||||
@ImplClass
|
||||
public class PlatformHelperImpl {
|
||||
public static boolean isDevEnv() {
|
||||
return !FMLLoader.isProduction();
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -2,11 +2,11 @@ package io.github.slimeistdev.crystalline_sky.neoforge;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient;
|
||||
import io.github.slimeistdev.crystalline_sky.multiloader.neoforge.ItemGroupRegistrationEventImpl;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.CreativeModeTabs;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
@@ -39,6 +39,6 @@ public class CrystallineSkyClientImpl {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEvent event) {
|
||||
event.insertAfter();
|
||||
CrystallineItems.onItemGroupRegistration(new ItemGroupRegistrationEventImpl(event));
|
||||
}
|
||||
}
|
||||
|
||||
+39
@@ -1,19 +1,58 @@
|
||||
package io.github.slimeistdev.crystalline_sky.neoforge;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import io.github.slimeistdev.crystalline_sky.foundation.registration.CatnipRegistry;
|
||||
import io.github.slimeistdev.crystalline_sky.foundation.registration.Registration;
|
||||
import io.github.slimeistdev.crystalline_sky.multiloader.Env;
|
||||
import io.github.slimeistdev.crystalline_sky.multiloader.PlatformHelper;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.neoforge.registries.RegisterEvent;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationSource;
|
||||
import org.apache.logging.log4j.core.config.Configurator;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
@EventBusSubscriber(modid = CrystallineSky.ID)
|
||||
@Mod(CrystallineSky.ID)
|
||||
public class CrystallineSkyImpl {
|
||||
static IEventBus bus;
|
||||
|
||||
public CrystallineSkyImpl(IEventBus bus) {
|
||||
restoreLoggers();
|
||||
CrystallineSkyImpl.bus = bus;
|
||||
|
||||
CrystallineSky.init();
|
||||
//noinspection Convert2MethodRef
|
||||
Env.CLIENT.runIfCurrent(() -> () -> CrystallineSkyClientImpl.init());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRegister(RegisterEvent event) {
|
||||
for (Registration<?, ?, ?> registration : CatnipRegistry.REGISTRATIONS_VIEW.get(event.getRegistry())) {
|
||||
if (registration != null) {
|
||||
registration.register();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void restoreLoggers() {
|
||||
if (PlatformHelper.isDevEnv()) {
|
||||
// restore our logging config, since forge likes to nuke it for fun
|
||||
for (String prop : new String[] {"log4j.configurationFile", "log4j2.configurationFile"}) {
|
||||
String file = System.getProperty(prop);
|
||||
if (file != null) {
|
||||
Configurator.reconfigure(ConfigurationFactory.getInstance().getConfiguration(
|
||||
LoggerContext.getContext(),
|
||||
ConfigurationSource.fromUri(URI.create(file))
|
||||
));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -2,11 +2,15 @@ package io.github.slimeistdev.crystalline_sky.neoforge.mixin.client;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderType_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(RenderType.class)
|
||||
public class RenderTypeMixin implements RenderType_Duck {
|
||||
@@ -26,4 +30,10 @@ public class RenderTypeMixin implements RenderType_Duck {
|
||||
.build();
|
||||
chunkLayerId = CHUNK_BUFFER_LAYERS.size() - 1;
|
||||
}
|
||||
|
||||
// must do this _now_, otherwise it won't inject in time for other rendering classes to get the right block layers
|
||||
@Inject(method = "<clinit>", at = @At("RETURN"))
|
||||
private static void loadCustom(CallbackInfo ci) {
|
||||
CrystallineRenderTypes.init();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user