From 2b6f3f213e78cee01613b5d819c6f83dbb5e63b1 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Wed, 9 Jul 2025 18:09:58 +0700 Subject: [PATCH] feat: 1.21.7 --- build-number.txt | 2 +- build.gradle | 22 +- .../plugins/ChomeNSModIntegrationPlugin.java | 2 +- .../chomens_bot/plugins/ConsolePlugin.java | 13 +- .../plugins/ExtrasMessengerPlugin.java | 2 +- .../selfCares/vanilla/misc/RideSelfCare.java | 31 ++- .../chomens_bot/util/ComponentUtilities.java | 6 +- .../chomens_bot/util/SNBTUtilities.java | 8 +- src/main/resources/minecraftLanguage.json | 245 +++++++++++++++++- 9 files changed, 292 insertions(+), 39 deletions(-) diff --git a/build-number.txt b/build-number.txt index 549e612a..db92f041 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -3480 \ No newline at end of file +3495 \ No newline at end of file diff --git a/build.gradle b/build.gradle index b38f6282..f93265d0 100644 --- a/build.gradle +++ b/build.gradle @@ -41,25 +41,25 @@ repositories { } dependencies { - implementation 'org.geysermc.mcprotocollib:protocol:1.21.5-SNAPSHOT' - implementation 'net.kyori:adventure-text-serializer-plain:4.21.0' - implementation 'net.kyori:adventure-text-serializer-legacy:4.21.0' - implementation 'net.kyori:adventure-text-serializer-ansi:4.21.0' + implementation 'org.geysermc.mcprotocollib:protocol:1.21.7-1' + implementation 'net.kyori:adventure-text-serializer-plain:4.23.0' + implementation 'net.kyori:adventure-text-serializer-legacy:4.23.0' + implementation 'net.kyori:adventure-text-serializer-ansi:4.23.0' implementation 'com.google.code.gson:gson:2.13.1' implementation 'com.google.guava:guava:33.4.8-jre' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.19.0' - implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.3' - implementation 'org.jline:jline:3.30.3' - implementation 'it.unimi.dsi:fastutil:8.5.15' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.19.1' + implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.4' + implementation 'org.jline:jline:3.30.4' + implementation 'it.unimi.dsi:fastutil:8.5.16' implementation 'ch.qos.logback:logback-classic:1.5.18' implementation 'com.github.pircbotx:pircbotx:2.3.1' implementation 'com.github.ricksbrown:cowsay:1.1.0' implementation 'org.yaml:snakeyaml:2.4' implementation 'party.iroiro.luajava:luajava:4.0.2' implementation 'party.iroiro.luajava:lua54:4.0.2' - runtimeOnly 'party.iroiro.luajava:lua54-platform:4.0.2:natives-desktop' // what is this? is this necessary? - implementation 'net.dv8tion:JDA:5.5.1' - implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3' + runtimeOnly 'party.iroiro.luajava:lua54-platform:4.0.2:natives-desktop' + implementation 'net.dv8tion:JDA:5.6.1' + implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.25.0' implementation 'io.socket:socket.io-client:2.1.2' implementation 'de.maxhenkel.opus4j:opus4j:2.0.2' implementation 'org.concentus:Concentus:1.0-SNAPSHOT' diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java index 4df3bcb1..0ab125b1 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ChomeNSModIntegrationPlugin.java @@ -31,7 +31,7 @@ import java.security.SecureRandom; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -// This is inspired from the ChomeNS Bot Proxy which is in the JavaScript version of ChomeNS Bot. +// This is inspired by the ChomeNS Bot Proxy, which is in the JavaScript version of ChomeNS Bot. public class ChomeNSModIntegrationPlugin implements Listener { private static final String ID = "chomens_mod"; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ConsolePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ConsolePlugin.java index a1c67506..48e9f29b 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ConsolePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ConsolePlugin.java @@ -194,11 +194,20 @@ public class ConsolePlugin implements Completer { private ClickEvent mergeClickEvent (final ClickEvent clickEvent, final ConsoleFormatContext context) { if (clickEvent == null) return null; - final String value = clickEvent.value(); + if (!clickEvent.action().supports(ClickEvent.Payload.string(""))) return clickEvent; + + final String value = ((ClickEvent.Payload.Text) clickEvent.payload()).value(); final String arg = context.args().get(value); if (arg == null) return clickEvent; - return ClickEvent.clickEvent(clickEvent.action(), arg); + return switch (clickEvent.action()) { + case OPEN_URL -> ClickEvent.openUrl(arg); + case OPEN_FILE -> ClickEvent.openFile(arg); + case RUN_COMMAND -> ClickEvent.runCommand(arg); + case SUGGEST_COMMAND -> ClickEvent.suggestCommand(arg); + case COPY_TO_CLIPBOARD -> ClickEvent.copyToClipboard(arg); + default -> clickEvent; + }; } } } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ExtrasMessengerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ExtrasMessengerPlugin.java index 2bc6e2ad..633b92f8 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ExtrasMessengerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ExtrasMessengerPlugin.java @@ -37,7 +37,7 @@ public class ExtrasMessengerPlugin implements Listener { public ExtrasMessengerPlugin (final Bot bot) { this.bot = bot; - this.chomens_namespace = bot.config.namespace + ":"; // Ex. chomens_bot: (then it will be appended by channel) + this.chomens_namespace = bot.config.namespace + ":"; // ex. chomens_bot: (then it will be appended by a channel) bot.listener.addListener(this); } diff --git a/src/main/java/me/chayapak1/chomens_bot/selfCares/vanilla/misc/RideSelfCare.java b/src/main/java/me/chayapak1/chomens_bot/selfCares/vanilla/misc/RideSelfCare.java index 02695a00..d9ec121f 100644 --- a/src/main/java/me/chayapak1/chomens_bot/selfCares/vanilla/misc/RideSelfCare.java +++ b/src/main/java/me/chayapak1/chomens_bot/selfCares/vanilla/misc/RideSelfCare.java @@ -3,9 +3,10 @@ package me.chayapak1.chomens_bot.selfCares.vanilla.misc; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.data.selfCare.SelfCare; import org.geysermc.mcprotocollib.network.packet.Packet; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundSetPassengersPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPlayerInputPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; import java.util.Arrays; @@ -32,14 +33,26 @@ public class RideSelfCare extends SelfCare { .noneMatch(id -> id == entityId) ) return; - // automatically unmount when mounting - // e.g. player `/ride`s you - // the server will automatically dismount for you, - // so that's why we don't have to send PlayerState.STOP_SNEAKING + // automatically dismount when mounting (e.g., player `/ride`s you) + // the server will automatically unshift for you, which is why we are only sending start shifting bot.session.send( - new ServerboundPlayerCommandPacket( - entityId, - PlayerState.START_SNEAKING + new ServerboundPlayerInputPacket( + false, + false, + false, + false, + false, + true, + false + ) + ); + + // for compatibility with servers <1.21.6, since 1.21.6 removed sneaking stuff from ServerboundPlayerInputPacket + bot.session.send( + new ServerboundInteractPacket( + -1, // we only need the server to think that we are sneaking, so we don't need to put a valid entity id here + InteractAction.INTERACT, // doesn't matter + true ) ); } diff --git a/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java index 60cfdb6a..a79b260a 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/ComponentUtilities.java @@ -41,9 +41,11 @@ public class ComponentUtilities { private static final Pattern ARG_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); private static final Pattern DISCORD_ANSI_PATTERN = Pattern.compile("(\\u001b\\[\\d+m)"); + // we are using our own total depth counter instead of adventure's + // because we don't want to throw an exception when exceeded the depth limit private static final ThreadLocal TOTAL_DEPTH = ThreadLocal.withInitial(() -> 0); - private static final int MAX_DEPTH = 512; // same as adventure + private static final int MAX_DEPTH = 512; private static Map loadJsonStringMap (final String name) { final Map map = new Object2ObjectOpenHashMap<>(); @@ -250,9 +252,7 @@ public class ComponentUtilities { throw new IllegalArgumentException(); final int currentTotalDepth = TOTAL_DEPTH.get(); - if (currentTotalDepth > MAX_DEPTH) return; - TOTAL_DEPTH.set(currentTotalDepth + 1); result.add( diff --git a/src/main/java/me/chayapak1/chomens_bot/util/SNBTUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/SNBTUtilities.java index 56ba851e..15ed7281 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/SNBTUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/SNBTUtilities.java @@ -19,11 +19,11 @@ import java.util.Set; public class SNBTUtilities { private static final GsonComponentSerializer SERIALIZER_1_21_4 = GsonComponentSerializer.builder() - .options(JSONOptions.byDataVersion().at(4174)) // 24w44a, 1.21.4 + .options(JSONOptions.byDataVersion().at(4174)) // 24w44a .build(); - private static final GsonComponentSerializer SERIALIZER_1_21_5 = + private static final GsonComponentSerializer SERIALIZER_1_21_6 = GsonComponentSerializer.builder() - .options(JSONOptions.byDataVersion().at(4298)) // 25w02a, 1.21.5, uses snake case for events + .options(JSONOptions.byDataVersion().at(4422)) // 25w15a .build(); private static final String QUOTE = "'"; @@ -39,7 +39,7 @@ public class SNBTUtilities { public static String fromComponent (final boolean useSNBTComponents, final Component component) { if (!useSNBTComponents) return SERIALIZER_1_21_4.serialize(component); - else return fromJson(SERIALIZER_1_21_5.serializeToTree(component)); + else return fromJson(SERIALIZER_1_21_6.serializeToTree(component)); } // RIPPED from https://minecraft.wiki/w/NBT_format#Conversion_from_JSON diff --git a/src/main/resources/minecraftLanguage.json b/src/main/resources/minecraftLanguage.json index 8394be03..0abcfa67 100644 --- a/src/main/resources/minecraftLanguage.json +++ b/src/main/resources/minecraftLanguage.json @@ -29,6 +29,8 @@ "advancements.adventure.crafters_crafting_crafters.title": "Crafters Crafting Crafters", "advancements.adventure.fall_from_world_height.description": "Free fall from the top of the world (build limit) to the bottom of the world and survive", "advancements.adventure.fall_from_world_height.title": "Caves & Cliffs", + "advancements.adventure.heart_transplanter.description": "Place a Creaking Heart with the correct alignment between two Pale Oak Log blocks", + "advancements.adventure.heart_transplanter.title": "Heart Transplanter", "advancements.adventure.hero_of_the_village.description": "Successfully defend a village from a raid", "advancements.adventure.hero_of_the_village.title": "Hero of the Village", "advancements.adventure.honey_block_slide.description": "Jump into a Honey Block to break your fall", @@ -150,6 +152,8 @@ "advancements.husbandry.netherite_hoe.title": "Serious Dedication", "advancements.husbandry.obtain_sniffer_egg.description": "Obtain a Sniffer Egg", "advancements.husbandry.obtain_sniffer_egg.title": "Smells Interesting", + "advancements.husbandry.place_dried_ghast_in_water.description": "Place a Dried Ghast block into water", + "advancements.husbandry.place_dried_ghast_in_water.title": "Stay Hydrated!", "advancements.husbandry.plant_any_sniffer_seed.description": "Plant any Sniffer seed", "advancements.husbandry.plant_any_sniffer_seed.title": "Planting the Past", "advancements.husbandry.plant_seed.description": "Plant a seed and watch it grow", @@ -344,6 +348,7 @@ "argument.float.big": "Float must not be more than %s, found %s", "argument.float.low": "Float must not be less than %s, found %s", "argument.gamemode.invalid": "Unknown game mode: %s", + "argument.hexcolor.invalid": "Invalid hex color code '%s'", "argument.id.invalid": "Invalid ID", "argument.id.unknown": "Unknown ID: %s", "argument.integer.big": "Integer must not be more than %s, found %s", @@ -377,6 +382,7 @@ "argument.range.swapped": "Min cannot be bigger than max", "argument.resource_or_id.failed_to_parse": "Failed to parse structure: %s", "argument.resource_or_id.invalid": "Invalid id or tag", + "argument.resource_or_id.no_such_element": "Can't find element '%s' in registry '%s'", "argument.resource_selector.not_found": "No matches for selector '%s' of type '%s'", "argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')", "argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'", @@ -390,6 +396,7 @@ "argument.time.invalid_unit": "Invalid unit", "argument.time.tick_count_too_low": "The tick count must not be less than %s, found %s", "argument.uuid.invalid": "Invalid UUID", + "argument.waypoint.invalid": "Selected entity is not a waypoint", "arguments.block.tag.unknown": "Unknown block tag '%s'", "arguments.function.tag.unknown": "Unknown function tag '%s'", "arguments.function.unknown": "Unknown function %s", @@ -428,6 +435,7 @@ "attribute.name.block_break_speed": "Block Break Speed", "attribute.name.block_interaction_range": "Block Interaction Range", "attribute.name.burning_time": "Burning Time", + "attribute.name.camera_distance": "Camera Distance", "attribute.name.entity_interaction_range": "Entity Interaction Range", "attribute.name.explosion_knockback_resistance": "Explosion Knockback Resistance", "attribute.name.fall_damage_multiplier": "Fall Damage Multiplier", @@ -485,6 +493,8 @@ "attribute.name.sweeping_damage_ratio": "Sweeping Damage Ratio", "attribute.name.tempt_range": "Mob Tempt Range", "attribute.name.water_movement_efficiency": "Water Movement Efficiency", + "attribute.name.waypoint_receive_range": "Waypoint Receive Range", + "attribute.name.waypoint_transmit_range": "Waypoint Transmit Range", "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", "biome.minecraft.badlands": "Badlands", "biome.minecraft.bamboo_jungle": "Bamboo Jungle", @@ -1592,6 +1602,7 @@ "block.minecraft.dragon_egg": "Dragon Egg", "block.minecraft.dragon_head": "Dragon Head", "block.minecraft.dragon_wall_head": "Dragon Wall Head", + "block.minecraft.dried_ghast": "Dried Ghast", "block.minecraft.dried_kelp_block": "Dried Kelp Block", "block.minecraft.dripstone_block": "Dripstone Block", "block.minecraft.dropper": "Dropper", @@ -2343,6 +2354,7 @@ "block.minecraft.zombie_head": "Zombie Head", "block.minecraft.zombie_wall_head": "Zombie Wall Head", "book.byAuthor": "by %1$s", + "book.edit.title": "Book Edit Screen", "book.editTitle": "Enter Book Title:", "book.finalizeButton": "Sign and Close", "book.finalizeWarning": "Note! When you sign the book, it will no longer be editable.", @@ -2351,8 +2363,13 @@ "book.generation.2": "Copy of a copy", "book.generation.3": "Tattered", "book.invalid.tag": "* Invalid book tag *", + "book.page_button.next": "Next Page", + "book.page_button.previous": "Previous Page", "book.pageIndicator": "Page %1$s of %2$s", + "book.sign.title": "Book Sign Screen", + "book.sign.titlebox": "Title", "book.signButton": "Sign", + "book.view.title": "Book View Screen", "build.tooHigh": "Height limit for building is %s", "chat_screen.message": "Message to send: %s", "chat_screen.title": "Chat screen", @@ -2535,6 +2552,12 @@ "commands.data.storage.get": "%s in storage %s after scale factor of %s is %s", "commands.data.storage.modified": "Modified storage %s", "commands.data.storage.query": "Storage %s has the following contents: %s", + "commands.datapack.create.already_exists": "Pack with name '%s' already exists", + "commands.datapack.create.invalid_full_name": "Invalid new pack name '%s'", + "commands.datapack.create.invalid_name": "Invalid characters in new pack name '%s'", + "commands.datapack.create.io_failure": "Can't create pack with name '%s', check logs", + "commands.datapack.create.metadata_encode_failure": "Failed to encode metadata for pack with name '%s': %s", + "commands.datapack.create.success": "Created new empty pack with name '%s'", "commands.datapack.disable.failed": "Pack '%s' is not enabled!", "commands.datapack.disable.failed.feature": "Pack '%s' cannot be disabled, since it is part of an enabled flag!", "commands.datapack.enable.failed": "Pack '%s' is already enabled!", @@ -2558,6 +2581,10 @@ "commands.defaultgamemode.success": "The default game mode is now %s", "commands.deop.failed": "Nothing changed. The player is not an operator", "commands.deop.success": "Made %s no longer a server operator", + "commands.dialog.clear.multiple": "Cleared dialog for %s players", + "commands.dialog.clear.single": "Cleared dialog for %s", + "commands.dialog.show.multiple": "Displayed dialog to %s players", + "commands.dialog.show.single": "Displayed dialog to %s", "commands.difficulty.failure": "The difficulty did not change; it is already set to %s", "commands.difficulty.query": "The difficulty is %s", "commands.difficulty.success": "The difficulty has been set to %s", @@ -2925,6 +2952,22 @@ "commands.trigger.failed.unprimed": "You cannot trigger this objective yet", "commands.trigger.set.success": "Triggered %s (set value to %s)", "commands.trigger.simple.success": "Triggered %s", + "commands.version.build_time": "build_time = %s", + "commands.version.data": "data = %s", + "commands.version.header": "Server version info:", + "commands.version.id": "id = %s", + "commands.version.name": "name = %s", + "commands.version.pack.data": "pack_data = %s", + "commands.version.pack.resource": "pack_resource = %s", + "commands.version.protocol": "protocol = %s (%s)", + "commands.version.series": "series = %s", + "commands.version.stable.no": "stable = no", + "commands.version.stable.yes": "stable = yes", + "commands.waypoint.list.empty": "No waypoints in %s", + "commands.waypoint.list.success": "%s waypoint(s) in %s: %s", + "commands.waypoint.modify.color": "Waypoint color is now %s", + "commands.waypoint.modify.color.reset": "Reset waypoint color", + "commands.waypoint.modify.style": "Waypoint style changed", "commands.weather.set.clear": "Set the weather to clear", "commands.weather.set.rain": "Set the weather to rain", "commands.weather.set.thunder": "Set the weather to rain & thunder", @@ -3043,6 +3086,8 @@ "credits_and_attribution.screen.title": "Credits and Attribution", "dataPack.bundle.description": "Enables experimental Bundle item", "dataPack.bundle.name": "Bundles", + "dataPack.locator_bar.description": "Show the direction of other players in multiplayer", + "dataPack.locator_bar.name": "Locator Bar", "dataPack.minecart_improvements.description": "Improved movement for Minecarts", "dataPack.minecart_improvements.name": "Minecart Improvements", "dataPack.redstone_experiments.description": "Experimental Redstone changes", @@ -3216,6 +3261,8 @@ "debug.show_hitboxes.help": "F3 + B = Show hitboxes", "debug.show_hitboxes.off": "Hitboxes: hidden", "debug.show_hitboxes.on": "Hitboxes: shown", + "debug.version.header": "Client version info:", + "debug.version.help": "F3 + V = Client version info", "demo.day.1": "This demo will last five game days. Do your best!", "demo.day.2": "Day Two", "demo.day.3": "Day Three", @@ -3418,6 +3465,7 @@ "entity.minecraft.glow_squid": "Glow Squid", "entity.minecraft.goat": "Goat", "entity.minecraft.guardian": "Guardian", + "entity.minecraft.happy_ghast": "Happy Ghast", "entity.minecraft.hoglin": "Hoglin", "entity.minecraft.hopper_minecart": "Minecart with Hopper", "entity.minecraft.horse": "Horse", @@ -3649,6 +3697,8 @@ "gamerule.keepInventory": "Keep inventory after death", "gamerule.lavaSourceConversion": "Lava converts to source", "gamerule.lavaSourceConversion.description": "When flowing lava is surrounded on two sides by lava sources it converts into a source.", + "gamerule.locatorBar": "Enable player Locator Bar", + "gamerule.locatorBar.description": "When enabled, a bar is shown on the screen to indicate the direction of players.", "gamerule.logAdminCommands": "Broadcast admin commands", "gamerule.maxCommandChainLength": "Command chain size limit", "gamerule.maxCommandChainLength.description": "Applies to command block chains and functions.", @@ -3836,6 +3886,7 @@ "gui.done": "Done", "gui.down": "Down", "gui.entity_tooltip.type": "Type: %s", + "gui.experience.level": "%s", "gui.fileDropFailure.detail": "Rejected %s files", "gui.fileDropFailure.title": "Failed to add files", "gui.hours": "%s hour(s)", @@ -3897,6 +3948,8 @@ "gui.toTitle": "Back to Title Screen", "gui.toWorld": "Back to World List", "gui.up": "Up", + "gui.waitingForResponse.button.inactive": "Back (%ss)", + "gui.waitingForResponse.title": "Waiting for Server", "gui.yes": "Yes", "hanging_sign.edit": "Edit Hanging Sign Message", "instrument.minecraft.admire_goat_horn": "Admire", @@ -3949,6 +4002,7 @@ "item.minecraft.birch_chest_boat": "Birch Boat with Chest", "item.minecraft.black_bundle": "Black Bundle", "item.minecraft.black_dye": "Black Dye", + "item.minecraft.black_harness": "Black Harness", "item.minecraft.blade_pottery_shard": "Blade Pottery Shard", "item.minecraft.blade_pottery_sherd": "Blade Pottery Sherd", "item.minecraft.blaze_powder": "Blaze Powder", @@ -3957,6 +4011,7 @@ "item.minecraft.blue_bundle": "Blue Bundle", "item.minecraft.blue_dye": "Blue Dye", "item.minecraft.blue_egg": "Blue Egg", + "item.minecraft.blue_harness": "Blue Harness", "item.minecraft.bogged_spawn_egg": "Bogged Spawn Egg", "item.minecraft.bolt_armor_trim_smithing_template": "Smithing Template", "item.minecraft.bolt_armor_trim_smithing_template.new": "Bolt Armor Trim", @@ -3976,6 +4031,7 @@ "item.minecraft.brown_bundle": "Brown Bundle", "item.minecraft.brown_dye": "Brown Dye", "item.minecraft.brown_egg": "Brown Egg", + "item.minecraft.brown_harness": "Brown Harness", "item.minecraft.brush": "Brush", "item.minecraft.bucket": "Bucket", "item.minecraft.bundle": "Bundle", @@ -4034,6 +4090,7 @@ "item.minecraft.crossbow.projectile.single": "Projectile: %s", "item.minecraft.cyan_bundle": "Cyan Bundle", "item.minecraft.cyan_dye": "Cyan Dye", + "item.minecraft.cyan_harness": "Cyan Harness", "item.minecraft.danger_pottery_shard": "Danger Pottery Shard", "item.minecraft.danger_pottery_sherd": "Danger Pottery Sherd", "item.minecraft.dark_oak_boat": "Dark Oak Boat", @@ -4165,14 +4222,18 @@ "item.minecraft.golden_sword": "Golden Sword", "item.minecraft.gray_bundle": "Gray Bundle", "item.minecraft.gray_dye": "Gray Dye", + "item.minecraft.gray_harness": "Gray Harness", "item.minecraft.green_bundle": "Green Bundle", "item.minecraft.green_dye": "Green Dye", + "item.minecraft.green_harness": "Green Harness", "item.minecraft.guardian_spawn_egg": "Guardian Spawn Egg", "item.minecraft.gunpowder": "Gunpowder", "item.minecraft.guster_banner_pattern": "Banner Pattern", "item.minecraft.guster_banner_pattern.desc": "Guster", "item.minecraft.guster_banner_pattern.new": "Guster Banner Pattern", "item.minecraft.guster_pottery_sherd": "Guster Pottery Sherd", + "item.minecraft.happy_ghast_spawn_egg": "Happy Ghast Spawn Egg", + "item.minecraft.harness": "Harness", "item.minecraft.heart_of_the_sea": "Heart of the Sea", "item.minecraft.heart_pottery_shard": "Heart Pottery Shard", "item.minecraft.heart_pottery_sherd": "Heart Pottery Sherd", @@ -4217,10 +4278,13 @@ "item.minecraft.leather_leggings": "Leather Pants", "item.minecraft.light_blue_bundle": "Light Blue Bundle", "item.minecraft.light_blue_dye": "Light Blue Dye", + "item.minecraft.light_blue_harness": "Light Blue Harness", "item.minecraft.light_gray_bundle": "Light Gray Bundle", "item.minecraft.light_gray_dye": "Light Gray Dye", + "item.minecraft.light_gray_harness": "Light Gray Harness", "item.minecraft.lime_bundle": "Lime Bundle", "item.minecraft.lime_dye": "Lime Dye", + "item.minecraft.lime_harness": "Lime Harness", "item.minecraft.lingering_potion": "Lingering Potion", "item.minecraft.lingering_potion.effect.awkward": "Awkward Lingering Potion", "item.minecraft.lingering_potion.effect.empty": "Lingering Uncraftable Potion", @@ -4253,6 +4317,7 @@ "item.minecraft.mace": "Mace", "item.minecraft.magenta_bundle": "Magenta Bundle", "item.minecraft.magenta_dye": "Magenta Dye", + "item.minecraft.magenta_harness": "Magenta Harness", "item.minecraft.magma_cream": "Magma Cream", "item.minecraft.magma_cube_spawn_egg": "Magma Cube Spawn Egg", "item.minecraft.mangrove_boat": "Mangrove Boat", @@ -4290,6 +4355,8 @@ "item.minecraft.music_disc_creator.desc": "Lena Raine - Creator", "item.minecraft.music_disc_far": "Music Disc", "item.minecraft.music_disc_far.desc": "C418 - far", + "item.minecraft.music_disc_lava_chicken": "Music Disc", + "item.minecraft.music_disc_lava_chicken.desc": "Hyper Potions - Lava Chicken", "item.minecraft.music_disc_mall": "Music Disc", "item.minecraft.music_disc_mall.desc": "C418 - mall", "item.minecraft.music_disc_mellohi": "Music Disc", @@ -4306,6 +4373,8 @@ "item.minecraft.music_disc_stal.desc": "C418 - stal", "item.minecraft.music_disc_strad": "Music Disc", "item.minecraft.music_disc_strad.desc": "C418 - strad", + "item.minecraft.music_disc_tears": "Music Disc", + "item.minecraft.music_disc_tears.desc": "Amos Roddy - Tears", "item.minecraft.music_disc_wait": "Music Disc", "item.minecraft.music_disc_wait.desc": "C418 - wait", "item.minecraft.music_disc_ward": "Music Disc", @@ -4336,6 +4405,7 @@ "item.minecraft.ominous_trial_key": "Ominous Trial Key", "item.minecraft.orange_bundle": "Orange Bundle", "item.minecraft.orange_dye": "Orange Dye", + "item.minecraft.orange_harness": "Orange Harness", "item.minecraft.painting": "Painting", "item.minecraft.pale_oak_boat": "Pale Oak Boat", "item.minecraft.pale_oak_chest_boat": "Pale Oak Boat with Chest", @@ -4353,6 +4423,7 @@ "item.minecraft.pillager_spawn_egg": "Pillager Spawn Egg", "item.minecraft.pink_bundle": "Pink Bundle", "item.minecraft.pink_dye": "Pink Dye", + "item.minecraft.pink_harness": "Pink Harness", "item.minecraft.pitcher_plant": "Pitcher Plant", "item.minecraft.pitcher_pod": "Pitcher Pod", "item.minecraft.plenty_pottery_shard": "Plenty Pottery Shard", @@ -4405,6 +4476,7 @@ "item.minecraft.pumpkin_seeds": "Pumpkin Seeds", "item.minecraft.purple_bundle": "Purple Bundle", "item.minecraft.purple_dye": "Purple Dye", + "item.minecraft.purple_harness": "Purple Harness", "item.minecraft.quartz": "Nether Quartz", "item.minecraft.rabbit": "Raw Rabbit", "item.minecraft.rabbit_foot": "Rabbit's Foot", @@ -4420,6 +4492,7 @@ "item.minecraft.recovery_compass": "Recovery Compass", "item.minecraft.red_bundle": "Red Bundle", "item.minecraft.red_dye": "Red Dye", + "item.minecraft.red_harness": "Red Harness", "item.minecraft.redstone": "Redstone Dust", "item.minecraft.resin_brick": "Resin Brick", "item.minecraft.resin_clump": "Resin Clump", @@ -4601,6 +4674,7 @@ "item.minecraft.wheat_seeds": "Wheat Seeds", "item.minecraft.white_bundle": "White Bundle", "item.minecraft.white_dye": "White Dye", + "item.minecraft.white_harness": "White Harness", "item.minecraft.wild_armor_trim_smithing_template": "Smithing Template", "item.minecraft.wild_armor_trim_smithing_template.new": "Wild Armor Trim", "item.minecraft.wind_charge": "Wind Charge", @@ -4618,6 +4692,7 @@ "item.minecraft.written_book": "Written Book", "item.minecraft.yellow_bundle": "Yellow Bundle", "item.minecraft.yellow_dye": "Yellow Dye", + "item.minecraft.yellow_harness": "Yellow Harness", "item.minecraft.zoglin_spawn_egg": "Zoglin Spawn Egg", "item.minecraft.zombie_horse_spawn_egg": "Zombie Horse Spawn Egg", "item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg", @@ -4678,6 +4753,7 @@ "jukebox_song.minecraft.creator": "Lena Raine - Creator", "jukebox_song.minecraft.creator_music_box": "Lena Raine - Creator (Music Box)", "jukebox_song.minecraft.far": "C418 - far", + "jukebox_song.minecraft.lava_chicken": "Hyper Potions - Lava Chicken", "jukebox_song.minecraft.mall": "C418 - mall", "jukebox_song.minecraft.mellohi": "C418 - mellohi", "jukebox_song.minecraft.otherside": "Lena Raine - otherside", @@ -4686,6 +4762,7 @@ "jukebox_song.minecraft.relic": "Aaron Cherof - Relic", "jukebox_song.minecraft.stal": "C418 - stal", "jukebox_song.minecraft.strad": "C418 - strad", + "jukebox_song.minecraft.tears": "Amos Roddy - Tears", "jukebox_song.minecraft.wait": "C418 - wait", "jukebox_song.minecraft.ward": "C418 - ward", "key.advancements": "Advancements", @@ -4807,6 +4884,7 @@ "key.mouse.right": "Right Button", "key.pickItem": "Pick Block", "key.playerlist": "List Players", + "key.quickActions": "Quick Actions", "key.right": "Strafe Right", "key.saveToolbarActivator": "Save Hotbar Activator", "key.screenshot": "Take Screenshot", @@ -4903,22 +4981,26 @@ "mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled", "mco.configure.world.backup": "World Backups", "mco.configure.world.buttons.activity": "Player activity", - "mco.configure.world.buttons.close": "Close Realm", + "mco.configure.world.buttons.close": "Temporarily Close Realm", "mco.configure.world.buttons.delete": "Delete", "mco.configure.world.buttons.done": "Done", "mco.configure.world.buttons.edit": "Settings", "mco.configure.world.buttons.invite": "Invite Player", "mco.configure.world.buttons.moreoptions": "More options", - "mco.configure.world.buttons.open": "Open Realm", + "mco.configure.world.buttons.newworld": "New World", + "mco.configure.world.buttons.open": "Reopen Realm", "mco.configure.world.buttons.options": "World Options", "mco.configure.world.buttons.players": "Players", + "mco.configure.world.buttons.region_preference": "Select Region...", "mco.configure.world.buttons.resetworld": "Reset World", + "mco.configure.world.buttons.save": "Save", "mco.configure.world.buttons.settings": "Settings", "mco.configure.world.buttons.subscription": "Subscription", "mco.configure.world.buttons.switchminigame": "Switch Minigame", - "mco.configure.world.close.question.line1": "Your Realm will become unavailable.", + "mco.configure.world.close.question.line1": "You can temporarily close your Realm, preventing play while you make adjustments. Open it back up when you're ready. \n\nThis does not cancel your Realms Subscription.", "mco.configure.world.close.question.line2": "Are you sure you want to continue?", - "mco.configure.world.closing": "Closing the Realm...", + "mco.configure.world.close.question.title": "Need to make changes without disruption?", + "mco.configure.world.closing": "Temporarily closing the Realm...", "mco.configure.world.commandBlocks": "Command Blocks", "mco.configure.world.delete.button": "Delete Realm", "mco.configure.world.delete.question.line1": "Your Realm will be permanently deleted", @@ -4938,6 +5020,7 @@ "mco.configure.world.invites.remove.tooltip": "Remove", "mco.configure.world.leave.question.line1": "If you leave this Realm you won't see it unless you are invited again", "mco.configure.world.leave.question.line2": "Are you sure you want to continue?", + "mco.configure.world.loading": "Loading Realm", "mco.configure.world.location": "Location", "mco.configure.world.minigame": "Current: %s", "mco.configure.world.name": "Realm Name", @@ -4946,6 +5029,8 @@ "mco.configure.world.players.inviting": "Inviting player...", "mco.configure.world.players.title": "Players", "mco.configure.world.pvp": "PVP", + "mco.configure.world.region_preference": "Region Preference", + "mco.configure.world.region_preference.title": "Region Preference Selection", "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", "mco.configure.world.reset.question.line2": "Are you sure you want to continue?", "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this Realm\n\nDo you want to download it and play?", @@ -4955,6 +5040,7 @@ "mco.configure.world.restore.download.question.line2": "Do you want to continue?", "mco.configure.world.restore.question.line1": "Your world will be restored to date '%s' (%s)", "mco.configure.world.restore.question.line2": "Are you sure you want to continue?", + "mco.configure.world.settings.expired": "You cannot edit settings of an expired Realm", "mco.configure.world.settings.title": "Settings", "mco.configure.world.slot": "World %s", "mco.configure.world.slot.empty": "Empty", @@ -4984,6 +5070,7 @@ "mco.configure.world.subscription.remaining.months": "%1$s month(s)", "mco.configure.world.subscription.remaining.months.days": "%1$s month(s), %2$s day(s)", "mco.configure.world.subscription.start": "Start Date", + "mco.configure.world.subscription.tab": "Subscription", "mco.configure.world.subscription.timeleft": "Time Left", "mco.configure.world.subscription.title": "Your Subscription", "mco.configure.world.subscription.unknown": "Unknown", @@ -4996,6 +5083,7 @@ "mco.connect.authorizing": "Logging in...", "mco.connect.connecting": "Connecting to the Realm...", "mco.connect.failed": "Failed to connect to the Realm", + "mco.connect.region": "Server region: %s", "mco.connect.success": "Done", "mco.create.world": "Create", "mco.create.world.error": "You must enter a name!", @@ -5034,6 +5122,7 @@ "mco.errorMessage.initialize.failed": "Failed to initialize Realm", "mco.errorMessage.noDetails": "No error details provided", "mco.errorMessage.realmsService": "An error occurred (%s):", + "mco.errorMessage.realmsService.configurationError": "An unexpected error occurred while editing world options", "mco.errorMessage.realmsService.connectivity": "Could not connect to Realms: %s", "mco.errorMessage.realmsService.realmsError": "Realms (%s):", "mco.errorMessage.realmsService.unknownCompatibility": "Could not check compatible version, got response: %s", @@ -5070,6 +5159,7 @@ "mco.notification.visitUrl.buttonText.default": "Open Link", "mco.notification.visitUrl.message.default": "Please visit the link below", "mco.onlinePlayers": "Online Players", + "mco.play.button.realm.closed": "Realm is closed", "mco.question": "Question", "mco.reset.world.adventure": "Adventures", "mco.reset.world.experience": "Experiences", @@ -5083,7 +5173,7 @@ "mco.reset.world.warning": "This will replace the current world of your Realm", "mco.selectServer.buy": "Buy a Realm!", "mco.selectServer.close": "Close", - "mco.selectServer.closed": "Closed Realm", + "mco.selectServer.closed": "Deactivated Realm", "mco.selectServer.closeserver": "Close Realm", "mco.selectServer.configure": "Configure", "mco.selectServer.configureRealm": "Configure Realm", @@ -5175,6 +5265,14 @@ "mco.version": "Version: %s", "mco.warning": "Warning!", "mco.worldSlot.minigame": "Minigame", + "menu.custom_options": "Custom Options...", + "menu.custom_options.title": "Custom Options", + "menu.custom_options.tooltip": "Note: Custom options are provided by third-party servers and/or content.\nHandle with care!", + "menu.custom_screen_info.button_narration": "This is a custom screen. Learn more.", + "menu.custom_screen_info.contents": "The contents of this screen are controlled by third-party servers and maps that are not owned, operated, or supervised by Mojang Studios or Microsoft.\n\nHandle with care! Always be careful when following links and never give away your personal information, including login details.\n\nIf this screen prevents you from playing, you can also disconnect from the current server by using the button below.", + "menu.custom_screen_info.disconnect": "Custom screen rejected", + "menu.custom_screen_info.title": "Note about custom screens", + "menu.custom_screen_info.tooltip": "This is a custom screen. Click here to learn more.", "menu.disconnect": "Disconnect", "menu.feedback": "Feedback...", "menu.feedback.title": "Feedback", @@ -5187,6 +5285,8 @@ "menu.playdemo": "Play Demo World", "menu.playerReporting": "Player Reporting", "menu.preparingSpawn": "Preparing spawn area: %s%%", + "menu.quick_actions": "Quick Actions...", + "menu.quick_actions.title": "Quick Actions", "menu.quit": "Quit Game", "menu.reportBugs": "Report Bugs", "menu.resetdemo": "Reset Demo World", @@ -5213,6 +5313,9 @@ "mirror.none": "|", "mount.onboard": "Press %1$s to Dismount", "multiplayer.applyingPack": "Applying resource pack", + "multiplayer.confirm_command.parse_errors": "You are trying to execute an unrecognized or invalid command.\nAre you sure?\nCommand: %s", + "multiplayer.confirm_command.permissions_required": "You are trying to execute a command that requires elevated permissions.\nThis might negatively affect your game.\nAre you sure?\nCommand: %s", + "multiplayer.confirm_command.title": "Confirm Command Execution", "multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!", "multiplayer.disconnect.bad_chat_index": "Detected missed or reordered chat message from server", "multiplayer.disconnect.banned": "You are banned from this server", @@ -5296,6 +5399,71 @@ "multiplayerWarning.check": "Do not show this screen again", "multiplayerWarning.header": "Caution: Third-Party Online Play", "multiplayerWarning.message": "Caution: Online play is offered by third-party servers that are not owned, operated, or supervised by Mojang Studios or Microsoft. During online play, you may be exposed to unmoderated chat messages or other types of user-generated content that may not be suitable for everyone.", + "music.game.a_familiar_room": "Aaron Cherof - A Familiar Room", + "music.game.an_ordinary_day": "Kumi Tanioka - An Ordinary Day", + "music.game.ancestry": "Lena Raine - Ancestry", + "music.game.below_and_above": "Amos Roddy - Below and Above", + "music.game.broken_clocks": "Amos Roddy - Broken Clocks", + "music.game.bromeliad": "Aaron Cherof - Bromeliad", + "music.game.clark": "C418 - Clark", + "music.game.comforting_memories": "Kumi Tanioka - Comforting Memories", + "music.game.creative.aria_math": "C418 - Aria Math", + "music.game.creative.biome_fest": "C418 - Biome Fest", + "music.game.creative.blind_spots": "C418 - Blind Spots", + "music.game.creative.dreiton": "C418 - Dreiton", + "music.game.creative.haunt_muskie": "C418 - Haunt Muskie", + "music.game.creative.taswell": "C418 - Taswell", + "music.game.crescent_dunes": "Aaron Cherof - Crescent Dunes", + "music.game.danny": "C418 - Danny", + "music.game.deeper": "Lena Raine - Deeper", + "music.game.dry_hands": "C418 - Dry Hands", + "music.game.echo_in_the_wind": "Aaron Cherof - Echo in the Wind", + "music.game.eld_unknown": "Lena Raine - Eld Unknown", + "music.game.end.alpha": "C418 - Alpha", + "music.game.end.boss": "C418 - Boss", + "music.game.end.the_end": "C418 - The End", + "music.game.endless": "Lena Raine - Endless", + "music.game.featherfall": "Aaron Cherof - Featherfall", + "music.game.fireflies": "Amos Roddy - Fireflies", + "music.game.floating_dream": "Kumi Tanioka - Floating Dream", + "music.game.haggstrom": "C418 - Haggstrom", + "music.game.infinite_amethyst": "Lena Raine - Infinite Amethyst", + "music.game.key": "C418 - Key", + "music.game.komorebi": "Kumi Tanioka - komorebi", + "music.game.left_to_bloom": "Lena Raine - Left to Bloom", + "music.game.lilypad": "Amos Roddy - Lilypad", + "music.game.living_mice": "C418 - Living Mice", + "music.game.mice_on_venus": "C418 - Mice on Venus", + "music.game.minecraft": "C418 - Minecraft", + "music.game.nether.ballad_of_the_cats": "C418 - Ballad of the Cats", + "music.game.nether.concrete_halls": "C418 - Concrete Halls", + "music.game.nether.crimson_forest.chrysopoeia": "Lena Raine - Chrysopoeia", + "music.game.nether.dead_voxel": "C418 - Dead Voxel", + "music.game.nether.nether_wastes.rubedo": "Lena Raine - Rubedo", + "music.game.nether.soulsand_valley.so_below": "Lena Raine - So Below", + "music.game.nether.warmth": "C418 - Warmth", + "music.game.one_more_day": "Lena Raine - One More Day", + "music.game.os_piano": "Amos Roddy - O's Piano", + "music.game.oxygene": "C418 - Oxygène", + "music.game.pokopoko": "Kumi Tanioka - pokopoko", + "music.game.puzzlebox": "Aaron Cherof - Puzzlebox", + "music.game.stand_tall": "Lena Raine - Stand Tall", + "music.game.subwoofer_lullaby": "C418 - Subwoofer Lullaby", + "music.game.swamp.aerie": "Lena Raine - Aerie", + "music.game.swamp.firebugs": "Lena Raine - Firebugs", + "music.game.swamp.labyrinthine": "Lena Raine - Labyrinthine", + "music.game.sweden": "C418 - Sweden", + "music.game.watcher": "Aaron Cherof - Watcher", + "music.game.water.axolotl": "C418 - Axolotl", + "music.game.water.dragon_fish": "C418 - Dragon Fish", + "music.game.water.shuniji": "C418 - Shuniji", + "music.game.wending": "Lena Raine - Wending", + "music.game.wet_hands": "C418 - Wet Hands", + "music.game.yakusoku": "Kumi Tanioka - yakusoku", + "music.menu.beginning_2": "C418 - Beginning 2", + "music.menu.floating_trees": "C418 - Floating Trees", + "music.menu.moog_city_2": "C418 - Moog City 2", + "music.menu.mutation": "C418 - Mutation", "narration.button": "Button: %s", "narration.button.usage.focused": "Press Enter to activate", "narration.button.usage.hovered": "Left click to activate", @@ -5306,6 +5474,7 @@ "narration.cycle_button.usage.focused": "Press Enter to switch to %s", "narration.cycle_button.usage.hovered": "Left click to switch to %s", "narration.edit_box": "Edit box: %s", + "narration.item": "Item: %s", "narration.recipe": "Recipe for %s", "narration.recipe.usage": "Left click to select", "narration.recipe.usage.more": "Right click to show more recipes", @@ -5525,6 +5694,11 @@ "options.mouseWheelSensitivity": "Scroll Sensitivity", "options.multiplayer.title": "Multiplayer Settings...", "options.multiplier": "%sx", + "options.music_frequency": "Music Frequency", + "options.music_frequency.constant": "Constant", + "options.music_frequency.default": "Default", + "options.music_frequency.frequent": "Frequent", + "options.music_frequency.tooltip": "Changes how frequently music plays while in a game world.", "options.narrator": "Narrator", "options.narrator.all": "Narrates All", "options.narrator.chat": "Narrates Chat", @@ -5561,6 +5735,7 @@ "options.realmsNotifications.tooltip": "Fetches Realms news and invites in the title screen and displays their respective icon on the Realms button.", "options.reducedDebugInfo": "Reduced Debug Info", "options.renderClouds": "Clouds", + "options.renderCloudsDistance": "Cloud Distance", "options.renderDistance": "Render Distance", "options.resourcepack": "Resource Packs...", "options.rotateWithMinecart": "Rotate with Minecarts", @@ -5570,6 +5745,8 @@ "options.sensitivity": "Sensitivity", "options.sensitivity.max": "HYPERSPEED!!!", "options.sensitivity.min": "*yawn*", + "options.showNowPlayingToast": "Show Music Toast", + "options.showNowPlayingToast.tooltip": "Displays a toast whenever a song starts playing. The same toast is constantly displayed in the in-game pause menu while a song is playing.", "options.showSubtitles": "Show Subtitles", "options.simulationDistance": "Simulation Distance", "options.skinCustomisation": "Skin Customization...", @@ -5642,6 +5819,8 @@ "painting.minecraft.courbet.title": "Bonjour Monsieur Courbet", "painting.minecraft.creebet.author": "Kristoffer Zetterstrand", "painting.minecraft.creebet.title": "Creebet", + "painting.minecraft.dennis.author": "Sarah Boeving", + "painting.minecraft.dennis.title": "Dennis", "painting.minecraft.donkey_kong.author": "Kristoffer Zetterstrand", "painting.minecraft.donkey_kong.title": "Kong", "painting.minecraft.earth.author": "Mojang", @@ -5747,6 +5926,31 @@ "quickplay.error.realm_connect": "Could not connect to Realm", "quickplay.error.realm_permission": "Lacking permission to connect to this Realm", "quickplay.error.title": "Failed to Quick Play", + "realms.configuration.region_preference.automatic_owner": "Automatic (Realm owner ping)", + "realms.configuration.region_preference.automatic_player": "Automatic (first to join session)", + "realms.configuration.region.australia_east": "New South Wales, Australia", + "realms.configuration.region.australia_southeast": "Victoria, Australia", + "realms.configuration.region.brazil_south": "Brazil", + "realms.configuration.region.central_india": "India", + "realms.configuration.region.central_us": "Iowa, USA", + "realms.configuration.region.east_asia": "Hong Kong", + "realms.configuration.region.east_us": "Virginia, USA", + "realms.configuration.region.east_us_2": "North Carolina, USA", + "realms.configuration.region.france_central": "France", + "realms.configuration.region.japan_east": "Eastern Japan", + "realms.configuration.region.japan_west": "Western Japan", + "realms.configuration.region.korea_central": "South Korea", + "realms.configuration.region.north_central_us": "Illinois, USA", + "realms.configuration.region.north_europe": "Ireland", + "realms.configuration.region.south_central_us": "Texas, USA", + "realms.configuration.region.southeast_asia": "Singapore", + "realms.configuration.region.sweden_central": "Sweden", + "realms.configuration.region.uae_north": "United Arab Emirates (UAE)", + "realms.configuration.region.uk_south": "Southern England", + "realms.configuration.region.west_central_us": "Utah, USA", + "realms.configuration.region.west_europe": "Netherlands", + "realms.configuration.region.west_us": "California, USA", + "realms.configuration.region.west_us_2": "Washington, USA", "realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots", "recipe.notFound": "Unknown recipe: %s", "recipe.toast.description": "Check your recipe book", @@ -5944,12 +6148,13 @@ "snbt.parser.undescore_not_allowed": "Underscore characters are not allowed at the start or end of a number", "soundCategory.ambient": "Ambient/Environment", "soundCategory.block": "Blocks", - "soundCategory.hostile": "Hostile Creatures", + "soundCategory.hostile": "Hostile Mobs", "soundCategory.master": "Master Volume", "soundCategory.music": "Music", - "soundCategory.neutral": "Friendly Creatures", + "soundCategory.neutral": "Friendly Mobs", "soundCategory.player": "Players", "soundCategory.record": "Jukebox/Note Blocks", + "soundCategory.ui": "UI", "soundCategory.voice": "Voice/Speech", "soundCategory.weather": "Weather", "spectatorMenu.close": "Close Menu", @@ -5996,6 +6201,7 @@ "stat.minecraft.fill_cauldron": "Cauldrons Filled", "stat.minecraft.fish_caught": "Fish Caught", "stat.minecraft.fly_one_cm": "Distance Flown", + "stat.minecraft.happy_ghast_one_cm": "Distance by Happy Ghast", "stat.minecraft.horse_one_cm": "Distance by Horse", "stat.minecraft.inspect_dispenser": "Dispensers Searched", "stat.minecraft.inspect_dropper": "Droppers Searched", @@ -6153,6 +6359,11 @@ "subtitles.block.dispenser.dispense": "Dispensed item", "subtitles.block.dispenser.fail": "Dispenser failed", "subtitles.block.door.toggle": "Door creaks", + "subtitles.block.dried_ghast.ambient": "Sounds of dryness", + "subtitles.block.dried_ghast.ambient_water": "Dried Ghast rehydrates", + "subtitles.block.dried_ghast.place_in_water": "Dried Ghast soaks", + "subtitles.block.dried_ghast.transition": "Dried Ghast feels better", + "subtitles.block.dry_grass.ambient": "Windy sounds", "subtitles.block.enchantment_table.use": "Enchanting Table used", "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", "subtitles.block.end_portal.spawn": "End Portal opens", @@ -6215,6 +6426,8 @@ "subtitles.block.sniffer_egg.plop": "Sniffer plops", "subtitles.block.sponge.absorb": "Sponge sucks", "subtitles.block.sweet_berry_bush.pick_berries": "Berries pop", + "subtitles.block.trapdoor.close": "Trapdoor closes", + "subtitles.block.trapdoor.open": "Trapdoor opens", "subtitles.block.trapdoor.toggle": "Trapdoor creaks", "subtitles.block.trial_spawner.about_to_spawn_item": "Ominous item prepares", "subtitles.block.trial_spawner.ambient": "Trial Spawner crackles", @@ -6453,6 +6666,10 @@ "subtitles.entity.ghast.death": "Ghast dies", "subtitles.entity.ghast.hurt": "Ghast hurts", "subtitles.entity.ghast.shoot": "Ghast shoots", + "subtitles.entity.ghastling.ambient": "Ghastling coos", + "subtitles.entity.ghastling.death": "Ghastling dies", + "subtitles.entity.ghastling.hurt": "Ghastling hurts", + "subtitles.entity.ghastling.spawn": "Ghastling appears", "subtitles.entity.glow_item_frame.add_item": "Glow Item Frame fills", "subtitles.entity.glow_item_frame.break": "Glow Item Frame broken", "subtitles.entity.glow_item_frame.place": "Glow Item Frame placed", @@ -6479,6 +6696,13 @@ "subtitles.entity.guardian.death": "Guardian dies", "subtitles.entity.guardian.flop": "Guardian flops", "subtitles.entity.guardian.hurt": "Guardian hurts", + "subtitles.entity.happy_ghast.ambient": "Happy Ghast croons", + "subtitles.entity.happy_ghast.death": "Happy Ghast dies", + "subtitles.entity.happy_ghast.equip": "Harness equips", + "subtitles.entity.happy_ghast.harness_goggles_down": "Happy Ghast is ready", + "subtitles.entity.happy_ghast.harness_goggles_up": "Happy Ghast stops", + "subtitles.entity.happy_ghast.hurt": "Happy Ghast hurts", + "subtitles.entity.happy_ghast.unequip": "Harness unequips", "subtitles.entity.hoglin.ambient": "Hoglin growls", "subtitles.entity.hoglin.angry": "Hoglin growls angrily", "subtitles.entity.hoglin.attack": "Hoglin attacks", @@ -6918,13 +7142,20 @@ "subtitles.item.hoe.till": "Hoe tills", "subtitles.item.honey_bottle.drink": "Gulping", "subtitles.item.honeycomb.wax_on": "Wax on", + "subtitles.item.horse_armor.unequip": "Horse Armor snips away", "subtitles.item.ink_sac.use": "Ink Sac splotches", + "subtitles.item.lead.break": "Lead snaps", + "subtitles.item.lead.tied": "Lead tied", + "subtitles.item.lead.untied": "Lead untied", + "subtitles.item.llama_carpet.unequip": "Carpet snips away", "subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone", "subtitles.item.mace.smash_air": "Mace smashes", "subtitles.item.mace.smash_ground": "Mace smashes", "subtitles.item.nether_wart.plant": "Crop planted", "subtitles.item.ominous_bottle.dispose": "Bottle breaks", + "subtitles.item.saddle.unequip": "Saddle snips away", "subtitles.item.shears.shear": "Shears click", + "subtitles.item.shears.snip": "Shears snip", "subtitles.item.shield.block": "Shield blocks", "subtitles.item.shovel.flatten": "Shovel flattens", "subtitles.item.spyglass.stop_using": "Spyglass retracts",