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:
+7
-2
@@ -71,8 +71,13 @@ subprojects {
|
|||||||
|
|
||||||
setupRepositories()
|
setupRepositories()
|
||||||
|
|
||||||
val capitalizedName =
|
val capitalizedName = {
|
||||||
project.name.replaceFirstChar { it.uppercase() }
|
if (project.name == "neoforge") {
|
||||||
|
"NeoForge"
|
||||||
|
} else {
|
||||||
|
project.name.replaceFirstChar { it.titlecase() }
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
val loom = project.extensions.getByType<LoomGradleExtensionAPI>()
|
val loom = project.extensions.getByType<LoomGradleExtensionAPI>()
|
||||||
loom.apply {
|
loom.apply {
|
||||||
|
|||||||
+3
-1
@@ -30,8 +30,9 @@ public class CrystallineSkyClient {
|
|||||||
);
|
);
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
CrystallineItems.SKY_LIGHT.onRegistered(i -> {
|
||||||
ClientPlatformHelper.registerItemProperty(
|
ClientPlatformHelper.registerItemProperty(
|
||||||
CrystallineItems.SKY_LIGHT.value(),
|
i,
|
||||||
ResourceLocation.withDefaultNamespace("level"),
|
ResourceLocation.withDefaultNamespace("level"),
|
||||||
(stack, world, entity, seed) -> {
|
(stack, world, entity, seed) -> {
|
||||||
BlockItemStateProperties state = stack.getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY);
|
BlockItemStateProperties state = stack.getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY);
|
||||||
@@ -39,6 +40,7 @@ public class CrystallineSkyClient {
|
|||||||
return level != null ? level / 16.0F : 1.0F;
|
return level != null ? level / 16.0F : 1.0F;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerKeybindings(Consumer<KeyMapping> registrar) {
|
public static void registerKeybindings(Consumer<KeyMapping> registrar) {
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package io.github.slimeistdev.crystalline_sky.foundation.registration;
|
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.Multimap;
|
||||||
import com.google.common.collect.Multimaps;
|
import com.google.common.collect.Multimaps;
|
||||||
import io.github.slimeistdev.crystalline_sky.foundation.registration.builder.BlockBuilder;
|
import io.github.slimeistdev.crystalline_sky.foundation.registration.builder.BlockBuilder;
|
||||||
@@ -21,7 +21,7 @@ import java.util.function.Function;
|
|||||||
public class CatnipRegistry {
|
public class CatnipRegistry {
|
||||||
public final String modId;
|
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 static final Multimap<Registry<?>, Registration<?, ?, ?>> REGISTRATIONS_VIEW = Multimaps.unmodifiableMultimap(REGISTRATIONS);
|
||||||
|
|
||||||
public CatnipRegistry(String modId) {
|
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 com.google.common.collect.ImmutableList;
|
||||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderType_Duck;
|
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 net.minecraft.client.renderer.RenderType;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Mutable;
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
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)
|
@Mixin(RenderType.class)
|
||||||
public class RenderTypeMixin implements RenderType_Duck {
|
public class RenderTypeMixin implements RenderType_Duck {
|
||||||
@@ -22,4 +26,10 @@ public class RenderTypeMixin implements RenderType_Duck {
|
|||||||
.add((RenderType) (Object) this)
|
.add((RenderType) (Object) this)
|
||||||
.build();
|
.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;
|
package io.github.slimeistdev.crystalline_sky.multiloader.neoforge;
|
||||||
|
|
||||||
public class ItemGroupRegistrationEventImpl {
|
import io.github.slimeistdev.crystalline_sky.multiloader.ItemGroupRegistrationEvent;
|
||||||
public static void create() {
|
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.CrystallineSky;
|
||||||
import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient;
|
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 io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
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.api.distmarker.Dist;
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.neoforged.fml.common.EventBusSubscriber;
|
import net.neoforged.fml.common.EventBusSubscriber;
|
||||||
@@ -39,6 +39,6 @@ public class CrystallineSkyClientImpl {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEvent event) {
|
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;
|
package io.github.slimeistdev.crystalline_sky.neoforge;
|
||||||
|
|
||||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
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.Env;
|
||||||
|
import io.github.slimeistdev.crystalline_sky.multiloader.PlatformHelper;
|
||||||
import net.neoforged.bus.api.IEventBus;
|
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.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)
|
@Mod(CrystallineSky.ID)
|
||||||
public class CrystallineSkyImpl {
|
public class CrystallineSkyImpl {
|
||||||
static IEventBus bus;
|
static IEventBus bus;
|
||||||
|
|
||||||
public CrystallineSkyImpl(IEventBus bus) {
|
public CrystallineSkyImpl(IEventBus bus) {
|
||||||
|
restoreLoggers();
|
||||||
CrystallineSkyImpl.bus = bus;
|
CrystallineSkyImpl.bus = bus;
|
||||||
|
|
||||||
CrystallineSky.init();
|
CrystallineSky.init();
|
||||||
//noinspection Convert2MethodRef
|
//noinspection Convert2MethodRef
|
||||||
Env.CLIENT.runIfCurrent(() -> () -> CrystallineSkyClientImpl.init());
|
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 com.google.common.collect.ImmutableList;
|
||||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderType_Duck;
|
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 net.minecraft.client.renderer.RenderType;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Mutable;
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
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)
|
@Mixin(RenderType.class)
|
||||||
public class RenderTypeMixin implements RenderType_Duck {
|
public class RenderTypeMixin implements RenderType_Duck {
|
||||||
@@ -26,4 +30,10 @@ public class RenderTypeMixin implements RenderType_Duck {
|
|||||||
.build();
|
.build();
|
||||||
chunkLayerId = CHUNK_BUFFER_LAYERS.size() - 1;
|
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