diff --git a/src/main/java/ru/bclib/api/PostInitAPI.java b/src/main/java/ru/bclib/api/PostInitAPI.java index 7a0afd95..8cc068e0 100644 --- a/src/main/java/ru/bclib/api/PostInitAPI.java +++ b/src/main/java/ru/bclib/api/PostInitAPI.java @@ -1,8 +1,19 @@ package ru.bclib.api; import com.google.common.collect.Lists; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Registry; +import net.minecraft.world.level.block.Block; +import ru.bclib.blocks.BaseChestBlock; +import ru.bclib.blocks.BaseSignBlock; +import ru.bclib.client.render.BCLRenderLayer; +import ru.bclib.client.render.BaseChestBlockEntityRenderer; +import ru.bclib.client.render.BaseSignBlockEntityRenderer; import ru.bclib.interfaces.PostInitable; +import ru.bclib.interfaces.RenderLayerProvider; import java.util.List; import java.util.function.Consumer; @@ -14,16 +25,38 @@ public class PostInitAPI { postInitFunctions.add(function); } - public static void postInit() { + public static void postInit(boolean isClient) { if (postInitFunctions == null) { return; } postInitFunctions.forEach(function -> function.accept(null)); Registry.BLOCK.forEach(block -> { - if (block instanceof PostInitable) { - ((PostInitable) block).postInit(); + processBlockCommon(block); + if (isClient) { + processBlockClient(block); } }); postInitFunctions = null; } + + @Environment(EnvType.CLIENT) + private static void processBlockClient(Block block) { + if (block instanceof RenderLayerProvider) { + BCLRenderLayer layer = ((RenderLayerProvider) block).getRenderLayer(); + if (layer == BCLRenderLayer.CUTOUT) BlockRenderLayerMap.INSTANCE.putBlock(block, RenderType.cutout()); + else if (layer == BCLRenderLayer.TRANSLUCENT) BlockRenderLayerMap.INSTANCE.putBlock(block, RenderType.translucent()); + } + if (block instanceof BaseChestBlock) { + BaseChestBlockEntityRenderer.registerRenderLayer(block); + } + else if (block instanceof BaseSignBlock) { + BaseSignBlockEntityRenderer.registerRenderLayer(block); + } + } + + private static void processBlockCommon(Block block) { + if (block instanceof PostInitable) { + ((PostInitable) block).postInit(); + } + } } diff --git a/src/main/java/ru/bclib/client/BCLibClient.java b/src/main/java/ru/bclib/client/BCLibClient.java index 4c9e3698..8935ce7e 100644 --- a/src/main/java/ru/bclib/client/BCLibClient.java +++ b/src/main/java/ru/bclib/client/BCLibClient.java @@ -16,19 +16,6 @@ public class BCLibClient implements ClientModInitializer { public void onInitializeClient() { ModIntegrationAPI.registerAll(); BaseBlockEntityRenders.register(); - registerRenderLayers(); - PostInitAPI.postInit(); - } - - private void registerRenderLayers() { - RenderType cutout = RenderType.cutout(); - RenderType translucent = RenderType.translucent(); - Registry.BLOCK.forEach(block -> { - if (block instanceof RenderLayerProvider) { - BCLRenderLayer layer = ((RenderLayerProvider) block).getRenderLayer(); - if (layer == BCLRenderLayer.CUTOUT) BlockRenderLayerMap.INSTANCE.putBlock(block, cutout); - else if (layer == BCLRenderLayer.TRANSLUCENT) BlockRenderLayerMap.INSTANCE.putBlock(block, translucent); - } - }); + PostInitAPI.postInit(true); } } diff --git a/src/main/java/ru/bclib/interfaces/TileEntityRenderProvider.java b/src/main/java/ru/bclib/interfaces/TileEntityRenderProvider.java new file mode 100644 index 00000000..5d59f113 --- /dev/null +++ b/src/main/java/ru/bclib/interfaces/TileEntityRenderProvider.java @@ -0,0 +1,5 @@ +package ru.bclib.interfaces; + +public interface TileEntityRenderProvider { + +} diff --git a/src/main/java/ru/bclib/server/BCLibServer.java b/src/main/java/ru/bclib/server/BCLibServer.java index 402e6a2a..0cd2b803 100644 --- a/src/main/java/ru/bclib/server/BCLibServer.java +++ b/src/main/java/ru/bclib/server/BCLibServer.java @@ -10,6 +10,6 @@ public class BCLibServer implements DedicatedServerModInitializer { @Override public void onInitializeServer() { ModIntegrationAPI.registerAll(); - PostInitAPI.postInit(); + PostInitAPI.postInit(false); } }