From f9aca5c99322b1a6a163c610672ba516021f9a75 Mon Sep 17 00:00:00 2001
From: mat
Date: Sat, 21 Oct 2023 00:57:26 -0500
Subject: [PATCH] 23w42a
---
README.md | 2 +-
azalea-block/src/generated.rs | 6 +
azalea-entity/src/metadata.rs | 15 ++-
azalea-inventory/src/lib.rs | 3 +
azalea-inventory/src/operations.rs | 25 ++--
azalea-language/src/en_us.json | 110 ++++++++++++------
azalea-physics/src/collision/blocks.rs | 2 +-
azalea-protocol/src/packets/game/mod.rs | 80 ++++++-------
...und_container_slot_state_changed_packet.rs | 11 ++
.../clientbound_login_disconnect_packet.rs | 30 ++++-
azalea-protocol/src/packets/mod.rs | 2 +-
.../clientbound_status_response_packet.rs | 4 +-
azalea-registry/src/lib.rs | 16 +++
13 files changed, 213 insertions(+), 93 deletions(-)
create mode 100644 azalea-protocol/src/packets/game/serverbound_container_slot_state_changed_packet.rs
diff --git a/README.md b/README.md
index 243fbfb91..9c1c31844 100755
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.
-*Currently supported Minecraft version: `23w41a`.*
+*Currently supported Minecraft version: `23w42a`.*
> **Warning**
> Azalea is still very unfinished, though most crates are in a somewhat useable state
diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs
index 4add88e99..1443964a0 100755
--- a/azalea-block/src/generated.rs
+++ b/azalea-block/src/generated.rs
@@ -1902,6 +1902,7 @@ make_block_states! {
Z,
},
"cracked" => bool,
+ "crafting" => bool,
},
Blocks => {
air => BlockBehavior::new(), {},
@@ -5099,5 +5100,10 @@ make_block_states! {
facing: FacingCardinal::North,
waterlogged: false,
},
+ crafter => BlockBehavior::new().strength(1.5, 3.5), {
+ crafting: false,
+ orientation: Orientation::NorthUp,
+ triggered: false,
+ },
}
}
diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs
index 39ba9527c..240622b67 100644
--- a/azalea-entity/src/metadata.rs
+++ b/azalea-entity/src/metadata.rs
@@ -795,7 +795,7 @@ pub struct BlockDisplayHeight(pub f32);
#[derive(Component, Deref, DerefMut, Clone)]
pub struct BlockDisplayGlowColorOverride(pub i32);
#[derive(Component, Deref, DerefMut, Clone)]
-pub struct BlockState(pub azalea_block::BlockState);
+pub struct BlockDisplayBlockState(pub azalea_block::BlockState);
#[derive(Component)]
pub struct BlockDisplay;
impl BlockDisplay {
@@ -855,7 +855,7 @@ impl BlockDisplay {
entity.insert(BlockDisplayGlowColorOverride(d.value.into_int()?));
}
23 => {
- entity.insert(BlockState(d.value.into_block_state()?));
+ entity.insert(BlockDisplayBlockState(d.value.into_block_state()?));
}
_ => {}
}
@@ -884,7 +884,7 @@ pub struct BlockDisplayMetadataBundle {
block_display_width: BlockDisplayWidth,
block_display_height: BlockDisplayHeight,
block_display_glow_color_override: BlockDisplayGlowColorOverride,
- block_state: BlockState,
+ block_display_block_state: BlockDisplayBlockState,
}
impl Default for BlockDisplayMetadataBundle {
fn default() -> Self {
@@ -946,7 +946,7 @@ impl Default for BlockDisplayMetadataBundle {
block_display_width: BlockDisplayWidth(0.0),
block_display_height: BlockDisplayHeight(0.0),
block_display_glow_color_override: BlockDisplayGlowColorOverride(-1),
- block_state: BlockState(Default::default()),
+ block_display_block_state: BlockDisplayBlockState(Default::default()),
}
}
}
@@ -8074,6 +8074,8 @@ impl Default for TextDisplayMetadataBundle {
#[derive(Component, Deref, DerefMut, Clone)]
pub struct Fuse(pub i32);
+#[derive(Component, Deref, DerefMut, Clone)]
+pub struct TntBlockState(pub azalea_block::BlockState);
#[derive(Component)]
pub struct Tnt;
impl Tnt {
@@ -8086,6 +8088,9 @@ impl Tnt {
8 => {
entity.insert(Fuse(d.value.into_int()?));
}
+ 9 => {
+ entity.insert(TntBlockState(d.value.into_block_state()?));
+ }
_ => {}
}
Ok(())
@@ -8097,6 +8102,7 @@ pub struct TntMetadataBundle {
_marker: Tnt,
parent: AbstractEntityMetadataBundle,
fuse: Fuse,
+ tnt_block_state: TntBlockState,
}
impl Default for TntMetadataBundle {
fn default() -> Self {
@@ -8120,6 +8126,7 @@ impl Default for TntMetadataBundle {
ticks_frozen: TicksFrozen(0),
},
fuse: Fuse(80),
+ tnt_block_state: TntBlockState(Default::default()),
}
}
}
diff --git a/azalea-inventory/src/lib.rs b/azalea-inventory/src/lib.rs
index dbbf1f5c7..b2ea215a1 100644
--- a/azalea-inventory/src/lib.rs
+++ b/azalea-inventory/src/lib.rs
@@ -89,6 +89,9 @@ declare_menus! {
Generic3x3 {
contents: 9,
},
+ Crafter3x3 {
+ contents: 9,
+ },
Anvil {
first: 1,
second: 1,
diff --git a/azalea-inventory/src/operations.rs b/azalea-inventory/src/operations.rs
index 8d81b18e8..729b7fc5c 100644
--- a/azalea-inventory/src/operations.rs
+++ b/azalea-inventory/src/operations.rs
@@ -4,13 +4,13 @@ use azalea_buf::McBuf;
use crate::{
item::MaxStackSizeExt, AnvilMenuLocation, BeaconMenuLocation, BlastFurnaceMenuLocation,
- BrewingStandMenuLocation, CartographyTableMenuLocation, CraftingMenuLocation,
- EnchantmentMenuLocation, FurnaceMenuLocation, Generic3x3MenuLocation, Generic9x1MenuLocation,
- Generic9x2MenuLocation, Generic9x3MenuLocation, Generic9x4MenuLocation, Generic9x5MenuLocation,
- Generic9x6MenuLocation, GrindstoneMenuLocation, HopperMenuLocation, ItemSlot, ItemSlotData,
- LecternMenuLocation, LoomMenuLocation, Menu, MenuLocation, MerchantMenuLocation, Player,
- PlayerMenuLocation, ShulkerBoxMenuLocation, SmithingMenuLocation, SmokerMenuLocation,
- StonecutterMenuLocation,
+ BrewingStandMenuLocation, CartographyTableMenuLocation, Crafter3x3MenuLocation,
+ CraftingMenuLocation, EnchantmentMenuLocation, FurnaceMenuLocation, Generic3x3MenuLocation,
+ Generic9x1MenuLocation, Generic9x2MenuLocation, Generic9x3MenuLocation, Generic9x4MenuLocation,
+ Generic9x5MenuLocation, Generic9x6MenuLocation, GrindstoneMenuLocation, HopperMenuLocation,
+ ItemSlot, ItemSlotData, LecternMenuLocation, LoomMenuLocation, Menu, MenuLocation,
+ MerchantMenuLocation, Player, PlayerMenuLocation, ShulkerBoxMenuLocation, SmithingMenuLocation,
+ SmokerMenuLocation, StonecutterMenuLocation,
};
#[derive(Debug, Clone)]
@@ -383,6 +383,17 @@ impl Menu {
);
}
},
+ MenuLocation::Crafter3x3(l) => match l {
+ Crafter3x3MenuLocation::Contents => {
+ self.try_move_item_to_slots(slot_index, self.player_slots_range());
+ }
+ Crafter3x3MenuLocation::Player => {
+ self.try_move_item_to_slots_or_toggle_hotbar(
+ slot_index,
+ Menu::GENERIC3X3_CONTENTS_SLOTS,
+ );
+ }
+ },
MenuLocation::Anvil(l) => match l {
AnvilMenuLocation::Player => {
self.try_move_item_to_slots_or_toggle_hotbar(
diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json
index ea5b24dd1..f8ed3c347 100755
--- a/azalea-language/src/en_us.json
+++ b/azalea-language/src/en_us.json
@@ -1342,6 +1342,7 @@
"block.minecraft.cracked_nether_bricks": "Cracked Nether Bricks",
"block.minecraft.cracked_polished_blackstone_bricks": "Cracked Polished Blackstone Bricks",
"block.minecraft.cracked_stone_bricks": "Cracked Stone Bricks",
+ "block.minecraft.crafter": "Crafter",
"block.minecraft.crafting_table": "Crafting Table",
"block.minecraft.creeper_head": "Creeper Head",
"block.minecraft.creeper_wall_head": "Creeper Wall Head",
@@ -2681,6 +2682,7 @@
"container.cartography_table": "Cartography Table",
"container.chest": "Chest",
"container.chestDouble": "Large Chest",
+ "container.crafter": "Crafter",
"container.crafting": "Crafting",
"container.creative": "Item Selection",
"container.dispenser": "Dispenser",
@@ -2810,6 +2812,8 @@
"dataPack.trade_rebalance.name": "Villager Trade Rebalance",
"dataPack.update_1_20.description": "New features and content for Minecraft 1.20",
"dataPack.update_1_20.name": "Update 1.20",
+ "dataPack.update_1_21.description": "New features and content for Minecraft 1.21",
+ "dataPack.update_1_21.name": "Update 1.21",
"dataPack.validation.back": "Go Back",
"dataPack.validation.failed": "Data pack validation failed!",
"dataPack.validation.reset": "Reset to Default",
@@ -3365,8 +3369,14 @@
"gamerule.mobExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by mobs are lost in the explosion.",
"gamerule.mobGriefing": "Allow destructive mob actions",
"gamerule.naturalRegeneration": "Regenerate health",
+ "gamerule.playersNetherPortalCreativeDelay": "Player's Nether portal delay in creative mode",
+ "gamerule.playersNetherPortalCreativeDelay.description": "Time (in ticks) that a creative mode player needs to stand in a Nether portal before changing dimensions.",
+ "gamerule.playersNetherPortalDefaultDelay": "Player's Nether portal delay in non-creative mode",
+ "gamerule.playersNetherPortalDefaultDelay.description": "Time (in ticks) that a non-creative mode player needs to stand in a Nether portal before changing dimensions.",
"gamerule.playersSleepingPercentage": "Sleep percentage",
"gamerule.playersSleepingPercentage.description": "The percentage of players who must be sleeping to skip the night.",
+ "gamerule.projectilesCanBreakBlocks": "Projectiles can break blocks",
+ "gamerule.projectilesCanBreakBlocks.description": "Controls whether impact projectiles will destroy blocks that are destructible by them.",
"gamerule.randomTickSpeed": "Random tick speed rate",
"gamerule.reducedDebugInfo": "Reduce debug info",
"gamerule.reducedDebugInfo.description": "Limits contents of debug screen.",
@@ -3576,6 +3586,7 @@
"gui.socialInteractions.tooltip.report.not_reportable": "This player can't be reported, because their chat messages can't be verified on this server",
"gui.socialInteractions.tooltip.show": "Show messages",
"gui.stats": "Statistics",
+ "gui.togglable_slot": "Click to disable slot",
"gui.toMenu": "Back to Server List",
"gui.toRealms": "Back to Realms List",
"gui.toTitle": "Back to Title Screen",
@@ -4382,18 +4393,20 @@
"lectern.take_book": "Take Book",
"loading.progress": "%s%%",
"mco.account.privacy.info": "Read more about Mojang and privacy laws",
+ "mco.account.privacy.info.button": "Read more about GDPR",
+ "mco.account.privacy.information": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children\u2019s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.",
"mco.account.privacyinfo": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children\u2019s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.\n\nIf you have an older Minecraft account (you log in with your username), you need to migrate the account to a Mojang account in order to access Realms.",
"mco.account.update": "Update account",
"mco.activity.noactivity": "No activity for the past %s day(s)",
"mco.activity.title": "Player activity",
- "mco.backup.button.download": "Download latest",
- "mco.backup.button.reset": "Reset world",
+ "mco.backup.button.download": "Download Latest",
+ "mco.backup.button.reset": "Reset World",
"mco.backup.button.restore": "Restore",
- "mco.backup.button.upload": "Upload world",
+ "mco.backup.button.upload": "Upload World",
"mco.backup.changes.tooltip": "Changes",
"mco.backup.entry": "Backup (%s)",
"mco.backup.entry.description": "Description",
- "mco.backup.entry.enabledPack": "Enabled Pack",
+ "mco.backup.entry.enabledPack": "Enabled Pack(s)",
"mco.backup.entry.gameDifficulty": "Game Difficulty",
"mco.backup.entry.gameMode": "Game Mode",
"mco.backup.entry.gameServerVersion": "Game Server Version",
@@ -4404,7 +4417,7 @@
"mco.backup.entry.uploaded": "Uploaded",
"mco.backup.entry.worldType": "World Type",
"mco.backup.generate.world": "Generate world",
- "mco.backup.info.title": "Changes from last backup",
+ "mco.backup.info.title": "Changes From Last Backup",
"mco.backup.nobackups": "This realm doesn't have any backups currently.",
"mco.backup.restoring": "Restoring your realm",
"mco.backup.unknown": "UNKNOWN",
@@ -4431,34 +4444,34 @@
"mco.compatibility.upgrade.title": "Do you really want to upgrade your world?",
"mco.configure.current.minigame": "Current",
"mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled",
- "mco.configure.world.backup": "World backups",
+ "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": "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.invite": "Invite Player",
"mco.configure.world.buttons.moreoptions": "More options",
- "mco.configure.world.buttons.open": "Open realm",
- "mco.configure.world.buttons.options": "World options",
+ "mco.configure.world.buttons.open": "Open Realm",
+ "mco.configure.world.buttons.options": "World Options",
"mco.configure.world.buttons.players": "Players",
- "mco.configure.world.buttons.resetworld": "Reset world",
+ "mco.configure.world.buttons.resetworld": "Reset World",
"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.line2": "Are you sure you want to continue?",
"mco.configure.world.closing": "Closing the realm...",
- "mco.configure.world.commandBlocks": "Command blocks",
- "mco.configure.world.delete.button": "Delete 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",
"mco.configure.world.delete.question.line2": "Are you sure you want to continue?",
- "mco.configure.world.description": "Realm description",
- "mco.configure.world.edit.slot.name": "World name",
+ "mco.configure.world.description": "Realm Description",
+ "mco.configure.world.edit.slot.name": "World Name",
"mco.configure.world.edit.subscreen.adventuremap": "Some settings are disabled since your current world is an adventure",
"mco.configure.world.edit.subscreen.experience": "Some settings are disabled since your current world is an experience",
"mco.configure.world.edit.subscreen.inspiration": "Some settings are disabled since your current world is an inspiration",
- "mco.configure.world.forceGameMode": "Force game mode",
+ "mco.configure.world.forceGameMode": "Force Game Mode",
"mco.configure.world.invite.narration": "You have %s new invite(s)",
"mco.configure.world.invite.profile.name": "Name",
"mco.configure.world.invited": "Invited",
@@ -4470,7 +4483,7 @@
"mco.configure.world.leave.question.line2": "Are you sure you want to continue?",
"mco.configure.world.location": "Location",
"mco.configure.world.minigame": "Current: %s",
- "mco.configure.world.name": "Realm name",
+ "mco.configure.world.name": "Realm Name",
"mco.configure.world.opening": "Opening the realm...",
"mco.configure.world.players.error": "A player with the provided name does not exist",
"mco.configure.world.players.inviting": "Inviting player...",
@@ -4495,15 +4508,15 @@
"mco.configure.world.spawn_toggle.message": "Turning this option off will REMOVE ALL existing entities of that type",
"mco.configure.world.spawn_toggle.message.npc": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers",
"mco.configure.world.spawn_toggle.title": "Warning!",
- "mco.configure.world.spawnAnimals": "Spawn animals",
- "mco.configure.world.spawnMonsters": "Spawn monsters",
+ "mco.configure.world.spawnAnimals": "Spawn Animals",
+ "mco.configure.world.spawnMonsters": "Spawn Monsters",
"mco.configure.world.spawnNPCs": "Spawn NPCs",
- "mco.configure.world.spawnProtection": "Spawn protection",
+ "mco.configure.world.spawnProtection": "Spawn Protection",
"mco.configure.world.status": "Status",
"mco.configure.world.subscription.day": "day",
"mco.configure.world.subscription.days": "days",
"mco.configure.world.subscription.expired": "Expired",
- "mco.configure.world.subscription.extend": "Extend subscription",
+ "mco.configure.world.subscription.extend": "Extend Subscription",
"mco.configure.world.subscription.less_than_a_day": "Less than a day",
"mco.configure.world.subscription.month": "month",
"mco.configure.world.subscription.months": "months",
@@ -4512,13 +4525,13 @@
"mco.configure.world.subscription.remaining.days": "%1$s day(s)",
"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.timeleft": "Time left",
- "mco.configure.world.subscription.title": "Your subscription",
+ "mco.configure.world.subscription.start": "Start Date",
+ "mco.configure.world.subscription.timeleft": "Time Left",
+ "mco.configure.world.subscription.title": "Your Subscription",
"mco.configure.world.subscription.unknown": "Unknown",
- "mco.configure.world.switch.slot": "Create world",
+ "mco.configure.world.switch.slot": "Create World",
"mco.configure.world.switch.slot.subtitle": "This world is empty, choose how to create your world",
- "mco.configure.world.title": "Configure realm:",
+ "mco.configure.world.title": "Configure Realm:",
"mco.configure.world.uninvite.player": "Are you sure that you want to uninvite '%s'?",
"mco.configure.world.uninvite.question": "Are you sure that you want to uninvite",
"mco.configure.worlds.title": "Worlds",
@@ -4544,9 +4557,9 @@
"mco.download.resourcePack.fail": "Failed to download resource pack!",
"mco.download.speed": "(%s/s)",
"mco.download.speed.narration": "%s/s",
- "mco.download.title": "Downloading latest world",
+ "mco.download.title": "Downloading Latest World",
"mco.error.invalid.session.message": "Please try restarting Minecraft",
- "mco.error.invalid.session.title": "Invalid session",
+ "mco.error.invalid.session.title": "Invalid Session",
"mco.errorMessage.6001": "Client outdated",
"mco.errorMessage.6002": "Terms of service not accepted",
"mco.errorMessage.6003": "Download limit reached",
@@ -4595,15 +4608,15 @@
"mco.question": "Question",
"mco.reset.world.adventure": "Adventures",
"mco.reset.world.experience": "Experiences",
- "mco.reset.world.generate": "New world",
+ "mco.reset.world.generate": "New World",
"mco.reset.world.inspiration": "Inspiration",
"mco.reset.world.resetting.screen.title": "Resetting world...",
"mco.reset.world.seed": "Seed (Optional)",
- "mco.reset.world.template": "World templates",
- "mco.reset.world.title": "Reset world",
+ "mco.reset.world.template": "World Templates",
+ "mco.reset.world.title": "Reset World",
"mco.reset.world.upload": "Upload world",
"mco.reset.world.warning": "This will replace the current world of your realm",
- "mco.selectServer.buy": "Buy a realm!",
+ "mco.selectServer.buy": "Buy a Realm!",
"mco.selectServer.close": "Close",
"mco.selectServer.closed": "Closed realm",
"mco.selectServer.closeserver": "Close realm",
@@ -4632,9 +4645,9 @@
"mco.selectServer.play": "Play",
"mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.",
"mco.selectServer.purchase": "Add Realm",
- "mco.selectServer.trial": "Get a trial!",
+ "mco.selectServer.trial": "Get a Trial!",
"mco.selectServer.uninitialized": "Click to start your new realm!",
- "mco.snapshot.createSnapshotPopup.text": "You are about to create a free Snapshot Realm that will be paired with your paid Realms subscription. This new Snapshot Realm will be accessible for as long as the paid subscription is active. Your paid Realm will not be affected",
+ "mco.snapshot.createSnapshotPopup.text": "You are about to create a free Snapshot Realm that will be paired with your paid Realms subscription. This new Snapshot Realm will be accessible for as long as the paid subscription is active. Your paid Realm will not be affected.",
"mco.snapshot.createSnapshotPopup.title": "Create Snapshot Realm?",
"mco.snapshot.creating": "Creating Snapshot Realm...",
"mco.snapshot.description": "Paired with %s",
@@ -4686,7 +4699,7 @@
"mco.upload.preparing": "Preparing your world",
"mco.upload.select.world.none": "No singleplayer worlds found!",
"mco.upload.select.world.subtitle": "Please select a singleplayer world to upload",
- "mco.upload.select.world.title": "Upload world",
+ "mco.upload.select.world.title": "Upload World",
"mco.upload.size.failure.line1": "'%s' is too big!",
"mco.upload.size.failure.line2": "It is %s. The maximum allowed size is %s.",
"mco.upload.uploading": "Uploading '%s'",
@@ -5001,6 +5014,8 @@
"options.hideLightningFlashes.tooltip": "Prevents Lightning Bolts from making the sky flash. The bolts themselves will still be visible.",
"options.hideMatchedNames": "Hide Matched Names",
"options.hideMatchedNames.tooltip": "3rd-party Servers may send chat messages in non-standard formats.\nWith this option on, hidden players will be matched based on chat sender names.",
+ "options.hideSplashTexts": "Hide Splash Texts",
+ "options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.",
"options.invertMouse": "Invert Mouse",
"options.key.hold": "Hold",
"options.key.toggle": "Toggle",
@@ -5207,6 +5222,21 @@
"recipe.toast.description": "Check your recipe book",
"recipe.toast.title": "New Recipes Unlocked!",
"record.nowPlaying": "Now Playing: %s",
+ "recover_world.bug_tracker": "Report a Bug",
+ "recover_world.button": "Attempt to Recover",
+ "recover_world.done.failed": "Failed to recover from previous state.",
+ "recover_world.done.success": "Recovery was successful!",
+ "recover_world.done.title": "Recovery done",
+ "recover_world.issue.missing_file": "Missing file",
+ "recover_world.issue.none": "No issues",
+ "recover_world.message": "The following issues occured while trying to read world folder \"%s\".\nIt might be possible to restore the world from an older state or you can report this issue on the bug tracker.",
+ "recover_world.no_fallback": "No state to recover from availible",
+ "recover_world.restore": "Attempt to Restore",
+ "recover_world.restoring": "Attempting to restore world...",
+ "recover_world.state_entry": "State from %s: ",
+ "recover_world.state_entry.unknown": "unknown",
+ "recover_world.title": "Failed to load world",
+ "recover_world.warning": "Failed to load world summary",
"resourcePack.broken_assets": "BROKEN ASSETS DETECTED",
"resourcepack.downloading": "Downloading Resource Pack",
"resourcePack.high_contrast.name": "High Contrast",
@@ -5312,6 +5342,10 @@
"selectWorld.import_worldgen_settings.failure": "Error importing settings",
"selectWorld.import_worldgen_settings.select_file": "Select settings file (.json)",
"selectWorld.incompatible_series": "Created by an incompatible version",
+ "selectWorld.incompatible.description": "This world can not be opened in this version.\nIt was last played in version %s.",
+ "selectWorld.incompatible.info": "Incompatible version: %s",
+ "selectWorld.incompatible.title": "Incompatible version",
+ "selectWorld.incompatible.tooltip": "This world can not be opened because it was created by an incompatible version.",
"selectWorld.load_folder_access": "Unable to read or access folder where game worlds are saved!",
"selectWorld.loading_list": "Loading World List",
"selectWorld.locked": "Locked by another running instance of Minecraft",
@@ -5326,6 +5360,7 @@
"selectWorld.recreate.customized.title": "Customized worlds are no longer supported",
"selectWorld.recreate.error.text": "Something went wrong while trying to recreate a world.",
"selectWorld.recreate.error.title": "An error occurred!",
+ "selectWorld.resource_load": "Preparing Resources...",
"selectWorld.resultFolder": "Will be saved in:",
"selectWorld.search": "search for worlds",
"selectWorld.seedInfo": "Leave blank for a random seed",
@@ -5548,9 +5583,11 @@
"subtitles.block.conduit.ambient": "Conduit pulses",
"subtitles.block.conduit.attack.target": "Conduit attacks",
"subtitles.block.conduit.deactivate": "Conduit deactivates",
+ "subtitles.block.crafter.craft": "Crafter crafted",
+ "subtitles.block.crafter.fail": "Crafter failed",
"subtitles.block.decorated_pot.insert": "Decorated Pot fills",
"subtitles.block.decorated_pot.insert_fail": "Decorated Pot wobbles",
- "subtitles.block.decorated_pot.shatter": "Pot shatters",
+ "subtitles.block.decorated_pot.shatter": "Decorated Pot shatters",
"subtitles.block.dispenser.dispense": "Dispensed item",
"subtitles.block.dispenser.fail": "Dispenser failed",
"subtitles.block.door.toggle": "Door creaks",
@@ -6250,6 +6287,7 @@
"symlink_warning.message": "Loading worlds from folders with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.",
"symlink_warning.message.pack": "Loading packs with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.",
"symlink_warning.message.world": "Loading worlds from folders with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.",
+ "symlink_warning.more_info": "More Information",
"symlink_warning.title": "World folder contains symbolic links",
"symlink_warning.title.pack": "Added pack(s) contain(s) symbolic links",
"symlink_warning.title.world": "The world folder contains symbolic links",
diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs
index a59711d2a..2ea663cee 100644
--- a/azalea-physics/src/collision/blocks.rs
+++ b/azalea-physics/src/collision/blocks.rs
@@ -8040,6 +8040,6 @@ impl BlockWithShape for BlockState {
}
fn is_shape_full(&self) -> bool {
- matches!(self.id, 1..=24|79|112..=1687|1998..=2003|2017..=2022|2047..=2062|2091..=2354|2873|4274..=4277|4294..=4301|5734..=5737|5780..=5781|5798|5815..=5816|5849|5851..=5857|5863|5866..=5873|5945..=5960|6537..=6740|6811..=6812|7269..=7270|7272|7415|7417..=7418|7511..=7512|7665|7906..=7918|9223..=9224|9235..=9239|9344..=9371|10364..=10366|10463..=10465|10710..=10711|10716..=10717|10722..=10727|10744..=10746|11079..=11081|11166..=11167|11172..=11173|11178..=11179|11184..=11185|11190..=11191|11196..=11197|11202..=11203|11208..=11209|11214..=11215|11220..=11221|11226..=11227|11232..=11233|11238..=11239|11244..=11245|11250..=11251|11256..=11257|11262..=11263|11268..=11269|11274..=11275|11280..=11281|11286..=11287|11292..=11293|11298..=11299|11304..=11309|12404..=12413|12494|12515..=12548|12550..=12759|12787|12803..=12812|12941|14086..=14087|14092..=14093|14098..=14099|14104..=14105|14110..=14111|14116..=14117|14122..=14123|14128..=14129|14134..=14135|14140..=14141|14146..=14147|14152..=14153|14158..=14159|18404..=18437|18466|18579..=18591|18593|18596..=18608|18610|18666..=18667|18672..=18673|18678..=18679|19356..=19371|19381..=19444|19446..=19454|19459..=19460|19869..=19874|19879..=19880|20285|20370..=20371|20722..=20724|21031..=21032|21081..=21083|21565|21694..=21695|21704..=21713|22038..=22039|22044..=22045|22050..=22051|22056..=22065|22390..=22391|22396..=22397|22402..=22403|22408..=22409|22454|22529|22588|22590..=22593|22678..=22679|23004|23089..=23090|23415|23500..=23501|23826|23911..=23912|24237..=24246|24249..=24257|24259)
+ matches!(self.id, 1..=24|79|112..=1687|1998..=2003|2017..=2022|2047..=2062|2091..=2354|2873|4274..=4277|4294..=4301|5734..=5737|5780..=5781|5798|5815..=5816|5849|5851..=5857|5863|5866..=5873|5945..=5960|6537..=6740|6811..=6812|7269..=7270|7272|7415|7417..=7418|7511..=7512|7665|7906..=7918|9223..=9224|9235..=9239|9344..=9371|10364..=10366|10463..=10465|10710..=10711|10716..=10717|10722..=10727|10744..=10746|11079..=11081|11166..=11167|11172..=11173|11178..=11179|11184..=11185|11190..=11191|11196..=11197|11202..=11203|11208..=11209|11214..=11215|11220..=11221|11226..=11227|11232..=11233|11238..=11239|11244..=11245|11250..=11251|11256..=11257|11262..=11263|11268..=11269|11274..=11275|11280..=11281|11286..=11287|11292..=11293|11298..=11299|11304..=11309|12404..=12413|12494|12515..=12548|12550..=12759|12787|12803..=12812|12941|14086..=14087|14092..=14093|14098..=14099|14104..=14105|14110..=14111|14116..=14117|14122..=14123|14128..=14129|14134..=14135|14140..=14141|14146..=14147|14152..=14153|14158..=14159|18404..=18437|18466|18579..=18591|18593|18596..=18608|18610|18666..=18667|18672..=18673|18678..=18679|19356..=19371|19381..=19444|19446..=19454|19459..=19460|19869..=19874|19879..=19880|20285|20370..=20371|20722..=20724|21031..=21032|21081..=21083|21565|21694..=21695|21704..=21713|22038..=22039|22044..=22045|22050..=22051|22056..=22065|22390..=22391|22396..=22397|22402..=22403|22408..=22409|22454|22529|22588|22590..=22593|22678..=22679|23004|23089..=23090|23415|23500..=23501|23826|23911..=23912|24237..=24246|24249..=24257|24259|24276..=24323)
}
}
diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs
index c806f21d8..ee0c7836a 100755
--- a/azalea-protocol/src/packets/game/mod.rs
+++ b/azalea-protocol/src/packets/game/mod.rs
@@ -126,6 +126,7 @@ pub mod serverbound_configuration_acknowledged_packet;
pub mod serverbound_container_button_click_packet;
pub mod serverbound_container_click_packet;
pub mod serverbound_container_close_packet;
+pub mod serverbound_container_slot_state_changed_packet;
pub mod serverbound_custom_payload_packet;
pub mod serverbound_edit_book_packet;
pub mod serverbound_entity_tag_query;
@@ -186,45 +187,46 @@ declare_state_packets!(
0x0c: serverbound_container_button_click_packet::ServerboundContainerButtonClickPacket,
0x0d: serverbound_container_click_packet::ServerboundContainerClickPacket,
0x0e: serverbound_container_close_packet::ServerboundContainerClosePacket,
- 0x0f: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
- 0x10: serverbound_edit_book_packet::ServerboundEditBookPacket,
- 0x11: serverbound_entity_tag_query::ServerboundEntityTagQuery,
- 0x12: serverbound_interact_packet::ServerboundInteractPacket,
- 0x13: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket,
- 0x14: serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
- 0x15: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket,
- 0x16: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket,
- 0x17: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
- 0x18: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket,
- 0x19: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket,
- 0x1a: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket,
- 0x1b: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket,
- 0x1c: serverbound_pick_item_packet::ServerboundPickItemPacket,
- 0x1d: serverbound_ping_request_packet::ServerboundPingRequestPacket,
- 0x1e: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket,
- 0x1f: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket,
- 0x20: serverbound_player_action_packet::ServerboundPlayerActionPacket,
- 0x21: serverbound_player_command_packet::ServerboundPlayerCommandPacket,
- 0x22: serverbound_player_input_packet::ServerboundPlayerInputPacket,
- 0x23: serverbound_pong_packet::ServerboundPongPacket,
- 0x24: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket,
- 0x25: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket,
- 0x26: serverbound_rename_item_packet::ServerboundRenameItemPacket,
- 0x27: serverbound_resource_pack_packet::ServerboundResourcePackPacket,
- 0x28: serverbound_seen_advancements_packet::ServerboundSeenAdvancementsPacket,
- 0x29: serverbound_select_trade_packet::ServerboundSelectTradePacket,
- 0x2a: serverbound_set_beacon_packet::ServerboundSetBeaconPacket,
- 0x2b: serverbound_set_carried_item_packet::ServerboundSetCarriedItemPacket,
- 0x2c: serverbound_set_command_block_packet::ServerboundSetCommandBlockPacket,
- 0x2d: serverbound_set_command_minecart_packet::ServerboundSetCommandMinecartPacket,
- 0x2e: serverbound_set_creative_mode_slot_packet::ServerboundSetCreativeModeSlotPacket,
- 0x2f: serverbound_set_jigsaw_block_packet::ServerboundSetJigsawBlockPacket,
- 0x30: serverbound_set_structure_block_packet::ServerboundSetStructureBlockPacket,
- 0x31: serverbound_sign_update_packet::ServerboundSignUpdatePacket,
- 0x32: serverbound_swing_packet::ServerboundSwingPacket,
- 0x33: serverbound_teleport_to_entity_packet::ServerboundTeleportToEntityPacket,
- 0x34: serverbound_use_item_on_packet::ServerboundUseItemOnPacket,
- 0x35: serverbound_use_item_packet::ServerboundUseItemPacket,
+ 0x0f: serverbound_container_slot_state_changed_packet::ServerboundContainerSlotStateChangedPacket,
+ 0x10: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
+ 0x11: serverbound_edit_book_packet::ServerboundEditBookPacket,
+ 0x12: serverbound_entity_tag_query::ServerboundEntityTagQuery,
+ 0x13: serverbound_interact_packet::ServerboundInteractPacket,
+ 0x14: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket,
+ 0x15: serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
+ 0x16: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket,
+ 0x17: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket,
+ 0x18: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
+ 0x19: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket,
+ 0x1a: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket,
+ 0x1b: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket,
+ 0x1c: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket,
+ 0x1d: serverbound_pick_item_packet::ServerboundPickItemPacket,
+ 0x1e: serverbound_ping_request_packet::ServerboundPingRequestPacket,
+ 0x1f: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket,
+ 0x20: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket,
+ 0x21: serverbound_player_action_packet::ServerboundPlayerActionPacket,
+ 0x22: serverbound_player_command_packet::ServerboundPlayerCommandPacket,
+ 0x23: serverbound_player_input_packet::ServerboundPlayerInputPacket,
+ 0x24: serverbound_pong_packet::ServerboundPongPacket,
+ 0x25: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket,
+ 0x26: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket,
+ 0x27: serverbound_rename_item_packet::ServerboundRenameItemPacket,
+ 0x28: serverbound_resource_pack_packet::ServerboundResourcePackPacket,
+ 0x29: serverbound_seen_advancements_packet::ServerboundSeenAdvancementsPacket,
+ 0x2a: serverbound_select_trade_packet::ServerboundSelectTradePacket,
+ 0x2b: serverbound_set_beacon_packet::ServerboundSetBeaconPacket,
+ 0x2c: serverbound_set_carried_item_packet::ServerboundSetCarriedItemPacket,
+ 0x2d: serverbound_set_command_block_packet::ServerboundSetCommandBlockPacket,
+ 0x2e: serverbound_set_command_minecart_packet::ServerboundSetCommandMinecartPacket,
+ 0x2f: serverbound_set_creative_mode_slot_packet::ServerboundSetCreativeModeSlotPacket,
+ 0x30: serverbound_set_jigsaw_block_packet::ServerboundSetJigsawBlockPacket,
+ 0x31: serverbound_set_structure_block_packet::ServerboundSetStructureBlockPacket,
+ 0x32: serverbound_sign_update_packet::ServerboundSignUpdatePacket,
+ 0x33: serverbound_swing_packet::ServerboundSwingPacket,
+ 0x34: serverbound_teleport_to_entity_packet::ServerboundTeleportToEntityPacket,
+ 0x35: serverbound_use_item_on_packet::ServerboundUseItemOnPacket,
+ 0x36: serverbound_use_item_packet::ServerboundUseItemPacket,
},
Clientbound => {
0x00: clientbound_bundle_packet::ClientboundBundlePacket,
diff --git a/azalea-protocol/src/packets/game/serverbound_container_slot_state_changed_packet.rs b/azalea-protocol/src/packets/game/serverbound_container_slot_state_changed_packet.rs
new file mode 100644
index 000000000..8a83f4e2c
--- /dev/null
+++ b/azalea-protocol/src/packets/game/serverbound_container_slot_state_changed_packet.rs
@@ -0,0 +1,11 @@
+use azalea_buf::McBuf;
+use azalea_protocol_macros::ServerboundGamePacket;
+
+#[derive(Clone, Debug, McBuf, ServerboundGamePacket)]
+pub struct ServerboundContainerSlotStateChangedPacket {
+ #[var]
+ pub slot_id: u32,
+ #[var]
+ pub container_id: u32,
+ pub new_state: bool,
+}
diff --git a/azalea-protocol/src/packets/login/clientbound_login_disconnect_packet.rs b/azalea-protocol/src/packets/login/clientbound_login_disconnect_packet.rs
index 31cd370da..416ec63b4 100755
--- a/azalea-protocol/src/packets/login/clientbound_login_disconnect_packet.rs
+++ b/azalea-protocol/src/packets/login/clientbound_login_disconnect_packet.rs
@@ -1,8 +1,34 @@
-use azalea_buf::McBuf;
+use std::io::{Cursor, Write};
+
+use azalea_buf::{BufReadError, McBufReadable, McBufWritable};
use azalea_chat::FormattedText;
use azalea_protocol_macros::ClientboundLoginPacket;
+use serde::{Deserialize, Serialize};
-#[derive(Clone, Debug, McBuf, ClientboundLoginPacket)]
+#[derive(Clone, Debug, ClientboundLoginPacket)]
pub struct ClientboundLoginDisconnectPacket {
pub reason: FormattedText,
}
+
+impl McBufReadable for ClientboundLoginDisconnectPacket {
+ fn read_from(
+ buf: &mut Cursor<&[u8]>,
+ ) -> Result {
+ let disconnect_string = String::read_from(buf)?;
+ let disconnect_json: serde_json::Value = serde_json::from_str(disconnect_string.as_str())?;
+
+ Ok(ClientboundLoginDisconnectPacket {
+ reason: FormattedText::deserialize(disconnect_json)?,
+ })
+ }
+}
+
+impl McBufWritable for ClientboundLoginDisconnectPacket {
+ fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ let status_string = FormattedText::serialize(&self.reason, serde_json::value::Serializer)
+ .unwrap()
+ .to_string();
+ status_string.write_into(buf)?;
+ Ok(())
+ }
+}
diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs
index e34032409..f2d784bd5 100755
--- a/azalea-protocol/src/packets/mod.rs
+++ b/azalea-protocol/src/packets/mod.rs
@@ -12,7 +12,7 @@ use std::io::{Cursor, Write};
// TODO: rename the packet files to just like clientbound_add_entity instead of
// clientbound_add_entity_packet
-pub const PROTOCOL_VERSION: u32 = 1073741980;
+pub const PROTOCOL_VERSION: u32 = 1073741981;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ConnectionProtocol {
diff --git a/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs b/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs
index c8b9a208c..332bfdc44 100755
--- a/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs
+++ b/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs
@@ -2,7 +2,7 @@ use azalea_buf::{BufReadError, McBufReadable, McBufWritable};
use azalea_chat::FormattedText;
use azalea_protocol_macros::ClientboundStatusPacket;
use serde::{Deserialize, Serialize};
-use serde_json::{value::Serializer, Value};
+use serde_json::value::Serializer;
use std::io::{Cursor, Write};
#[derive(Clone, Debug, Serialize, Deserialize)]
@@ -43,7 +43,7 @@ pub struct ClientboundStatusResponsePacket {
impl McBufReadable for ClientboundStatusResponsePacket {
fn read_from(buf: &mut Cursor<&[u8]>) -> Result {
let status_string = String::read_from(buf)?;
- let status_json: Value = serde_json::from_str(status_string.as_str())?;
+ let status_json: serde_json::Value = serde_json::from_str(status_string.as_str())?;
Ok(ClientboundStatusResponsePacket::deserialize(status_json)?)
}
diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs
index b3c4df2b3..b9a82e61a 100755
--- a/azalea-registry/src/lib.rs
+++ b/azalea-registry/src/lib.rs
@@ -1184,6 +1184,7 @@ enum Block {
Frogspawn => "minecraft:frogspawn",
ReinforcedDeepslate => "minecraft:reinforced_deepslate",
DecoratedPot => "minecraft:decorated_pot",
+ Crafter => "minecraft:crafter",
}
}
@@ -1233,6 +1234,7 @@ enum BlockEntityKind {
ChiseledBookshelf => "minecraft:chiseled_bookshelf",
BrushableBlock => "minecraft:brushable_block",
DecoratedPot => "minecraft:decorated_pot",
+ Crafter => "minecraft:crafter",
}
}
@@ -2664,6 +2666,7 @@ enum Item {
RedBed => "minecraft:red_bed",
BlackBed => "minecraft:black_bed",
Cookie => "minecraft:cookie",
+ Crafter => "minecraft:crafter",
FilledMap => "minecraft:filled_map",
Shears => "minecraft:shears",
MelonSlice => "minecraft:melon_slice",
@@ -3330,6 +3333,7 @@ enum ParticleKind {
Portal => "minecraft:portal",
Rain => "minecraft:rain",
Smoke => "minecraft:smoke",
+ WhiteSmoke => "minecraft:white_smoke",
Sneeze => "minecraft:sneeze",
Spit => "minecraft:spit",
SquidInk => "minecraft:squid_ink",
@@ -3871,6 +3875,8 @@ enum SoundEvent {
EntityCowHurt => "minecraft:entity.cow.hurt",
EntityCowMilk => "minecraft:entity.cow.milk",
EntityCowStep => "minecraft:entity.cow.step",
+ BlockCrafterCraft => "minecraft:block.crafter.craft",
+ BlockCrafterFail => "minecraft:block.crafter.fail",
EntityCreeperDeath => "minecraft:entity.creeper.death",
EntityCreeperHurt => "minecraft:entity.creeper.hurt",
EntityCreeperPrimed => "minecraft:entity.creeper.primed",
@@ -5510,6 +5516,7 @@ enum MenuKind {
Generic9x5 => "minecraft:generic_9x5",
Generic9x6 => "minecraft:generic_9x6",
Generic3x3 => "minecraft:generic_3x3",
+ Crafter3x3 => "minecraft:crafter_3x3",
Anvil => "minecraft:anvil",
Beacon => "minecraft:beacon",
BlastFurnace => "minecraft:blast_furnace",
@@ -5591,6 +5598,7 @@ enum BlockKind {
CoralFan => "minecraft:coral_fan",
CoralPlant => "minecraft:coral_plant",
CoralWallFan => "minecraft:coral_wall_fan",
+ Crafter => "minecraft:crafter",
CraftingTable => "minecraft:crafting_table",
Crop => "minecraft:crop",
CryingObsidian => "minecraft:crying_obsidian",
@@ -5765,3 +5773,11 @@ enum BlockKind {
WoolCarpet => "minecraft:wool_carpet",
}
}
+
+registry! {
+enum WorldgenPoolAliasBinding {
+ Random => "minecraft:random",
+ RandomGroup => "minecraft:random_group",
+ Direct => "minecraft:direct",
+}
+}