diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 0dead92..833f498 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { modImplementation(libs.fl) // required for proper remapping and compiling - modCompileOnly(libs.fapi) // TODO: try removing this and seeing if that breaks stuff + //modCompileOnly(libs.fapi) // TODO: try removing this and seeing if that breaks stuff modCompileOnly(libs.sodium.fabric) diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java index 2507f50..29fac28 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/CrystallineSkyClient.java @@ -1,18 +1,15 @@ package io.github.slimeistdev.crystalline_sky; import com.mojang.blaze3d.platform.InputConstants; +import io.github.slimeistdev.crystalline_sky.annotation.multiloader.MultiLoaderEvent; import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DebugRenderer_Duck; -import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; +import io.github.slimeistdev.crystalline_sky.multiloader.ClientPlatformHelper; import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems; -import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.KeyMapping; -import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.client.Minecraft; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -21,37 +18,44 @@ import net.minecraft.world.item.component.BlockItemStateProperties; import net.minecraft.world.level.block.LightBlock; import org.lwjgl.glfw.GLFW; +import java.util.function.Consumer; + @Environment(EnvType.CLIENT) public class CrystallineSkyClient { + private static final KeyMapping KEY_TOGGLE_DEBUG = new KeyMapping( + "crystalline_sky.key.toggle_weeping_sky_debug", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_UNKNOWN, + "crystalline_sky.category.crystalline_sky" + ); + public static void init() { - BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.SKY, CrystallineRenderTypes.SKY); - BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.WEEPING_SKY, CrystallineRenderTypes.SKY); - - var weepingSkyKeybind = KeyBindingHelper.registerKeyBinding(new KeyMapping( - "crystalline_sky.key.toggle_weeping_sky_debug", - InputConstants.Type.KEYSYM, - GLFW.GLFW_KEY_UNKNOWN, - "crystalline_sky.category.crystalline_sky" - )); - - ClientTickEvents.END_CLIENT_TICK.register(client -> { - while (weepingSkyKeybind.consumeClick()) { - int mode = ((DebugRenderer_Duck) client.debugRenderer).crystalline_sky$toggleWeepingSky(); - - Component message = getDebugMessage(ChatFormatting.YELLOW, - Component.translatable("message.crystalline_sky.weeping_sky_debug." + mode) - ); - - client.gui.getChat().addMessage(message); - } - }); - - ItemProperties.register(CrystallineItems.SKY_LIGHT, ResourceLocation.withDefaultNamespace("level"), + ClientPlatformHelper.registerItemProperty( + CrystallineItems.SKY_LIGHT, + ResourceLocation.withDefaultNamespace("level"), (stack, world, entity, seed) -> { - BlockItemStateProperties blockStateComponent = stack.getOrDefault(DataComponents.BLOCK_STATE, BlockItemStateProperties.EMPTY); - Integer integer = blockStateComponent.get(LightBlock.LEVEL); - return integer != null ? integer / 16.0F : 1.0F; - }); + 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 registrar) { + registrar.accept(KEY_TOGGLE_DEBUG); + } + + @MultiLoaderEvent + public static void onEndTick(Minecraft mc) { + while (KEY_TOGGLE_DEBUG.consumeClick()) { + int mode = ((DebugRenderer_Duck) mc.debugRenderer).crystalline_sky$toggleWeepingSky(); + + Component message = getDebugMessage(ChatFormatting.YELLOW, + Component.translatable("message.crystalline_sky.weeping_sky_debug." + mode) + ); + + mc.gui.getChat().addMessage(message); + } } @SuppressWarnings("SameParameterValue") diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/annotation/multiloader/MultiLoaderEvent.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/annotation/multiloader/MultiLoaderEvent.java new file mode 100644 index 0000000..78a5557 --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/annotation/multiloader/MultiLoaderEvent.java @@ -0,0 +1,33 @@ +/* + * Steam 'n' Rails + * Copyright (c) 2022-2025 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package io.github.slimeistdev.crystalline_sky.annotation.multiloader; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Used to mark methods that are called via abstracted loader-specific events. + *

+ * Meant purely for documentation and does not exist at compile-time or runtime. + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface MultiLoaderEvent { } diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/ClientPlatformHelper.java b/common/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/ClientPlatformHelper.java new file mode 100644 index 0000000..1d685ea --- /dev/null +++ b/common/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/ClientPlatformHelper.java @@ -0,0 +1,16 @@ +package io.github.slimeistdev.crystalline_sky.multiloader; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@Environment(EnvType.CLIENT) +public class ClientPlatformHelper { + @ExpectPlatform + public static void registerItemProperty(Item item, ResourceLocation name, ClampedItemPropertyFunction property) { + throw new AssertionError(); + } +} diff --git a/common/src/main/resources/crystalline_sky-common.mixins.json b/common/src/main/resources/crystalline_sky-common.mixins.json index 01a0141..8421ea7 100644 --- a/common/src/main/resources/crystalline_sky-common.mixins.json +++ b/common/src/main/resources/crystalline_sky-common.mixins.json @@ -19,7 +19,6 @@ "client.DebugRendererMixin", "client.RenderTargetMixin", "client.GameRendererMixin", - "client.RenderTypeMixin", "client.LevelRenderer_NoSodium_Mixin", "client.LevelRendererMixin", "client.compat.axiom.ChunkRenderOverrider_AxiomChunkOverrideLayerMixin", diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java index c6edca8..9bfc345 100644 --- a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/CrystallineSkyClientImpl.java @@ -1,14 +1,25 @@ package io.github.slimeistdev.crystalline_sky.fabric; import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient; +import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; +import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; @Environment(EnvType.CLIENT) public class CrystallineSkyClientImpl implements ClientModInitializer { @Override public void onInitializeClient() { CrystallineSkyClient.init(); + CrystallineSkyClient.registerKeybindings(KeyBindingHelper::registerKeyBinding); + + BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.SKY, CrystallineRenderTypes.SKY); + BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.WEEPING_SKY, CrystallineRenderTypes.SKY); + + ClientTickEvents.END_CLIENT_TICK.register(CrystallineSkyClient::onEndTick); } } diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/CrystallineSkyDataGenerator.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/CrystallineSkyDataGenerator.java similarity index 58% rename from common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/CrystallineSkyDataGenerator.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/CrystallineSkyDataGenerator.java index 403f0c1..e1b0147 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/CrystallineSkyDataGenerator.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/CrystallineSkyDataGenerator.java @@ -1,8 +1,8 @@ -package io.github.slimeistdev.crystalline_sky.datagen; +package io.github.slimeistdev.crystalline_sky.fabric.datagen; -import io.github.slimeistdev.crystalline_sky.datagen.providers.CrystallineSkyBlockTagProvider; -import io.github.slimeistdev.crystalline_sky.datagen.providers.CrystallineSkyLootProvider; -import io.github.slimeistdev.crystalline_sky.datagen.providers.CrystallineSkyModelProvider; +import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyBlockTagProvider; +import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyLootProvider; +import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyModelProvider; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyBlockTagProvider.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyBlockTagProvider.java similarity index 94% rename from common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyBlockTagProvider.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyBlockTagProvider.java index 26e8aa6..6a5f5f4 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyBlockTagProvider.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyBlockTagProvider.java @@ -1,4 +1,4 @@ -package io.github.slimeistdev.crystalline_sky.datagen.providers; +package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers; import io.github.slimeistdev.crystalline_sky.CrystallineSky; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyLootProvider.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyLootProvider.java similarity index 90% rename from common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyLootProvider.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyLootProvider.java index 9d5e0f5..fd677a4 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyLootProvider.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyLootProvider.java @@ -1,4 +1,4 @@ -package io.github.slimeistdev.crystalline_sky.datagen.providers; +package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java similarity index 87% rename from common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java index c136bf0..21c1784 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/datagen/providers/CrystallineSkyModelProvider.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/datagen/providers/CrystallineSkyModelProvider.java @@ -1,24 +1,26 @@ -package io.github.slimeistdev.crystalline_sky.datagen.providers; +package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import io.github.slimeistdev.crystalline_sky.CrystallineSky; import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks; import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; -import net.minecraft.world.level.block.Block; import net.minecraft.data.models.BlockModelGenerators; -import net.minecraft.data.models.blockstates.Variant; -import net.minecraft.data.models.blockstates.PropertyDispatch; import net.minecraft.data.models.ItemModelGenerators; +import net.minecraft.data.models.blockstates.MultiVariantGenerator; +import net.minecraft.data.models.blockstates.PropertyDispatch; +import net.minecraft.data.models.blockstates.Variant; +import net.minecraft.data.models.blockstates.VariantProperties; import net.minecraft.data.models.model.ModelLocationUtils; import net.minecraft.data.models.model.ModelTemplates; import net.minecraft.data.models.model.TextureMapping; -import net.minecraft.data.models.blockstates.VariantProperties; -import net.minecraft.data.models.blockstates.MultiVariantGenerator; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.data.models.model.TexturedModel; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; import java.util.Locale; @@ -39,7 +41,16 @@ public class CrystallineSkyModelProvider extends FabricModelProvider { } private void registerSkyBlock(BlockModelGenerators gen, Block block) { - gen.createTrivialCube(block); + gen.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, TexturedModel.CUBE.create( + block, + (id, json) -> { + gen.modelOutput.accept(id, () -> { + JsonObject root = json.get().getAsJsonObject(); + root.addProperty("render_type", CrystallineSky.id("sky").toString()); + return root; + }); + } + ))); gen.createSimpleFlatItemModel(block); } diff --git a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderTypeMixin.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/mixin/client/RenderTypeMixin.java similarity index 91% rename from common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderTypeMixin.java rename to fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/mixin/client/RenderTypeMixin.java index 369f912..15c1280 100644 --- a/common/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/RenderTypeMixin.java +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/fabric/mixin/client/RenderTypeMixin.java @@ -1,4 +1,4 @@ -package io.github.slimeistdev.crystalline_sky.mixin.client; +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; diff --git a/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/fabric/ClientPlatformHelperImpl.java b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/fabric/ClientPlatformHelperImpl.java new file mode 100644 index 0000000..67885a1 --- /dev/null +++ b/fabric/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/fabric/ClientPlatformHelperImpl.java @@ -0,0 +1,14 @@ +package io.github.slimeistdev.crystalline_sky.multiloader.fabric; + +import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass; +import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@ImplClass +public class ClientPlatformHelperImpl { + public static void registerItemProperty(Item item, ResourceLocation name, ClampedItemPropertyFunction property) { + ItemProperties.register(item, name, property); + } +} diff --git a/fabric/src/main/resources/crystalline_sky.mixins.json b/fabric/src/main/resources/crystalline_sky.mixins.json index 7216cec..91d844e 100644 --- a/fabric/src/main/resources/crystalline_sky.mixins.json +++ b/fabric/src/main/resources/crystalline_sky.mixins.json @@ -10,6 +10,7 @@ "mixins": [ ], "client": [ + "client.RenderTypeMixin" ], "server": [ ], diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index b325cc6..6a1778e 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -36,7 +36,7 @@ "io.github.slimeistdev.crystalline_sky.fabric.CrystallineSkyClientImpl" ], "fabric-datagen": [ - "io.github.slimeistdev.crystalline_sky.datagen.CrystallineSkyDataGenerator" + "io.github.slimeistdev.crystalline_sky.fabric.datagen.CrystallineSkyDataGenerator" ] } } diff --git a/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/neoforge/ClientPlatformHelperImpl.java b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/neoforge/ClientPlatformHelperImpl.java new file mode 100644 index 0000000..14a9893 --- /dev/null +++ b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/multiloader/neoforge/ClientPlatformHelperImpl.java @@ -0,0 +1,14 @@ +package io.github.slimeistdev.crystalline_sky.multiloader.neoforge; + +import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass; +import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +@ImplClass +public class ClientPlatformHelperImpl { + public static void registerItemProperty(Item item, ResourceLocation name, ClampedItemPropertyFunction property) { + ItemProperties.register(item, name, property); + } +} diff --git a/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/CrystallineSkyClientImpl.java b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/CrystallineSkyClientImpl.java index 64b7ed5..e6e9dfb 100644 --- a/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/CrystallineSkyClientImpl.java +++ b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/CrystallineSkyClientImpl.java @@ -1,9 +1,36 @@ 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.registry.client.CrystallineRenderTypes; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.neoforge.client.event.RegisterNamedRenderTypesEvent; +@EventBusSubscriber(value = Dist.CLIENT, modid = CrystallineSky.ID) public class CrystallineSkyClientImpl { public static void init() { CrystallineSkyClient.init(); } + + @SubscribeEvent + public static void registerNamedRenderTypes(RegisterNamedRenderTypesEvent event) { + // NOTE: entity render type is just a placeholder, sky rendering isn't supported for entities + event.register(CrystallineSky.id("sky"), CrystallineRenderTypes.SKY, RenderType.entitySolid(CrystallineSky.id("sky"))); + } + + @SubscribeEvent + public static void registerBindings(RegisterKeyMappingsEvent event) { + CrystallineSkyClient.registerKeybindings(event::register); + } + + @SubscribeEvent + public static void onEndTick(ClientTickEvent.Post event) { + CrystallineSkyClient.onEndTick(Minecraft.getInstance()); + } } diff --git a/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/mixin/client/RenderTypeMixin.java b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/mixin/client/RenderTypeMixin.java new file mode 100644 index 0000000..46615f7 --- /dev/null +++ b/neoforge/src/main/java/io/github/slimeistdev/crystalline_sky/neoforge/mixin/client/RenderTypeMixin.java @@ -0,0 +1,29 @@ +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 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; + +@Mixin(RenderType.class) +public class RenderTypeMixin implements RenderType_Duck { + @Shadow + @Final + @Mutable + public static ImmutableList CHUNK_BUFFER_LAYERS; + + @Shadow + public int chunkLayerId; + + @Override + public void crystalline_sky$markAsBlockLayer() { + CHUNK_BUFFER_LAYERS = ImmutableList.builder() + .addAll(CHUNK_BUFFER_LAYERS) + .add((RenderType) (Object) this) + .build(); + chunkLayerId = CHUNK_BUFFER_LAYERS.size() - 1; + } +} diff --git a/neoforge/src/main/resources/crystalline_sky.mixins.json b/neoforge/src/main/resources/crystalline_sky.mixins.json index af85bfb..f787ae8 100644 --- a/neoforge/src/main/resources/crystalline_sky.mixins.json +++ b/neoforge/src/main/resources/crystalline_sky.mixins.json @@ -10,6 +10,7 @@ "mixins": [ ], "client": [ + "client.RenderTypeMixin" ], "server": [ ],