diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java index 7607cdf9..9c2979a9 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java @@ -39,17 +39,47 @@ public class EntityPackets1_16 extends EntityRewriter { map(Type.INT); map(Type.LONG); map(Type.BYTE); - map(Type.STRING); - map(Type.BOOLEAN, Type.NOTHING); // save all playerdata //TODO clear if false? handler(wrapper -> { ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); clientWorld.setEnvironment(wrapper.get(Type.INT, 0)); + + wrapper.write(Type.STRING, "default"); // Level type + wrapper.read(Type.BOOLEAN); // Debug + if (wrapper.read(Type.BOOLEAN)) { + wrapper.set(Type.STRING, 0, "flat"); + } + wrapper.read(Type.BOOLEAN); // Keep all playerdata }); } }); // Join Game - registerJoinGame(0x26, 0x26, Entity1_16Types.EntityType.PLAYER); + protocol.registerOutgoing(State.PLAY, 0x26, 0x26, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); // Entity ID + map(Type.UNSIGNED_BYTE); // Gamemode + map(Type.INT); // Dimension + map(Type.LONG); // Seed + map(Type.UNSIGNED_BYTE); // Max players + handler(wrapper -> { + ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); + clientChunks.setEnvironment(wrapper.get(Type.INT, 1)); + getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), Entity1_16Types.EntityType.PLAYER); + + wrapper.write(Type.STRING, "default"); // Level type + + wrapper.passthrough(Type.VAR_INT); // View distance + wrapper.passthrough(Type.BOOLEAN); // Reduced debug info + wrapper.passthrough(Type.BOOLEAN); // Show death screen + + wrapper.read(Type.BOOLEAN); // Debug + if (wrapper.read(Type.BOOLEAN)) { + wrapper.set(Type.STRING, 0, "flat"); + } + }); + } + }); // Spawn Experience Orb registerExtraTracker(0x01, Entity1_16Types.EntityType.EXPERIENCE_ORB); diff --git a/core/src/main/resources/assets/viabackwards/data/translation-mappings.json b/core/src/main/resources/assets/viabackwards/data/translation-mappings.json index 7b7d1295..1100be5e 100644 --- a/core/src/main/resources/assets/viabackwards/data/translation-mappings.json +++ b/core/src/main/resources/assets/viabackwards/data/translation-mappings.json @@ -146,6 +146,7 @@ "gui.entity_tooltip.type": "Type: %s", "stat.minecraft.target_hit": "Targets Hit", "stat.minecraft.interact_with_smithing_table": "Interactions with Smithing Table", + "stat.minecraft.strider_one_cm": "Distance by Strider", "attribute.unknown": "Unknown attribute", "attribute.name.horse.jump_strength": "Horse Jump Strength", "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", @@ -258,8 +259,34 @@ "subtitles.item.bucket.fill_fish": "Fish captured", "subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone", "subtitles.particle.soul_escape": "Soul escapes", + "debug.gamemodes.help": "F3 + F4 = Open game mode switcher", + "debug.gamemodes.error": "Unable to open game mode switcher, no permission", + "debug.gamemodes.press_f4": "F4", + "debug.gamemodes.select_next": "Next", "advancements.adventure.bullseye.title": "Bullseye", - "advancements.adventure.bullseye.description": "Hit the bullseye of a Target block with an arrow", + "advancements.adventure.bullseye.description": "Hit the bullseye of a Target block from at least 30 meters away", + "advancements.husbandry.netherite_hoe.title": "Serious Dedication", + "advancements.husbandry.netherite_hoe.description": "Use a Netherite ingot to upgrade a hoe, and then reevaluate your life choices", + "advancements.nether.obtain_ancient_debris.title": "Hidden in the Depths", + "advancements.nether.obtain_ancient_debris.description": "Obtain Ancient Debris", + "advancements.nether.netherite_armor.title": "Cover Me in Debris", + "advancements.nether.netherite_armor.description": "Get a full suit of Netherite armor", + "advancements.nether.use_lodestone.title": "Country Lode, Take Me Home", + "advancements.nether.use_lodestone.description": "Use a Compass on a Lodestone", + "advancements.nether.obtain_crying_obsidian.title": "Who Is Cutting Onions?", + "advancements.nether.obtain_crying_obsidian.description": "Obtain Crying Obsidian", + "advancements.nether.charge_respawn_anchor.title": "Not Quite \"Nine\" Lives", + "advancements.nether.charge_respawn_anchor.description": "Charge a Respawn Anchor to the maximum", + "advancements.nether.ride_strider.title": "This Boat Has Legs", + "advancements.nether.ride_strider.description": "Ride a Strider with a Warped Fungus on a Stick", + "advancements.nether.explore_nether.title": "Hot Tourist Destinations", + "advancements.nether.explore_nether.description": "Explore all Nether biomes", + "advancements.nether.find_bastion.title": "Those Were the Days", + "advancements.nether.find_bastion.description": "Enter a Bastion Remnant", + "advancements.nether.loot_bastion.title": "War Pigs", + "advancements.nether.loot_bastion.description": "Loot a chest in a Bastion Remnant", + "advancements.nether.distract_piglin.title": "Oh Shiny", + "advancements.nether.distract_piglin.description": "Distract Piglins with gold", "argument.uuid.invalid": "Invalid UUID", "commands.attribute.failed.entity": "%s is not a valid entity for this command", "commands.attribute.failed.no_attribute": "Entity %s has no attribute %s",