From 94b3682f0a0cc3d0b20a0c1bdc207cbc3ed87447 Mon Sep 17 00:00:00 2001 From: p2r3 Date: Wed, 13 Aug 2025 19:47:55 +0300 Subject: [PATCH] reduce size of registry data --- build_registries.js | 20 ++++++++++++++++---- src/packets.c | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/build_registries.js b/build_registries.js index cfb135f..1098401 100644 --- a/build_registries.js +++ b/build_registries.js @@ -203,8 +203,11 @@ const requiredRegistries = [ "pig_variant", "wolf_sound_variant", "wolf_variant", - "damage_type", - "worldgen/biome" + "damage_type" +]; + +const biomes = [ + "plains" ]; async function convert () { @@ -221,8 +224,17 @@ async function convert () { console.error(`Missing required registry "${registry}"!`); return; } - registryBuffers.push(serializeRegistry(registry, registries[registry])); + if (registry.endsWith("variant")) { + // The mob "variants" only require one valid variant to be accepted + // Send the shortest one to save memory + const shortest = registries[registry].sort((a, b) => a.length - b.length)[0]; + registryBuffers.push(serializeRegistry(registry, [shortest])); + } else { + registryBuffers.push(serializeRegistry(registry, registries[registry])); + } } + // Send biomes separately - only "plains" is actually required + registryBuffers.push(serializeRegistry("worldgen/biome", biomes)); const fullRegistryBuffer = Buffer.concat(registryBuffers); const itemsAndBlocks = await extractItemsAndBlocks(); @@ -296,7 +308,7 @@ ${Object.keys(itemsAndBlocks.palette).map((c, i) => `#define B_${c} ${i}`).join( ${Object.entries(itemsAndBlocks.items).map(c => `#define I_${c[0]} ${c[1]}`).join("\n")} // Biome identifiers -${registries["worldgen/biome"].map((c, i) => `#define W_${c} ${i}`).join("\n")} +${biomes.map((c, i) => `#define W_${c} ${i}`).join("\n")} #endif `; diff --git a/src/packets.c b/src/packets.c index ed07eb5..f924698 100644 --- a/src/packets.c +++ b/src/packets.c @@ -310,7 +310,7 @@ int sc_chunkDataAndUpdateLight (int client_fd, int _x, int _z) { } // biome data writeByte(client_fd, 0); // bits per entry - writeByte(client_fd, W_forest); // palette + writeByte(client_fd, W_plains); // palette } writeVarInt(client_fd, 0); // omit block entities