9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-27 02:49:15 +00:00

feat(network): 快速确认注册表一致

This commit is contained in:
jhqwqmc
2025-03-24 17:11:33 +08:00
parent 85d910d9df
commit 1d40e29991
5 changed files with 34 additions and 12 deletions

View File

@@ -5,18 +5,17 @@ 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.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.Block;
import net.minecraft.client.gui.screen.DisconnectedScreen;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.registry.Registries;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.momirealms.craftEngineFabricMod.client.config.ModConfig;
import net.momirealms.craftEngineFabricMod.client.network.CraftEnginePayload;
import net.momirealms.craftEngineFabricMod.client.util.BlockUtils;
import net.momirealms.craftEngineFabricMod.util.YamlUtils;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Map;
import java.nio.charset.StandardCharsets;
public class CraftEngineFabricModClient implements ClientModInitializer {
public static final String MOD_ID = "craftengine";
@@ -38,7 +37,24 @@ public class CraftEngineFabricModClient implements ClientModInitializer {
ClientPlayNetworking.unregisterGlobalReceiver(CraftEnginePayload.ID.id());
return;
}
ClientPlayNetworking.registerGlobalReceiver(CraftEnginePayload.ID, (payload, context) -> {});
ClientPlayNetworking.registerGlobalReceiver(CraftEnginePayload.ID, (payload, context) -> {
try {
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) {
client.disconnect(new DisconnectedScreen(
client.currentScreen,
Text.translatable("disconnect.craftengine.title"),
Text.translatable("disconnect.craftengine.block_registry_mismatch"))
);
}
}
} catch (Exception e) {
e.printStackTrace();
}
});
});
}
}

View File

@@ -31,10 +31,6 @@ public class YamlUtils {
}
}
public static void saveConfig(Map<?,?> config, Path filePath) throws IOException {
Files.writeString(filePath, yaml.dump(config));
}
public static void ensureConfigFile(String fileName) throws IOException {
Path configDir = Path.of(CONFIG_DIR);
if (!Files.exists(configDir)) {

View File

@@ -2,5 +2,7 @@
"title.craftengine.config": "CraftEngine Settings",
"category.craftengine.general": "General",
"option.craftengine.enable_network": "Enable custom blocks in server",
"tooltip.craftengine.enable_network": "You need to re-enter the server to take effect"
"tooltip.craftengine.enable_network": "You need to re-enter the server to take effect",
"disconnect.craftengine.block_registry_mismatch": "Block registry size mismatch!",
"disconnect.craftengine.title": "CraftEngine Connection Error"
}

View File

@@ -2,5 +2,7 @@
"title.craftengine.config": "CraftEngine设置",
"category.craftengine.general": "通用",
"option.craftengine.enable_network": "启用服务器内自定义方块",
"tooltip.craftengine.enable_network": "需要重新进入服务器即可生效"
"tooltip.craftengine.enable_network": "需要重新进入服务器即可生效",
"disconnect.craftengine.block_registry_mismatch": "方块注册表大小不匹配!",
"disconnect.craftengine.title": "CraftEngine连接错误"
}