mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Multiloader VI
neoforge is working
This commit is contained in:
+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