From f7f45e3d7d140789f0bc0df541be747866ccbe61 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 25 Mar 2025 05:34:22 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix(client):=20=E4=BF=AE=E5=A4=8D=E6=96=AD?= =?UTF-8?q?=E5=BC=80=E9=93=BE=E6=8E=A5=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/CraftEngineFabricModClient.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java index 04198be2a..a893a53cc 100644 --- a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java +++ b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java @@ -7,10 +7,12 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.Block; import net.minecraft.client.color.world.BiomeColors; import net.minecraft.client.gui.screen.DisconnectedScreen; import net.minecraft.client.render.RenderLayer; +import net.minecraft.network.DisconnectionInfo; import net.minecraft.registry.Registries; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -19,7 +21,11 @@ import net.minecraft.world.biome.FoliageColors; import net.momirealms.craftengine.fabric.client.config.ModConfig; import net.momirealms.craftengine.fabric.client.network.CraftEnginePayload; +import java.net.URI; +import java.net.URL; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.Optional; public class CraftEngineFabricModClient implements ClientModInitializer { public static final String MOD_ID = "craftengine"; @@ -47,11 +53,21 @@ public class CraftEngineFabricModClient implements ClientModInitializer { if (decoded.startsWith("cp:")) { int blockRegistrySize = Integer.parseInt(decoded.substring(3)); if (Block.STATE_IDS.size() != blockRegistrySize) { - client.disconnect(new DisconnectedScreen( - client.currentScreen, - Text.translatable("disconnect.craftengine.title"), - Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize)) - ); + if (client.player != null) { + client.player.networkHandler.getConnection().disconnect( + new DisconnectionInfo( + Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize), + Optional.of(FabricLoader.getInstance().getConfigDir().resolve("craft-engine-fabric-mod/mappings.yml")), + Optional.of(URI.create("https://github.com/Xiao-MoMi/craft-engine")) + ) + ); + } else { + client.disconnect(new DisconnectedScreen( + client.currentScreen, + Text.translatable("disconnect.craftengine.title"), + Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize)) + ); + } } } }); From 6123cdeef97b409670b82d3616d77faa3a8c3573 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 25 Mar 2025 05:35:27 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix(client):=20=E4=BF=AE=E5=A4=8D=E6=96=AD?= =?UTF-8?q?=E5=BC=80=E9=93=BE=E6=8E=A5=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/fabric/client/CraftEngineFabricModClient.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java index a893a53cc..5f912f868 100644 --- a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java +++ b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java @@ -3,7 +3,6 @@ package net.momirealms.craftengine.fabric.client; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; @@ -16,15 +15,12 @@ import net.minecraft.network.DisconnectionInfo; import net.minecraft.registry.Registries; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.crash.CrashReport; import net.minecraft.world.biome.FoliageColors; import net.momirealms.craftengine.fabric.client.config.ModConfig; import net.momirealms.craftengine.fabric.client.network.CraftEnginePayload; import java.net.URI; -import java.net.URL; import java.nio.charset.StandardCharsets; -import java.nio.file.Path; import java.util.Optional; public class CraftEngineFabricModClient implements ClientModInitializer { From d2d796f4d3b160dfdf1a032c05d20b79376710e2 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 25 Mar 2025 10:46:00 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat(block):=20=E6=94=B9=E5=96=84=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E5=BD=A2=E7=8A=B6=E5=92=8C?= =?UTF-8?q?=E7=A2=B0=E6=92=9E=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fabric/CraftEngineFabricMod.java | 5 ++- .../craftengine/fabric/util/BlockUtils.java | 21 ++++++++++ .../fabric/util/RegisterBlocks.java | 39 +++++++++++++++++-- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java index 1b599bc5d..c83839921 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java @@ -4,6 +4,8 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.BlockState; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; import net.momirealms.craftengine.fabric.client.config.ModConfig; import net.momirealms.craftengine.fabric.util.BlockUtils; import net.momirealms.craftengine.fabric.util.LoggerFilter; @@ -37,7 +39,8 @@ public class CraftEngineFabricMod implements ModInitializer { BlockState blockState = YamlUtils.createBlockData("minecraft:" + replacedBlockId.getPath()); RegisterBlocks.register( replacedBlockId.getPath() + "_" + i, - BlockUtils.canPassThrough(blockState) + BlockUtils.canPassThrough(blockState), + BlockUtils.getShape(blockState) ); } } diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java index 3dc205eae..70b6ee011 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java @@ -1,7 +1,12 @@ package net.momirealms.craftengine.fabric.util; import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -43,4 +48,20 @@ public class BlockUtils { throw new RuntimeException("Failed to access 'collidable' field", e); } } + + + public static VoxelShape getShape(BlockState state) { + if (state == null) return VoxelShapes.fullCube(); + Block block = state.getBlock(); + VoxelShape combinedShape = VoxelShapes.empty(); + try { + for (BlockState possibleState : block.getStateManager().getStates()) { + VoxelShape currentShape = possibleState.getOutlineShape(null, BlockPos.ORIGIN); + combinedShape = VoxelShapes.union(combinedShape, currentShape); + } + return combinedShape.isEmpty() ? VoxelShapes.fullCube() : combinedShape; + } catch (Throwable ignored) { + return VoxelShapes.fullCube(); + } + } } diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java index f53152557..33234b3aa 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java @@ -2,21 +2,33 @@ package net.momirealms.craftengine.fabric.util; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; import net.momirealms.craftengine.fabric.CraftEngineFabricMod; import java.util.function.Function; public class RegisterBlocks { @SuppressWarnings("UnusedReturnValue") - public static Block register(String name, boolean canPassThrough) { + public static Block register(String name, boolean canPassThrough, VoxelShape outlineShape) { AbstractBlock.Settings settings = Block.Settings.create().nonOpaque().strength(-1.0F, 3600000.0F); - if (canPassThrough) settings.noCollision(); - return register(name, Block::new, settings); + VoxelShape collisionShape; + if (canPassThrough) { + collisionShape = VoxelShapes.empty(); + settings.noCollision(); + } else { + collisionShape = outlineShape; + } + return register(name, (settingsParam) -> new CustomBlock(settingsParam, outlineShape, collisionShape), settings); } public static Block register(String name, Function blockFactory, AbstractBlock.Settings settings) { @@ -31,3 +43,24 @@ public class RegisterBlocks { } } + +class CustomBlock extends Block { + private final VoxelShape outlineShape; + private final VoxelShape collisionShape; + + public CustomBlock(Settings settings, VoxelShape outlineShape, VoxelShape collisionShape) { + super(settings); + this.outlineShape = outlineShape; + this.collisionShape = collisionShape; + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return this.outlineShape; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return this.collisionShape; + } +} From 817735ca08fb5bbbc71d61f6f13c200c8251e7fd Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 25 Mar 2025 12:28:17 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat(block):=20=E6=94=B9=E5=96=84mod?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E5=88=A4=E6=96=AD=E7=9A=84=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/network/BukkitNetworkManager.java | 2 +- .../client/CraftEngineFabricModClient.java | 65 ++++++++++--------- .../client/network/CraftEnginePayload.java | 4 +- .../craft-engine-fabric-mod/lang/en_us.json | 3 +- .../craft-engine-fabric-mod/lang/zh_cn.json | 3 +- 5 files changed, 38 insertions(+), 39 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index c60fb6f0b..d7f9b23f9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -163,7 +163,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener { } // for mod - @EventHandler + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerRegisterChannel(PlayerRegisterChannelEvent event) { if (!event.getChannel().equals(MOD_CHANNEL)) return; Player player = event.getPlayer(); diff --git a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java index 5f912f868..b4e39a37f 100644 --- a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java +++ b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java @@ -2,14 +2,15 @@ package net.momirealms.craftengine.fabric.client; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.Block; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.color.world.BiomeColors; -import net.minecraft.client.gui.screen.DisconnectedScreen; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.render.RenderLayer; import net.minecraft.network.DisconnectionInfo; import net.minecraft.registry.Registries; @@ -29,6 +30,17 @@ public class CraftEngineFabricModClient implements ClientModInitializer { @Override public void onInitializeClient() { PayloadTypeRegistry.playS2C().register(CraftEnginePayload.ID, CraftEnginePayload.CODEC); + registerRenderLayer(); + ClientPlayConnectionEvents.INIT.register((handler, client) -> { + if (ModConfig.enableNetwork) { + registerChannel(handler, client); + } else { + ClientPlayNetworking.unregisterGlobalReceiver(CraftEnginePayload.ID.id()); + } + }); + } + + public static void registerRenderLayer() { Registries.BLOCK.forEach(block -> { Identifier id = Registries.BLOCK.getId(block); if (id.getNamespace().equals(CraftEngineFabricModClient.MOD_ID)) { @@ -38,36 +50,6 @@ public class CraftEngineFabricModClient implements ClientModInitializer { } } }); - ClientTickEvents.START_CLIENT_TICK.register(client -> { - if (!ModConfig.enableNetwork) { - ClientPlayNetworking.unregisterGlobalReceiver(CraftEnginePayload.ID.id()); - return; - } - ClientPlayNetworking.registerGlobalReceiver(CraftEnginePayload.ID, (payload, context) -> { - byte[] data = payload.data(); - String decoded = new String(data, StandardCharsets.UTF_8); - if (decoded.startsWith("cp:")) { - int blockRegistrySize = Integer.parseInt(decoded.substring(3)); - if (Block.STATE_IDS.size() != blockRegistrySize) { - if (client.player != null) { - client.player.networkHandler.getConnection().disconnect( - new DisconnectionInfo( - Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize), - Optional.of(FabricLoader.getInstance().getConfigDir().resolve("craft-engine-fabric-mod/mappings.yml")), - Optional.of(URI.create("https://github.com/Xiao-MoMi/craft-engine")) - ) - ); - } else { - client.disconnect(new DisconnectedScreen( - client.currentScreen, - Text.translatable("disconnect.craftengine.title"), - Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize)) - ); - } - } - } - }); - }); } public static void registerColor(Block block) { @@ -81,4 +63,23 @@ public class CraftEngineFabricModClient implements ClientModInitializer { block ); } + + private static void registerChannel(ClientPlayNetworkHandler handler, MinecraftClient client) { + ClientPlayNetworking.registerGlobalReceiver(CraftEnginePayload.ID, (payload, context) -> { + byte[] data = payload.data(); + String decoded = new String(data, StandardCharsets.UTF_8); + if (decoded.startsWith("cp:")) { + int blockRegistrySize = Integer.parseInt(decoded.substring(3)); + if (Block.STATE_IDS.size() != blockRegistrySize) { + handler.getConnection().disconnect( + new DisconnectionInfo( + Text.translatable("disconnect.craftengine.block_registry_mismatch", Block.STATE_IDS.size(), blockRegistrySize), + Optional.of(FabricLoader.getInstance().getConfigDir().resolve("craft-engine-fabric-mod/mappings.yml")), + Optional.of(URI.create("https://github.com/Xiao-MoMi/craft-engine")) + ) + ); + } + } + }); + } } diff --git a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/network/CraftEnginePayload.java b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/network/CraftEnginePayload.java index b8b27ff44..eb8e5add2 100644 --- a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/network/CraftEnginePayload.java +++ b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/network/CraftEnginePayload.java @@ -6,8 +6,8 @@ import net.minecraft.network.packet.CustomPayload; import net.minecraft.util.Identifier; public record CraftEnginePayload(byte[] data) implements CustomPayload { - public static final Identifier ADD_CRAFTENGINE_BLOCK = Identifier.of("craftengine", "payload"); - public static final Id ID = new Id<>(CraftEnginePayload.ADD_CRAFTENGINE_BLOCK); + public static final Identifier CRAFTENGINE_PAYLOAD = Identifier.of("craftengine", "payload"); + public static final Id ID = new Id<>(CraftEnginePayload.CRAFTENGINE_PAYLOAD); public static final PacketCodec CODEC = PacketCodec.tuple( new ByteArrayCodec(), CraftEnginePayload::data, CraftEnginePayload::new diff --git a/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/en_us.json b/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/en_us.json index 56313e2df..711d5c3ca 100644 --- a/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/en_us.json +++ b/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/en_us.json @@ -3,6 +3,5 @@ "category.craftengine.general": "General", "option.craftengine.enable_network": "Enable custom blocks in server", "tooltip.craftengine.enable_network": "Changes requires re-entering the server to take effect", - "disconnect.craftengine.block_registry_mismatch": "Block registry size mismatch. Current: %s. Expected: %s. \n 1. Make sure that the configs are the same as the server's. \n 2. Do not use any mod that might register new block. \n 3. Do not install ViaVersion.", - "disconnect.craftengine.title": "CraftEngine Connection Error" + "disconnect.craftengine.block_registry_mismatch": "Block registry size mismatch. Current: %s. Expected: %s. \n 1. Make sure that the configs are the same as the server's. \n 2. Do not use any mod that might register new block. \n 3. Do not install ViaVersion." } \ No newline at end of file diff --git a/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/zh_cn.json b/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/zh_cn.json index 4dd4bbc4e..c16c77c9d 100644 --- a/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/zh_cn.json +++ b/client-mod/src/main/resources/assets/craft-engine-fabric-mod/lang/zh_cn.json @@ -3,6 +3,5 @@ "category.craftengine.general": "通用", "option.craftengine.enable_network": "启用服务器内自定义方块", "tooltip.craftengine.enable_network": "需要重新进入服务器以应用更改", - "disconnect.craftengine.block_registry_mismatch": "方块注册表大小不匹配. 当前: %s. 预期: %s \n 1. 确保客户端mod配置与服务端配置一致. \n 2. 不要安装任何会注册新方块的mod. \n 3. 不要使用ViaVersion.", - "disconnect.craftengine.title": "CraftEngine连接错误" + "disconnect.craftengine.block_registry_mismatch": "方块注册表大小不匹配. 当前: %s. 预期: %s \n 1. 确保客户端mod配置与服务端配置一致. \n 2. 不要安装任何会注册新方块的mod. \n 3. 不要使用ViaVersion." } \ No newline at end of file From bc0df20b0fb7beb9b35e7ee26ba94f8d2a4cef04 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Tue, 25 Mar 2025 13:41:49 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(block):=20=E6=94=B9=E5=96=84mod?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E5=88=A4=E6=96=AD=E7=9A=84=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/CraftEngineFabricModClient.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java index b4e39a37f..db505bfef 100644 --- a/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java +++ b/client-mod/src/client/java/net/momirealms/craftengine/fabric/client/CraftEngineFabricModClient.java @@ -30,14 +30,9 @@ public class CraftEngineFabricModClient implements ClientModInitializer { @Override public void onInitializeClient() { PayloadTypeRegistry.playS2C().register(CraftEnginePayload.ID, CraftEnginePayload.CODEC); + initChannel(MinecraftClient.getInstance().getNetworkHandler()); registerRenderLayer(); - ClientPlayConnectionEvents.INIT.register((handler, client) -> { - if (ModConfig.enableNetwork) { - registerChannel(handler, client); - } else { - ClientPlayNetworking.unregisterGlobalReceiver(CraftEnginePayload.ID.id()); - } - }); + ClientPlayConnectionEvents.INIT.register((handler, client) -> initChannel(handler)); } public static void registerRenderLayer() { @@ -64,7 +59,15 @@ public class CraftEngineFabricModClient implements ClientModInitializer { ); } - private static void registerChannel(ClientPlayNetworkHandler handler, MinecraftClient client) { + private static void initChannel(ClientPlayNetworkHandler handler) { + if (ModConfig.enableNetwork) { + registerChannel(handler); + } else { + ClientPlayNetworking.unregisterGlobalReceiver(CraftEnginePayload.ID.id()); + } + } + + private static void registerChannel(ClientPlayNetworkHandler handler) { ClientPlayNetworking.registerGlobalReceiver(CraftEnginePayload.ID, (payload, context) -> { byte[] data = payload.data(); String decoded = new String(data, StandardCharsets.UTF_8);