From ef0e412d36185aefbf98ac00273bc795a5d85ef5 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 4 May 2022 20:03:44 +0200 Subject: [PATCH] 22w18a I hate codecs --- build.gradle.kts | 2 +- .../Protocol1_18_2To1_19.java | 39 +++++++++-- .../packets/EntityPackets1_19.java | 44 ++++++++++++ .../data/translation-mappings.json | 68 ++++++++++++++++++- gradle/libs.versions.toml | 2 +- 5 files changed, 143 insertions(+), 12 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b217a49d..d7d46a2a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { allprojects { group = "com.viaversion" - version = "4.3.0-22w17a-SNAPSHOT" + version = "4.3.0-22w18a-SNAPSHOT" description = "Allow older clients to join newer server versions." } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java index 87498825..35790624 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java @@ -42,6 +42,7 @@ import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPacke import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2; +import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ServerboundPackets1_19; import com.viaversion.viaversion.rewriter.CommandRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; @@ -49,7 +50,7 @@ import com.viaversion.viaversion.rewriter.TagRewriter; import java.time.Instant; import java.util.UUID; -public final class Protocol1_18_2To1_19 extends BackwardsProtocol { +public final class Protocol1_18_2To1_19 extends BackwardsProtocol { public static final BackwardsMappings MAPPINGS = new BackwardsMappings(); private static final UUID ZERO_UUID = new UUID(0, 0); @@ -59,7 +60,7 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { + int type = wrapper.read(Type.VAR_INT); + if (type > 2) { + type = 0; // Chat + } + wrapper.write(Type.BYTE, (byte) type); + }); map(Type.UUID); // Sender handler(wrapper -> { - //TODO Handle chat formats once they're stable final JsonElement senderName = wrapper.read(Type.COMPONENT); + wrapper.read(Type.COMPONENT); // Team name wrapper.read(Type.LONG); // Timestamp wrapper.read(Type.LONG); // Salt wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature @@ -203,7 +213,13 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { + int type = wrapper.read(Type.VAR_INT); + if (type > 2) { + type = 0; // Chat + } + wrapper.write(Type.BYTE, (byte) type); + }); create(Type.UUID, ZERO_UUID); // Sender handler(wrapper -> translatableRewriter.processText(wrapper.get(Type.COMPONENT, 0))); } @@ -212,10 +228,19 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { + final String message = wrapper.get(Type.STRING, 0); + if (!message.isEmpty() && message.charAt(0) == '/') { + wrapper.setPacketType(ServerboundPackets1_19.CHAT_COMMAND); + wrapper.set(Type.STRING, 0, message.substring(1)); + wrapper.write(Type.VAR_INT, 0); // No signatures + } else { + wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, EMPTY_BYTES); // Signature + } + }); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java index cfae2363..d58d5122 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java @@ -134,6 +134,8 @@ public final class EntityPackets1_19 extends EntityRewriter { + final int action = wrapper.passthrough(Type.VAR_INT); + final int entries = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < entries; i++) { + wrapper.passthrough(Type.UUID); // UUID + if (action == 0) { // Add player + wrapper.passthrough(Type.STRING); // Player Name + + final int properties = wrapper.passthrough(Type.VAR_INT); + for (int j = 0; j < properties; j++) { + wrapper.passthrough(Type.STRING); // Name + wrapper.passthrough(Type.STRING); // Value + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.STRING); // Signature + } + } + + wrapper.passthrough(Type.VAR_INT); // Gamemode + wrapper.passthrough(Type.VAR_INT); // Ping + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.COMPONENT); // Display name + } + + // Remove public profile signature + if (wrapper.read(Type.BOOLEAN)) { + wrapper.read(Type.NBT); // Signature + } + } else if (action == 1 || action == 2) { // Update gamemode/update latency + wrapper.passthrough(Type.VAR_INT); + } else if (action == 3) { // Update display name + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.COMPONENT); + } + } + } + }); + } + }); } @Override diff --git a/common/src/main/resources/assets/viabackwards/data/translation-mappings.json b/common/src/main/resources/assets/viabackwards/data/translation-mappings.json index 20acaaca..b49dcf47 100644 --- a/common/src/main/resources/assets/viabackwards/data/translation-mappings.json +++ b/common/src/main/resources/assets/viabackwards/data/translation-mappings.json @@ -1,5 +1,6 @@ { "1.19": { + "selectWorld.loading_list": "Loading world list", "flat_world_preset.unknown": "???", "flat_world_preset.minecraft.classic_flat": "Classic Flat", "flat_world_preset.minecraft.tunnelers_dream": "Tunnelers' Dream", @@ -17,6 +18,9 @@ "generator.minecraft.amplified.info": "Notice: Just for fun! Requires a beefy computer.", "generator.minecraft.debug_all_block_states": "Debug Mode", "generator.minecraft.single_biome_surface": "Single Biome", + "multiplayer.disconnect.missing_public_key": "Missing profile public key.\nThis server requires secure profiles.", + "multiplayer.disconnect.invalid_public_key_signature": "Invalid signature for profile public key.\nTry restarting your game.", + "multiplayer.disconnect.invalid_public_key": "Unable to parse profile public key.", "options.darknessEffectScale": "Darkness Pulsing", "options.darknessEffectScale.tooltip": "Controls how much the Darkness effect pulses when a Warden or Sculk Shrieker gives it to you.", "options.directionalAudio": "Directional Audio", @@ -56,6 +60,7 @@ "block.minecraft.verdant_froglight": "Verdant Froglight", "block.minecraft.pearlescent_froglight": "Pearlescent Froglight", "block.minecraft.frogspawn": "Frogspawn", + "block.minecraft.reinforced_deepslate": "Reinforced Deepslate", "item.minecraft.tadpole_bucket": "Bucket of Tadpole", "item.minecraft.oak_chest_boat": "Oak Boat with Chest", "item.minecraft.spruce_chest_boat": "Spruce Boat with Chest", @@ -64,24 +69,53 @@ "item.minecraft.acacia_chest_boat": "Acacia Boat with Chest", "item.minecraft.dark_oak_chest_boat": "Dark Oak Boat with Chest", "item.minecraft.mangrove_boat": "Mangrove Boat", + "item.minecraft.recovery_compass": "Recovery Compass", + "item.minecraft.music_disc_5": "Music Disc", + "item.minecraft.music_disc_5.desc": "Samuel �berg - 5", "item.minecraft.mangrove_chest_boat": "Mangrove Boat with Chest", + "item.minecraft.disc_fragment_5": "Disc Fragment", + "item.minecraft.disc_fragment_5.desc": "Music Disc - 5", + "item.minecraft.allay_spawn_egg": "Allay Spawn Egg", "item.minecraft.frog_spawn_egg": "Frog Spawn Egg", "item.minecraft.tadpole_spawn_egg": "Tadpole Spawn Egg", "item.minecraft.warden_spawn_egg": "Warden Spawn Egg", + "item.minecraft.echo_shard": "Echo Shard", + "item.minecraft.goat_horn": "Goat Horn", + "instrument.minecraft.ponder_goat_horn": "Ponder", + "instrument.minecraft.sing_goat_horn": "Sing", + "instrument.minecraft.seek_goat_horn": "Seek", + "instrument.minecraft.feel_goat_horn": "Feel", + "instrument.minecraft.admire_goat_horn": "Admire", + "instrument.minecraft.call_goat_horn": "Call", + "instrument.minecraft.yearn_goat_horn": "Yearn", + "instrument.minecraft.dream_goat_horn": "Dream", + "entity.minecraft.allay": "Allay", "entity.minecraft.chest_boat": "Boat with Chest", "entity.minecraft.frog": "Frog", "entity.minecraft.tadpole": "Tadpole", "entity.minecraft.warden": "Warden", + "death.attack.sonic_boom": "%1$s was obliterated by a sonically-charged shriek", + "death.attack.sonic_boom.player": "%1$s was obliterated by a sonically-charged shriek whilst trying to escape %2$s", "effect.minecraft.darkness": "Darkness", "enchantment.minecraft.swift_sneak": "Swift Sneak", "subtitles.block.frogspawn.hatch": "Tadpole hatches", + "subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms", + "subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks", + "subtitles.entity.allay.death": "Allay dies", + "subtitles.entity.allay.hurt": "Allay hurts", + "subtitles.entity.allay.ambient_with_item": "Allay seeks", + "subtitles.entity.allay.ambient_without_item": "Allay yearns", + "subtitles.entity.allay.item_given": "Allay chortles", + "subtitles.entity.allay.item_taken": "Allay allays", + "subtitles.entity.allay.item_thrown": "Allay tosses", "subtitles.entity.frog.ambient": "Frog croaks", "subtitles.entity.frog.death": "Frog dies", "subtitles.entity.frog.eat": "Frog eats", "subtitles.entity.frog.hurt": "Frog hurts", "subtitles.entity.frog.lay_spawn": "Frog lays spawn", "subtitles.entity.frog.long_jump": "Frog jumps", - "subtitles.entity.parrot.imitate.warden": "Parrot roars", + "subtitles.entity.goat.horn_break": "Goat horn breaks off", + "subtitles.entity.parrot.imitate.warden": "Parrot whines", "subtitles.entity.tadpole.death": "Tadpole dies", "subtitles.entity.tadpole.flop": "Tadpole flops", "subtitles.entity.tadpole.hurt": "Tadpole hurts", @@ -94,16 +128,44 @@ "subtitles.entity.warden.step": "Warden steps", "subtitles.entity.warden.listening": "Warden takes notice", "subtitles.entity.warden.listening_angry": "Warden takes notice angrily", - "subtitles.entity.warden.heartbeat": "Warden heart beats", + "subtitles.entity.warden.heartbeat": "Warden's heart beats", "subtitles.entity.warden.attack_impact": "Warden lands hit", - "subtitles.entity.warden.tendril_clicks": "Warden tendrils click", + "subtitles.entity.warden.tendril_clicks": "Warden's tendrils click", "subtitles.entity.warden.angry": "Warden rages", "subtitles.entity.warden.agitated": "Warden groans angrily", "subtitles.entity.warden.ambient": "Warden whines", "subtitles.entity.warden.nearby_close": "Warden approaches", "subtitles.entity.warden.nearby_closer": "Warden advances", "subtitles.entity.warden.nearby_closest": "Warden draws close", + "subtitles.entity.warden.sonic_charge": "Warden charges", + "subtitles.entity.warden.sonic_boom": "Warden booms", + "subtitles.item.goat_horn.play": "Goat horn plays", + "advancements.adventure.avoid_vibration.title": "Sneak 100", + "advancements.adventure.avoid_vibration.description": "Sneak near a Sculk Sensor or Warden to prevent it from detecting you", + "advancements.adventure.kill_mob_near_sculk_catalyst.title": "It Spreads", + "advancements.adventure.kill_mob_near_sculk_catalyst.description": "Kill a mob near a Sculk Catalyst", + "advancements.husbandry.froglights.title": "With Our Powers Combined!", + "advancements.husbandry.froglights.description": "Have all Froglights in your inventory", + "advancements.husbandry.tadpole_in_a_bucket.title": "Bukkit Bukkit", + "advancements.husbandry.tadpole_in_a_bucket.description": "Catch a Tadpole in a Bucket", + "advancements.husbandry.leash_all_frog_variants.title": "When the Squad Hops into Town", + "advancements.husbandry.leash_all_frog_variants.description": "Get each Frog variant on a Lead", + "advancements.husbandry.allay_deliver_item_to_player.title": "You've Got a Friend in Me", + "advancements.husbandry.allay_deliver_item_to_player.description": "Have an Allay deliver items to you", + "advancements.husbandry.allay_deliver_cake_to_note_block.title": "Birthday Song", + "advancements.husbandry.allay_deliver_cake_to_note_block.description": "Have an Allay drop a cake at a Note Block", + "commands.place.feature.failed": "Failed to place feature", + "commands.place.feature.invalid": "There is no feature with type \"%s\"", + "commands.place.feature.success": "Placed \"%s\" at %s, %s, %s", + "commands.place.jigsaw.failed": "Failed to generate jigsaw", + "commands.place.jigsaw.invalid": "There is no template pool with type \"%s\"", + "commands.place.jigsaw.success": "Generated jigsaw at %s, %s, %s", + "commands.place.structure.failed": "Failed to place structure", + "commands.place.structure.invalid": "There is no structure with type \"%s\"", + "commands.place.structure.success": "Generated structure \"%s\" at %s, %s, %s", "biome.minecraft.deep_dark": "Deep Dark", + "biome.minecraft.mangrove_swamp": "Mangrove Swamp", + "gamerule.doWardenSpawning": "Spawn Wardens", "outOfMemory.title": "Out of memory!", "outOfMemory.message": "Minecraft has run out of memory.\n\nThis could be caused by a bug in the game or by the Java Virtual Machine not being allocated enough memory.\n\nTo prevent level corruption, the current game has quit. We've tried to free up enough memory to let you go back to the main menu and back to playing, but this may not have worked.\n\nPlease restart the game if you see this message again." }, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d741eb1f..8e980bb8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # ViaVersion -viaver = "4.3.0-22w17a-SNAPSHOT" +viaver = "4.3.0-22w18a-SNAPSHOT" # Common provided netty = "4.0.20.Final"