mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 23:44:38 +00:00
1.19.4 (#57)
* 23w03a * 23w04a * 23w05a * 23w06a * fix * 23w07a mojang broke their json data generator so some stuff is missing * didn't mean to commit that file here * 1.19.4-pre2 * fix * 1.19.4-pre3 * fix * how did these packets get here * 1.19.4-pre4 * 1.19.4-rc1 * 1.19.4-rc2 * 1.19.4-rc3 * merge main * remove debugging code * 1.19.4
This commit is contained in:
parent
b792e21d1c
commit
12a9c8ce65
34 changed files with 13171 additions and 11502 deletions
|
@ -9,7 +9,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- The line below is automatically read and updated by the migrate script, so don't change it manually. -->
|
<!-- The line below is automatically read and updated by the migrate script, so don't change it manually. -->
|
||||||
*Currently supported Minecraft version: `1.19.3`.*
|
*Currently supported Minecraft version: `1.19.4`.*
|
||||||
|
|
||||||
## ⚠️ Azalea is still very unfinished, though most crates are in a somewhat useable state
|
## ⚠️ Azalea is still very unfinished, though most crates are in a somewhat useable state
|
||||||
|
|
||||||
|
|
|
@ -404,7 +404,10 @@ pub fn make_block_states(input: TokenStream) -> TokenStream {
|
||||||
&to_pascal_case(&block.name.to_string()),
|
&to_pascal_case(&block.name.to_string()),
|
||||||
proc_macro2::Span::call_site(),
|
proc_macro2::Span::call_site(),
|
||||||
);
|
);
|
||||||
let block_struct_name = Ident::new(&block_name_pascal_case.to_string(), proc_macro2::Span::call_site());
|
let block_struct_name = Ident::new(
|
||||||
|
&block_name_pascal_case.to_string(),
|
||||||
|
proc_macro2::Span::call_site(),
|
||||||
|
);
|
||||||
|
|
||||||
let mut from_block_to_state_match_inner = quote! {};
|
let mut from_block_to_state_match_inner = quote! {};
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,10 @@ make_block_states! {
|
||||||
_0,
|
_0,
|
||||||
_1,
|
_1,
|
||||||
},
|
},
|
||||||
|
"stage" => CherrySaplingStage {
|
||||||
|
_0,
|
||||||
|
_1,
|
||||||
|
},
|
||||||
"stage" => DarkOakSaplingStage {
|
"stage" => DarkOakSaplingStage {
|
||||||
_0,
|
_0,
|
||||||
_1,
|
_1,
|
||||||
|
@ -78,6 +82,12 @@ make_block_states! {
|
||||||
_14,
|
_14,
|
||||||
_15,
|
_15,
|
||||||
},
|
},
|
||||||
|
"dusted" => SuspiciousSandDusted {
|
||||||
|
_0,
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
_3,
|
||||||
|
},
|
||||||
"axis" => Axis {
|
"axis" => Axis {
|
||||||
X,
|
X,
|
||||||
Y,
|
Y,
|
||||||
|
@ -129,6 +139,15 @@ make_block_states! {
|
||||||
_6,
|
_6,
|
||||||
_7,
|
_7,
|
||||||
},
|
},
|
||||||
|
"distance" => CherryLeavesDistance {
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
_3,
|
||||||
|
_4,
|
||||||
|
_5,
|
||||||
|
_6,
|
||||||
|
_7,
|
||||||
|
},
|
||||||
"distance" => DarkOakLeavesDistance {
|
"distance" => DarkOakLeavesDistance {
|
||||||
_1,
|
_1,
|
||||||
_2,
|
_2,
|
||||||
|
@ -433,6 +452,24 @@ make_block_states! {
|
||||||
_14,
|
_14,
|
||||||
_15,
|
_15,
|
||||||
},
|
},
|
||||||
|
"rotation" => CherrySignRotation {
|
||||||
|
_0,
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
_3,
|
||||||
|
_4,
|
||||||
|
_5,
|
||||||
|
_6,
|
||||||
|
_7,
|
||||||
|
_8,
|
||||||
|
_9,
|
||||||
|
_10,
|
||||||
|
_11,
|
||||||
|
_12,
|
||||||
|
_13,
|
||||||
|
_14,
|
||||||
|
_15,
|
||||||
|
},
|
||||||
"rotation" => JungleSignRotation {
|
"rotation" => JungleSignRotation {
|
||||||
_0,
|
_0,
|
||||||
_1,
|
_1,
|
||||||
|
@ -595,6 +632,24 @@ make_block_states! {
|
||||||
_14,
|
_14,
|
||||||
_15,
|
_15,
|
||||||
},
|
},
|
||||||
|
"rotation" => CherryHangingSignRotation {
|
||||||
|
_0,
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
_3,
|
||||||
|
_4,
|
||||||
|
_5,
|
||||||
|
_6,
|
||||||
|
_7,
|
||||||
|
_8,
|
||||||
|
_9,
|
||||||
|
_10,
|
||||||
|
_11,
|
||||||
|
_12,
|
||||||
|
_13,
|
||||||
|
_14,
|
||||||
|
_15,
|
||||||
|
},
|
||||||
"rotation" => JungleHangingSignRotation {
|
"rotation" => JungleHangingSignRotation {
|
||||||
_0,
|
_0,
|
||||||
_1,
|
_1,
|
||||||
|
@ -1379,6 +1434,11 @@ make_block_states! {
|
||||||
_4,
|
_4,
|
||||||
_5,
|
_5,
|
||||||
},
|
},
|
||||||
|
"age" => TorchflowerCropAge {
|
||||||
|
_0,
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
},
|
||||||
"age" => BeetrootsAge {
|
"age" => BeetrootsAge {
|
||||||
_0,
|
_0,
|
||||||
_1,
|
_1,
|
||||||
|
@ -1809,6 +1869,12 @@ make_block_states! {
|
||||||
_25,
|
_25,
|
||||||
},
|
},
|
||||||
"berries" => bool,
|
"berries" => bool,
|
||||||
|
"flower_amount" => PinkPetalsAmount {
|
||||||
|
_1,
|
||||||
|
_2,
|
||||||
|
_3,
|
||||||
|
_4,
|
||||||
|
},
|
||||||
"tilt" => Tilt {
|
"tilt" => Tilt {
|
||||||
None,
|
None,
|
||||||
Unstable,
|
Unstable,
|
||||||
|
@ -1844,6 +1910,7 @@ make_block_states! {
|
||||||
birch_planks => BlockBehavior::default(), {},
|
birch_planks => BlockBehavior::default(), {},
|
||||||
jungle_planks => BlockBehavior::default(), {},
|
jungle_planks => BlockBehavior::default(), {},
|
||||||
acacia_planks => BlockBehavior::default(), {},
|
acacia_planks => BlockBehavior::default(), {},
|
||||||
|
cherry_planks => BlockBehavior::default(), {},
|
||||||
dark_oak_planks => BlockBehavior::default(), {},
|
dark_oak_planks => BlockBehavior::default(), {},
|
||||||
mangrove_planks => BlockBehavior::default(), {},
|
mangrove_planks => BlockBehavior::default(), {},
|
||||||
bamboo_planks => BlockBehavior::default(), {},
|
bamboo_planks => BlockBehavior::default(), {},
|
||||||
|
@ -1863,6 +1930,9 @@ make_block_states! {
|
||||||
acacia_sapling => BlockBehavior::default(), {
|
acacia_sapling => BlockBehavior::default(), {
|
||||||
stage: AcaciaSaplingStage::_0,
|
stage: AcaciaSaplingStage::_0,
|
||||||
},
|
},
|
||||||
|
cherry_sapling => BlockBehavior::default(), {
|
||||||
|
stage: CherrySaplingStage::_0,
|
||||||
|
},
|
||||||
dark_oak_sapling => BlockBehavior::default(), {
|
dark_oak_sapling => BlockBehavior::default(), {
|
||||||
stage: DarkOakSaplingStage::_0,
|
stage: DarkOakSaplingStage::_0,
|
||||||
},
|
},
|
||||||
|
@ -1880,6 +1950,9 @@ make_block_states! {
|
||||||
level: LavaLevel::_0,
|
level: LavaLevel::_0,
|
||||||
},
|
},
|
||||||
sand => BlockBehavior::default(), {},
|
sand => BlockBehavior::default(), {},
|
||||||
|
suspicious_sand => BlockBehavior::default(), {
|
||||||
|
dusted: SuspiciousSandDusted::_0,
|
||||||
|
},
|
||||||
red_sand => BlockBehavior::default(), {},
|
red_sand => BlockBehavior::default(), {},
|
||||||
gravel => BlockBehavior::default(), {},
|
gravel => BlockBehavior::default(), {},
|
||||||
gold_ore => BlockBehavior::default(), {},
|
gold_ore => BlockBehavior::default(), {},
|
||||||
|
@ -1904,6 +1977,9 @@ make_block_states! {
|
||||||
acacia_log => BlockBehavior::default(), {
|
acacia_log => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
cherry_log => BlockBehavior::default(), {
|
||||||
|
axis: Axis::Y,
|
||||||
|
},
|
||||||
dark_oak_log => BlockBehavior::default(), {
|
dark_oak_log => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
@ -1931,6 +2007,9 @@ make_block_states! {
|
||||||
stripped_acacia_log => BlockBehavior::default(), {
|
stripped_acacia_log => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
stripped_cherry_log => BlockBehavior::default(), {
|
||||||
|
axis: Axis::Y,
|
||||||
|
},
|
||||||
stripped_dark_oak_log => BlockBehavior::default(), {
|
stripped_dark_oak_log => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
@ -1958,6 +2037,9 @@ make_block_states! {
|
||||||
acacia_wood => BlockBehavior::default(), {
|
acacia_wood => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
cherry_wood => BlockBehavior::default(), {
|
||||||
|
axis: Axis::Y,
|
||||||
|
},
|
||||||
dark_oak_wood => BlockBehavior::default(), {
|
dark_oak_wood => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
@ -1979,6 +2061,9 @@ make_block_states! {
|
||||||
stripped_acacia_wood => BlockBehavior::default(), {
|
stripped_acacia_wood => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
stripped_cherry_wood => BlockBehavior::default(), {
|
||||||
|
axis: Axis::Y,
|
||||||
|
},
|
||||||
stripped_dark_oak_wood => BlockBehavior::default(), {
|
stripped_dark_oak_wood => BlockBehavior::default(), {
|
||||||
axis: Axis::Y,
|
axis: Axis::Y,
|
||||||
},
|
},
|
||||||
|
@ -2010,6 +2095,11 @@ make_block_states! {
|
||||||
persistent: false,
|
persistent: false,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_leaves => BlockBehavior::default(), {
|
||||||
|
distance: CherryLeavesDistance::_7,
|
||||||
|
persistent: false,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
dark_oak_leaves => BlockBehavior::default(), {
|
dark_oak_leaves => BlockBehavior::default(), {
|
||||||
distance: DarkOakLeavesDistance::_7,
|
distance: DarkOakLeavesDistance::_7,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
|
@ -2180,6 +2270,7 @@ make_block_states! {
|
||||||
facing: FacingCubic::North,
|
facing: FacingCubic::North,
|
||||||
},
|
},
|
||||||
dandelion => BlockBehavior::default(), {},
|
dandelion => BlockBehavior::default(), {},
|
||||||
|
torchflower => BlockBehavior::default(), {},
|
||||||
poppy => BlockBehavior::default(), {},
|
poppy => BlockBehavior::default(), {},
|
||||||
blue_orchid => BlockBehavior::default(), {},
|
blue_orchid => BlockBehavior::default(), {},
|
||||||
allium => BlockBehavior::default(), {},
|
allium => BlockBehavior::default(), {},
|
||||||
|
@ -2274,6 +2365,10 @@ make_block_states! {
|
||||||
rotation: AcaciaSignRotation::_0,
|
rotation: AcaciaSignRotation::_0,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_sign => BlockBehavior::default(), {
|
||||||
|
rotation: CherrySignRotation::_0,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
jungle_sign => BlockBehavior::default(), {
|
jungle_sign => BlockBehavior::default(), {
|
||||||
rotation: JungleSignRotation::_0,
|
rotation: JungleSignRotation::_0,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
|
@ -2327,6 +2422,10 @@ make_block_states! {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_wall_sign => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
jungle_wall_sign => BlockBehavior::default(), {
|
jungle_wall_sign => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
|
@ -2363,6 +2462,11 @@ make_block_states! {
|
||||||
rotation: AcaciaHangingSignRotation::_0,
|
rotation: AcaciaHangingSignRotation::_0,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_hanging_sign => BlockBehavior::default(), {
|
||||||
|
attached: false,
|
||||||
|
rotation: CherryHangingSignRotation::_0,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
jungle_hanging_sign => BlockBehavior::default(), {
|
jungle_hanging_sign => BlockBehavior::default(), {
|
||||||
attached: false,
|
attached: false,
|
||||||
rotation: JungleHangingSignRotation::_0,
|
rotation: JungleHangingSignRotation::_0,
|
||||||
|
@ -2409,6 +2513,10 @@ make_block_states! {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_wall_hanging_sign => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
jungle_wall_hanging_sign => BlockBehavior::default(), {
|
jungle_wall_hanging_sign => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
|
@ -2463,6 +2571,9 @@ make_block_states! {
|
||||||
acacia_pressure_plate => BlockBehavior::default(), {
|
acacia_pressure_plate => BlockBehavior::default(), {
|
||||||
powered: false,
|
powered: false,
|
||||||
},
|
},
|
||||||
|
cherry_pressure_plate => BlockBehavior::default(), {
|
||||||
|
powered: false,
|
||||||
|
},
|
||||||
dark_oak_pressure_plate => BlockBehavior::default(), {
|
dark_oak_pressure_plate => BlockBehavior::default(), {
|
||||||
powered: false,
|
powered: false,
|
||||||
},
|
},
|
||||||
|
@ -2596,6 +2707,13 @@ make_block_states! {
|
||||||
powered: false,
|
powered: false,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_trapdoor => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
half: TopBottom::Bottom,
|
||||||
|
open: false,
|
||||||
|
powered: false,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
dark_oak_trapdoor => BlockBehavior::default(), {
|
dark_oak_trapdoor => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
half: TopBottom::Bottom,
|
half: TopBottom::Bottom,
|
||||||
|
@ -2840,11 +2958,13 @@ make_block_states! {
|
||||||
west: WestWall::None,
|
west: WestWall::None,
|
||||||
},
|
},
|
||||||
flower_pot => BlockBehavior::default(), {},
|
flower_pot => BlockBehavior::default(), {},
|
||||||
|
potted_torchflower => BlockBehavior::default(), {},
|
||||||
potted_oak_sapling => BlockBehavior::default(), {},
|
potted_oak_sapling => BlockBehavior::default(), {},
|
||||||
potted_spruce_sapling => BlockBehavior::default(), {},
|
potted_spruce_sapling => BlockBehavior::default(), {},
|
||||||
potted_birch_sapling => BlockBehavior::default(), {},
|
potted_birch_sapling => BlockBehavior::default(), {},
|
||||||
potted_jungle_sapling => BlockBehavior::default(), {},
|
potted_jungle_sapling => BlockBehavior::default(), {},
|
||||||
potted_acacia_sapling => BlockBehavior::default(), {},
|
potted_acacia_sapling => BlockBehavior::default(), {},
|
||||||
|
potted_cherry_sapling => BlockBehavior::default(), {},
|
||||||
potted_dark_oak_sapling => BlockBehavior::default(), {},
|
potted_dark_oak_sapling => BlockBehavior::default(), {},
|
||||||
potted_mangrove_propagule => BlockBehavior::default(), {},
|
potted_mangrove_propagule => BlockBehavior::default(), {},
|
||||||
potted_fern => BlockBehavior::default(), {},
|
potted_fern => BlockBehavior::default(), {},
|
||||||
|
@ -2896,6 +3016,11 @@ make_block_states! {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
powered: false,
|
powered: false,
|
||||||
},
|
},
|
||||||
|
cherry_button => BlockBehavior::default(), {
|
||||||
|
face: Face::Wall,
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
powered: false,
|
||||||
|
},
|
||||||
dark_oak_button => BlockBehavior::default(), {
|
dark_oak_button => BlockBehavior::default(), {
|
||||||
face: Face::Wall,
|
face: Face::Wall,
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
|
@ -3142,6 +3267,12 @@ make_block_states! {
|
||||||
shape: StairShape::Straight,
|
shape: StairShape::Straight,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_stairs => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
half: TopBottom::Bottom,
|
||||||
|
shape: StairShape::Straight,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
dark_oak_stairs => BlockBehavior::default(), {
|
dark_oak_stairs => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
half: TopBottom::Bottom,
|
half: TopBottom::Bottom,
|
||||||
|
@ -3378,6 +3509,10 @@ make_block_states! {
|
||||||
kind: Type::Bottom,
|
kind: Type::Bottom,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
|
cherry_slab => BlockBehavior::default(), {
|
||||||
|
kind: Type::Bottom,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
dark_oak_slab => BlockBehavior::default(), {
|
dark_oak_slab => BlockBehavior::default(), {
|
||||||
kind: Type::Bottom,
|
kind: Type::Bottom,
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
|
@ -3478,6 +3613,12 @@ make_block_states! {
|
||||||
open: false,
|
open: false,
|
||||||
powered: false,
|
powered: false,
|
||||||
},
|
},
|
||||||
|
cherry_fence_gate => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
in_wall: false,
|
||||||
|
open: false,
|
||||||
|
powered: false,
|
||||||
|
},
|
||||||
dark_oak_fence_gate => BlockBehavior::default(), {
|
dark_oak_fence_gate => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
in_wall: false,
|
in_wall: false,
|
||||||
|
@ -3524,6 +3665,13 @@ make_block_states! {
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
west: false,
|
west: false,
|
||||||
},
|
},
|
||||||
|
cherry_fence => BlockBehavior::default(), {
|
||||||
|
east: false,
|
||||||
|
north: false,
|
||||||
|
south: false,
|
||||||
|
waterlogged: false,
|
||||||
|
west: false,
|
||||||
|
},
|
||||||
dark_oak_fence => BlockBehavior::default(), {
|
dark_oak_fence => BlockBehavior::default(), {
|
||||||
east: false,
|
east: false,
|
||||||
north: false,
|
north: false,
|
||||||
|
@ -3573,6 +3721,13 @@ make_block_states! {
|
||||||
open: false,
|
open: false,
|
||||||
powered: false,
|
powered: false,
|
||||||
},
|
},
|
||||||
|
cherry_door => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
half: Half::Lower,
|
||||||
|
hinge: Hinge::Left,
|
||||||
|
open: false,
|
||||||
|
powered: false,
|
||||||
|
},
|
||||||
dark_oak_door => BlockBehavior::default(), {
|
dark_oak_door => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
half: Half::Lower,
|
half: Half::Lower,
|
||||||
|
@ -3619,6 +3774,9 @@ make_block_states! {
|
||||||
waterlogged: false,
|
waterlogged: false,
|
||||||
},
|
},
|
||||||
end_stone_bricks => BlockBehavior::default(), {},
|
end_stone_bricks => BlockBehavior::default(), {},
|
||||||
|
torchflower_crop => BlockBehavior::default(), {
|
||||||
|
age: TorchflowerCropAge::_0,
|
||||||
|
},
|
||||||
beetroots => BlockBehavior::default(), {
|
beetroots => BlockBehavior::default(), {
|
||||||
age: BeetrootsAge::_0,
|
age: BeetrootsAge::_0,
|
||||||
},
|
},
|
||||||
|
@ -4773,6 +4931,10 @@ make_block_states! {
|
||||||
azalea => BlockBehavior::default(), {},
|
azalea => BlockBehavior::default(), {},
|
||||||
flowering_azalea => BlockBehavior::default(), {},
|
flowering_azalea => BlockBehavior::default(), {},
|
||||||
moss_carpet => BlockBehavior::default(), {},
|
moss_carpet => BlockBehavior::default(), {},
|
||||||
|
pink_petals => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
flower_amount: PinkPetalsAmount::_1,
|
||||||
|
},
|
||||||
moss_block => BlockBehavior::default(), {},
|
moss_block => BlockBehavior::default(), {},
|
||||||
big_dripleaf => BlockBehavior::default(), {
|
big_dripleaf => BlockBehavior::default(), {
|
||||||
facing: FacingCardinal::North,
|
facing: FacingCardinal::North,
|
||||||
|
@ -4895,5 +5057,9 @@ make_block_states! {
|
||||||
},
|
},
|
||||||
frogspawn => BlockBehavior::default(), {},
|
frogspawn => BlockBehavior::default(), {},
|
||||||
reinforced_deepslate => BlockBehavior::default(), {},
|
reinforced_deepslate => BlockBehavior::default(), {},
|
||||||
|
decorated_pot => BlockBehavior::default(), {
|
||||||
|
facing: FacingCardinal::North,
|
||||||
|
waterlogged: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -481,6 +481,10 @@ fn process_packet_events(ecs: &mut World) {
|
||||||
|
|
||||||
partial_world.chunks.view_center = ChunkPos::new(p.x, p.z);
|
partial_world.chunks.view_center = ChunkPos::new(p.x, p.z);
|
||||||
}
|
}
|
||||||
|
ClientboundGamePacket::ChunksBiomes(_) => {}
|
||||||
|
ClientboundGamePacket::LightUpdate(_p) => {
|
||||||
|
// debug!("Got light update packet {:?}", p);
|
||||||
|
}
|
||||||
ClientboundGamePacket::LevelChunkWithLight(p) => {
|
ClientboundGamePacket::LevelChunkWithLight(p) => {
|
||||||
debug!("Got chunk with light packet {} {}", p.x, p.z);
|
debug!("Got chunk with light packet {} {}", p.x, p.z);
|
||||||
let pos = ChunkPos::new(p.x, p.z);
|
let pos = ChunkPos::new(p.x, p.z);
|
||||||
|
@ -528,9 +532,6 @@ fn process_packet_events(ecs: &mut World) {
|
||||||
error!("Couldn't set chunk data: {}", e);
|
error!("Couldn't set chunk data: {}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClientboundGamePacket::LightUpdate(_p) => {
|
|
||||||
// debug!("Got light update packet {:?}", p);
|
|
||||||
}
|
|
||||||
ClientboundGamePacket::AddEntity(p) => {
|
ClientboundGamePacket::AddEntity(p) => {
|
||||||
debug!("Got add entity packet {:?}", p);
|
debug!("Got add entity packet {:?}", p);
|
||||||
|
|
||||||
|
@ -908,6 +909,7 @@ fn process_packet_events(ecs: &mut World) {
|
||||||
|
|
||||||
system_state.apply(ecs);
|
system_state.apply(ecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientboundGamePacket::SelectAdvancementsTab(_) => {}
|
ClientboundGamePacket::SelectAdvancementsTab(_) => {}
|
||||||
ClientboundGamePacket::SetActionBarText(_) => {}
|
ClientboundGamePacket::SetActionBarText(_) => {}
|
||||||
ClientboundGamePacket::SetBorderCenter(_) => {}
|
ClientboundGamePacket::SetBorderCenter(_) => {}
|
||||||
|
@ -933,6 +935,9 @@ fn process_packet_events(ecs: &mut World) {
|
||||||
ClientboundGamePacket::DisguisedChat(_) => {}
|
ClientboundGamePacket::DisguisedChat(_) => {}
|
||||||
ClientboundGamePacket::UpdateEnabledFeatures(_) => {}
|
ClientboundGamePacket::UpdateEnabledFeatures(_) => {}
|
||||||
ClientboundGamePacket::ContainerClose(_) => {}
|
ClientboundGamePacket::ContainerClose(_) => {}
|
||||||
|
ClientboundGamePacket::Bundle(_) => {}
|
||||||
|
ClientboundGamePacket::DamageEvent(_) => {}
|
||||||
|
ClientboundGamePacket::HurtAnimation(_) => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,7 +150,7 @@ impl BlockPos {
|
||||||
|
|
||||||
/// Chunk coordinates are used to represent where a chunk is in the world. You
|
/// Chunk coordinates are used to represent where a chunk is in the world. You
|
||||||
/// can convert the x and z to block coordinates by multiplying them by 16.
|
/// can convert the x and z to block coordinates by multiplying them by 16.
|
||||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
|
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, McBuf)]
|
||||||
pub struct ChunkPos {
|
pub struct ChunkPos {
|
||||||
pub x: i32,
|
pub x: i32,
|
||||||
pub z: i32,
|
pub z: i32,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -49,7 +49,6 @@ const PROXY_PLAYERS: Players = Players {
|
||||||
sample: Vec::new(),
|
sample: Vec::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
const PROXY_PREVIEWS_CHAT: Option<bool> = Some(false);
|
|
||||||
const PROXY_SECURE_CHAT: Option<bool> = Some(false);
|
const PROXY_SECURE_CHAT: Option<bool> = Some(false);
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
@ -108,7 +107,6 @@ async fn handle_connection(stream: TcpStream) -> anyhow::Result<()> {
|
||||||
favicon: PROXY_FAVICON.clone(),
|
favicon: PROXY_FAVICON.clone(),
|
||||||
players: PROXY_PLAYERS.clone(),
|
players: PROXY_PLAYERS.clone(),
|
||||||
version: PROXY_VERSION.clone(),
|
version: PROXY_VERSION.clone(),
|
||||||
previews_chat: PROXY_PREVIEWS_CHAT,
|
|
||||||
enforces_secure_chat: PROXY_SECURE_CHAT,
|
enforces_secure_chat: PROXY_SECURE_CHAT,
|
||||||
}
|
}
|
||||||
.get(),
|
.get(),
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
use azalea_buf::McBuf;
|
||||||
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
|
pub struct ClientboundBundlePacket {}
|
|
@ -1,7 +1,14 @@
|
||||||
use azalea_protocol_macros::ClientboundGamePacket;
|
|
||||||
use azalea_buf::McBuf;
|
use azalea_buf::McBuf;
|
||||||
|
use azalea_core::ChunkPos;
|
||||||
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
pub struct ClientboundChunksBiomesPacket {
|
pub struct ClientboundChunksBiomesPacket {
|
||||||
pub chunk_biome_data: todo!(),
|
pub chunk_biome_data: Vec<ChunkBiomeData>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf)]
|
||||||
|
pub struct ChunkBiomeData {
|
||||||
|
pub pos: ChunkPos,
|
||||||
|
pub buffer: Vec<u8>,
|
||||||
}
|
}
|
|
@ -1,13 +1,10 @@
|
||||||
use azalea_buf::BufReadError;
|
use azalea_buf::{
|
||||||
use azalea_buf::McBuf;
|
BufReadError, McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable,
|
||||||
use azalea_buf::McBufVarReadable;
|
};
|
||||||
use azalea_buf::{McBufReadable, McBufVarWritable, McBufWritable};
|
use azalea_core::{FixedBitSet, ResourceLocation};
|
||||||
use azalea_core::FixedBitSet;
|
|
||||||
use azalea_core::ResourceLocation;
|
|
||||||
use azalea_protocol_macros::ClientboundGamePacket;
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use std::io::Cursor;
|
use std::io::{Cursor, Write};
|
||||||
use std::io::Write;
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
pub struct ClientboundCommandsPacket {
|
pub struct ClientboundCommandsPacket {
|
||||||
|
@ -137,13 +134,14 @@ pub enum BrigadierParser {
|
||||||
FloatRange,
|
FloatRange,
|
||||||
Dimension,
|
Dimension,
|
||||||
GameMode,
|
GameMode,
|
||||||
Time,
|
Time { min: i32 },
|
||||||
ResourceOrTag { registry_key: ResourceLocation },
|
ResourceOrTag { registry_key: ResourceLocation },
|
||||||
ResourceOrTagKey { registry_key: ResourceLocation },
|
ResourceOrTagKey { registry_key: ResourceLocation },
|
||||||
Resource { registry_key: ResourceLocation },
|
Resource { registry_key: ResourceLocation },
|
||||||
ResourceKey { registry_key: ResourceLocation },
|
ResourceKey { registry_key: ResourceLocation },
|
||||||
TemplateMirror,
|
TemplateMirror,
|
||||||
TemplateRotation,
|
TemplateRotation,
|
||||||
|
Heightmap,
|
||||||
Uuid,
|
Uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
use azalea_buf::McBuf;
|
||||||
|
use azalea_core::ResourceLocation;
|
||||||
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
|
pub struct ClientboundCustomSoundPacket {
|
||||||
|
pub name: ResourceLocation,
|
||||||
|
pub source: SoundSource,
|
||||||
|
pub x: i32,
|
||||||
|
pub y: i32,
|
||||||
|
pub z: i32,
|
||||||
|
pub volume: f32,
|
||||||
|
pub pitch: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(McBuf, Clone, Copy, Debug)]
|
||||||
|
pub enum SoundSource {
|
||||||
|
Master = 0,
|
||||||
|
Music = 1,
|
||||||
|
Records = 2,
|
||||||
|
Weather = 3,
|
||||||
|
Blocks = 4,
|
||||||
|
Hostile = 5,
|
||||||
|
Neutral = 6,
|
||||||
|
Players = 7,
|
||||||
|
Ambient = 8,
|
||||||
|
Voice = 9,
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
use std::io::{Cursor, Write};
|
||||||
|
|
||||||
|
use azalea_buf::{McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable};
|
||||||
|
use azalea_core::Vec3;
|
||||||
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
|
pub struct ClientboundDamageEventPacket {
|
||||||
|
#[var]
|
||||||
|
pub entity_id: u32,
|
||||||
|
#[var]
|
||||||
|
pub source_type_id: u32,
|
||||||
|
pub source_cause_id: OptionalEntityId,
|
||||||
|
pub source_direct_id: OptionalEntityId,
|
||||||
|
pub source_position: Option<Vec3>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct OptionalEntityId(pub u32);
|
||||||
|
impl McBufReadable for OptionalEntityId {
|
||||||
|
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
|
||||||
|
Ok(OptionalEntityId(u32::var_read_from(buf)? - 1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl McBufWritable for OptionalEntityId {
|
||||||
|
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
|
||||||
|
(self.0 + 1).var_write_into(buf)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
use azalea_buf::McBuf;
|
||||||
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
|
pub struct ClientboundHurtAnimationPacket {
|
||||||
|
#[var]
|
||||||
|
pub id: u32,
|
||||||
|
pub yaw: f32,
|
||||||
|
}
|
|
@ -95,10 +95,16 @@ pub mod registry {
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
pub struct RegistryRoot {
|
pub struct RegistryRoot {
|
||||||
|
#[cfg(feature = "strict_registry")]
|
||||||
|
#[serde(rename = "minecraft:trim_material")]
|
||||||
|
pub trim_material: RegistryType<TrimMaterialElement>,
|
||||||
|
#[cfg(not(feature = "strict_registry"))]
|
||||||
|
#[serde(rename = "minecraft:trim_material")]
|
||||||
|
pub trim_material: Tag,
|
||||||
|
|
||||||
#[cfg(feature = "strict_registry")]
|
#[cfg(feature = "strict_registry")]
|
||||||
#[serde(rename = "minecraft:chat_type")]
|
#[serde(rename = "minecraft:chat_type")]
|
||||||
pub chat_type: RegistryType<ChatTypeElement>,
|
pub chat_type: RegistryType<ChatTypeElement>,
|
||||||
|
|
||||||
#[cfg(not(feature = "strict_registry"))]
|
#[cfg(not(feature = "strict_registry"))]
|
||||||
#[serde(rename = "minecraft:chat_type")]
|
#[serde(rename = "minecraft:chat_type")]
|
||||||
pub chat_type: Tag,
|
pub chat_type: Tag,
|
||||||
|
@ -109,10 +115,23 @@ pub mod registry {
|
||||||
#[cfg(feature = "strict_registry")]
|
#[cfg(feature = "strict_registry")]
|
||||||
#[serde(rename = "minecraft:worldgen/biome")]
|
#[serde(rename = "minecraft:worldgen/biome")]
|
||||||
pub world_type: RegistryType<WorldTypeElement>,
|
pub world_type: RegistryType<WorldTypeElement>,
|
||||||
|
|
||||||
#[cfg(not(feature = "strict_registry"))]
|
#[cfg(not(feature = "strict_registry"))]
|
||||||
#[serde(rename = "minecraft:worldgen/biome")]
|
#[serde(rename = "minecraft:worldgen/biome")]
|
||||||
pub world_type: Tag,
|
pub world_type: Tag,
|
||||||
|
|
||||||
|
#[cfg(feature = "strict_registry")]
|
||||||
|
#[serde(rename = "minecraft:trim_pattern")]
|
||||||
|
pub trim_pattern: RegistryType<TrimPatternElement>,
|
||||||
|
#[cfg(not(feature = "strict_registry"))]
|
||||||
|
#[serde(rename = "minecraft:trim_pattern")]
|
||||||
|
pub trim_pattern: Tag,
|
||||||
|
|
||||||
|
#[cfg(feature = "strict_registry")]
|
||||||
|
#[serde(rename = "minecraft:damage_type")]
|
||||||
|
pub damage_type: RegistryType<DamageTypeElement>,
|
||||||
|
#[cfg(not(feature = "strict_registry"))]
|
||||||
|
#[serde(rename = "minecraft:damage_type")]
|
||||||
|
pub damage_type: Tag,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A collection of values for a certain type of registry data.
|
/// A collection of values for a certain type of registry data.
|
||||||
|
@ -133,6 +152,18 @@ pub mod registry {
|
||||||
pub element: T,
|
pub element: T,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
|
pub struct TrimMaterialElement {
|
||||||
|
pub asset_name: String,
|
||||||
|
pub ingredient: ResourceLocation,
|
||||||
|
pub item_model_index: f32,
|
||||||
|
pub override_armor_materials: HashMap<String, String>,
|
||||||
|
#[serde(default)]
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub description: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
/// Data about a kind of chat message
|
/// Data about a kind of chat message
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
|
@ -259,12 +290,13 @@ pub mod registry {
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
pub struct WorldTypeElement {
|
pub struct WorldTypeElement {
|
||||||
|
#[serde(with = "Convert")]
|
||||||
|
pub has_precipitation: bool,
|
||||||
pub temperature: f32,
|
pub temperature: f32,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub temperature_modifier: Option<String>,
|
pub temperature_modifier: Option<String>,
|
||||||
pub downfall: f32,
|
pub downfall: f32,
|
||||||
pub precipitation: BiomePrecipitation,
|
|
||||||
pub effects: BiomeEffects,
|
pub effects: BiomeEffects,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,7 +341,7 @@ pub mod registry {
|
||||||
pub additions_sound: Option<AdditionsSound>,
|
pub additions_sound: Option<AdditionsSound>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub ambient_sound: Option<SoundId>,
|
pub ambient_sound: Option<ResourceLocation>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub particle: Option<BiomeParticle>,
|
pub particle: Option<BiomeParticle>,
|
||||||
|
@ -325,7 +357,7 @@ pub mod registry {
|
||||||
pub replace_current_music: bool,
|
pub replace_current_music: bool,
|
||||||
pub max_delay: u32,
|
pub max_delay: u32,
|
||||||
pub min_delay: u32,
|
pub min_delay: u32,
|
||||||
pub sound: SoundId,
|
pub sound: azalea_registry::SoundEvent,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
@ -334,21 +366,14 @@ pub mod registry {
|
||||||
pub tick_delay: u32,
|
pub tick_delay: u32,
|
||||||
pub block_search_extent: u32,
|
pub block_search_extent: u32,
|
||||||
pub offset: f32,
|
pub offset: f32,
|
||||||
pub sound: SoundId,
|
pub sound: azalea_registry::SoundEvent,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
pub struct AdditionsSound {
|
pub struct AdditionsSound {
|
||||||
pub tick_chance: f32,
|
pub tick_chance: f32,
|
||||||
pub sound: SoundId,
|
pub sound: azalea_registry::SoundEvent,
|
||||||
}
|
|
||||||
|
|
||||||
/// The ID of a sound.
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
||||||
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
|
||||||
pub struct SoundId {
|
|
||||||
pub sound_id: azalea_registry::SoundEvent,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Biome particles.
|
/// Biome particles.
|
||||||
|
@ -361,6 +386,27 @@ pub mod registry {
|
||||||
pub options: HashMap<String, String>,
|
pub options: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
|
pub struct TrimPatternElement {
|
||||||
|
#[serde(flatten)]
|
||||||
|
pub pattern: HashMap<String, String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "strict_registry", serde(deny_unknown_fields))]
|
||||||
|
pub struct DamageTypeElement {
|
||||||
|
pub message_id: String,
|
||||||
|
pub scaling: String,
|
||||||
|
pub exhaustion: f32,
|
||||||
|
#[serde(default)]
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub effects: Option<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub death_message_type: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
// Using a trait because you can't implement methods for
|
// Using a trait because you can't implement methods for
|
||||||
// types you don't own, in this case Option<bool> and bool.
|
// types you don't own, in this case Option<bool> and bool.
|
||||||
trait Convert: Sized {
|
trait Convert: Sized {
|
||||||
|
@ -443,12 +489,15 @@ mod tests {
|
||||||
// This is just for testing.
|
// This is just for testing.
|
||||||
let registry = RegistryHolder {
|
let registry = RegistryHolder {
|
||||||
root: RegistryRoot {
|
root: RegistryRoot {
|
||||||
|
trim_material: Tag::End,
|
||||||
chat_type: Tag::End,
|
chat_type: Tag::End,
|
||||||
dimension_type: RegistryType::<DimensionTypeElement> {
|
dimension_type: RegistryType::<DimensionTypeElement> {
|
||||||
kind: ResourceLocation::new("minecraft:dimension_type"),
|
kind: ResourceLocation::new("minecraft:dimension_type"),
|
||||||
value: Vec::new(),
|
value: Vec::new(),
|
||||||
},
|
},
|
||||||
world_type: Tag::End,
|
world_type: Tag::End,
|
||||||
|
trim_pattern: Tag::End,
|
||||||
|
damage_type: Tag::End,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
use azalea_buf::{BufReadError, McBuf};
|
use std::io::{Cursor, Write};
|
||||||
use azalea_buf::{McBufReadable, McBufWritable};
|
|
||||||
|
use azalea_buf::{BufReadError, McBuf, McBufReadable, McBufWritable};
|
||||||
use azalea_core::FixedBitSet;
|
use azalea_core::FixedBitSet;
|
||||||
use azalea_protocol_macros::ClientboundGamePacket;
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
use std::io::{Cursor, Write};
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
pub struct ClientboundPlayerPositionPacket {
|
pub struct ClientboundPlayerPositionPacket {
|
||||||
|
@ -11,16 +11,13 @@ pub struct ClientboundPlayerPositionPacket {
|
||||||
pub z: f64,
|
pub z: f64,
|
||||||
pub y_rot: f32,
|
pub y_rot: f32,
|
||||||
pub x_rot: f32,
|
pub x_rot: f32,
|
||||||
pub relative_arguments: RelativeArguments,
|
pub relative_arguments: RelativeMovements,
|
||||||
/// Client should confirm this packet with Teleport Confirm containing the
|
|
||||||
/// same Teleport ID.
|
|
||||||
#[var]
|
#[var]
|
||||||
pub id: u32,
|
pub id: u32,
|
||||||
pub dismount_vehicle: bool,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct RelativeArguments {
|
pub struct RelativeMovements {
|
||||||
pub x: bool,
|
pub x: bool,
|
||||||
pub y: bool,
|
pub y: bool,
|
||||||
pub z: bool,
|
pub z: bool,
|
||||||
|
@ -28,10 +25,10 @@ pub struct RelativeArguments {
|
||||||
pub x_rot: bool,
|
pub x_rot: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl McBufReadable for RelativeArguments {
|
impl McBufReadable for RelativeMovements {
|
||||||
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
||||||
let set = FixedBitSet::<5>::read_from(buf)?;
|
let set = FixedBitSet::<5>::read_from(buf)?;
|
||||||
Ok(RelativeArguments {
|
Ok(RelativeMovements {
|
||||||
x: set.index(0),
|
x: set.index(0),
|
||||||
y: set.index(1),
|
y: set.index(1),
|
||||||
z: set.index(2),
|
z: set.index(2),
|
||||||
|
@ -41,7 +38,7 @@ impl McBufReadable for RelativeArguments {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl McBufWritable for RelativeArguments {
|
impl McBufWritable for RelativeMovements {
|
||||||
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
|
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
|
||||||
let mut set = FixedBitSet::<5>::new();
|
let mut set = FixedBitSet::<5>::new();
|
||||||
if self.x {
|
if self.x {
|
||||||
|
|
|
@ -4,7 +4,7 @@ use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
pub struct ClientboundServerDataPacket {
|
pub struct ClientboundServerDataPacket {
|
||||||
pub motd: Option<FormattedText>,
|
pub motd: FormattedText,
|
||||||
pub icon_base64: Option<String>,
|
pub icon_bytes: Option<Vec<u8>>,
|
||||||
pub enforces_secure_chat: bool,
|
pub enforces_secure_chat: bool,
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,10 @@ use azalea_buf::{
|
||||||
};
|
};
|
||||||
use azalea_core::{ResourceLocation, Slot};
|
use azalea_core::{ResourceLocation, Slot};
|
||||||
use azalea_protocol_macros::ClientboundGamePacket;
|
use azalea_protocol_macros::ClientboundGamePacket;
|
||||||
|
use azalea_registry::RecipeSerializer;
|
||||||
|
|
||||||
use std::io::{Cursor, Write};
|
use std::io::{Cursor, Write};
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
#[derive(Clone, Debug, McBuf, ClientboundGamePacket)]
|
||||||
pub struct ClientboundUpdateRecipesPacket {
|
pub struct ClientboundUpdateRecipesPacket {
|
||||||
|
@ -33,6 +36,7 @@ pub struct ShapedRecipe {
|
||||||
pub category: CraftingBookCategory,
|
pub category: CraftingBookCategory,
|
||||||
pub ingredients: Vec<Ingredient>,
|
pub ingredients: Vec<Ingredient>,
|
||||||
pub result: Slot,
|
pub result: Slot,
|
||||||
|
pub show_notification: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Copy, McBuf)]
|
#[derive(Clone, Debug, Copy, McBuf)]
|
||||||
|
@ -68,6 +72,7 @@ impl McBufReadable for ShapedRecipe {
|
||||||
ingredients.push(Ingredient::read_from(buf)?);
|
ingredients.push(Ingredient::read_from(buf)?);
|
||||||
}
|
}
|
||||||
let result = Slot::read_from(buf)?;
|
let result = Slot::read_from(buf)?;
|
||||||
|
let show_notification = bool::read_from(buf)?;
|
||||||
|
|
||||||
Ok(ShapedRecipe {
|
Ok(ShapedRecipe {
|
||||||
width,
|
width,
|
||||||
|
@ -76,6 +81,7 @@ impl McBufReadable for ShapedRecipe {
|
||||||
category,
|
category,
|
||||||
ingredients,
|
ingredients,
|
||||||
result,
|
result,
|
||||||
|
show_notification,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,10 +114,25 @@ pub struct SimpleRecipe {
|
||||||
pub category: CraftingBookCategory,
|
pub category: CraftingBookCategory,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf)]
|
||||||
|
pub struct SmithingTransformRecipe {
|
||||||
|
pub template: Ingredient,
|
||||||
|
pub base: Ingredient,
|
||||||
|
pub addition: Ingredient,
|
||||||
|
pub result: Slot,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf)]
|
||||||
|
pub struct SmithingTrimRecipe {
|
||||||
|
pub template: Ingredient,
|
||||||
|
pub base: Ingredient,
|
||||||
|
pub addition: Ingredient,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf)]
|
#[derive(Clone, Debug, McBuf)]
|
||||||
pub enum RecipeData {
|
pub enum RecipeData {
|
||||||
CraftingShapeless(ShapelessRecipe),
|
|
||||||
CraftingShaped(ShapedRecipe),
|
CraftingShaped(ShapedRecipe),
|
||||||
|
CraftingShapeless(ShapelessRecipe),
|
||||||
CraftingSpecialArmorDye(SimpleRecipe),
|
CraftingSpecialArmorDye(SimpleRecipe),
|
||||||
CraftingSpecialBookCloning(SimpleRecipe),
|
CraftingSpecialBookCloning(SimpleRecipe),
|
||||||
CraftingSpecialMapCloning(SimpleRecipe),
|
CraftingSpecialMapCloning(SimpleRecipe),
|
||||||
|
@ -122,7 +143,6 @@ pub enum RecipeData {
|
||||||
CraftingSpecialRepairItem(SimpleRecipe),
|
CraftingSpecialRepairItem(SimpleRecipe),
|
||||||
CraftingSpecialTippedArrow(SimpleRecipe),
|
CraftingSpecialTippedArrow(SimpleRecipe),
|
||||||
CraftingSpecialBannerDuplicate(SimpleRecipe),
|
CraftingSpecialBannerDuplicate(SimpleRecipe),
|
||||||
CraftingSpecialBannerAddPattern(SimpleRecipe),
|
|
||||||
CraftingSpecialShieldDecoration(SimpleRecipe),
|
CraftingSpecialShieldDecoration(SimpleRecipe),
|
||||||
CraftingSpecialShulkerBoxColoring(SimpleRecipe),
|
CraftingSpecialShulkerBoxColoring(SimpleRecipe),
|
||||||
CraftingSpecialSuspiciousStew(SimpleRecipe),
|
CraftingSpecialSuspiciousStew(SimpleRecipe),
|
||||||
|
@ -132,6 +152,9 @@ pub enum RecipeData {
|
||||||
CampfireCooking(CookingRecipe),
|
CampfireCooking(CookingRecipe),
|
||||||
Stonecutting(StoneCutterRecipe),
|
Stonecutting(StoneCutterRecipe),
|
||||||
Smithing(SmithingRecipe),
|
Smithing(SmithingRecipe),
|
||||||
|
SmithingTransform(SmithingTransformRecipe),
|
||||||
|
SmithingTrim(SmithingTrimRecipe),
|
||||||
|
CraftingDecoratedPot(SimpleRecipe),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, McBuf)]
|
#[derive(Clone, Debug, McBuf)]
|
||||||
|
@ -141,48 +164,55 @@ pub struct Ingredient {
|
||||||
|
|
||||||
impl McBufWritable for Recipe {
|
impl McBufWritable for Recipe {
|
||||||
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
|
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
|
||||||
let resource_location = match &self.data {
|
let recipe_serializer = match &self.data {
|
||||||
RecipeData::CraftingShapeless(_) => "minecraft:crafting_shapeless",
|
RecipeData::CraftingShapeless(_) => RecipeSerializer::CraftingShapeless,
|
||||||
RecipeData::CraftingShaped(_) => "minecraft:crafting_shaped",
|
RecipeData::CraftingShaped(_) => RecipeSerializer::CraftingShaped,
|
||||||
RecipeData::CraftingSpecialArmorDye(_) => "minecraft:crafting_special_armordye",
|
RecipeData::CraftingSpecialArmorDye(_) => RecipeSerializer::CraftingSpecialArmordye,
|
||||||
RecipeData::CraftingSpecialBookCloning(_) => "minecraft:crafting_special_bookcloning",
|
RecipeData::CraftingSpecialBookCloning(_) => {
|
||||||
RecipeData::CraftingSpecialMapCloning(_) => "minecraft:crafting_special_mapcloning",
|
RecipeSerializer::CraftingSpecialBookcloning
|
||||||
RecipeData::CraftingSpecialMapExtending(_) => "minecraft:crafting_special_mapextending",
|
}
|
||||||
|
RecipeData::CraftingSpecialMapCloning(_) => RecipeSerializer::CraftingSpecialMapcloning,
|
||||||
|
RecipeData::CraftingSpecialMapExtending(_) => {
|
||||||
|
RecipeSerializer::CraftingSpecialMapextending
|
||||||
|
}
|
||||||
RecipeData::CraftingSpecialFireworkRocket(_) => {
|
RecipeData::CraftingSpecialFireworkRocket(_) => {
|
||||||
"minecraft:crafting_special_firework_rocket"
|
RecipeSerializer::CraftingSpecialFireworkRocket
|
||||||
}
|
}
|
||||||
RecipeData::CraftingSpecialFireworkStar(_) => {
|
RecipeData::CraftingSpecialFireworkStar(_) => {
|
||||||
"minecraft:crafting_special_firework_star"
|
RecipeSerializer::CraftingSpecialFireworkStar
|
||||||
}
|
}
|
||||||
|
|
||||||
RecipeData::CraftingSpecialFireworkStarFade(_) => {
|
RecipeData::CraftingSpecialFireworkStarFade(_) => {
|
||||||
"minecraft:crafting_special_firework_star_fade"
|
RecipeSerializer::CraftingSpecialFireworkStarFade
|
||||||
|
}
|
||||||
|
RecipeData::CraftingSpecialRepairItem(_) => RecipeSerializer::CraftingSpecialRepairitem,
|
||||||
|
RecipeData::CraftingSpecialTippedArrow(_) => {
|
||||||
|
RecipeSerializer::CraftingSpecialTippedarrow
|
||||||
}
|
}
|
||||||
RecipeData::CraftingSpecialRepairItem(_) => "minecraft:crafting_special_repairitem",
|
|
||||||
RecipeData::CraftingSpecialTippedArrow(_) => "minecraft:crafting_special_tippedarrow",
|
|
||||||
RecipeData::CraftingSpecialBannerDuplicate(_) => {
|
RecipeData::CraftingSpecialBannerDuplicate(_) => {
|
||||||
"minecraft:crafting_special_bannerduplicate"
|
RecipeSerializer::CraftingSpecialBannerduplicate
|
||||||
}
|
|
||||||
RecipeData::CraftingSpecialBannerAddPattern(_) => {
|
|
||||||
"minecraft:crafting_special_banneraddpattern"
|
|
||||||
}
|
}
|
||||||
RecipeData::CraftingSpecialShieldDecoration(_) => {
|
RecipeData::CraftingSpecialShieldDecoration(_) => {
|
||||||
"minecraft:crafting_special_shielddecoration"
|
RecipeSerializer::CraftingSpecialShielddecoration
|
||||||
}
|
}
|
||||||
RecipeData::CraftingSpecialShulkerBoxColoring(_) => {
|
RecipeData::CraftingSpecialShulkerBoxColoring(_) => {
|
||||||
"minecraft:crafting_special_shulkerboxcoloring"
|
RecipeSerializer::CraftingSpecialShulkerboxcoloring
|
||||||
}
|
}
|
||||||
RecipeData::CraftingSpecialSuspiciousStew(_) => {
|
RecipeData::CraftingSpecialSuspiciousStew(_) => {
|
||||||
"minecraft:crafting_special_suspiciousstew"
|
RecipeSerializer::CraftingSpecialSuspiciousstew
|
||||||
}
|
}
|
||||||
RecipeData::Smelting(_) => "minecraft:smelting",
|
RecipeData::Smelting(_) => RecipeSerializer::Smelting,
|
||||||
RecipeData::Blasting(_) => "minecraft:blasting",
|
RecipeData::Blasting(_) => RecipeSerializer::Blasting,
|
||||||
RecipeData::Smoking(_) => "minecraft:smoking",
|
RecipeData::Smoking(_) => RecipeSerializer::Smoking,
|
||||||
RecipeData::CampfireCooking(_) => "minecraft:campfire_cooking",
|
RecipeData::CampfireCooking(_) => RecipeSerializer::CampfireCooking,
|
||||||
RecipeData::Stonecutting(_) => "minecraft:stonecutting",
|
RecipeData::Stonecutting(_) => RecipeSerializer::Stonecutting,
|
||||||
RecipeData::Smithing(_) => "minecraft:smithing",
|
RecipeData::Smithing(_) => RecipeSerializer::Smithing,
|
||||||
|
RecipeData::SmithingTransform(_) => RecipeSerializer::SmithingTransform,
|
||||||
|
RecipeData::SmithingTrim(_) => RecipeSerializer::SmithingTrim,
|
||||||
|
RecipeData::CraftingDecoratedPot(_) => RecipeSerializer::CraftingDecoratedPot,
|
||||||
};
|
};
|
||||||
ResourceLocation::new(resource_location).write_into(buf)?;
|
let resource_location = ResourceLocation::new(&recipe_serializer.to_string());
|
||||||
|
resource_location.write_into(buf)?;
|
||||||
self.identifier.write_into(buf)?;
|
self.identifier.write_into(buf)?;
|
||||||
self.data.write_without_id(buf)?;
|
self.data.write_without_id(buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -191,74 +221,79 @@ impl McBufWritable for Recipe {
|
||||||
|
|
||||||
impl McBufReadable for Recipe {
|
impl McBufReadable for Recipe {
|
||||||
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
||||||
let recipe_type = ResourceLocation::read_from(buf)?;
|
let recipe_serializer_name = ResourceLocation::read_from(buf)?;
|
||||||
|
let Ok(recipe_serializer) =
|
||||||
|
RecipeSerializer::from_str(&recipe_serializer_name.to_string()) else {
|
||||||
|
return Err(BufReadError::UnexpectedStringEnumVariant { id: recipe_serializer_name.to_string() });
|
||||||
|
};
|
||||||
let identifier = ResourceLocation::read_from(buf)?;
|
let identifier = ResourceLocation::read_from(buf)?;
|
||||||
|
|
||||||
// rust doesn't let us match ResourceLocation so we have to do a big
|
// rust doesn't let us match ResourceLocation so we have to do a big
|
||||||
// if-else chain :(
|
// if-else chain :(
|
||||||
let data = match recipe_type.to_string().as_str() {
|
let data = match recipe_serializer {
|
||||||
"minecraft:crafting_shapeless" => {
|
RecipeSerializer::CraftingShaped => {
|
||||||
RecipeData::CraftingShapeless(ShapelessRecipe::read_from(buf)?)
|
|
||||||
}
|
|
||||||
"minecraft:crafting_shaped" => {
|
|
||||||
RecipeData::CraftingShaped(ShapedRecipe::read_from(buf)?)
|
RecipeData::CraftingShaped(ShapedRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_armordye" => {
|
RecipeSerializer::CraftingShapeless => {
|
||||||
|
RecipeData::CraftingShapeless(ShapelessRecipe::read_from(buf)?)
|
||||||
|
}
|
||||||
|
RecipeSerializer::CraftingSpecialArmordye => {
|
||||||
RecipeData::CraftingSpecialArmorDye(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialArmorDye(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_bookcloning" => {
|
RecipeSerializer::CraftingSpecialBookcloning => {
|
||||||
RecipeData::CraftingSpecialBookCloning(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialBookCloning(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_mapcloning" => {
|
RecipeSerializer::CraftingSpecialMapcloning => {
|
||||||
RecipeData::CraftingSpecialMapCloning(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialMapCloning(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_mapextending" => {
|
RecipeSerializer::CraftingSpecialMapextending => {
|
||||||
RecipeData::CraftingSpecialMapExtending(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialMapExtending(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_firework_rocket" => {
|
RecipeSerializer::CraftingSpecialFireworkRocket => {
|
||||||
RecipeData::CraftingSpecialFireworkRocket(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialFireworkRocket(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_firework_star" => {
|
RecipeSerializer::CraftingSpecialFireworkStar => {
|
||||||
RecipeData::CraftingSpecialFireworkStar(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialFireworkStar(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_firework_star_fade" => {
|
RecipeSerializer::CraftingSpecialFireworkStarFade => {
|
||||||
RecipeData::CraftingSpecialFireworkStarFade(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialFireworkStarFade(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_repairitem" => {
|
RecipeSerializer::CraftingSpecialRepairitem => {
|
||||||
RecipeData::CraftingSpecialRepairItem(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialRepairItem(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_tippedarrow" => {
|
RecipeSerializer::CraftingSpecialTippedarrow => {
|
||||||
RecipeData::CraftingSpecialTippedArrow(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialTippedArrow(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_bannerduplicate" => {
|
RecipeSerializer::CraftingSpecialBannerduplicate => {
|
||||||
RecipeData::CraftingSpecialBannerDuplicate(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialBannerDuplicate(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_banneraddpattern" => {
|
RecipeSerializer::CraftingSpecialShielddecoration => {
|
||||||
RecipeData::CraftingSpecialBannerAddPattern(SimpleRecipe::read_from(buf)?)
|
|
||||||
}
|
|
||||||
"minecraft:crafting_special_shielddecoration" => {
|
|
||||||
RecipeData::CraftingSpecialShieldDecoration(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialShieldDecoration(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_shulkerboxcoloring" => {
|
RecipeSerializer::CraftingSpecialShulkerboxcoloring => {
|
||||||
RecipeData::CraftingSpecialShulkerBoxColoring(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialShulkerBoxColoring(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:crafting_special_suspiciousstew" => {
|
RecipeSerializer::CraftingSpecialSuspiciousstew => {
|
||||||
RecipeData::CraftingSpecialSuspiciousStew(SimpleRecipe::read_from(buf)?)
|
RecipeData::CraftingSpecialSuspiciousStew(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:smelting" => RecipeData::Smelting(CookingRecipe::read_from(buf)?),
|
RecipeSerializer::Smelting => RecipeData::Smelting(CookingRecipe::read_from(buf)?),
|
||||||
"minecraft:blasting" => RecipeData::Blasting(CookingRecipe::read_from(buf)?),
|
RecipeSerializer::Blasting => RecipeData::Blasting(CookingRecipe::read_from(buf)?),
|
||||||
"minecraft:smoking" => RecipeData::Smoking(CookingRecipe::read_from(buf)?),
|
RecipeSerializer::Smoking => RecipeData::Smoking(CookingRecipe::read_from(buf)?),
|
||||||
"minecraft:campfire_cooking" => {
|
RecipeSerializer::CampfireCooking => {
|
||||||
RecipeData::CampfireCooking(CookingRecipe::read_from(buf)?)
|
RecipeData::CampfireCooking(CookingRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:stonecutting" => {
|
RecipeSerializer::Stonecutting => {
|
||||||
RecipeData::Stonecutting(StoneCutterRecipe::read_from(buf)?)
|
RecipeData::Stonecutting(StoneCutterRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
"minecraft:smithing" => RecipeData::Smithing(SmithingRecipe::read_from(buf)?),
|
RecipeSerializer::Smithing => RecipeData::Smithing(SmithingRecipe::read_from(buf)?),
|
||||||
_ => {
|
RecipeSerializer::SmithingTransform => {
|
||||||
return Err(BufReadError::UnexpectedStringEnumVariant {
|
RecipeData::SmithingTransform(SmithingTransformRecipe::read_from(buf)?)
|
||||||
id: recipe_type.to_string(),
|
}
|
||||||
});
|
RecipeSerializer::SmithingTrim => {
|
||||||
|
RecipeData::SmithingTrim(SmithingTrimRecipe::read_from(buf)?)
|
||||||
|
}
|
||||||
|
RecipeSerializer::CraftingDecoratedPot => {
|
||||||
|
RecipeData::CraftingDecoratedPot(SimpleRecipe::read_from(buf)?)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,9 @@ pub mod clientbound_block_entity_data_packet;
|
||||||
pub mod clientbound_block_event_packet;
|
pub mod clientbound_block_event_packet;
|
||||||
pub mod clientbound_block_update_packet;
|
pub mod clientbound_block_update_packet;
|
||||||
pub mod clientbound_boss_event_packet;
|
pub mod clientbound_boss_event_packet;
|
||||||
|
pub mod clientbound_bundle_packet;
|
||||||
pub mod clientbound_change_difficulty_packet;
|
pub mod clientbound_change_difficulty_packet;
|
||||||
|
pub mod clientbound_chunks_biomes_packet;
|
||||||
pub mod clientbound_command_suggestions_packet;
|
pub mod clientbound_command_suggestions_packet;
|
||||||
pub mod clientbound_commands_packet;
|
pub mod clientbound_commands_packet;
|
||||||
pub mod clientbound_container_close_packet;
|
pub mod clientbound_container_close_packet;
|
||||||
|
@ -19,6 +21,7 @@ pub mod clientbound_container_set_slot_packet;
|
||||||
pub mod clientbound_cooldown_packet;
|
pub mod clientbound_cooldown_packet;
|
||||||
pub mod clientbound_custom_chat_completions_packet;
|
pub mod clientbound_custom_chat_completions_packet;
|
||||||
pub mod clientbound_custom_payload_packet;
|
pub mod clientbound_custom_payload_packet;
|
||||||
|
pub mod clientbound_damage_event_packet;
|
||||||
pub mod clientbound_delete_chat_packet;
|
pub mod clientbound_delete_chat_packet;
|
||||||
pub mod clientbound_disconnect_packet;
|
pub mod clientbound_disconnect_packet;
|
||||||
pub mod clientbound_disguised_chat_packet;
|
pub mod clientbound_disguised_chat_packet;
|
||||||
|
@ -27,6 +30,7 @@ pub mod clientbound_explode_packet;
|
||||||
pub mod clientbound_forget_level_chunk_packet;
|
pub mod clientbound_forget_level_chunk_packet;
|
||||||
pub mod clientbound_game_event_packet;
|
pub mod clientbound_game_event_packet;
|
||||||
pub mod clientbound_horse_screen_open_packet;
|
pub mod clientbound_horse_screen_open_packet;
|
||||||
|
pub mod clientbound_hurt_animation_packet;
|
||||||
pub mod clientbound_initialize_border_packet;
|
pub mod clientbound_initialize_border_packet;
|
||||||
pub mod clientbound_keep_alive_packet;
|
pub mod clientbound_keep_alive_packet;
|
||||||
pub mod clientbound_level_chunk_with_light_packet;
|
pub mod clientbound_level_chunk_with_light_packet;
|
||||||
|
@ -167,33 +171,33 @@ declare_state_packets!(
|
||||||
0x03: serverbound_chat_ack_packet::ServerboundChatAckPacket,
|
0x03: serverbound_chat_ack_packet::ServerboundChatAckPacket,
|
||||||
0x04: serverbound_chat_command_packet::ServerboundChatCommandPacket,
|
0x04: serverbound_chat_command_packet::ServerboundChatCommandPacket,
|
||||||
0x05: serverbound_chat_packet::ServerboundChatPacket,
|
0x05: serverbound_chat_packet::ServerboundChatPacket,
|
||||||
0x06: serverbound_client_command_packet::ServerboundClientCommandPacket,
|
0x06: serverbound_chat_session_update_packet::ServerboundChatSessionUpdatePacket,
|
||||||
0x07: serverbound_client_information_packet::ServerboundClientInformationPacket,
|
0x07: serverbound_client_command_packet::ServerboundClientCommandPacket,
|
||||||
0x08: serverbound_command_suggestion_packet::ServerboundCommandSuggestionPacket,
|
0x08: serverbound_client_information_packet::ServerboundClientInformationPacket,
|
||||||
0x09: serverbound_container_button_click_packet::ServerboundContainerButtonClickPacket,
|
0x09: serverbound_command_suggestion_packet::ServerboundCommandSuggestionPacket,
|
||||||
0x0a: serverbound_container_click_packet::ServerboundContainerClickPacket,
|
0x0a: serverbound_container_button_click_packet::ServerboundContainerButtonClickPacket,
|
||||||
0x0b: serverbound_container_close_packet::ServerboundContainerClosePacket,
|
0x0b: serverbound_container_click_packet::ServerboundContainerClickPacket,
|
||||||
0x0c: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
|
0x0c: serverbound_container_close_packet::ServerboundContainerClosePacket,
|
||||||
0x0d: serverbound_edit_book_packet::ServerboundEditBookPacket,
|
0x0d: serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
|
||||||
0x0e: serverbound_entity_tag_query::ServerboundEntityTagQuery,
|
0x0e: serverbound_edit_book_packet::ServerboundEditBookPacket,
|
||||||
0x0f: serverbound_interact_packet::ServerboundInteractPacket,
|
0x0f: serverbound_entity_tag_query::ServerboundEntityTagQuery,
|
||||||
0x10: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket,
|
0x10: serverbound_interact_packet::ServerboundInteractPacket,
|
||||||
0x11: serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
|
0x11: serverbound_jigsaw_generate_packet::ServerboundJigsawGeneratePacket,
|
||||||
0x12: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket,
|
0x12: serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
|
||||||
0x13: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket,
|
0x13: serverbound_lock_difficulty_packet::ServerboundLockDifficultyPacket,
|
||||||
0x14: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
|
0x14: serverbound_move_player_pos_packet::ServerboundMovePlayerPosPacket,
|
||||||
0x15: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket,
|
0x15: serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
|
||||||
0x16: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket,
|
0x16: serverbound_move_player_rot_packet::ServerboundMovePlayerRotPacket,
|
||||||
0x17: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket,
|
0x17: serverbound_move_player_status_only_packet::ServerboundMovePlayerStatusOnlyPacket,
|
||||||
0x18: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket,
|
0x18: serverbound_move_vehicle_packet::ServerboundMoveVehiclePacket,
|
||||||
0x19: serverbound_pick_item_packet::ServerboundPickItemPacket,
|
0x19: serverbound_paddle_boat_packet::ServerboundPaddleBoatPacket,
|
||||||
0x1a: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket,
|
0x1a: serverbound_pick_item_packet::ServerboundPickItemPacket,
|
||||||
0x1b: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket,
|
0x1b: serverbound_place_recipe_packet::ServerboundPlaceRecipePacket,
|
||||||
0x1c: serverbound_player_action_packet::ServerboundPlayerActionPacket,
|
0x1c: serverbound_player_abilities_packet::ServerboundPlayerAbilitiesPacket,
|
||||||
0x1d: serverbound_player_command_packet::ServerboundPlayerCommandPacket,
|
0x1d: serverbound_player_action_packet::ServerboundPlayerActionPacket,
|
||||||
0x1e: serverbound_player_input_packet::ServerboundPlayerInputPacket,
|
0x1e: serverbound_player_command_packet::ServerboundPlayerCommandPacket,
|
||||||
0x1f: serverbound_pong_packet::ServerboundPongPacket,
|
0x1f: serverbound_player_input_packet::ServerboundPlayerInputPacket,
|
||||||
0x20: serverbound_chat_session_update_packet::ServerboundChatSessionUpdatePacket,
|
0x20: serverbound_pong_packet::ServerboundPongPacket,
|
||||||
0x21: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket,
|
0x21: serverbound_recipe_book_change_settings_packet::ServerboundRecipeBookChangeSettingsPacket,
|
||||||
0x22: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket,
|
0x22: serverbound_recipe_book_seen_recipe_packet::ServerboundRecipeBookSeenRecipePacket,
|
||||||
0x23: serverbound_rename_item_packet::ServerboundRenameItemPacket,
|
0x23: serverbound_rename_item_packet::ServerboundRenameItemPacket,
|
||||||
|
@ -214,111 +218,115 @@ declare_state_packets!(
|
||||||
0x32: serverbound_use_item_packet::ServerboundUseItemPacket,
|
0x32: serverbound_use_item_packet::ServerboundUseItemPacket,
|
||||||
},
|
},
|
||||||
Clientbound => {
|
Clientbound => {
|
||||||
0x00: clientbound_add_entity_packet::ClientboundAddEntityPacket,
|
0x00: clientbound_bundle_packet::ClientboundBundlePacket,
|
||||||
0x01: clientbound_add_experience_orb_packet::ClientboundAddExperienceOrbPacket,
|
0x01: clientbound_add_entity_packet::ClientboundAddEntityPacket,
|
||||||
0x02: clientbound_add_player_packet::ClientboundAddPlayerPacket,
|
0x02: clientbound_add_experience_orb_packet::ClientboundAddExperienceOrbPacket,
|
||||||
0x03: clientbound_animate_packet::ClientboundAnimatePacket,
|
0x03: clientbound_add_player_packet::ClientboundAddPlayerPacket,
|
||||||
0x04: clientbound_award_stats_packet::ClientboundAwardStatsPacket,
|
0x04: clientbound_animate_packet::ClientboundAnimatePacket,
|
||||||
0x05: clientbound_block_changed_ack_packet::ClientboundBlockChangedAckPacket,
|
0x05: clientbound_award_stats_packet::ClientboundAwardStatsPacket,
|
||||||
0x06: clientbound_block_destruction_packet::ClientboundBlockDestructionPacket,
|
0x06: clientbound_block_changed_ack_packet::ClientboundBlockChangedAckPacket,
|
||||||
0x07: clientbound_block_entity_data_packet::ClientboundBlockEntityDataPacket,
|
0x07: clientbound_block_destruction_packet::ClientboundBlockDestructionPacket,
|
||||||
0x08: clientbound_block_event_packet::ClientboundBlockEventPacket,
|
0x08: clientbound_block_entity_data_packet::ClientboundBlockEntityDataPacket,
|
||||||
0x09: clientbound_block_update_packet::ClientboundBlockUpdatePacket,
|
0x09: clientbound_block_event_packet::ClientboundBlockEventPacket,
|
||||||
0x0a: clientbound_boss_event_packet::ClientboundBossEventPacket,
|
0x0a: clientbound_block_update_packet::ClientboundBlockUpdatePacket,
|
||||||
0x0b: clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket,
|
0x0b: clientbound_boss_event_packet::ClientboundBossEventPacket,
|
||||||
0x0d: clientbound_command_suggestions_packet::ClientboundCommandSuggestionsPacket,
|
0x0c: clientbound_change_difficulty_packet::ClientboundChangeDifficultyPacket,
|
||||||
0x0e: clientbound_commands_packet::ClientboundCommandsPacket,
|
0x0d: clientbound_chunks_biomes_packet::ClientboundChunksBiomesPacket,
|
||||||
0x0f: clientbound_container_close_packet::ClientboundContainerClosePacket,
|
0x0f: clientbound_command_suggestions_packet::ClientboundCommandSuggestionsPacket,
|
||||||
0x10: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket,
|
0x10: clientbound_commands_packet::ClientboundCommandsPacket,
|
||||||
0x11: clientbound_container_set_data_packet::ClientboundContainerSetDataPacket,
|
0x11: clientbound_container_close_packet::ClientboundContainerClosePacket,
|
||||||
0x12: clientbound_container_set_slot_packet::ClientboundContainerSetSlotPacket,
|
0x12: clientbound_container_set_content_packet::ClientboundContainerSetContentPacket,
|
||||||
0x13: clientbound_cooldown_packet::ClientboundCooldownPacket,
|
0x13: clientbound_container_set_data_packet::ClientboundContainerSetDataPacket,
|
||||||
0x14: clientbound_custom_chat_completions_packet::ClientboundCustomChatCompletionsPacket,
|
0x14: clientbound_container_set_slot_packet::ClientboundContainerSetSlotPacket,
|
||||||
0x15: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket,
|
0x15: clientbound_cooldown_packet::ClientboundCooldownPacket,
|
||||||
0x16: clientbound_delete_chat_packet::ClientboundDeleteChatPacket,
|
0x16: clientbound_custom_chat_completions_packet::ClientboundCustomChatCompletionsPacket,
|
||||||
0x17: clientbound_disconnect_packet::ClientboundDisconnectPacket,
|
0x17: clientbound_custom_payload_packet::ClientboundCustomPayloadPacket,
|
||||||
0x18: clientbound_disguised_chat_packet::ClientboundDisguisedChatPacket,
|
0x18: clientbound_damage_event_packet::ClientboundDamageEventPacket,
|
||||||
0x19: clientbound_entity_event_packet::ClientboundEntityEventPacket,
|
0x19: clientbound_delete_chat_packet::ClientboundDeleteChatPacket,
|
||||||
0x1a: clientbound_explode_packet::ClientboundExplodePacket,
|
0x1a: clientbound_disconnect_packet::ClientboundDisconnectPacket,
|
||||||
0x1b: clientbound_forget_level_chunk_packet::ClientboundForgetLevelChunkPacket,
|
0x1b: clientbound_disguised_chat_packet::ClientboundDisguisedChatPacket,
|
||||||
0x1c: clientbound_game_event_packet::ClientboundGameEventPacket,
|
0x1c: clientbound_entity_event_packet::ClientboundEntityEventPacket,
|
||||||
0x1d: clientbound_horse_screen_open_packet::ClientboundHorseScreenOpenPacket,
|
0x1d: clientbound_explode_packet::ClientboundExplodePacket,
|
||||||
0x1e: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket,
|
0x1e: clientbound_forget_level_chunk_packet::ClientboundForgetLevelChunkPacket,
|
||||||
0x1f: clientbound_keep_alive_packet::ClientboundKeepAlivePacket,
|
0x1f: clientbound_game_event_packet::ClientboundGameEventPacket,
|
||||||
0x20: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket,
|
0x20: clientbound_horse_screen_open_packet::ClientboundHorseScreenOpenPacket,
|
||||||
0x21: clientbound_level_event_packet::ClientboundLevelEventPacket,
|
0x21: clientbound_hurt_animation_packet::ClientboundHurtAnimationPacket,
|
||||||
0x22: clientbound_level_particles_packet::ClientboundLevelParticlesPacket,
|
0x22: clientbound_initialize_border_packet::ClientboundInitializeBorderPacket,
|
||||||
0x23: clientbound_light_update_packet::ClientboundLightUpdatePacket,
|
0x23: clientbound_keep_alive_packet::ClientboundKeepAlivePacket,
|
||||||
0x24: clientbound_login_packet::ClientboundLoginPacket,
|
0x24: clientbound_level_chunk_with_light_packet::ClientboundLevelChunkWithLightPacket,
|
||||||
0x25: clientbound_map_item_data_packet::ClientboundMapItemDataPacket,
|
0x25: clientbound_level_event_packet::ClientboundLevelEventPacket,
|
||||||
0x26: clientbound_merchant_offers_packet::ClientboundMerchantOffersPacket,
|
0x26: clientbound_level_particles_packet::ClientboundLevelParticlesPacket,
|
||||||
0x27: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket,
|
0x27: clientbound_light_update_packet::ClientboundLightUpdatePacket,
|
||||||
0x28: clientbound_move_entity_pos_rot_packet::ClientboundMoveEntityPosRotPacket,
|
0x28: clientbound_login_packet::ClientboundLoginPacket,
|
||||||
0x29: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket,
|
0x29: clientbound_map_item_data_packet::ClientboundMapItemDataPacket,
|
||||||
0x2a: clientbound_move_vehicle_packet::ClientboundMoveVehiclePacket,
|
0x2a: clientbound_merchant_offers_packet::ClientboundMerchantOffersPacket,
|
||||||
0x2b: clientbound_open_book_packet::ClientboundOpenBookPacket,
|
0x2b: clientbound_move_entity_pos_packet::ClientboundMoveEntityPosPacket,
|
||||||
0x2c: clientbound_open_screen_packet::ClientboundOpenScreenPacket,
|
0x2c: clientbound_move_entity_pos_rot_packet::ClientboundMoveEntityPosRotPacket,
|
||||||
0x2d: clientbound_open_sign_editor_packet::ClientboundOpenSignEditorPacket,
|
0x2d: clientbound_move_entity_rot_packet::ClientboundMoveEntityRotPacket,
|
||||||
0x2e: clientbound_ping_packet::ClientboundPingPacket,
|
0x2e: clientbound_move_vehicle_packet::ClientboundMoveVehiclePacket,
|
||||||
0x2f: clientbound_place_ghost_recipe_packet::ClientboundPlaceGhostRecipePacket,
|
0x2f: clientbound_open_book_packet::ClientboundOpenBookPacket,
|
||||||
0x30: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket,
|
0x30: clientbound_open_screen_packet::ClientboundOpenScreenPacket,
|
||||||
0x31: clientbound_player_chat_packet::ClientboundPlayerChatPacket,
|
0x31: clientbound_open_sign_editor_packet::ClientboundOpenSignEditorPacket,
|
||||||
0x32: clientbound_player_combat_end_packet::ClientboundPlayerCombatEndPacket,
|
0x32: clientbound_ping_packet::ClientboundPingPacket,
|
||||||
0x33: clientbound_player_combat_enter_packet::ClientboundPlayerCombatEnterPacket,
|
0x33: clientbound_place_ghost_recipe_packet::ClientboundPlaceGhostRecipePacket,
|
||||||
0x34: clientbound_player_combat_kill_packet::ClientboundPlayerCombatKillPacket,
|
0x34: clientbound_player_abilities_packet::ClientboundPlayerAbilitiesPacket,
|
||||||
0x35: clientbound_player_info_remove_packet::ClientboundPlayerInfoRemovePacket,
|
0x35: clientbound_player_chat_packet::ClientboundPlayerChatPacket,
|
||||||
0x36: clientbound_player_info_update_packet::ClientboundPlayerInfoUpdatePacket,
|
0x36: clientbound_player_combat_end_packet::ClientboundPlayerCombatEndPacket,
|
||||||
0x37: clientbound_player_look_at_packet::ClientboundPlayerLookAtPacket,
|
0x37: clientbound_player_combat_enter_packet::ClientboundPlayerCombatEnterPacket,
|
||||||
0x38: clientbound_player_position_packet::ClientboundPlayerPositionPacket,
|
0x38: clientbound_player_combat_kill_packet::ClientboundPlayerCombatKillPacket,
|
||||||
0x39: clientbound_recipe_packet::ClientboundRecipePacket,
|
0x39: clientbound_player_info_remove_packet::ClientboundPlayerInfoRemovePacket,
|
||||||
0x3a: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket,
|
0x3a: clientbound_player_info_update_packet::ClientboundPlayerInfoUpdatePacket,
|
||||||
0x3b: clientbound_remove_mob_effect_packet::ClientboundRemoveMobEffectPacket,
|
0x3b: clientbound_player_look_at_packet::ClientboundPlayerLookAtPacket,
|
||||||
0x3c: clientbound_resource_pack_packet::ClientboundResourcePackPacket,
|
0x3c: clientbound_player_position_packet::ClientboundPlayerPositionPacket,
|
||||||
0x3d: clientbound_respawn_packet::ClientboundRespawnPacket,
|
0x3d: clientbound_recipe_packet::ClientboundRecipePacket,
|
||||||
0x3e: clientbound_rotate_head_packet::ClientboundRotateHeadPacket,
|
0x3e: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket,
|
||||||
0x3f: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket,
|
0x3f: clientbound_remove_mob_effect_packet::ClientboundRemoveMobEffectPacket,
|
||||||
0x40: clientbound_select_advancements_tab_packet::ClientboundSelectAdvancementsTabPacket,
|
0x40: clientbound_resource_pack_packet::ClientboundResourcePackPacket,
|
||||||
0x41: clientbound_server_data_packet::ClientboundServerDataPacket,
|
0x41: clientbound_respawn_packet::ClientboundRespawnPacket,
|
||||||
0x42: clientbound_set_action_bar_text_packet::ClientboundSetActionBarTextPacket,
|
0x42: clientbound_rotate_head_packet::ClientboundRotateHeadPacket,
|
||||||
0x43: clientbound_set_border_center_packet::ClientboundSetBorderCenterPacket,
|
0x43: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket,
|
||||||
0x44: clientbound_set_border_lerp_size_packet::ClientboundSetBorderLerpSizePacket,
|
0x44: clientbound_select_advancements_tab_packet::ClientboundSelectAdvancementsTabPacket,
|
||||||
0x45: clientbound_set_border_size_packet::ClientboundSetBorderSizePacket,
|
0x45: clientbound_server_data_packet::ClientboundServerDataPacket,
|
||||||
0x46: clientbound_set_border_warning_delay_packet::ClientboundSetBorderWarningDelayPacket,
|
0x46: clientbound_set_action_bar_text_packet::ClientboundSetActionBarTextPacket,
|
||||||
0x47: clientbound_set_border_warning_distance_packet::ClientboundSetBorderWarningDistancePacket,
|
0x47: clientbound_set_border_center_packet::ClientboundSetBorderCenterPacket,
|
||||||
0x48: clientbound_set_camera_packet::ClientboundSetCameraPacket,
|
0x48: clientbound_set_border_lerp_size_packet::ClientboundSetBorderLerpSizePacket,
|
||||||
0x49: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket,
|
0x49: clientbound_set_border_size_packet::ClientboundSetBorderSizePacket,
|
||||||
0x4a: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket,
|
0x4a: clientbound_set_border_warning_delay_packet::ClientboundSetBorderWarningDelayPacket,
|
||||||
0x4b: clientbound_set_chunk_cache_radius_packet::ClientboundSetChunkCacheRadiusPacket,
|
0x4b: clientbound_set_border_warning_distance_packet::ClientboundSetBorderWarningDistancePacket,
|
||||||
0x4c: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket,
|
0x4c: clientbound_set_camera_packet::ClientboundSetCameraPacket,
|
||||||
0x4d: clientbound_set_display_objective_packet::ClientboundSetDisplayObjectivePacket,
|
0x4d: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket,
|
||||||
0x4e: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket,
|
0x4e: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket,
|
||||||
0x4f: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket,
|
0x4f: clientbound_set_chunk_cache_radius_packet::ClientboundSetChunkCacheRadiusPacket,
|
||||||
0x50: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket,
|
0x50: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket,
|
||||||
0x51: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket,
|
0x51: clientbound_set_display_objective_packet::ClientboundSetDisplayObjectivePacket,
|
||||||
0x52: clientbound_set_experience_packet::ClientboundSetExperiencePacket,
|
0x52: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket,
|
||||||
0x53: clientbound_set_health_packet::ClientboundSetHealthPacket,
|
0x53: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket,
|
||||||
0x54: clientbound_set_objective_packet::ClientboundSetObjectivePacket,
|
0x54: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket,
|
||||||
0x55: clientbound_set_passengers_packet::ClientboundSetPassengersPacket,
|
0x55: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket,
|
||||||
0x56: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket,
|
0x56: clientbound_set_experience_packet::ClientboundSetExperiencePacket,
|
||||||
0x57: clientbound_set_score_packet::ClientboundSetScorePacket,
|
0x57: clientbound_set_health_packet::ClientboundSetHealthPacket,
|
||||||
0x58: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket,
|
0x58: clientbound_set_objective_packet::ClientboundSetObjectivePacket,
|
||||||
0x59: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket,
|
0x59: clientbound_set_passengers_packet::ClientboundSetPassengersPacket,
|
||||||
0x5a: clientbound_set_time_packet::ClientboundSetTimePacket,
|
0x5a: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket,
|
||||||
0x5b: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket,
|
0x5b: clientbound_set_score_packet::ClientboundSetScorePacket,
|
||||||
0x5c: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket,
|
0x5c: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket,
|
||||||
0x5d: clientbound_sound_entity_packet::ClientboundSoundEntityPacket,
|
0x5d: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket,
|
||||||
0x5e: clientbound_sound_packet::ClientboundSoundPacket,
|
0x5e: clientbound_set_time_packet::ClientboundSetTimePacket,
|
||||||
0x5f: clientbound_stop_sound_packet::ClientboundStopSoundPacket,
|
0x5f: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket,
|
||||||
0x60: clientbound_system_chat_packet::ClientboundSystemChatPacket,
|
0x60: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket,
|
||||||
0x61: clientbound_tab_list_packet::ClientboundTabListPacket,
|
0x61: clientbound_sound_entity_packet::ClientboundSoundEntityPacket,
|
||||||
0x62: clientbound_tag_query_packet::ClientboundTagQueryPacket,
|
0x62: clientbound_sound_packet::ClientboundSoundPacket,
|
||||||
0x63: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket,
|
0x63: clientbound_stop_sound_packet::ClientboundStopSoundPacket,
|
||||||
0x64: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket,
|
0x64: clientbound_system_chat_packet::ClientboundSystemChatPacket,
|
||||||
0x65: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket,
|
0x65: clientbound_tab_list_packet::ClientboundTabListPacket,
|
||||||
0x66: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket,
|
0x66: clientbound_tag_query_packet::ClientboundTagQueryPacket,
|
||||||
0x67: clientbound_update_enabled_features_packet::ClientboundUpdateEnabledFeaturesPacket,
|
0x67: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket,
|
||||||
0x68: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket,
|
0x68: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket,
|
||||||
0x69: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket,
|
0x69: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket,
|
||||||
0x6a: clientbound_update_tags_packet::ClientboundUpdateTagsPacket,
|
0x6a: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket,
|
||||||
|
0x6b: clientbound_update_enabled_features_packet::ClientboundUpdateEnabledFeaturesPacket,
|
||||||
|
0x6c: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket,
|
||||||
|
0x6d: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket,
|
||||||
|
0x6e: clientbound_update_tags_packet::ClientboundUpdateTagsPacket,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -10,7 +10,7 @@ use std::io::{Cursor, Write};
|
||||||
// TODO: rename the packet files to just like clientbound_add_entity instead of
|
// TODO: rename the packet files to just like clientbound_add_entity instead of
|
||||||
// clientbound_add_entity_packet
|
// clientbound_add_entity_packet
|
||||||
|
|
||||||
pub const PROTOCOL_VERSION: u32 = 761;
|
pub const PROTOCOL_VERSION: u32 = 762;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
pub enum ConnectionProtocol {
|
pub enum ConnectionProtocol {
|
||||||
|
|
|
@ -36,10 +36,6 @@ pub struct ClientboundStatusResponsePacket {
|
||||||
pub version: Version,
|
pub version: Version,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
#[serde(rename = "previewsChat")]
|
|
||||||
pub previews_chat: Option<bool>,
|
|
||||||
#[serde(default)]
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
#[serde(rename = "enforcesSecureChat")]
|
#[serde(rename = "enforcesSecureChat")]
|
||||||
pub enforces_secure_chat: Option<bool>,
|
pub enforces_secure_chat: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,29 +257,3 @@ where
|
||||||
|
|
||||||
Ok(packet)
|
Ok(packet)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use crate::packets::game::ClientboundGamePacket;
|
|
||||||
use std::io::Cursor;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_read_packet() {
|
|
||||||
let mut buf: Cursor<&[u8]> = Cursor::new(&[
|
|
||||||
56, 64, 85, 58, 141, 138, 71, 146, 193, 64, 88, 0, 0, 0, 0, 0, 0, 64, 60, 224, 105, 34,
|
|
||||||
119, 8, 228, 67, 50, 51, 68, 194, 177, 230, 101, 0, 17, 0,
|
|
||||||
]);
|
|
||||||
let packet = packet_decoder::<ClientboundGamePacket>(&mut buf).unwrap();
|
|
||||||
match &packet {
|
|
||||||
ClientboundGamePacket::PlayerPosition(p) => {
|
|
||||||
assert_eq!(p.id, 17);
|
|
||||||
assert_eq!(p.x, 84.91488892545296);
|
|
||||||
assert_eq!(p.y, 96.0);
|
|
||||||
assert_eq!(p.z, 28.876604227124417);
|
|
||||||
assert_eq!(p.dismount_vehicle, false);
|
|
||||||
}
|
|
||||||
_ => panic!("Wrong packet type"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ pub async fn resolve_address(address: &ServerAddress) -> Result<SocketAddr, Reso
|
||||||
return Ok(SocketAddr::new(
|
return Ok(SocketAddr::new(
|
||||||
lookup_ip.iter().next().unwrap(),
|
lookup_ip.iter().next().unwrap(),
|
||||||
redirect_address.port,
|
redirect_address.port,
|
||||||
))
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// debug!("redirecting to {:?}", redirect_address);
|
// debug!("redirecting to {:?}", redirect_address);
|
||||||
|
|
|
@ -164,6 +164,7 @@ enum Block {
|
||||||
BirchPlanks => "minecraft:birch_planks",
|
BirchPlanks => "minecraft:birch_planks",
|
||||||
JunglePlanks => "minecraft:jungle_planks",
|
JunglePlanks => "minecraft:jungle_planks",
|
||||||
AcaciaPlanks => "minecraft:acacia_planks",
|
AcaciaPlanks => "minecraft:acacia_planks",
|
||||||
|
CherryPlanks => "minecraft:cherry_planks",
|
||||||
DarkOakPlanks => "minecraft:dark_oak_planks",
|
DarkOakPlanks => "minecraft:dark_oak_planks",
|
||||||
MangrovePlanks => "minecraft:mangrove_planks",
|
MangrovePlanks => "minecraft:mangrove_planks",
|
||||||
BambooPlanks => "minecraft:bamboo_planks",
|
BambooPlanks => "minecraft:bamboo_planks",
|
||||||
|
@ -173,12 +174,14 @@ enum Block {
|
||||||
BirchSapling => "minecraft:birch_sapling",
|
BirchSapling => "minecraft:birch_sapling",
|
||||||
JungleSapling => "minecraft:jungle_sapling",
|
JungleSapling => "minecraft:jungle_sapling",
|
||||||
AcaciaSapling => "minecraft:acacia_sapling",
|
AcaciaSapling => "minecraft:acacia_sapling",
|
||||||
|
CherrySapling => "minecraft:cherry_sapling",
|
||||||
DarkOakSapling => "minecraft:dark_oak_sapling",
|
DarkOakSapling => "minecraft:dark_oak_sapling",
|
||||||
MangrovePropagule => "minecraft:mangrove_propagule",
|
MangrovePropagule => "minecraft:mangrove_propagule",
|
||||||
Bedrock => "minecraft:bedrock",
|
Bedrock => "minecraft:bedrock",
|
||||||
Water => "minecraft:water",
|
Water => "minecraft:water",
|
||||||
Lava => "minecraft:lava",
|
Lava => "minecraft:lava",
|
||||||
Sand => "minecraft:sand",
|
Sand => "minecraft:sand",
|
||||||
|
SuspiciousSand => "minecraft:suspicious_sand",
|
||||||
RedSand => "minecraft:red_sand",
|
RedSand => "minecraft:red_sand",
|
||||||
Gravel => "minecraft:gravel",
|
Gravel => "minecraft:gravel",
|
||||||
GoldOre => "minecraft:gold_ore",
|
GoldOre => "minecraft:gold_ore",
|
||||||
|
@ -193,6 +196,7 @@ enum Block {
|
||||||
BirchLog => "minecraft:birch_log",
|
BirchLog => "minecraft:birch_log",
|
||||||
JungleLog => "minecraft:jungle_log",
|
JungleLog => "minecraft:jungle_log",
|
||||||
AcaciaLog => "minecraft:acacia_log",
|
AcaciaLog => "minecraft:acacia_log",
|
||||||
|
CherryLog => "minecraft:cherry_log",
|
||||||
DarkOakLog => "minecraft:dark_oak_log",
|
DarkOakLog => "minecraft:dark_oak_log",
|
||||||
MangroveLog => "minecraft:mangrove_log",
|
MangroveLog => "minecraft:mangrove_log",
|
||||||
MangroveRoots => "minecraft:mangrove_roots",
|
MangroveRoots => "minecraft:mangrove_roots",
|
||||||
|
@ -202,6 +206,7 @@ enum Block {
|
||||||
StrippedBirchLog => "minecraft:stripped_birch_log",
|
StrippedBirchLog => "minecraft:stripped_birch_log",
|
||||||
StrippedJungleLog => "minecraft:stripped_jungle_log",
|
StrippedJungleLog => "minecraft:stripped_jungle_log",
|
||||||
StrippedAcaciaLog => "minecraft:stripped_acacia_log",
|
StrippedAcaciaLog => "minecraft:stripped_acacia_log",
|
||||||
|
StrippedCherryLog => "minecraft:stripped_cherry_log",
|
||||||
StrippedDarkOakLog => "minecraft:stripped_dark_oak_log",
|
StrippedDarkOakLog => "minecraft:stripped_dark_oak_log",
|
||||||
StrippedOakLog => "minecraft:stripped_oak_log",
|
StrippedOakLog => "minecraft:stripped_oak_log",
|
||||||
StrippedMangroveLog => "minecraft:stripped_mangrove_log",
|
StrippedMangroveLog => "minecraft:stripped_mangrove_log",
|
||||||
|
@ -211,6 +216,7 @@ enum Block {
|
||||||
BirchWood => "minecraft:birch_wood",
|
BirchWood => "minecraft:birch_wood",
|
||||||
JungleWood => "minecraft:jungle_wood",
|
JungleWood => "minecraft:jungle_wood",
|
||||||
AcaciaWood => "minecraft:acacia_wood",
|
AcaciaWood => "minecraft:acacia_wood",
|
||||||
|
CherryWood => "minecraft:cherry_wood",
|
||||||
DarkOakWood => "minecraft:dark_oak_wood",
|
DarkOakWood => "minecraft:dark_oak_wood",
|
||||||
MangroveWood => "minecraft:mangrove_wood",
|
MangroveWood => "minecraft:mangrove_wood",
|
||||||
StrippedOakWood => "minecraft:stripped_oak_wood",
|
StrippedOakWood => "minecraft:stripped_oak_wood",
|
||||||
|
@ -218,6 +224,7 @@ enum Block {
|
||||||
StrippedBirchWood => "minecraft:stripped_birch_wood",
|
StrippedBirchWood => "minecraft:stripped_birch_wood",
|
||||||
StrippedJungleWood => "minecraft:stripped_jungle_wood",
|
StrippedJungleWood => "minecraft:stripped_jungle_wood",
|
||||||
StrippedAcaciaWood => "minecraft:stripped_acacia_wood",
|
StrippedAcaciaWood => "minecraft:stripped_acacia_wood",
|
||||||
|
StrippedCherryWood => "minecraft:stripped_cherry_wood",
|
||||||
StrippedDarkOakWood => "minecraft:stripped_dark_oak_wood",
|
StrippedDarkOakWood => "minecraft:stripped_dark_oak_wood",
|
||||||
StrippedMangroveWood => "minecraft:stripped_mangrove_wood",
|
StrippedMangroveWood => "minecraft:stripped_mangrove_wood",
|
||||||
OakLeaves => "minecraft:oak_leaves",
|
OakLeaves => "minecraft:oak_leaves",
|
||||||
|
@ -225,6 +232,7 @@ enum Block {
|
||||||
BirchLeaves => "minecraft:birch_leaves",
|
BirchLeaves => "minecraft:birch_leaves",
|
||||||
JungleLeaves => "minecraft:jungle_leaves",
|
JungleLeaves => "minecraft:jungle_leaves",
|
||||||
AcaciaLeaves => "minecraft:acacia_leaves",
|
AcaciaLeaves => "minecraft:acacia_leaves",
|
||||||
|
CherryLeaves => "minecraft:cherry_leaves",
|
||||||
DarkOakLeaves => "minecraft:dark_oak_leaves",
|
DarkOakLeaves => "minecraft:dark_oak_leaves",
|
||||||
MangroveLeaves => "minecraft:mangrove_leaves",
|
MangroveLeaves => "minecraft:mangrove_leaves",
|
||||||
AzaleaLeaves => "minecraft:azalea_leaves",
|
AzaleaLeaves => "minecraft:azalea_leaves",
|
||||||
|
@ -285,6 +293,7 @@ enum Block {
|
||||||
BlackWool => "minecraft:black_wool",
|
BlackWool => "minecraft:black_wool",
|
||||||
MovingPiston => "minecraft:moving_piston",
|
MovingPiston => "minecraft:moving_piston",
|
||||||
Dandelion => "minecraft:dandelion",
|
Dandelion => "minecraft:dandelion",
|
||||||
|
Torchflower => "minecraft:torchflower",
|
||||||
Poppy => "minecraft:poppy",
|
Poppy => "minecraft:poppy",
|
||||||
BlueOrchid => "minecraft:blue_orchid",
|
BlueOrchid => "minecraft:blue_orchid",
|
||||||
Allium => "minecraft:allium",
|
Allium => "minecraft:allium",
|
||||||
|
@ -326,6 +335,7 @@ enum Block {
|
||||||
SpruceSign => "minecraft:spruce_sign",
|
SpruceSign => "minecraft:spruce_sign",
|
||||||
BirchSign => "minecraft:birch_sign",
|
BirchSign => "minecraft:birch_sign",
|
||||||
AcaciaSign => "minecraft:acacia_sign",
|
AcaciaSign => "minecraft:acacia_sign",
|
||||||
|
CherrySign => "minecraft:cherry_sign",
|
||||||
JungleSign => "minecraft:jungle_sign",
|
JungleSign => "minecraft:jungle_sign",
|
||||||
DarkOakSign => "minecraft:dark_oak_sign",
|
DarkOakSign => "minecraft:dark_oak_sign",
|
||||||
MangroveSign => "minecraft:mangrove_sign",
|
MangroveSign => "minecraft:mangrove_sign",
|
||||||
|
@ -338,6 +348,7 @@ enum Block {
|
||||||
SpruceWallSign => "minecraft:spruce_wall_sign",
|
SpruceWallSign => "minecraft:spruce_wall_sign",
|
||||||
BirchWallSign => "minecraft:birch_wall_sign",
|
BirchWallSign => "minecraft:birch_wall_sign",
|
||||||
AcaciaWallSign => "minecraft:acacia_wall_sign",
|
AcaciaWallSign => "minecraft:acacia_wall_sign",
|
||||||
|
CherryWallSign => "minecraft:cherry_wall_sign",
|
||||||
JungleWallSign => "minecraft:jungle_wall_sign",
|
JungleWallSign => "minecraft:jungle_wall_sign",
|
||||||
DarkOakWallSign => "minecraft:dark_oak_wall_sign",
|
DarkOakWallSign => "minecraft:dark_oak_wall_sign",
|
||||||
MangroveWallSign => "minecraft:mangrove_wall_sign",
|
MangroveWallSign => "minecraft:mangrove_wall_sign",
|
||||||
|
@ -346,6 +357,7 @@ enum Block {
|
||||||
SpruceHangingSign => "minecraft:spruce_hanging_sign",
|
SpruceHangingSign => "minecraft:spruce_hanging_sign",
|
||||||
BirchHangingSign => "minecraft:birch_hanging_sign",
|
BirchHangingSign => "minecraft:birch_hanging_sign",
|
||||||
AcaciaHangingSign => "minecraft:acacia_hanging_sign",
|
AcaciaHangingSign => "minecraft:acacia_hanging_sign",
|
||||||
|
CherryHangingSign => "minecraft:cherry_hanging_sign",
|
||||||
JungleHangingSign => "minecraft:jungle_hanging_sign",
|
JungleHangingSign => "minecraft:jungle_hanging_sign",
|
||||||
DarkOakHangingSign => "minecraft:dark_oak_hanging_sign",
|
DarkOakHangingSign => "minecraft:dark_oak_hanging_sign",
|
||||||
CrimsonHangingSign => "minecraft:crimson_hanging_sign",
|
CrimsonHangingSign => "minecraft:crimson_hanging_sign",
|
||||||
|
@ -356,6 +368,7 @@ enum Block {
|
||||||
SpruceWallHangingSign => "minecraft:spruce_wall_hanging_sign",
|
SpruceWallHangingSign => "minecraft:spruce_wall_hanging_sign",
|
||||||
BirchWallHangingSign => "minecraft:birch_wall_hanging_sign",
|
BirchWallHangingSign => "minecraft:birch_wall_hanging_sign",
|
||||||
AcaciaWallHangingSign => "minecraft:acacia_wall_hanging_sign",
|
AcaciaWallHangingSign => "minecraft:acacia_wall_hanging_sign",
|
||||||
|
CherryWallHangingSign => "minecraft:cherry_wall_hanging_sign",
|
||||||
JungleWallHangingSign => "minecraft:jungle_wall_hanging_sign",
|
JungleWallHangingSign => "minecraft:jungle_wall_hanging_sign",
|
||||||
DarkOakWallHangingSign => "minecraft:dark_oak_wall_hanging_sign",
|
DarkOakWallHangingSign => "minecraft:dark_oak_wall_hanging_sign",
|
||||||
MangroveWallHangingSign => "minecraft:mangrove_wall_hanging_sign",
|
MangroveWallHangingSign => "minecraft:mangrove_wall_hanging_sign",
|
||||||
|
@ -370,6 +383,7 @@ enum Block {
|
||||||
BirchPressurePlate => "minecraft:birch_pressure_plate",
|
BirchPressurePlate => "minecraft:birch_pressure_plate",
|
||||||
JunglePressurePlate => "minecraft:jungle_pressure_plate",
|
JunglePressurePlate => "minecraft:jungle_pressure_plate",
|
||||||
AcaciaPressurePlate => "minecraft:acacia_pressure_plate",
|
AcaciaPressurePlate => "minecraft:acacia_pressure_plate",
|
||||||
|
CherryPressurePlate => "minecraft:cherry_pressure_plate",
|
||||||
DarkOakPressurePlate => "minecraft:dark_oak_pressure_plate",
|
DarkOakPressurePlate => "minecraft:dark_oak_pressure_plate",
|
||||||
MangrovePressurePlate => "minecraft:mangrove_pressure_plate",
|
MangrovePressurePlate => "minecraft:mangrove_pressure_plate",
|
||||||
BambooPressurePlate => "minecraft:bamboo_pressure_plate",
|
BambooPressurePlate => "minecraft:bamboo_pressure_plate",
|
||||||
|
@ -421,6 +435,7 @@ enum Block {
|
||||||
BirchTrapdoor => "minecraft:birch_trapdoor",
|
BirchTrapdoor => "minecraft:birch_trapdoor",
|
||||||
JungleTrapdoor => "minecraft:jungle_trapdoor",
|
JungleTrapdoor => "minecraft:jungle_trapdoor",
|
||||||
AcaciaTrapdoor => "minecraft:acacia_trapdoor",
|
AcaciaTrapdoor => "minecraft:acacia_trapdoor",
|
||||||
|
CherryTrapdoor => "minecraft:cherry_trapdoor",
|
||||||
DarkOakTrapdoor => "minecraft:dark_oak_trapdoor",
|
DarkOakTrapdoor => "minecraft:dark_oak_trapdoor",
|
||||||
MangroveTrapdoor => "minecraft:mangrove_trapdoor",
|
MangroveTrapdoor => "minecraft:mangrove_trapdoor",
|
||||||
BambooTrapdoor => "minecraft:bamboo_trapdoor",
|
BambooTrapdoor => "minecraft:bamboo_trapdoor",
|
||||||
|
@ -486,11 +501,13 @@ enum Block {
|
||||||
CobblestoneWall => "minecraft:cobblestone_wall",
|
CobblestoneWall => "minecraft:cobblestone_wall",
|
||||||
MossyCobblestoneWall => "minecraft:mossy_cobblestone_wall",
|
MossyCobblestoneWall => "minecraft:mossy_cobblestone_wall",
|
||||||
FlowerPot => "minecraft:flower_pot",
|
FlowerPot => "minecraft:flower_pot",
|
||||||
|
PottedTorchflower => "minecraft:potted_torchflower",
|
||||||
PottedOakSapling => "minecraft:potted_oak_sapling",
|
PottedOakSapling => "minecraft:potted_oak_sapling",
|
||||||
PottedSpruceSapling => "minecraft:potted_spruce_sapling",
|
PottedSpruceSapling => "minecraft:potted_spruce_sapling",
|
||||||
PottedBirchSapling => "minecraft:potted_birch_sapling",
|
PottedBirchSapling => "minecraft:potted_birch_sapling",
|
||||||
PottedJungleSapling => "minecraft:potted_jungle_sapling",
|
PottedJungleSapling => "minecraft:potted_jungle_sapling",
|
||||||
PottedAcaciaSapling => "minecraft:potted_acacia_sapling",
|
PottedAcaciaSapling => "minecraft:potted_acacia_sapling",
|
||||||
|
PottedCherrySapling => "minecraft:potted_cherry_sapling",
|
||||||
PottedDarkOakSapling => "minecraft:potted_dark_oak_sapling",
|
PottedDarkOakSapling => "minecraft:potted_dark_oak_sapling",
|
||||||
PottedMangrovePropagule => "minecraft:potted_mangrove_propagule",
|
PottedMangrovePropagule => "minecraft:potted_mangrove_propagule",
|
||||||
PottedFern => "minecraft:potted_fern",
|
PottedFern => "minecraft:potted_fern",
|
||||||
|
@ -518,6 +535,7 @@ enum Block {
|
||||||
BirchButton => "minecraft:birch_button",
|
BirchButton => "minecraft:birch_button",
|
||||||
JungleButton => "minecraft:jungle_button",
|
JungleButton => "minecraft:jungle_button",
|
||||||
AcaciaButton => "minecraft:acacia_button",
|
AcaciaButton => "minecraft:acacia_button",
|
||||||
|
CherryButton => "minecraft:cherry_button",
|
||||||
DarkOakButton => "minecraft:dark_oak_button",
|
DarkOakButton => "minecraft:dark_oak_button",
|
||||||
MangroveButton => "minecraft:mangrove_button",
|
MangroveButton => "minecraft:mangrove_button",
|
||||||
BambooButton => "minecraft:bamboo_button",
|
BambooButton => "minecraft:bamboo_button",
|
||||||
|
@ -585,6 +603,7 @@ enum Block {
|
||||||
RedStainedGlassPane => "minecraft:red_stained_glass_pane",
|
RedStainedGlassPane => "minecraft:red_stained_glass_pane",
|
||||||
BlackStainedGlassPane => "minecraft:black_stained_glass_pane",
|
BlackStainedGlassPane => "minecraft:black_stained_glass_pane",
|
||||||
AcaciaStairs => "minecraft:acacia_stairs",
|
AcaciaStairs => "minecraft:acacia_stairs",
|
||||||
|
CherryStairs => "minecraft:cherry_stairs",
|
||||||
DarkOakStairs => "minecraft:dark_oak_stairs",
|
DarkOakStairs => "minecraft:dark_oak_stairs",
|
||||||
MangroveStairs => "minecraft:mangrove_stairs",
|
MangroveStairs => "minecraft:mangrove_stairs",
|
||||||
BambooStairs => "minecraft:bamboo_stairs",
|
BambooStairs => "minecraft:bamboo_stairs",
|
||||||
|
@ -670,6 +689,7 @@ enum Block {
|
||||||
BirchSlab => "minecraft:birch_slab",
|
BirchSlab => "minecraft:birch_slab",
|
||||||
JungleSlab => "minecraft:jungle_slab",
|
JungleSlab => "minecraft:jungle_slab",
|
||||||
AcaciaSlab => "minecraft:acacia_slab",
|
AcaciaSlab => "minecraft:acacia_slab",
|
||||||
|
CherrySlab => "minecraft:cherry_slab",
|
||||||
DarkOakSlab => "minecraft:dark_oak_slab",
|
DarkOakSlab => "minecraft:dark_oak_slab",
|
||||||
MangroveSlab => "minecraft:mangrove_slab",
|
MangroveSlab => "minecraft:mangrove_slab",
|
||||||
BambooSlab => "minecraft:bamboo_slab",
|
BambooSlab => "minecraft:bamboo_slab",
|
||||||
|
@ -696,6 +716,7 @@ enum Block {
|
||||||
BirchFenceGate => "minecraft:birch_fence_gate",
|
BirchFenceGate => "minecraft:birch_fence_gate",
|
||||||
JungleFenceGate => "minecraft:jungle_fence_gate",
|
JungleFenceGate => "minecraft:jungle_fence_gate",
|
||||||
AcaciaFenceGate => "minecraft:acacia_fence_gate",
|
AcaciaFenceGate => "minecraft:acacia_fence_gate",
|
||||||
|
CherryFenceGate => "minecraft:cherry_fence_gate",
|
||||||
DarkOakFenceGate => "minecraft:dark_oak_fence_gate",
|
DarkOakFenceGate => "minecraft:dark_oak_fence_gate",
|
||||||
MangroveFenceGate => "minecraft:mangrove_fence_gate",
|
MangroveFenceGate => "minecraft:mangrove_fence_gate",
|
||||||
BambooFenceGate => "minecraft:bamboo_fence_gate",
|
BambooFenceGate => "minecraft:bamboo_fence_gate",
|
||||||
|
@ -703,6 +724,7 @@ enum Block {
|
||||||
BirchFence => "minecraft:birch_fence",
|
BirchFence => "minecraft:birch_fence",
|
||||||
JungleFence => "minecraft:jungle_fence",
|
JungleFence => "minecraft:jungle_fence",
|
||||||
AcaciaFence => "minecraft:acacia_fence",
|
AcaciaFence => "minecraft:acacia_fence",
|
||||||
|
CherryFence => "minecraft:cherry_fence",
|
||||||
DarkOakFence => "minecraft:dark_oak_fence",
|
DarkOakFence => "minecraft:dark_oak_fence",
|
||||||
MangroveFence => "minecraft:mangrove_fence",
|
MangroveFence => "minecraft:mangrove_fence",
|
||||||
BambooFence => "minecraft:bamboo_fence",
|
BambooFence => "minecraft:bamboo_fence",
|
||||||
|
@ -710,6 +732,7 @@ enum Block {
|
||||||
BirchDoor => "minecraft:birch_door",
|
BirchDoor => "minecraft:birch_door",
|
||||||
JungleDoor => "minecraft:jungle_door",
|
JungleDoor => "minecraft:jungle_door",
|
||||||
AcaciaDoor => "minecraft:acacia_door",
|
AcaciaDoor => "minecraft:acacia_door",
|
||||||
|
CherryDoor => "minecraft:cherry_door",
|
||||||
DarkOakDoor => "minecraft:dark_oak_door",
|
DarkOakDoor => "minecraft:dark_oak_door",
|
||||||
MangroveDoor => "minecraft:mangrove_door",
|
MangroveDoor => "minecraft:mangrove_door",
|
||||||
BambooDoor => "minecraft:bamboo_door",
|
BambooDoor => "minecraft:bamboo_door",
|
||||||
|
@ -720,6 +743,7 @@ enum Block {
|
||||||
PurpurPillar => "minecraft:purpur_pillar",
|
PurpurPillar => "minecraft:purpur_pillar",
|
||||||
PurpurStairs => "minecraft:purpur_stairs",
|
PurpurStairs => "minecraft:purpur_stairs",
|
||||||
EndStoneBricks => "minecraft:end_stone_bricks",
|
EndStoneBricks => "minecraft:end_stone_bricks",
|
||||||
|
TorchflowerCrop => "minecraft:torchflower_crop",
|
||||||
Beetroots => "minecraft:beetroots",
|
Beetroots => "minecraft:beetroots",
|
||||||
DirtPath => "minecraft:dirt_path",
|
DirtPath => "minecraft:dirt_path",
|
||||||
EndGateway => "minecraft:end_gateway",
|
EndGateway => "minecraft:end_gateway",
|
||||||
|
@ -1079,6 +1103,7 @@ enum Block {
|
||||||
Azalea => "minecraft:azalea",
|
Azalea => "minecraft:azalea",
|
||||||
FloweringAzalea => "minecraft:flowering_azalea",
|
FloweringAzalea => "minecraft:flowering_azalea",
|
||||||
MossCarpet => "minecraft:moss_carpet",
|
MossCarpet => "minecraft:moss_carpet",
|
||||||
|
PinkPetals => "minecraft:pink_petals",
|
||||||
MossBlock => "minecraft:moss_block",
|
MossBlock => "minecraft:moss_block",
|
||||||
BigDripleaf => "minecraft:big_dripleaf",
|
BigDripleaf => "minecraft:big_dripleaf",
|
||||||
BigDripleafStem => "minecraft:big_dripleaf_stem",
|
BigDripleafStem => "minecraft:big_dripleaf_stem",
|
||||||
|
@ -1118,6 +1143,7 @@ enum Block {
|
||||||
PearlescentFroglight => "minecraft:pearlescent_froglight",
|
PearlescentFroglight => "minecraft:pearlescent_froglight",
|
||||||
Frogspawn => "minecraft:frogspawn",
|
Frogspawn => "minecraft:frogspawn",
|
||||||
ReinforcedDeepslate => "minecraft:reinforced_deepslate",
|
ReinforcedDeepslate => "minecraft:reinforced_deepslate",
|
||||||
|
DecoratedPot => "minecraft:decorated_pot",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1164,6 +1190,8 @@ enum BlockEntityKind {
|
||||||
SculkCatalyst => "minecraft:sculk_catalyst",
|
SculkCatalyst => "minecraft:sculk_catalyst",
|
||||||
SculkShrieker => "minecraft:sculk_shrieker",
|
SculkShrieker => "minecraft:sculk_shrieker",
|
||||||
ChiseledBookshelf => "minecraft:chiseled_bookshelf",
|
ChiseledBookshelf => "minecraft:chiseled_bookshelf",
|
||||||
|
SuspiciousSand => "minecraft:suspicious_sand",
|
||||||
|
DecoratedPot => "minecraft:decorated_pot",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1267,6 +1295,7 @@ enum CommandArgumentKind {
|
||||||
ResourceKey => "minecraft:resource_key",
|
ResourceKey => "minecraft:resource_key",
|
||||||
TemplateMirror => "minecraft:template_mirror",
|
TemplateMirror => "minecraft:template_mirror",
|
||||||
TemplateRotation => "minecraft:template_rotation",
|
TemplateRotation => "minecraft:template_rotation",
|
||||||
|
Heightmap => "minecraft:heightmap",
|
||||||
Uuid => "minecraft:uuid",
|
Uuid => "minecraft:uuid",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1406,32 +1435,39 @@ enum EntityKind {
|
||||||
Bat => "minecraft:bat",
|
Bat => "minecraft:bat",
|
||||||
Bee => "minecraft:bee",
|
Bee => "minecraft:bee",
|
||||||
Blaze => "minecraft:blaze",
|
Blaze => "minecraft:blaze",
|
||||||
|
BlockDisplay => "minecraft:block_display",
|
||||||
Boat => "minecraft:boat",
|
Boat => "minecraft:boat",
|
||||||
ChestBoat => "minecraft:chest_boat",
|
|
||||||
Cat => "minecraft:cat",
|
|
||||||
Camel => "minecraft:camel",
|
Camel => "minecraft:camel",
|
||||||
|
Cat => "minecraft:cat",
|
||||||
CaveSpider => "minecraft:cave_spider",
|
CaveSpider => "minecraft:cave_spider",
|
||||||
|
ChestBoat => "minecraft:chest_boat",
|
||||||
|
ChestMinecart => "minecraft:chest_minecart",
|
||||||
Chicken => "minecraft:chicken",
|
Chicken => "minecraft:chicken",
|
||||||
Cod => "minecraft:cod",
|
Cod => "minecraft:cod",
|
||||||
|
CommandBlockMinecart => "minecraft:command_block_minecart",
|
||||||
Cow => "minecraft:cow",
|
Cow => "minecraft:cow",
|
||||||
Creeper => "minecraft:creeper",
|
Creeper => "minecraft:creeper",
|
||||||
Dolphin => "minecraft:dolphin",
|
Dolphin => "minecraft:dolphin",
|
||||||
Donkey => "minecraft:donkey",
|
Donkey => "minecraft:donkey",
|
||||||
DragonFireball => "minecraft:dragon_fireball",
|
DragonFireball => "minecraft:dragon_fireball",
|
||||||
Drowned => "minecraft:drowned",
|
Drowned => "minecraft:drowned",
|
||||||
|
Egg => "minecraft:egg",
|
||||||
ElderGuardian => "minecraft:elder_guardian",
|
ElderGuardian => "minecraft:elder_guardian",
|
||||||
EndCrystal => "minecraft:end_crystal",
|
EndCrystal => "minecraft:end_crystal",
|
||||||
EnderDragon => "minecraft:ender_dragon",
|
EnderDragon => "minecraft:ender_dragon",
|
||||||
|
EnderPearl => "minecraft:ender_pearl",
|
||||||
Enderman => "minecraft:enderman",
|
Enderman => "minecraft:enderman",
|
||||||
Endermite => "minecraft:endermite",
|
Endermite => "minecraft:endermite",
|
||||||
Evoker => "minecraft:evoker",
|
Evoker => "minecraft:evoker",
|
||||||
EvokerFangs => "minecraft:evoker_fangs",
|
EvokerFangs => "minecraft:evoker_fangs",
|
||||||
|
ExperienceBottle => "minecraft:experience_bottle",
|
||||||
ExperienceOrb => "minecraft:experience_orb",
|
ExperienceOrb => "minecraft:experience_orb",
|
||||||
EyeOfEnder => "minecraft:eye_of_ender",
|
EyeOfEnder => "minecraft:eye_of_ender",
|
||||||
FallingBlock => "minecraft:falling_block",
|
FallingBlock => "minecraft:falling_block",
|
||||||
FireworkRocket => "minecraft:firework_rocket",
|
FireworkRocket => "minecraft:firework_rocket",
|
||||||
Fox => "minecraft:fox",
|
Fox => "minecraft:fox",
|
||||||
Frog => "minecraft:frog",
|
Frog => "minecraft:frog",
|
||||||
|
FurnaceMinecart => "minecraft:furnace_minecart",
|
||||||
Ghast => "minecraft:ghast",
|
Ghast => "minecraft:ghast",
|
||||||
Giant => "minecraft:giant",
|
Giant => "minecraft:giant",
|
||||||
GlowItemFrame => "minecraft:glow_item_frame",
|
GlowItemFrame => "minecraft:glow_item_frame",
|
||||||
|
@ -1439,11 +1475,14 @@ enum EntityKind {
|
||||||
Goat => "minecraft:goat",
|
Goat => "minecraft:goat",
|
||||||
Guardian => "minecraft:guardian",
|
Guardian => "minecraft:guardian",
|
||||||
Hoglin => "minecraft:hoglin",
|
Hoglin => "minecraft:hoglin",
|
||||||
|
HopperMinecart => "minecraft:hopper_minecart",
|
||||||
Horse => "minecraft:horse",
|
Horse => "minecraft:horse",
|
||||||
Husk => "minecraft:husk",
|
Husk => "minecraft:husk",
|
||||||
Illusioner => "minecraft:illusioner",
|
Illusioner => "minecraft:illusioner",
|
||||||
|
Interaction => "minecraft:interaction",
|
||||||
IronGolem => "minecraft:iron_golem",
|
IronGolem => "minecraft:iron_golem",
|
||||||
Item => "minecraft:item",
|
Item => "minecraft:item",
|
||||||
|
ItemDisplay => "minecraft:item_display",
|
||||||
ItemFrame => "minecraft:item_frame",
|
ItemFrame => "minecraft:item_frame",
|
||||||
Fireball => "minecraft:fireball",
|
Fireball => "minecraft:fireball",
|
||||||
LeashKnot => "minecraft:leash_knot",
|
LeashKnot => "minecraft:leash_knot",
|
||||||
|
@ -1453,14 +1492,8 @@ enum EntityKind {
|
||||||
MagmaCube => "minecraft:magma_cube",
|
MagmaCube => "minecraft:magma_cube",
|
||||||
Marker => "minecraft:marker",
|
Marker => "minecraft:marker",
|
||||||
Minecart => "minecraft:minecart",
|
Minecart => "minecraft:minecart",
|
||||||
ChestMinecart => "minecraft:chest_minecart",
|
|
||||||
CommandBlockMinecart => "minecraft:command_block_minecart",
|
|
||||||
FurnaceMinecart => "minecraft:furnace_minecart",
|
|
||||||
HopperMinecart => "minecraft:hopper_minecart",
|
|
||||||
SpawnerMinecart => "minecraft:spawner_minecart",
|
|
||||||
TntMinecart => "minecraft:tnt_minecart",
|
|
||||||
Mule => "minecraft:mule",
|
|
||||||
Mooshroom => "minecraft:mooshroom",
|
Mooshroom => "minecraft:mooshroom",
|
||||||
|
Mule => "minecraft:mule",
|
||||||
Ocelot => "minecraft:ocelot",
|
Ocelot => "minecraft:ocelot",
|
||||||
Painting => "minecraft:painting",
|
Painting => "minecraft:painting",
|
||||||
Panda => "minecraft:panda",
|
Panda => "minecraft:panda",
|
||||||
|
@ -1471,7 +1504,7 @@ enum EntityKind {
|
||||||
PiglinBrute => "minecraft:piglin_brute",
|
PiglinBrute => "minecraft:piglin_brute",
|
||||||
Pillager => "minecraft:pillager",
|
Pillager => "minecraft:pillager",
|
||||||
PolarBear => "minecraft:polar_bear",
|
PolarBear => "minecraft:polar_bear",
|
||||||
Tnt => "minecraft:tnt",
|
Potion => "minecraft:potion",
|
||||||
Pufferfish => "minecraft:pufferfish",
|
Pufferfish => "minecraft:pufferfish",
|
||||||
Rabbit => "minecraft:rabbit",
|
Rabbit => "minecraft:rabbit",
|
||||||
Ravager => "minecraft:ravager",
|
Ravager => "minecraft:ravager",
|
||||||
|
@ -1484,20 +1517,21 @@ enum EntityKind {
|
||||||
SkeletonHorse => "minecraft:skeleton_horse",
|
SkeletonHorse => "minecraft:skeleton_horse",
|
||||||
Slime => "minecraft:slime",
|
Slime => "minecraft:slime",
|
||||||
SmallFireball => "minecraft:small_fireball",
|
SmallFireball => "minecraft:small_fireball",
|
||||||
|
Sniffer => "minecraft:sniffer",
|
||||||
SnowGolem => "minecraft:snow_golem",
|
SnowGolem => "minecraft:snow_golem",
|
||||||
Snowball => "minecraft:snowball",
|
Snowball => "minecraft:snowball",
|
||||||
|
SpawnerMinecart => "minecraft:spawner_minecart",
|
||||||
SpectralArrow => "minecraft:spectral_arrow",
|
SpectralArrow => "minecraft:spectral_arrow",
|
||||||
Spider => "minecraft:spider",
|
Spider => "minecraft:spider",
|
||||||
Squid => "minecraft:squid",
|
Squid => "minecraft:squid",
|
||||||
Stray => "minecraft:stray",
|
Stray => "minecraft:stray",
|
||||||
Strider => "minecraft:strider",
|
Strider => "minecraft:strider",
|
||||||
Tadpole => "minecraft:tadpole",
|
Tadpole => "minecraft:tadpole",
|
||||||
Egg => "minecraft:egg",
|
TextDisplay => "minecraft:text_display",
|
||||||
EnderPearl => "minecraft:ender_pearl",
|
Tnt => "minecraft:tnt",
|
||||||
ExperienceBottle => "minecraft:experience_bottle",
|
TntMinecart => "minecraft:tnt_minecart",
|
||||||
Potion => "minecraft:potion",
|
|
||||||
Trident => "minecraft:trident",
|
|
||||||
TraderLlama => "minecraft:trader_llama",
|
TraderLlama => "minecraft:trader_llama",
|
||||||
|
Trident => "minecraft:trident",
|
||||||
TropicalFish => "minecraft:tropical_fish",
|
TropicalFish => "minecraft:tropical_fish",
|
||||||
Turtle => "minecraft:turtle",
|
Turtle => "minecraft:turtle",
|
||||||
Vex => "minecraft:vex",
|
Vex => "minecraft:vex",
|
||||||
|
@ -1566,7 +1600,9 @@ enum GameEvent {
|
||||||
ElytraGlide => "minecraft:elytra_glide",
|
ElytraGlide => "minecraft:elytra_glide",
|
||||||
EntityDamage => "minecraft:entity_damage",
|
EntityDamage => "minecraft:entity_damage",
|
||||||
EntityDie => "minecraft:entity_die",
|
EntityDie => "minecraft:entity_die",
|
||||||
|
EntityDismount => "minecraft:entity_dismount",
|
||||||
EntityInteract => "minecraft:entity_interact",
|
EntityInteract => "minecraft:entity_interact",
|
||||||
|
EntityMount => "minecraft:entity_mount",
|
||||||
EntityPlace => "minecraft:entity_place",
|
EntityPlace => "minecraft:entity_place",
|
||||||
EntityRoar => "minecraft:entity_roar",
|
EntityRoar => "minecraft:entity_roar",
|
||||||
EntityShake => "minecraft:entity_shake",
|
EntityShake => "minecraft:entity_shake",
|
||||||
|
@ -1663,6 +1699,7 @@ enum Item {
|
||||||
BirchPlanks => "minecraft:birch_planks",
|
BirchPlanks => "minecraft:birch_planks",
|
||||||
JunglePlanks => "minecraft:jungle_planks",
|
JunglePlanks => "minecraft:jungle_planks",
|
||||||
AcaciaPlanks => "minecraft:acacia_planks",
|
AcaciaPlanks => "minecraft:acacia_planks",
|
||||||
|
CherryPlanks => "minecraft:cherry_planks",
|
||||||
DarkOakPlanks => "minecraft:dark_oak_planks",
|
DarkOakPlanks => "minecraft:dark_oak_planks",
|
||||||
MangrovePlanks => "minecraft:mangrove_planks",
|
MangrovePlanks => "minecraft:mangrove_planks",
|
||||||
BambooPlanks => "minecraft:bamboo_planks",
|
BambooPlanks => "minecraft:bamboo_planks",
|
||||||
|
@ -1674,10 +1711,12 @@ enum Item {
|
||||||
BirchSapling => "minecraft:birch_sapling",
|
BirchSapling => "minecraft:birch_sapling",
|
||||||
JungleSapling => "minecraft:jungle_sapling",
|
JungleSapling => "minecraft:jungle_sapling",
|
||||||
AcaciaSapling => "minecraft:acacia_sapling",
|
AcaciaSapling => "minecraft:acacia_sapling",
|
||||||
|
CherrySapling => "minecraft:cherry_sapling",
|
||||||
DarkOakSapling => "minecraft:dark_oak_sapling",
|
DarkOakSapling => "minecraft:dark_oak_sapling",
|
||||||
MangrovePropagule => "minecraft:mangrove_propagule",
|
MangrovePropagule => "minecraft:mangrove_propagule",
|
||||||
Bedrock => "minecraft:bedrock",
|
Bedrock => "minecraft:bedrock",
|
||||||
Sand => "minecraft:sand",
|
Sand => "minecraft:sand",
|
||||||
|
SuspiciousSand => "minecraft:suspicious_sand",
|
||||||
RedSand => "minecraft:red_sand",
|
RedSand => "minecraft:red_sand",
|
||||||
Gravel => "minecraft:gravel",
|
Gravel => "minecraft:gravel",
|
||||||
CoalOre => "minecraft:coal_ore",
|
CoalOre => "minecraft:coal_ore",
|
||||||
|
@ -1746,6 +1785,7 @@ enum Item {
|
||||||
BirchLog => "minecraft:birch_log",
|
BirchLog => "minecraft:birch_log",
|
||||||
JungleLog => "minecraft:jungle_log",
|
JungleLog => "minecraft:jungle_log",
|
||||||
AcaciaLog => "minecraft:acacia_log",
|
AcaciaLog => "minecraft:acacia_log",
|
||||||
|
CherryLog => "minecraft:cherry_log",
|
||||||
DarkOakLog => "minecraft:dark_oak_log",
|
DarkOakLog => "minecraft:dark_oak_log",
|
||||||
MangroveLog => "minecraft:mangrove_log",
|
MangroveLog => "minecraft:mangrove_log",
|
||||||
MangroveRoots => "minecraft:mangrove_roots",
|
MangroveRoots => "minecraft:mangrove_roots",
|
||||||
|
@ -1758,6 +1798,7 @@ enum Item {
|
||||||
StrippedBirchLog => "minecraft:stripped_birch_log",
|
StrippedBirchLog => "minecraft:stripped_birch_log",
|
||||||
StrippedJungleLog => "minecraft:stripped_jungle_log",
|
StrippedJungleLog => "minecraft:stripped_jungle_log",
|
||||||
StrippedAcaciaLog => "minecraft:stripped_acacia_log",
|
StrippedAcaciaLog => "minecraft:stripped_acacia_log",
|
||||||
|
StrippedCherryLog => "minecraft:stripped_cherry_log",
|
||||||
StrippedDarkOakLog => "minecraft:stripped_dark_oak_log",
|
StrippedDarkOakLog => "minecraft:stripped_dark_oak_log",
|
||||||
StrippedMangroveLog => "minecraft:stripped_mangrove_log",
|
StrippedMangroveLog => "minecraft:stripped_mangrove_log",
|
||||||
StrippedCrimsonStem => "minecraft:stripped_crimson_stem",
|
StrippedCrimsonStem => "minecraft:stripped_crimson_stem",
|
||||||
|
@ -1767,6 +1808,7 @@ enum Item {
|
||||||
StrippedBirchWood => "minecraft:stripped_birch_wood",
|
StrippedBirchWood => "minecraft:stripped_birch_wood",
|
||||||
StrippedJungleWood => "minecraft:stripped_jungle_wood",
|
StrippedJungleWood => "minecraft:stripped_jungle_wood",
|
||||||
StrippedAcaciaWood => "minecraft:stripped_acacia_wood",
|
StrippedAcaciaWood => "minecraft:stripped_acacia_wood",
|
||||||
|
StrippedCherryWood => "minecraft:stripped_cherry_wood",
|
||||||
StrippedDarkOakWood => "minecraft:stripped_dark_oak_wood",
|
StrippedDarkOakWood => "minecraft:stripped_dark_oak_wood",
|
||||||
StrippedMangroveWood => "minecraft:stripped_mangrove_wood",
|
StrippedMangroveWood => "minecraft:stripped_mangrove_wood",
|
||||||
StrippedCrimsonHyphae => "minecraft:stripped_crimson_hyphae",
|
StrippedCrimsonHyphae => "minecraft:stripped_crimson_hyphae",
|
||||||
|
@ -1777,6 +1819,7 @@ enum Item {
|
||||||
BirchWood => "minecraft:birch_wood",
|
BirchWood => "minecraft:birch_wood",
|
||||||
JungleWood => "minecraft:jungle_wood",
|
JungleWood => "minecraft:jungle_wood",
|
||||||
AcaciaWood => "minecraft:acacia_wood",
|
AcaciaWood => "minecraft:acacia_wood",
|
||||||
|
CherryWood => "minecraft:cherry_wood",
|
||||||
DarkOakWood => "minecraft:dark_oak_wood",
|
DarkOakWood => "minecraft:dark_oak_wood",
|
||||||
MangroveWood => "minecraft:mangrove_wood",
|
MangroveWood => "minecraft:mangrove_wood",
|
||||||
CrimsonHyphae => "minecraft:crimson_hyphae",
|
CrimsonHyphae => "minecraft:crimson_hyphae",
|
||||||
|
@ -1786,6 +1829,7 @@ enum Item {
|
||||||
BirchLeaves => "minecraft:birch_leaves",
|
BirchLeaves => "minecraft:birch_leaves",
|
||||||
JungleLeaves => "minecraft:jungle_leaves",
|
JungleLeaves => "minecraft:jungle_leaves",
|
||||||
AcaciaLeaves => "minecraft:acacia_leaves",
|
AcaciaLeaves => "minecraft:acacia_leaves",
|
||||||
|
CherryLeaves => "minecraft:cherry_leaves",
|
||||||
DarkOakLeaves => "minecraft:dark_oak_leaves",
|
DarkOakLeaves => "minecraft:dark_oak_leaves",
|
||||||
MangroveLeaves => "minecraft:mangrove_leaves",
|
MangroveLeaves => "minecraft:mangrove_leaves",
|
||||||
AzaleaLeaves => "minecraft:azalea_leaves",
|
AzaleaLeaves => "minecraft:azalea_leaves",
|
||||||
|
@ -1835,6 +1879,7 @@ enum Item {
|
||||||
Cornflower => "minecraft:cornflower",
|
Cornflower => "minecraft:cornflower",
|
||||||
LilyOfTheValley => "minecraft:lily_of_the_valley",
|
LilyOfTheValley => "minecraft:lily_of_the_valley",
|
||||||
WitherRose => "minecraft:wither_rose",
|
WitherRose => "minecraft:wither_rose",
|
||||||
|
Torchflower => "minecraft:torchflower",
|
||||||
SporeBlossom => "minecraft:spore_blossom",
|
SporeBlossom => "minecraft:spore_blossom",
|
||||||
BrownMushroom => "minecraft:brown_mushroom",
|
BrownMushroom => "minecraft:brown_mushroom",
|
||||||
RedMushroom => "minecraft:red_mushroom",
|
RedMushroom => "minecraft:red_mushroom",
|
||||||
|
@ -1848,6 +1893,7 @@ enum Item {
|
||||||
SugarCane => "minecraft:sugar_cane",
|
SugarCane => "minecraft:sugar_cane",
|
||||||
Kelp => "minecraft:kelp",
|
Kelp => "minecraft:kelp",
|
||||||
MossCarpet => "minecraft:moss_carpet",
|
MossCarpet => "minecraft:moss_carpet",
|
||||||
|
PinkPetals => "minecraft:pink_petals",
|
||||||
MossBlock => "minecraft:moss_block",
|
MossBlock => "minecraft:moss_block",
|
||||||
HangingRoots => "minecraft:hanging_roots",
|
HangingRoots => "minecraft:hanging_roots",
|
||||||
BigDripleaf => "minecraft:big_dripleaf",
|
BigDripleaf => "minecraft:big_dripleaf",
|
||||||
|
@ -1858,6 +1904,7 @@ enum Item {
|
||||||
BirchSlab => "minecraft:birch_slab",
|
BirchSlab => "minecraft:birch_slab",
|
||||||
JungleSlab => "minecraft:jungle_slab",
|
JungleSlab => "minecraft:jungle_slab",
|
||||||
AcaciaSlab => "minecraft:acacia_slab",
|
AcaciaSlab => "minecraft:acacia_slab",
|
||||||
|
CherrySlab => "minecraft:cherry_slab",
|
||||||
DarkOakSlab => "minecraft:dark_oak_slab",
|
DarkOakSlab => "minecraft:dark_oak_slab",
|
||||||
MangroveSlab => "minecraft:mangrove_slab",
|
MangroveSlab => "minecraft:mangrove_slab",
|
||||||
BambooSlab => "minecraft:bamboo_slab",
|
BambooSlab => "minecraft:bamboo_slab",
|
||||||
|
@ -1888,6 +1935,7 @@ enum Item {
|
||||||
Bricks => "minecraft:bricks",
|
Bricks => "minecraft:bricks",
|
||||||
Bookshelf => "minecraft:bookshelf",
|
Bookshelf => "minecraft:bookshelf",
|
||||||
ChiseledBookshelf => "minecraft:chiseled_bookshelf",
|
ChiseledBookshelf => "minecraft:chiseled_bookshelf",
|
||||||
|
DecoratedPot => "minecraft:decorated_pot",
|
||||||
MossyCobblestone => "minecraft:mossy_cobblestone",
|
MossyCobblestone => "minecraft:mossy_cobblestone",
|
||||||
Obsidian => "minecraft:obsidian",
|
Obsidian => "minecraft:obsidian",
|
||||||
Torch => "minecraft:torch",
|
Torch => "minecraft:torch",
|
||||||
|
@ -1915,6 +1963,7 @@ enum Item {
|
||||||
BirchFence => "minecraft:birch_fence",
|
BirchFence => "minecraft:birch_fence",
|
||||||
JungleFence => "minecraft:jungle_fence",
|
JungleFence => "minecraft:jungle_fence",
|
||||||
AcaciaFence => "minecraft:acacia_fence",
|
AcaciaFence => "minecraft:acacia_fence",
|
||||||
|
CherryFence => "minecraft:cherry_fence",
|
||||||
DarkOakFence => "minecraft:dark_oak_fence",
|
DarkOakFence => "minecraft:dark_oak_fence",
|
||||||
MangroveFence => "minecraft:mangrove_fence",
|
MangroveFence => "minecraft:mangrove_fence",
|
||||||
BambooFence => "minecraft:bamboo_fence",
|
BambooFence => "minecraft:bamboo_fence",
|
||||||
|
@ -1986,6 +2035,7 @@ enum Item {
|
||||||
BirchStairs => "minecraft:birch_stairs",
|
BirchStairs => "minecraft:birch_stairs",
|
||||||
JungleStairs => "minecraft:jungle_stairs",
|
JungleStairs => "minecraft:jungle_stairs",
|
||||||
AcaciaStairs => "minecraft:acacia_stairs",
|
AcaciaStairs => "minecraft:acacia_stairs",
|
||||||
|
CherryStairs => "minecraft:cherry_stairs",
|
||||||
DarkOakStairs => "minecraft:dark_oak_stairs",
|
DarkOakStairs => "minecraft:dark_oak_stairs",
|
||||||
MangroveStairs => "minecraft:mangrove_stairs",
|
MangroveStairs => "minecraft:mangrove_stairs",
|
||||||
BambooStairs => "minecraft:bamboo_stairs",
|
BambooStairs => "minecraft:bamboo_stairs",
|
||||||
|
@ -2284,6 +2334,7 @@ enum Item {
|
||||||
BirchButton => "minecraft:birch_button",
|
BirchButton => "minecraft:birch_button",
|
||||||
JungleButton => "minecraft:jungle_button",
|
JungleButton => "minecraft:jungle_button",
|
||||||
AcaciaButton => "minecraft:acacia_button",
|
AcaciaButton => "minecraft:acacia_button",
|
||||||
|
CherryButton => "minecraft:cherry_button",
|
||||||
DarkOakButton => "minecraft:dark_oak_button",
|
DarkOakButton => "minecraft:dark_oak_button",
|
||||||
MangroveButton => "minecraft:mangrove_button",
|
MangroveButton => "minecraft:mangrove_button",
|
||||||
BambooButton => "minecraft:bamboo_button",
|
BambooButton => "minecraft:bamboo_button",
|
||||||
|
@ -2298,6 +2349,7 @@ enum Item {
|
||||||
BirchPressurePlate => "minecraft:birch_pressure_plate",
|
BirchPressurePlate => "minecraft:birch_pressure_plate",
|
||||||
JunglePressurePlate => "minecraft:jungle_pressure_plate",
|
JunglePressurePlate => "minecraft:jungle_pressure_plate",
|
||||||
AcaciaPressurePlate => "minecraft:acacia_pressure_plate",
|
AcaciaPressurePlate => "minecraft:acacia_pressure_plate",
|
||||||
|
CherryPressurePlate => "minecraft:cherry_pressure_plate",
|
||||||
DarkOakPressurePlate => "minecraft:dark_oak_pressure_plate",
|
DarkOakPressurePlate => "minecraft:dark_oak_pressure_plate",
|
||||||
MangrovePressurePlate => "minecraft:mangrove_pressure_plate",
|
MangrovePressurePlate => "minecraft:mangrove_pressure_plate",
|
||||||
BambooPressurePlate => "minecraft:bamboo_pressure_plate",
|
BambooPressurePlate => "minecraft:bamboo_pressure_plate",
|
||||||
|
@ -2309,6 +2361,7 @@ enum Item {
|
||||||
BirchDoor => "minecraft:birch_door",
|
BirchDoor => "minecraft:birch_door",
|
||||||
JungleDoor => "minecraft:jungle_door",
|
JungleDoor => "minecraft:jungle_door",
|
||||||
AcaciaDoor => "minecraft:acacia_door",
|
AcaciaDoor => "minecraft:acacia_door",
|
||||||
|
CherryDoor => "minecraft:cherry_door",
|
||||||
DarkOakDoor => "minecraft:dark_oak_door",
|
DarkOakDoor => "minecraft:dark_oak_door",
|
||||||
MangroveDoor => "minecraft:mangrove_door",
|
MangroveDoor => "minecraft:mangrove_door",
|
||||||
BambooDoor => "minecraft:bamboo_door",
|
BambooDoor => "minecraft:bamboo_door",
|
||||||
|
@ -2320,6 +2373,7 @@ enum Item {
|
||||||
BirchTrapdoor => "minecraft:birch_trapdoor",
|
BirchTrapdoor => "minecraft:birch_trapdoor",
|
||||||
JungleTrapdoor => "minecraft:jungle_trapdoor",
|
JungleTrapdoor => "minecraft:jungle_trapdoor",
|
||||||
AcaciaTrapdoor => "minecraft:acacia_trapdoor",
|
AcaciaTrapdoor => "minecraft:acacia_trapdoor",
|
||||||
|
CherryTrapdoor => "minecraft:cherry_trapdoor",
|
||||||
DarkOakTrapdoor => "minecraft:dark_oak_trapdoor",
|
DarkOakTrapdoor => "minecraft:dark_oak_trapdoor",
|
||||||
MangroveTrapdoor => "minecraft:mangrove_trapdoor",
|
MangroveTrapdoor => "minecraft:mangrove_trapdoor",
|
||||||
BambooTrapdoor => "minecraft:bamboo_trapdoor",
|
BambooTrapdoor => "minecraft:bamboo_trapdoor",
|
||||||
|
@ -2330,6 +2384,7 @@ enum Item {
|
||||||
BirchFenceGate => "minecraft:birch_fence_gate",
|
BirchFenceGate => "minecraft:birch_fence_gate",
|
||||||
JungleFenceGate => "minecraft:jungle_fence_gate",
|
JungleFenceGate => "minecraft:jungle_fence_gate",
|
||||||
AcaciaFenceGate => "minecraft:acacia_fence_gate",
|
AcaciaFenceGate => "minecraft:acacia_fence_gate",
|
||||||
|
CherryFenceGate => "minecraft:cherry_fence_gate",
|
||||||
DarkOakFenceGate => "minecraft:dark_oak_fence_gate",
|
DarkOakFenceGate => "minecraft:dark_oak_fence_gate",
|
||||||
MangroveFenceGate => "minecraft:mangrove_fence_gate",
|
MangroveFenceGate => "minecraft:mangrove_fence_gate",
|
||||||
BambooFenceGate => "minecraft:bamboo_fence_gate",
|
BambooFenceGate => "minecraft:bamboo_fence_gate",
|
||||||
|
@ -2358,6 +2413,8 @@ enum Item {
|
||||||
JungleChestBoat => "minecraft:jungle_chest_boat",
|
JungleChestBoat => "minecraft:jungle_chest_boat",
|
||||||
AcaciaBoat => "minecraft:acacia_boat",
|
AcaciaBoat => "minecraft:acacia_boat",
|
||||||
AcaciaChestBoat => "minecraft:acacia_chest_boat",
|
AcaciaChestBoat => "minecraft:acacia_chest_boat",
|
||||||
|
CherryBoat => "minecraft:cherry_boat",
|
||||||
|
CherryChestBoat => "minecraft:cherry_chest_boat",
|
||||||
DarkOakBoat => "minecraft:dark_oak_boat",
|
DarkOakBoat => "minecraft:dark_oak_boat",
|
||||||
DarkOakChestBoat => "minecraft:dark_oak_chest_boat",
|
DarkOakChestBoat => "minecraft:dark_oak_chest_boat",
|
||||||
MangroveBoat => "minecraft:mangrove_boat",
|
MangroveBoat => "minecraft:mangrove_boat",
|
||||||
|
@ -2461,6 +2518,7 @@ enum Item {
|
||||||
BirchSign => "minecraft:birch_sign",
|
BirchSign => "minecraft:birch_sign",
|
||||||
JungleSign => "minecraft:jungle_sign",
|
JungleSign => "minecraft:jungle_sign",
|
||||||
AcaciaSign => "minecraft:acacia_sign",
|
AcaciaSign => "minecraft:acacia_sign",
|
||||||
|
CherrySign => "minecraft:cherry_sign",
|
||||||
DarkOakSign => "minecraft:dark_oak_sign",
|
DarkOakSign => "minecraft:dark_oak_sign",
|
||||||
MangroveSign => "minecraft:mangrove_sign",
|
MangroveSign => "minecraft:mangrove_sign",
|
||||||
BambooSign => "minecraft:bamboo_sign",
|
BambooSign => "minecraft:bamboo_sign",
|
||||||
|
@ -2471,6 +2529,7 @@ enum Item {
|
||||||
BirchHangingSign => "minecraft:birch_hanging_sign",
|
BirchHangingSign => "minecraft:birch_hanging_sign",
|
||||||
JungleHangingSign => "minecraft:jungle_hanging_sign",
|
JungleHangingSign => "minecraft:jungle_hanging_sign",
|
||||||
AcaciaHangingSign => "minecraft:acacia_hanging_sign",
|
AcaciaHangingSign => "minecraft:acacia_hanging_sign",
|
||||||
|
CherryHangingSign => "minecraft:cherry_hanging_sign",
|
||||||
DarkOakHangingSign => "minecraft:dark_oak_hanging_sign",
|
DarkOakHangingSign => "minecraft:dark_oak_hanging_sign",
|
||||||
MangroveHangingSign => "minecraft:mangrove_hanging_sign",
|
MangroveHangingSign => "minecraft:mangrove_hanging_sign",
|
||||||
BambooHangingSign => "minecraft:bamboo_hanging_sign",
|
BambooHangingSign => "minecraft:bamboo_hanging_sign",
|
||||||
|
@ -2628,6 +2687,7 @@ enum Item {
|
||||||
SkeletonSpawnEgg => "minecraft:skeleton_spawn_egg",
|
SkeletonSpawnEgg => "minecraft:skeleton_spawn_egg",
|
||||||
SkeletonHorseSpawnEgg => "minecraft:skeleton_horse_spawn_egg",
|
SkeletonHorseSpawnEgg => "minecraft:skeleton_horse_spawn_egg",
|
||||||
SlimeSpawnEgg => "minecraft:slime_spawn_egg",
|
SlimeSpawnEgg => "minecraft:slime_spawn_egg",
|
||||||
|
SnifferSpawnEgg => "minecraft:sniffer_spawn_egg",
|
||||||
SnowGolemSpawnEgg => "minecraft:snow_golem_spawn_egg",
|
SnowGolemSpawnEgg => "minecraft:snow_golem_spawn_egg",
|
||||||
SpiderSpawnEgg => "minecraft:spider_spawn_egg",
|
SpiderSpawnEgg => "minecraft:spider_spawn_egg",
|
||||||
SquidSpawnEgg => "minecraft:squid_spawn_egg",
|
SquidSpawnEgg => "minecraft:squid_spawn_egg",
|
||||||
|
@ -2713,6 +2773,7 @@ enum Item {
|
||||||
EndCrystal => "minecraft:end_crystal",
|
EndCrystal => "minecraft:end_crystal",
|
||||||
ChorusFruit => "minecraft:chorus_fruit",
|
ChorusFruit => "minecraft:chorus_fruit",
|
||||||
PoppedChorusFruit => "minecraft:popped_chorus_fruit",
|
PoppedChorusFruit => "minecraft:popped_chorus_fruit",
|
||||||
|
TorchflowerSeeds => "minecraft:torchflower_seeds",
|
||||||
Beetroot => "minecraft:beetroot",
|
Beetroot => "minecraft:beetroot",
|
||||||
BeetrootSeeds => "minecraft:beetroot_seeds",
|
BeetrootSeeds => "minecraft:beetroot_seeds",
|
||||||
BeetrootSoup => "minecraft:beetroot_soup",
|
BeetrootSoup => "minecraft:beetroot_soup",
|
||||||
|
@ -2821,6 +2882,23 @@ enum Item {
|
||||||
PearlescentFroglight => "minecraft:pearlescent_froglight",
|
PearlescentFroglight => "minecraft:pearlescent_froglight",
|
||||||
Frogspawn => "minecraft:frogspawn",
|
Frogspawn => "minecraft:frogspawn",
|
||||||
EchoShard => "minecraft:echo_shard",
|
EchoShard => "minecraft:echo_shard",
|
||||||
|
Brush => "minecraft:brush",
|
||||||
|
NetheriteUpgradeSmithingTemplate => "minecraft:netherite_upgrade_smithing_template",
|
||||||
|
SentryArmorTrimSmithingTemplate => "minecraft:sentry_armor_trim_smithing_template",
|
||||||
|
DuneArmorTrimSmithingTemplate => "minecraft:dune_armor_trim_smithing_template",
|
||||||
|
CoastArmorTrimSmithingTemplate => "minecraft:coast_armor_trim_smithing_template",
|
||||||
|
WildArmorTrimSmithingTemplate => "minecraft:wild_armor_trim_smithing_template",
|
||||||
|
WardArmorTrimSmithingTemplate => "minecraft:ward_armor_trim_smithing_template",
|
||||||
|
EyeArmorTrimSmithingTemplate => "minecraft:eye_armor_trim_smithing_template",
|
||||||
|
VexArmorTrimSmithingTemplate => "minecraft:vex_armor_trim_smithing_template",
|
||||||
|
TideArmorTrimSmithingTemplate => "minecraft:tide_armor_trim_smithing_template",
|
||||||
|
SnoutArmorTrimSmithingTemplate => "minecraft:snout_armor_trim_smithing_template",
|
||||||
|
RibArmorTrimSmithingTemplate => "minecraft:rib_armor_trim_smithing_template",
|
||||||
|
SpireArmorTrimSmithingTemplate => "minecraft:spire_armor_trim_smithing_template",
|
||||||
|
PotteryShardArcher => "minecraft:pottery_shard_archer",
|
||||||
|
PotteryShardPrize => "minecraft:pottery_shard_prize",
|
||||||
|
PotteryShardArmsUp => "minecraft:pottery_shard_arms_up",
|
||||||
|
PotteryShardSkull => "minecraft:pottery_shard_skull",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3007,6 +3085,10 @@ enum MemoryModuleKind {
|
||||||
LikedNoteblock => "minecraft:liked_noteblock",
|
LikedNoteblock => "minecraft:liked_noteblock",
|
||||||
LikedNoteblockCooldownTicks => "minecraft:liked_noteblock_cooldown_ticks",
|
LikedNoteblockCooldownTicks => "minecraft:liked_noteblock_cooldown_ticks",
|
||||||
ItemPickupCooldownTicks => "minecraft:item_pickup_cooldown_ticks",
|
ItemPickupCooldownTicks => "minecraft:item_pickup_cooldown_ticks",
|
||||||
|
SnifferExploredPositions => "minecraft:sniffer_explored_positions",
|
||||||
|
SnifferSniffingTarget => "minecraft:sniffer_sniffing_target",
|
||||||
|
SnifferDigging => "minecraft:sniffer_digging",
|
||||||
|
SnifferHappy => "minecraft:sniffer_happy",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3032,6 +3114,7 @@ enum Menu {
|
||||||
Loom => "minecraft:loom",
|
Loom => "minecraft:loom",
|
||||||
Merchant => "minecraft:merchant",
|
Merchant => "minecraft:merchant",
|
||||||
ShulkerBox => "minecraft:shulker_box",
|
ShulkerBox => "minecraft:shulker_box",
|
||||||
|
LegacySmithing => "minecraft:legacy_smithing",
|
||||||
Smithing => "minecraft:smithing",
|
Smithing => "minecraft:smithing",
|
||||||
Smoker => "minecraft:smoker",
|
Smoker => "minecraft:smoker",
|
||||||
CartographyTable => "minecraft:cartography_table",
|
CartographyTable => "minecraft:cartography_table",
|
||||||
|
@ -3143,6 +3226,9 @@ enum ParticleKind {
|
||||||
Firework => "minecraft:firework",
|
Firework => "minecraft:firework",
|
||||||
Fishing => "minecraft:fishing",
|
Fishing => "minecraft:fishing",
|
||||||
Flame => "minecraft:flame",
|
Flame => "minecraft:flame",
|
||||||
|
DrippingCherryLeaves => "minecraft:dripping_cherry_leaves",
|
||||||
|
FallingCherryLeaves => "minecraft:falling_cherry_leaves",
|
||||||
|
LandingCherryLeaves => "minecraft:landing_cherry_leaves",
|
||||||
SculkSoul => "minecraft:sculk_soul",
|
SculkSoul => "minecraft:sculk_soul",
|
||||||
SculkCharge => "minecraft:sculk_charge",
|
SculkCharge => "minecraft:sculk_charge",
|
||||||
SculkChargePop => "minecraft:sculk_charge_pop",
|
SculkChargePop => "minecraft:sculk_charge_pop",
|
||||||
|
@ -3321,6 +3407,9 @@ enum RecipeSerializer {
|
||||||
CampfireCooking => "minecraft:campfire_cooking",
|
CampfireCooking => "minecraft:campfire_cooking",
|
||||||
Stonecutting => "minecraft:stonecutting",
|
Stonecutting => "minecraft:stonecutting",
|
||||||
Smithing => "minecraft:smithing",
|
Smithing => "minecraft:smithing",
|
||||||
|
SmithingTransform => "minecraft:smithing_transform",
|
||||||
|
SmithingTrim => "minecraft:smithing_trim",
|
||||||
|
CraftingDecoratedPot => "minecraft:crafting_decorated_pot",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3551,6 +3640,8 @@ enum SoundEvent {
|
||||||
ItemBottleFill => "minecraft:item.bottle.fill",
|
ItemBottleFill => "minecraft:item.bottle.fill",
|
||||||
ItemBottleFillDragonbreath => "minecraft:item.bottle.fill_dragonbreath",
|
ItemBottleFillDragonbreath => "minecraft:item.bottle.fill_dragonbreath",
|
||||||
BlockBrewingStandBrew => "minecraft:block.brewing_stand.brew",
|
BlockBrewingStandBrew => "minecraft:block.brewing_stand.brew",
|
||||||
|
ItemBrushBrushing => "minecraft:item.brush.brushing",
|
||||||
|
ItemBrushBrushSandCompleted => "minecraft:item.brush.brush_sand_completed",
|
||||||
BlockBubbleColumnBubblePop => "minecraft:block.bubble_column.bubble_pop",
|
BlockBubbleColumnBubblePop => "minecraft:block.bubble_column.bubble_pop",
|
||||||
BlockBubbleColumnUpwardsAmbient => "minecraft:block.bubble_column.upwards_ambient",
|
BlockBubbleColumnUpwardsAmbient => "minecraft:block.bubble_column.upwards_ambient",
|
||||||
BlockBubbleColumnUpwardsInside => "minecraft:block.bubble_column.upwards_inside",
|
BlockBubbleColumnUpwardsInside => "minecraft:block.bubble_column.upwards_inside",
|
||||||
|
@ -3616,6 +3707,36 @@ enum SoundEvent {
|
||||||
BlockChainHit => "minecraft:block.chain.hit",
|
BlockChainHit => "minecraft:block.chain.hit",
|
||||||
BlockChainPlace => "minecraft:block.chain.place",
|
BlockChainPlace => "minecraft:block.chain.place",
|
||||||
BlockChainStep => "minecraft:block.chain.step",
|
BlockChainStep => "minecraft:block.chain.step",
|
||||||
|
BlockCherryWoodBreak => "minecraft:block.cherry_wood.break",
|
||||||
|
BlockCherryWoodFall => "minecraft:block.cherry_wood.fall",
|
||||||
|
BlockCherryWoodHit => "minecraft:block.cherry_wood.hit",
|
||||||
|
BlockCherryWoodPlace => "minecraft:block.cherry_wood.place",
|
||||||
|
BlockCherryWoodStep => "minecraft:block.cherry_wood.step",
|
||||||
|
BlockCherrySaplingBreak => "minecraft:block.cherry_sapling.break",
|
||||||
|
BlockCherrySaplingFall => "minecraft:block.cherry_sapling.fall",
|
||||||
|
BlockCherrySaplingHit => "minecraft:block.cherry_sapling.hit",
|
||||||
|
BlockCherrySaplingPlace => "minecraft:block.cherry_sapling.place",
|
||||||
|
BlockCherrySaplingStep => "minecraft:block.cherry_sapling.step",
|
||||||
|
BlockCherryLeavesBreak => "minecraft:block.cherry_leaves.break",
|
||||||
|
BlockCherryLeavesFall => "minecraft:block.cherry_leaves.fall",
|
||||||
|
BlockCherryLeavesHit => "minecraft:block.cherry_leaves.hit",
|
||||||
|
BlockCherryLeavesPlace => "minecraft:block.cherry_leaves.place",
|
||||||
|
BlockCherryLeavesStep => "minecraft:block.cherry_leaves.step",
|
||||||
|
BlockCherryWoodHangingSignStep => "minecraft:block.cherry_wood_hanging_sign.step",
|
||||||
|
BlockCherryWoodHangingSignBreak => "minecraft:block.cherry_wood_hanging_sign.break",
|
||||||
|
BlockCherryWoodHangingSignFall => "minecraft:block.cherry_wood_hanging_sign.fall",
|
||||||
|
BlockCherryWoodHangingSignHit => "minecraft:block.cherry_wood_hanging_sign.hit",
|
||||||
|
BlockCherryWoodHangingSignPlace => "minecraft:block.cherry_wood_hanging_sign.place",
|
||||||
|
BlockCherryWoodDoorClose => "minecraft:block.cherry_wood_door.close",
|
||||||
|
BlockCherryWoodDoorOpen => "minecraft:block.cherry_wood_door.open",
|
||||||
|
BlockCherryWoodTrapdoorClose => "minecraft:block.cherry_wood_trapdoor.close",
|
||||||
|
BlockCherryWoodTrapdoorOpen => "minecraft:block.cherry_wood_trapdoor.open",
|
||||||
|
BlockCherryWoodButtonClickOff => "minecraft:block.cherry_wood_button.click_off",
|
||||||
|
BlockCherryWoodButtonClickOn => "minecraft:block.cherry_wood_button.click_on",
|
||||||
|
BlockCherryWoodPressurePlateClickOff => "minecraft:block.cherry_wood_pressure_plate.click_off",
|
||||||
|
BlockCherryWoodPressurePlateClickOn => "minecraft:block.cherry_wood_pressure_plate.click_on",
|
||||||
|
BlockCherryWoodFenceGateClose => "minecraft:block.cherry_wood_fence_gate.close",
|
||||||
|
BlockCherryWoodFenceGateOpen => "minecraft:block.cherry_wood_fence_gate.open",
|
||||||
BlockChestClose => "minecraft:block.chest.close",
|
BlockChestClose => "minecraft:block.chest.close",
|
||||||
BlockChestLocked => "minecraft:block.chest.locked",
|
BlockChestLocked => "minecraft:block.chest.locked",
|
||||||
BlockChestOpen => "minecraft:block.chest.open",
|
BlockChestOpen => "minecraft:block.chest.open",
|
||||||
|
@ -3678,6 +3799,12 @@ enum SoundEvent {
|
||||||
ItemCrossbowQuickCharge2 => "minecraft:item.crossbow.quick_charge_2",
|
ItemCrossbowQuickCharge2 => "minecraft:item.crossbow.quick_charge_2",
|
||||||
ItemCrossbowQuickCharge3 => "minecraft:item.crossbow.quick_charge_3",
|
ItemCrossbowQuickCharge3 => "minecraft:item.crossbow.quick_charge_3",
|
||||||
ItemCrossbowShoot => "minecraft:item.crossbow.shoot",
|
ItemCrossbowShoot => "minecraft:item.crossbow.shoot",
|
||||||
|
BlockDecoratedPotBreak => "minecraft:block.decorated_pot.break",
|
||||||
|
BlockDecoratedPotFall => "minecraft:block.decorated_pot.fall",
|
||||||
|
BlockDecoratedPotHit => "minecraft:block.decorated_pot.hit",
|
||||||
|
BlockDecoratedPotStep => "minecraft:block.decorated_pot.step",
|
||||||
|
BlockDecoratedPotPlace => "minecraft:block.decorated_pot.place",
|
||||||
|
BlockDecoratedPotShatter => "minecraft:block.decorated_pot.shatter",
|
||||||
BlockDeepslateBricksBreak => "minecraft:block.deepslate_bricks.break",
|
BlockDeepslateBricksBreak => "minecraft:block.deepslate_bricks.break",
|
||||||
BlockDeepslateBricksFall => "minecraft:block.deepslate_bricks.fall",
|
BlockDeepslateBricksFall => "minecraft:block.deepslate_bricks.fall",
|
||||||
BlockDeepslateBricksHit => "minecraft:block.deepslate_bricks.hit",
|
BlockDeepslateBricksHit => "minecraft:block.deepslate_bricks.hit",
|
||||||
|
@ -3820,6 +3947,11 @@ enum SoundEvent {
|
||||||
EntityFoxSniff => "minecraft:entity.fox.sniff",
|
EntityFoxSniff => "minecraft:entity.fox.sniff",
|
||||||
EntityFoxSpit => "minecraft:entity.fox.spit",
|
EntityFoxSpit => "minecraft:entity.fox.spit",
|
||||||
EntityFoxTeleport => "minecraft:entity.fox.teleport",
|
EntityFoxTeleport => "minecraft:entity.fox.teleport",
|
||||||
|
BlockSuspiciousSandBreak => "minecraft:block.suspicious_sand.break",
|
||||||
|
BlockSuspiciousSandStep => "minecraft:block.suspicious_sand.step",
|
||||||
|
BlockSuspiciousSandPlace => "minecraft:block.suspicious_sand.place",
|
||||||
|
BlockSuspiciousSandHit => "minecraft:block.suspicious_sand.hit",
|
||||||
|
BlockSuspiciousSandFall => "minecraft:block.suspicious_sand.fall",
|
||||||
BlockFroglightBreak => "minecraft:block.froglight.break",
|
BlockFroglightBreak => "minecraft:block.froglight.break",
|
||||||
BlockFroglightFall => "minecraft:block.froglight.fall",
|
BlockFroglightFall => "minecraft:block.froglight.fall",
|
||||||
BlockFroglightHit => "minecraft:block.froglight.hit",
|
BlockFroglightHit => "minecraft:block.froglight.hit",
|
||||||
|
@ -4086,6 +4218,11 @@ enum SoundEvent {
|
||||||
BlockMossCarpetHit => "minecraft:block.moss_carpet.hit",
|
BlockMossCarpetHit => "minecraft:block.moss_carpet.hit",
|
||||||
BlockMossCarpetPlace => "minecraft:block.moss_carpet.place",
|
BlockMossCarpetPlace => "minecraft:block.moss_carpet.place",
|
||||||
BlockMossCarpetStep => "minecraft:block.moss_carpet.step",
|
BlockMossCarpetStep => "minecraft:block.moss_carpet.step",
|
||||||
|
BlockPinkPetalsBreak => "minecraft:block.pink_petals.break",
|
||||||
|
BlockPinkPetalsFall => "minecraft:block.pink_petals.fall",
|
||||||
|
BlockPinkPetalsHit => "minecraft:block.pink_petals.hit",
|
||||||
|
BlockPinkPetalsPlace => "minecraft:block.pink_petals.place",
|
||||||
|
BlockPinkPetalsStep => "minecraft:block.pink_petals.step",
|
||||||
BlockMossBreak => "minecraft:block.moss.break",
|
BlockMossBreak => "minecraft:block.moss.break",
|
||||||
BlockMossFall => "minecraft:block.moss.fall",
|
BlockMossFall => "minecraft:block.moss.fall",
|
||||||
BlockMossHit => "minecraft:block.moss.hit",
|
BlockMossHit => "minecraft:block.moss.hit",
|
||||||
|
@ -4144,6 +4281,7 @@ enum SoundEvent {
|
||||||
MusicOverworldJungleAndForest => "minecraft:music.overworld.jungle_and_forest",
|
MusicOverworldJungleAndForest => "minecraft:music.overworld.jungle_and_forest",
|
||||||
MusicOverworldOldGrowthTaiga => "minecraft:music.overworld.old_growth_taiga",
|
MusicOverworldOldGrowthTaiga => "minecraft:music.overworld.old_growth_taiga",
|
||||||
MusicOverworldMeadow => "minecraft:music.overworld.meadow",
|
MusicOverworldMeadow => "minecraft:music.overworld.meadow",
|
||||||
|
MusicOverworldCherryGrove => "minecraft:music.overworld.cherry_grove",
|
||||||
MusicNetherNetherWastes => "minecraft:music.nether.nether_wastes",
|
MusicNetherNetherWastes => "minecraft:music.nether.nether_wastes",
|
||||||
MusicOverworldFrozenPeaks => "minecraft:music.overworld.frozen_peaks",
|
MusicOverworldFrozenPeaks => "minecraft:music.overworld.frozen_peaks",
|
||||||
MusicOverworldSnowySlopes => "minecraft:music.overworld.snowy_slopes",
|
MusicOverworldSnowySlopes => "minecraft:music.overworld.snowy_slopes",
|
||||||
|
@ -4173,6 +4311,7 @@ enum SoundEvent {
|
||||||
BlockNetherWoodPressurePlateClickOn => "minecraft:block.nether_wood_pressure_plate.click_on",
|
BlockNetherWoodPressurePlateClickOn => "minecraft:block.nether_wood_pressure_plate.click_on",
|
||||||
BlockNetherWoodFenceGateClose => "minecraft:block.nether_wood_fence_gate.close",
|
BlockNetherWoodFenceGateClose => "minecraft:block.nether_wood_fence_gate.close",
|
||||||
BlockNetherWoodFenceGateOpen => "minecraft:block.nether_wood_fence_gate.open",
|
BlockNetherWoodFenceGateOpen => "minecraft:block.nether_wood_fence_gate.open",
|
||||||
|
IntentionallyEmpty => "minecraft:intentionally_empty",
|
||||||
BlockPackedMudBreak => "minecraft:block.packed_mud.break",
|
BlockPackedMudBreak => "minecraft:block.packed_mud.break",
|
||||||
BlockPackedMudFall => "minecraft:block.packed_mud.fall",
|
BlockPackedMudFall => "minecraft:block.packed_mud.fall",
|
||||||
BlockPackedMudHit => "minecraft:block.packed_mud.hit",
|
BlockPackedMudHit => "minecraft:block.packed_mud.hit",
|
||||||
|
@ -4545,6 +4684,18 @@ enum SoundEvent {
|
||||||
EntitySlimeSquishSmall => "minecraft:entity.slime.squish_small",
|
EntitySlimeSquishSmall => "minecraft:entity.slime.squish_small",
|
||||||
BlockSmithingTableUse => "minecraft:block.smithing_table.use",
|
BlockSmithingTableUse => "minecraft:block.smithing_table.use",
|
||||||
BlockSmokerSmoke => "minecraft:block.smoker.smoke",
|
BlockSmokerSmoke => "minecraft:block.smoker.smoke",
|
||||||
|
EntitySnifferStep => "minecraft:entity.sniffer.step",
|
||||||
|
EntitySnifferEat => "minecraft:entity.sniffer.eat",
|
||||||
|
EntitySnifferIdle => "minecraft:entity.sniffer.idle",
|
||||||
|
EntitySnifferHurt => "minecraft:entity.sniffer.hurt",
|
||||||
|
EntitySnifferDeath => "minecraft:entity.sniffer.death",
|
||||||
|
EntitySnifferDropSeed => "minecraft:entity.sniffer.drop_seed",
|
||||||
|
EntitySnifferScenting => "minecraft:entity.sniffer.scenting",
|
||||||
|
EntitySnifferSniffing => "minecraft:entity.sniffer.sniffing",
|
||||||
|
EntitySnifferSearching => "minecraft:entity.sniffer.searching",
|
||||||
|
EntitySnifferDigging => "minecraft:entity.sniffer.digging",
|
||||||
|
EntitySnifferDiggingStop => "minecraft:entity.sniffer.digging_stop",
|
||||||
|
EntitySnifferHappy => "minecraft:entity.sniffer.happy",
|
||||||
EntitySnowballThrow => "minecraft:entity.snowball.throw",
|
EntitySnowballThrow => "minecraft:entity.snowball.throw",
|
||||||
BlockSnowBreak => "minecraft:block.snow.break",
|
BlockSnowBreak => "minecraft:block.snow.break",
|
||||||
BlockSnowFall => "minecraft:block.snow.fall",
|
BlockSnowFall => "minecraft:block.snow.fall",
|
||||||
|
@ -4734,14 +4885,14 @@ enum SoundEvent {
|
||||||
BlockWoodenDoorOpen => "minecraft:block.wooden_door.open",
|
BlockWoodenDoorOpen => "minecraft:block.wooden_door.open",
|
||||||
BlockWoodenTrapdoorClose => "minecraft:block.wooden_trapdoor.close",
|
BlockWoodenTrapdoorClose => "minecraft:block.wooden_trapdoor.close",
|
||||||
BlockWoodenTrapdoorOpen => "minecraft:block.wooden_trapdoor.open",
|
BlockWoodenTrapdoorOpen => "minecraft:block.wooden_trapdoor.open",
|
||||||
BlockWoodBreak => "minecraft:block.wood.break",
|
|
||||||
BlockWoodenButtonClickOff => "minecraft:block.wooden_button.click_off",
|
BlockWoodenButtonClickOff => "minecraft:block.wooden_button.click_off",
|
||||||
BlockWoodenButtonClickOn => "minecraft:block.wooden_button.click_on",
|
BlockWoodenButtonClickOn => "minecraft:block.wooden_button.click_on",
|
||||||
|
BlockWoodenPressurePlateClickOff => "minecraft:block.wooden_pressure_plate.click_off",
|
||||||
|
BlockWoodenPressurePlateClickOn => "minecraft:block.wooden_pressure_plate.click_on",
|
||||||
|
BlockWoodBreak => "minecraft:block.wood.break",
|
||||||
BlockWoodFall => "minecraft:block.wood.fall",
|
BlockWoodFall => "minecraft:block.wood.fall",
|
||||||
BlockWoodHit => "minecraft:block.wood.hit",
|
BlockWoodHit => "minecraft:block.wood.hit",
|
||||||
BlockWoodPlace => "minecraft:block.wood.place",
|
BlockWoodPlace => "minecraft:block.wood.place",
|
||||||
BlockWoodenPressurePlateClickOff => "minecraft:block.wooden_pressure_plate.click_off",
|
|
||||||
BlockWoodenPressurePlateClickOn => "minecraft:block.wooden_pressure_plate.click_on",
|
|
||||||
BlockWoodStep => "minecraft:block.wood.step",
|
BlockWoodStep => "minecraft:block.wood.step",
|
||||||
BlockWoolBreak => "minecraft:block.wool.break",
|
BlockWoolBreak => "minecraft:block.wool.break",
|
||||||
BlockWoolFall => "minecraft:block.wool.fall",
|
BlockWoolFall => "minecraft:block.wool.fall",
|
||||||
|
@ -4985,6 +5136,7 @@ enum WorldgenFoliagePlacerKind {
|
||||||
MegaPineFoliagePlacer => "minecraft:mega_pine_foliage_placer",
|
MegaPineFoliagePlacer => "minecraft:mega_pine_foliage_placer",
|
||||||
DarkOakFoliagePlacer => "minecraft:dark_oak_foliage_placer",
|
DarkOakFoliagePlacer => "minecraft:dark_oak_foliage_placer",
|
||||||
RandomSpreadFoliagePlacer => "minecraft:random_spread_foliage_placer",
|
RandomSpreadFoliagePlacer => "minecraft:random_spread_foliage_placer",
|
||||||
|
CherryFoliagePlacer => "minecraft:cherry_foliage_placer",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5174,5 +5326,17 @@ enum WorldgenTrunkPlacerKind {
|
||||||
FancyTrunkPlacer => "minecraft:fancy_trunk_placer",
|
FancyTrunkPlacer => "minecraft:fancy_trunk_placer",
|
||||||
BendingTrunkPlacer => "minecraft:bending_trunk_placer",
|
BendingTrunkPlacer => "minecraft:bending_trunk_placer",
|
||||||
UpwardsBranchingTrunkPlacer => "minecraft:upwards_branching_trunk_placer",
|
UpwardsBranchingTrunkPlacer => "minecraft:upwards_branching_trunk_placer",
|
||||||
|
CherryTrunkPlacer => "minecraft:cherry_trunk_placer",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
registry! {
|
||||||
|
enum DecoratedPotPatterns {
|
||||||
|
PotteryPatternArcher => "minecraft:pottery_pattern_archer",
|
||||||
|
PotteryPatternPrize => "minecraft:pottery_pattern_prize",
|
||||||
|
PotteryPatternArmsUp => "minecraft:pottery_pattern_arms_up",
|
||||||
|
PotteryPatternSkull => "minecraft:pottery_pattern_skull",
|
||||||
|
DecoratedPotSide => "minecraft:decorated_pot_side",
|
||||||
|
DecoratedPotBase => "minecraft:decorated_pot_base",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
//! Define some types needed for entity metadata.
|
//! Define some types needed for entity metadata.
|
||||||
|
|
||||||
use azalea_block::BlockState;
|
|
||||||
use azalea_buf::{
|
use azalea_buf::{
|
||||||
BufReadError, McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable,
|
BufReadError, McBuf, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable,
|
||||||
};
|
};
|
||||||
use azalea_chat::FormattedText;
|
use azalea_chat::FormattedText;
|
||||||
use azalea_core::{BlockPos, Direction, GlobalPos, Particle, Slot};
|
use azalea_core::{BlockPos, Direction, GlobalPos, Particle, Slot, Vec3};
|
||||||
use bevy_ecs::component::Component;
|
use bevy_ecs::component::Component;
|
||||||
use derive_more::Deref;
|
use derive_more::Deref;
|
||||||
use enum_as_inner::EnumAsInner;
|
use enum_as_inner::EnumAsInner;
|
||||||
|
@ -50,6 +49,8 @@ impl McBufWritable for EntityMetadataItems {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: This enum is partially generated and parsed by
|
||||||
|
// codegen/lib/code/entity.py
|
||||||
#[derive(Clone, Debug, EnumAsInner, McBuf)]
|
#[derive(Clone, Debug, EnumAsInner, McBuf)]
|
||||||
pub enum EntityDataValue {
|
pub enum EntityDataValue {
|
||||||
Byte(u8),
|
Byte(u8),
|
||||||
|
@ -66,9 +67,9 @@ pub enum EntityDataValue {
|
||||||
OptionalBlockPos(Option<BlockPos>),
|
OptionalBlockPos(Option<BlockPos>),
|
||||||
Direction(Direction),
|
Direction(Direction),
|
||||||
OptionalUuid(Option<Uuid>),
|
OptionalUuid(Option<Uuid>),
|
||||||
// 0 for absent (implies air); otherwise, a block state ID as per the global palette
|
BlockState(azalea_block::BlockState),
|
||||||
// this is a varint
|
/// If this is air, that means it's absent,
|
||||||
BlockState(BlockState),
|
OptionalBlockState(azalea_block::BlockState),
|
||||||
CompoundTag(azalea_nbt::Tag),
|
CompoundTag(azalea_nbt::Tag),
|
||||||
Particle(Particle),
|
Particle(Particle),
|
||||||
VillagerData(VillagerData),
|
VillagerData(VillagerData),
|
||||||
|
@ -79,11 +80,22 @@ pub enum EntityDataValue {
|
||||||
FrogVariant(azalea_registry::FrogVariant),
|
FrogVariant(azalea_registry::FrogVariant),
|
||||||
OptionalGlobalPos(Option<GlobalPos>),
|
OptionalGlobalPos(Option<GlobalPos>),
|
||||||
PaintingVariant(azalea_registry::PaintingVariant),
|
PaintingVariant(azalea_registry::PaintingVariant),
|
||||||
|
SnifferState(SnifferState),
|
||||||
|
Vector3(Vec3),
|
||||||
|
Quaternion(Quaternion),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct OptionalUnsignedInt(pub Option<u32>);
|
pub struct OptionalUnsignedInt(pub Option<u32>);
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, McBuf)]
|
||||||
|
pub struct Quaternion {
|
||||||
|
pub x: f32,
|
||||||
|
pub y: f32,
|
||||||
|
pub z: f32,
|
||||||
|
pub w: f32,
|
||||||
|
}
|
||||||
|
|
||||||
impl McBufReadable for OptionalUnsignedInt {
|
impl McBufReadable for OptionalUnsignedInt {
|
||||||
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
|
||||||
let val = u32::var_read_from(buf)?;
|
let val = u32::var_read_from(buf)?;
|
||||||
|
@ -160,3 +172,15 @@ impl TryFrom<EntityMetadataItems> for Vec<EntityDataValue> {
|
||||||
Ok(data)
|
Ok(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, McBuf, Default)]
|
||||||
|
pub enum SnifferState {
|
||||||
|
#[default]
|
||||||
|
Idling,
|
||||||
|
FeelingHappy,
|
||||||
|
Scenting,
|
||||||
|
Sniffing,
|
||||||
|
Searching,
|
||||||
|
Digging,
|
||||||
|
Rising,
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -9,9 +9,9 @@ version_id = lib.code.version.get_version_id()
|
||||||
mappings = lib.download.get_mappings_for_version(version_id)
|
mappings = lib.download.get_mappings_for_version(version_id)
|
||||||
burger_data = lib.extract.get_burger_data_for_version(version_id)
|
burger_data = lib.extract.get_burger_data_for_version(version_id)
|
||||||
|
|
||||||
burger_entity_data = burger_data[0]['entities']['entity']
|
burger_entities_data = burger_data[0]['entities']
|
||||||
|
|
||||||
lib.code.entity.generate_entity_metadata(burger_entity_data, mappings)
|
lib.code.entity.generate_entity_metadata(burger_entities_data, mappings)
|
||||||
|
|
||||||
lib.code.utils.fmt()
|
lib.code.utils.fmt()
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from lib.utils import to_camel_case, to_snake_case, get_dir_location, upper_first_letter
|
from lib.utils import to_camel_case, to_snake_case, get_dir_location, upper_first_letter
|
||||||
|
from lib.code.packet import burger_instruction_to_code
|
||||||
|
from lib.code.utils import burger_type_to_rust_type
|
||||||
from lib.mappings import Mappings
|
from lib.mappings import Mappings
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import re
|
import re
|
||||||
|
@ -6,35 +8,91 @@ import re
|
||||||
METADATA_RS_DIR = get_dir_location(
|
METADATA_RS_DIR = get_dir_location(
|
||||||
'../azalea-world/src/entity/metadata.rs')
|
'../azalea-world/src/entity/metadata.rs')
|
||||||
|
|
||||||
|
DATA_RS_DIR = get_dir_location(
|
||||||
|
'../azalea-world/src/entity/data.rs')
|
||||||
|
|
||||||
def generate_entity_metadata(burger_entity_data: dict, mappings: Mappings):
|
def generate_metadata_names(burger_dataserializers: dict, mappings: Mappings):
|
||||||
# TODO: auto generate this and use it for generating the EntityDataValue enum
|
serializer_names = [None] * len(burger_dataserializers)
|
||||||
metadata_types = [
|
for burger_serializer in burger_dataserializers.values():
|
||||||
{'name': 'Byte', 'type': 'u8'},
|
print(burger_serializer)
|
||||||
{'name': 'Int', 'type': 'i32', 'var': True},
|
|
||||||
{'name': 'Long', 'type': 'i64'},
|
# burger gives us the wrong class, so we do this instead
|
||||||
{'name': 'Float', 'type': 'f32'},
|
data_serializers_class = mappings.get_class_from_deobfuscated_name('net.minecraft.network.syncher.EntityDataSerializers')
|
||||||
{'name': 'String', 'type': 'String'},
|
mojmap_name = mappings.get_field(data_serializers_class, burger_serializer['field']).lower()
|
||||||
{'name': 'FormattedText', 'type': 'FormattedText'},
|
|
||||||
{'name': 'OptionalFormattedText', 'type': 'Option<FormattedText>'},
|
if mojmap_name == 'component':
|
||||||
{'name': 'ItemStack', 'type': 'Slot'},
|
mojmap_name = 'formatted_text'
|
||||||
{'name': 'Boolean', 'type': 'bool'},
|
elif mojmap_name == 'optional_component':
|
||||||
{'name': 'Rotations', 'type': 'Rotations'},
|
mojmap_name = 'optional_formatted_text'
|
||||||
{'name': 'BlockPos', 'type': 'BlockPos'},
|
|
||||||
{'name': 'OptionalBlockPos', 'type': 'Option<BlockPos>'},
|
serializer_names[burger_serializer['id']] = upper_first_letter(to_camel_case(mojmap_name))
|
||||||
{'name': 'Direction', 'type': 'Direction'},
|
return serializer_names
|
||||||
{'name': 'OptionalUuid', 'type': 'Option<Uuid>'},
|
|
||||||
{'name': 'BlockState', 'type': 'BlockState'},
|
def parse_metadata_types_from_code():
|
||||||
{'name': 'CompoundTag', 'type': 'azalea_nbt::Tag'},
|
with open(DATA_RS_DIR, 'r') as f:
|
||||||
{'name': 'Particle', 'type': 'Particle'},
|
lines = f.read().splitlines()
|
||||||
{'name': 'VillagerData', 'type': 'VillagerData'},
|
|
||||||
{'name': 'OptionalUnsignedInt', 'type': 'OptionalUnsignedInt'},
|
data = []
|
||||||
{'name': 'Pose', 'type': 'Pose'},
|
|
||||||
{'name': 'CatVariant', 'type': 'azalea_registry::CatVariant'},
|
in_enum = False
|
||||||
{'name': 'FrogVariant', 'type': 'azalea_registry::FrogVariant'},
|
for line in lines:
|
||||||
{'name': 'GlobalPos', 'type': 'GlobalPos'},
|
if line == 'pub enum EntityDataValue {':
|
||||||
{'name': 'PaintingVariant', 'type': 'azalea_registry::PaintingVariant'}
|
in_enum = True
|
||||||
]
|
elif line == '}':
|
||||||
|
in_enum = False
|
||||||
|
elif in_enum:
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith('//'): continue
|
||||||
|
name, type = line.rstrip('),').split('(')
|
||||||
|
is_var = False
|
||||||
|
if type.startswith('#[var] '):
|
||||||
|
is_var = True
|
||||||
|
type = type[len('#[var] '):]
|
||||||
|
data.append({
|
||||||
|
'name': name,
|
||||||
|
'type': type,
|
||||||
|
'var': is_var
|
||||||
|
})
|
||||||
|
print(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def generate_entity_metadata(burger_entities_data: dict, mappings: Mappings):
|
||||||
|
burger_entity_metadata = burger_entities_data['entity']
|
||||||
|
|
||||||
|
new_metadata_names = generate_metadata_names(burger_entities_data['dataserializers'], mappings)
|
||||||
|
parsed_metadata_types = parse_metadata_types_from_code()
|
||||||
|
|
||||||
|
parsed_metadata_names = []
|
||||||
|
for t in parsed_metadata_types:
|
||||||
|
parsed_metadata_names.append(t['name'])
|
||||||
|
|
||||||
|
with open(DATA_RS_DIR, 'r') as f:
|
||||||
|
lines = f.read().splitlines()
|
||||||
|
# add the metadata names that weren't there before to the end of the enum.
|
||||||
|
# this technically might cause them to be in the wrong order but i decided
|
||||||
|
# making it correct while preserving comments was too annoying so i didn't
|
||||||
|
added_metadata_names = []
|
||||||
|
for n in new_metadata_names:
|
||||||
|
if n not in parsed_metadata_names:
|
||||||
|
added_metadata_names.append(n)
|
||||||
|
if added_metadata_names != []:
|
||||||
|
in_enum = False
|
||||||
|
for i, line in enumerate(list(lines)):
|
||||||
|
if line == 'pub enum EntityDataValue {':
|
||||||
|
in_enum = True
|
||||||
|
elif in_enum and line == '}':
|
||||||
|
in_enum = False
|
||||||
|
for n in added_metadata_names:
|
||||||
|
lines.insert(i, f'{n}(TODO),')
|
||||||
|
i += 1
|
||||||
|
print(lines)
|
||||||
|
with open(DATA_RS_DIR, 'w') as f:
|
||||||
|
f.write('\n'.join(lines))
|
||||||
|
print('Expected metadata types:\n' + '\n'.join(new_metadata_names))
|
||||||
|
print('Updated metadata types in azalea-world/src/entity/data.rs, go make sure they\'re correct and then press enter')
|
||||||
|
input()
|
||||||
|
|
||||||
|
metadata_types = parse_metadata_types_from_code()
|
||||||
|
|
||||||
code = []
|
code = []
|
||||||
code.append('''#![allow(clippy::single_match)]
|
code.append('''#![allow(clippy::single_match)]
|
||||||
|
@ -42,10 +100,12 @@ def generate_entity_metadata(burger_entity_data: dict, mappings: Mappings):
|
||||||
// This file is generated from codegen/lib/code/entity.py.
|
// This file is generated from codegen/lib/code/entity.py.
|
||||||
// Don't change it manually!
|
// Don't change it manually!
|
||||||
|
|
||||||
use super::{EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Rotations, VillagerData};
|
use super::{
|
||||||
use azalea_block::BlockState;
|
EntityDataItem, EntityDataValue, OptionalUnsignedInt, Pose, Quaternion, Rotations,
|
||||||
|
SnifferState, VillagerData
|
||||||
|
};
|
||||||
use azalea_chat::FormattedText;
|
use azalea_chat::FormattedText;
|
||||||
use azalea_core::{BlockPos, Direction, Particle, Slot};
|
use azalea_core::{BlockPos, Direction, Particle, Slot, Vec3};
|
||||||
use bevy_ecs::{bundle::Bundle, component::Component};
|
use bevy_ecs::{bundle::Bundle, component::Component};
|
||||||
use derive_more::{Deref, DerefMut};
|
use derive_more::{Deref, DerefMut};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
@ -74,9 +134,9 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
# build the duplicate_field_names set
|
# build the duplicate_field_names set
|
||||||
previous_field_names = set()
|
previous_field_names = set()
|
||||||
duplicate_field_names = set()
|
duplicate_field_names = set()
|
||||||
for entity_id in burger_entity_data.keys():
|
for entity_id in burger_entity_metadata.keys():
|
||||||
field_name_map[entity_id] = {}
|
field_name_map[entity_id] = {}
|
||||||
for field_name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_data, mappings).values():
|
for field_name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_metadata, mappings).values():
|
||||||
if isinstance(field_name_or_bitfield, str):
|
if isinstance(field_name_or_bitfield, str):
|
||||||
if field_name_or_bitfield in previous_field_names:
|
if field_name_or_bitfield in previous_field_names:
|
||||||
duplicate_field_names.add(field_name_or_bitfield)
|
duplicate_field_names.add(field_name_or_bitfield)
|
||||||
|
@ -99,8 +159,8 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
raise Exception(f'{name} should only exist once')
|
raise Exception(f'{name} should only exist once')
|
||||||
|
|
||||||
# and now figure out what to rename them to
|
# and now figure out what to rename them to
|
||||||
for entity_id in burger_entity_data.keys():
|
for entity_id in burger_entity_metadata.keys():
|
||||||
for index, field_name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_data, mappings).items():
|
for index, field_name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_metadata, mappings).items():
|
||||||
if isinstance(field_name_or_bitfield, str):
|
if isinstance(field_name_or_bitfield, str):
|
||||||
new_field_name = field_name_or_bitfield
|
new_field_name = field_name_or_bitfield
|
||||||
if new_field_name == 'type':
|
if new_field_name == 'type':
|
||||||
|
@ -129,14 +189,14 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
return field_name_map[entity_ids_for_all_field_names_or_bitfields[index]][name]
|
return field_name_map[entity_ids_for_all_field_names_or_bitfields[index]][name]
|
||||||
return name
|
return name
|
||||||
|
|
||||||
parents = get_entity_parents(entity_id, burger_entity_data)
|
parents = get_entity_parents(entity_id, burger_entity_metadata)
|
||||||
for parent_id in list(reversed(parents)):
|
for parent_id in list(reversed(parents)):
|
||||||
for index, name_or_bitfield in get_entity_metadata_names(parent_id, burger_entity_data, mappings).items():
|
for index, name_or_bitfield in get_entity_metadata_names(parent_id, burger_entity_metadata, mappings).items():
|
||||||
assert index == len(all_field_names_or_bitfields)
|
assert index == len(all_field_names_or_bitfields)
|
||||||
all_field_names_or_bitfields.append(name_or_bitfield)
|
all_field_names_or_bitfields.append(name_or_bitfield)
|
||||||
entity_ids_for_all_field_names_or_bitfields.append(parent_id)
|
entity_ids_for_all_field_names_or_bitfields.append(parent_id)
|
||||||
entity_metadatas.extend(get_entity_metadata(
|
entity_metadatas.extend(get_entity_metadata(
|
||||||
parent_id, burger_entity_data))
|
parent_id, burger_entity_metadata))
|
||||||
parent_id = parents[1] if len(parents) > 1 else None
|
parent_id = parents[1] if len(parents) > 1 else None
|
||||||
|
|
||||||
# now add all the fields/component structs
|
# now add all the fields/component structs
|
||||||
|
@ -264,7 +324,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
if parent_struct_name:
|
if parent_struct_name:
|
||||||
code.append(
|
code.append(
|
||||||
f' parent: {parent_struct_name}MetadataBundle,')
|
f' parent: {parent_struct_name}MetadataBundle,')
|
||||||
for index, name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_data, mappings).items():
|
for index, name_or_bitfield in get_entity_metadata_names(entity_id, burger_entity_metadata, mappings).items():
|
||||||
if isinstance(name_or_bitfield, str):
|
if isinstance(name_or_bitfield, str):
|
||||||
name_or_bitfield = maybe_rename_field(
|
name_or_bitfield = maybe_rename_field(
|
||||||
name_or_bitfield, index)
|
name_or_bitfield, index)
|
||||||
|
@ -310,7 +370,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
# if it has a parent, put it (do recursion)
|
# if it has a parent, put it (do recursion)
|
||||||
# parent: AbstractCreatureBundle { ... },
|
# parent: AbstractCreatureBundle { ... },
|
||||||
this_entity_parent_ids = get_entity_parents(
|
this_entity_parent_ids = get_entity_parents(
|
||||||
this_entity_id, burger_entity_data)
|
this_entity_id, burger_entity_metadata)
|
||||||
this_entity_parent_id = this_entity_parent_ids[1] if len(
|
this_entity_parent_id = this_entity_parent_ids[1] if len(
|
||||||
this_entity_parent_ids) > 1 else None
|
this_entity_parent_ids) > 1 else None
|
||||||
if this_entity_parent_id:
|
if this_entity_parent_id:
|
||||||
|
@ -322,7 +382,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
code.append(
|
code.append(
|
||||||
' },')
|
' },')
|
||||||
|
|
||||||
for index, name_or_bitfield in get_entity_metadata_names(this_entity_id, burger_entity_data, mappings).items():
|
for index, name_or_bitfield in get_entity_metadata_names(this_entity_id, burger_entity_metadata, mappings).items():
|
||||||
default = next(filter(lambda i: i['index'] == index, entity_metadatas)).get(
|
default = next(filter(lambda i: i['index'] == index, entity_metadatas)).get(
|
||||||
'default', 'Default::default()')
|
'default', 'Default::default()')
|
||||||
if isinstance(name_or_bitfield, str):
|
if isinstance(name_or_bitfield, str):
|
||||||
|
@ -367,11 +427,21 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
elif type_name == 'ItemStack':
|
elif type_name == 'ItemStack':
|
||||||
default = f'Slot::Present({default})' if default != 'Empty' else 'Slot::Empty'
|
default = f'Slot::Present({default})' if default != 'Empty' else 'Slot::Empty'
|
||||||
elif type_name == 'BlockState':
|
elif type_name == 'BlockState':
|
||||||
default = f'{default}' if default != 'Empty' else 'BlockState::AIR'
|
default = f'{default}' if default != 'Empty' else 'azalea_block::BlockState::AIR'
|
||||||
|
elif type_name == 'OptionalBlockState':
|
||||||
|
default = f'{default}' if default != 'Empty' else 'azalea_block::BlockState::AIR'
|
||||||
elif type_name == 'OptionalFormattedText':
|
elif type_name == 'OptionalFormattedText':
|
||||||
default = f'Some({default})' if default != 'Empty' else 'None'
|
default = f'Some({default})' if default != 'Empty' else 'None'
|
||||||
elif type_name == 'CompoundTag':
|
elif type_name == 'CompoundTag':
|
||||||
default = f'azalea_nbt::Tag::Compound({default})' if default != 'Empty' else 'azalea_nbt::Tag::Compound(Default::default())'
|
default = f'azalea_nbt::Tag::Compound({default})' if default != 'Empty' else 'azalea_nbt::Tag::Compound(Default::default())'
|
||||||
|
elif type_name == 'Quaternion':
|
||||||
|
default = f'Quaternion {{ x: {float(default["x"])}, y: {float(default["y"])}, z: {float(default["z"])}, w: {float(default["w"])} }}'
|
||||||
|
elif type_name == 'Vector3':
|
||||||
|
default = f'Vec3 {{ x: {float(default["x"])}, y: {float(default["y"])}, z: {float(default["z"])} }}'
|
||||||
|
elif type_name == 'Byte':
|
||||||
|
# in 1.19.4 TextOpacity is a -1 by default
|
||||||
|
if default < 0:
|
||||||
|
default += 128
|
||||||
if name in single_use_imported_types:
|
if name in single_use_imported_types:
|
||||||
code.append(f' {name}: {default},')
|
code.append(f' {name}: {default},')
|
||||||
else:
|
else:
|
||||||
|
@ -395,7 +465,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
code.append('')
|
code.append('')
|
||||||
|
|
||||||
# parent_field_name = None
|
# parent_field_name = None
|
||||||
for entity_id in burger_entity_data:
|
for entity_id in burger_entity_metadata:
|
||||||
new_entity(entity_id)
|
new_entity(entity_id)
|
||||||
|
|
||||||
# and now make the main apply_metadata
|
# and now make the main apply_metadata
|
||||||
|
@ -419,7 +489,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
items: Vec<EntityDataItem>,
|
items: Vec<EntityDataItem>,
|
||||||
) -> Result<(), UpdateMetadataError> {{
|
) -> Result<(), UpdateMetadataError> {{
|
||||||
match entity_kind {{''')
|
match entity_kind {{''')
|
||||||
for entity_id in burger_entity_data:
|
for entity_id in burger_entity_metadata:
|
||||||
if entity_id.startswith('~'):
|
if entity_id.startswith('~'):
|
||||||
# not actually an entity
|
# not actually an entity
|
||||||
continue
|
continue
|
||||||
|
@ -446,7 +516,7 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
code.append(
|
code.append(
|
||||||
'pub fn apply_default_metadata(entity: &mut bevy_ecs::system::EntityCommands, kind: azalea_registry::EntityKind) {')
|
'pub fn apply_default_metadata(entity: &mut bevy_ecs::system::EntityCommands, kind: azalea_registry::EntityKind) {')
|
||||||
code.append(' match kind {')
|
code.append(' match kind {')
|
||||||
for entity_id in burger_entity_data:
|
for entity_id in burger_entity_metadata:
|
||||||
if entity_id.startswith('~'):
|
if entity_id.startswith('~'):
|
||||||
# not actually an entity
|
# not actually an entity
|
||||||
continue
|
continue
|
||||||
|
@ -464,22 +534,22 @@ impl From<EntityDataValue> for UpdateMetadataError {
|
||||||
f.write('\n'.join(code))
|
f.write('\n'.join(code))
|
||||||
|
|
||||||
|
|
||||||
def get_entity_parents(entity_id: str, burger_entity_data: dict):
|
def get_entity_parents(entity_id: str, burger_entity_metadata: dict):
|
||||||
parents = []
|
parents = []
|
||||||
while entity_id:
|
while entity_id:
|
||||||
parents.append(entity_id)
|
parents.append(entity_id)
|
||||||
entity_id = get_entity_parent(entity_id, burger_entity_data)
|
entity_id = get_entity_parent(entity_id, burger_entity_metadata)
|
||||||
return parents
|
return parents
|
||||||
|
|
||||||
|
|
||||||
def get_entity_parent(entity_id: str, burger_entity_data: dict):
|
def get_entity_parent(entity_id: str, burger_entity_metadata: dict):
|
||||||
entity_metadata = burger_entity_data[entity_id]['metadata']
|
entity_metadata = burger_entity_metadata[entity_id]['metadata']
|
||||||
first_metadata = entity_metadata[0]
|
first_metadata = entity_metadata[0]
|
||||||
return first_metadata.get('entity')
|
return first_metadata.get('entity')
|
||||||
|
|
||||||
|
|
||||||
def get_entity_metadata(entity_id: str, burger_entity_data: dict):
|
def get_entity_metadata(entity_id: str, burger_entity_metadata: dict):
|
||||||
entity_metadata = burger_entity_data[entity_id]['metadata']
|
entity_metadata = burger_entity_metadata[entity_id]['metadata']
|
||||||
entity_useful_metadata = []
|
entity_useful_metadata = []
|
||||||
for metadata_item in entity_metadata:
|
for metadata_item in entity_metadata:
|
||||||
if 'data' in metadata_item:
|
if 'data' in metadata_item:
|
||||||
|
@ -494,8 +564,8 @@ def get_entity_metadata(entity_id: str, burger_entity_data: dict):
|
||||||
# returns a dict of {index: (name or bitfield)}
|
# returns a dict of {index: (name or bitfield)}
|
||||||
|
|
||||||
|
|
||||||
def get_entity_metadata_names(entity_id: str, burger_entity_data: dict, mappings: Mappings):
|
def get_entity_metadata_names(entity_id: str, burger_entity_metadata: dict, mappings: Mappings):
|
||||||
entity_metadata = burger_entity_data[entity_id]['metadata']
|
entity_metadata = burger_entity_metadata[entity_id]['metadata']
|
||||||
mapped_metadata_names = {}
|
mapped_metadata_names = {}
|
||||||
|
|
||||||
for metadata_item in entity_metadata:
|
for metadata_item in entity_metadata:
|
||||||
|
|
|
@ -222,7 +222,7 @@ def get_packets(direction: str, state: str):
|
||||||
return packet_ids, packet_class_names
|
return packet_ids, packet_class_names
|
||||||
|
|
||||||
|
|
||||||
def burger_instruction_to_code(instructions: list[dict], index: int, generated_packet_code: list[str], mappings: Mappings, obfuscated_class_name: str, uses: set, extra_code: list[str]) -> Optional[int]:
|
def burger_instruction_to_code(instructions: list[dict], index: int, generated_packet_code: list[str], mappings: Mappings, obfuscated_class_name: str, uses: set, extra_code: list[str], known_variable_types={}) -> Optional[int]:
|
||||||
'''
|
'''
|
||||||
Generate a field for an instruction, returns the number of instructions to skip (if any).
|
Generate a field for an instruction, returns the number of instructions to skip (if any).
|
||||||
'''
|
'''
|
||||||
|
@ -237,12 +237,14 @@ def burger_instruction_to_code(instructions: list[dict], index: int, generated_p
|
||||||
field_type_rs = None
|
field_type_rs = None
|
||||||
field_comment = None
|
field_comment = None
|
||||||
|
|
||||||
|
print('instruction', instruction)
|
||||||
|
|
||||||
# iterators
|
# iterators
|
||||||
if instruction['operation'] == 'write' and instruction['field'].endswith('.size()') and next_instruction and next_instruction['type'] == 'Iterator' and next_next_instruction and next_next_instruction['operation'] == 'loop':
|
if instruction['operation'] == 'write' and instruction['field'].endswith('.size()') and next_instruction and next_instruction['type'] == 'Iterator' and next_next_instruction and next_next_instruction['operation'] == 'loop':
|
||||||
field_obfuscated_name = instruction['field'].split('.')[
|
obfuscated_field_name = instruction['field'].split('.')[
|
||||||
0]
|
0]
|
||||||
field_name = mappings.get_field(
|
field_name = mappings.get_field(
|
||||||
obfuscated_class_name, field_obfuscated_name)
|
obfuscated_class_name, obfuscated_field_name)
|
||||||
|
|
||||||
# figure out what kind of iterator it is
|
# figure out what kind of iterator it is
|
||||||
loop_instructions = next_next_instruction['instructions']
|
loop_instructions = next_next_instruction['instructions']
|
||||||
|
@ -282,10 +284,21 @@ def burger_instruction_to_code(instructions: list[dict], index: int, generated_p
|
||||||
|
|
||||||
# Option<T>
|
# Option<T>
|
||||||
elif instruction['operation'] == 'write' and (instruction['field'].endswith('.isPresent()') or instruction['field'].endswith(' != null')) and next_instruction and (next_instruction.get('condition', '').endswith('.isPresent()') or next_instruction.get('condition', '').endswith(' != null')):
|
elif instruction['operation'] == 'write' and (instruction['field'].endswith('.isPresent()') or instruction['field'].endswith(' != null')) and next_instruction and (next_instruction.get('condition', '').endswith('.isPresent()') or next_instruction.get('condition', '').endswith(' != null')):
|
||||||
field_obfuscated_name = instruction['field'].split('.')[
|
print('ok is option')
|
||||||
|
obfuscated_field_name = instruction['field'].split('.')[
|
||||||
0].split(' ')[0]
|
0].split(' ')[0]
|
||||||
|
|
||||||
|
if obfuscated_field_name in known_variable_types:
|
||||||
|
# just use the known name since it's not gonna be in the mappings
|
||||||
|
obfuscated_field_name = known_variable_types[obfuscated_field_name]
|
||||||
|
|
||||||
field_name = mappings.get_field(
|
field_name = mappings.get_field(
|
||||||
obfuscated_class_name, field_obfuscated_name)
|
obfuscated_class_name, obfuscated_field_name)
|
||||||
|
|
||||||
|
if field_name is None: field_name = obfuscated_field_name.split('/')[-1]
|
||||||
|
if '<' in field_name:
|
||||||
|
field_name = 'value'
|
||||||
|
|
||||||
condition_instructions = next_instruction['instructions']
|
condition_instructions = next_instruction['instructions']
|
||||||
|
|
||||||
condition_types_rs = []
|
condition_types_rs = []
|
||||||
|
@ -312,23 +325,34 @@ def burger_instruction_to_code(instructions: list[dict], index: int, generated_p
|
||||||
field_type_rs, is_var, instruction_uses, instruction_extra_code = burger_type_to_rust_type(
|
field_type_rs, is_var, instruction_uses, instruction_extra_code = burger_type_to_rust_type(
|
||||||
field_type, field_name, instruction, mappings, obfuscated_class_name)
|
field_type, field_name, instruction, mappings, obfuscated_class_name)
|
||||||
|
|
||||||
if '.' in obfuscated_field_name or ' ' in obfuscated_field_name or '(' in obfuscated_field_name:
|
if obfuscated_field_name in known_variable_types:
|
||||||
|
# just use the known name since it's not gonna be in the mappings
|
||||||
|
field_name = obfuscated_field_name
|
||||||
|
|
||||||
|
elif '.' in obfuscated_field_name or ' ' in obfuscated_field_name or '(' in obfuscated_field_name:
|
||||||
field_type_rs2, obfuscated_field_name, field_comment = burger_field_to_type(
|
field_type_rs2, obfuscated_field_name, field_comment = burger_field_to_type(
|
||||||
obfuscated_field_name, mappings, obfuscated_class_name)
|
obfuscated_field_name, mappings, obfuscated_class_name, known_variable_types)
|
||||||
if not field_type_rs2:
|
if not field_type_rs2:
|
||||||
generated_packet_code.append(f'// TODO: {instruction}')
|
generated_packet_code.append(f'// TODO: {instruction}')
|
||||||
return
|
return
|
||||||
|
if obfuscated_field_name in known_variable_types:
|
||||||
|
# just use the known name since it's not gonna be in the mappings
|
||||||
|
obfuscated_field_name = known_variable_types[obfuscated_field_name]
|
||||||
|
print('got obfuscated_field_name', obfuscated_field_name)
|
||||||
|
|
||||||
# try to get the field name again with the new stuff we know
|
# try to get the field name again with the new stuff we know
|
||||||
field_name = mappings.get_field(
|
field_name = mappings.get_field(
|
||||||
obfuscated_class_name, obfuscated_field_name) or mappings.get_field(
|
obfuscated_class_name, obfuscated_field_name) or mappings.get_field(
|
||||||
obfuscated_class_name.split('$')[0], obfuscated_field_name)
|
obfuscated_class_name.split('$')[0], obfuscated_field_name)
|
||||||
|
if field_name is None:
|
||||||
|
field_name = obfuscated_field_name.split('/')[-1]
|
||||||
uses.update(instruction_uses)
|
uses.update(instruction_uses)
|
||||||
extra_code.extend(instruction_extra_code)
|
extra_code.extend(instruction_extra_code)
|
||||||
|
|
||||||
if not field_name:
|
if not field_name:
|
||||||
generated_packet_code.append(
|
generated_packet_code.append(
|
||||||
f'// TODO: unknown field {instruction}')
|
f'// TODO: unknown field {instruction}')
|
||||||
return
|
return skip
|
||||||
|
|
||||||
if is_var:
|
if is_var:
|
||||||
generated_packet_code.append('#[var]')
|
generated_packet_code.append('#[var]')
|
||||||
|
@ -340,7 +364,7 @@ def burger_instruction_to_code(instructions: list[dict], index: int, generated_p
|
||||||
return skip
|
return skip
|
||||||
|
|
||||||
|
|
||||||
def burger_field_to_type(field, mappings: Mappings, obfuscated_class_name: str) -> tuple[Optional[str], str, Optional[str]]:
|
def burger_field_to_type(field, mappings: Mappings, obfuscated_class_name: str, known_variable_types={}) -> tuple[Optional[str], str, Optional[str]]:
|
||||||
'''
|
'''
|
||||||
Returns field_type_rs, obfuscated_field_name, field_comment
|
Returns field_type_rs, obfuscated_field_name, field_comment
|
||||||
'''
|
'''
|
||||||
|
@ -353,7 +377,10 @@ def burger_field_to_type(field, mappings: Mappings, obfuscated_class_name: str)
|
||||||
print('field', field)
|
print('field', field)
|
||||||
obfuscated_first = field.split('.')[0]
|
obfuscated_first = field.split('.')[0]
|
||||||
obfuscated_second = field.split('.')[1].split('(')[0]
|
obfuscated_second = field.split('.')[1].split('(')[0]
|
||||||
first = mappings.get_field(obfuscated_class_name, obfuscated_first)
|
# first = mappings.get_field(obfuscated_class_name, obfuscated_first)
|
||||||
|
if obfuscated_first in known_variable_types:
|
||||||
|
first_type = known_variable_types[obfuscated_first]
|
||||||
|
else:
|
||||||
first_type = mappings.get_field_type(
|
first_type = mappings.get_field_type(
|
||||||
obfuscated_class_name, obfuscated_first)
|
obfuscated_class_name, obfuscated_first)
|
||||||
first_obfuscated_class_name: Optional[str] = mappings.get_class_from_deobfuscated_name(
|
first_obfuscated_class_name: Optional[str] = mappings.get_class_from_deobfuscated_name(
|
||||||
|
@ -368,6 +395,8 @@ def burger_field_to_type(field, mappings: Mappings, obfuscated_class_name: str)
|
||||||
else:
|
else:
|
||||||
second = obfuscated_second
|
second = obfuscated_second
|
||||||
first_type_short = first_type.split('.')[-1]
|
first_type_short = first_type.split('.')[-1]
|
||||||
|
if second in {'byteValue'}:
|
||||||
|
return (first_type_short, obfuscated_first, None)
|
||||||
return (first_type_short, obfuscated_first, f'TODO: Does {first_type_short}::{second}, may not be implemented')
|
return (first_type_short, obfuscated_first, f'TODO: Does {first_type_short}::{second}, may not be implemented')
|
||||||
return None, field, None
|
return None, field, None
|
||||||
|
|
||||||
|
|
|
@ -97,8 +97,12 @@ def burger_type_to_rust_type(burger_type, field_name: Optional[str] = None, inst
|
||||||
|
|
||||||
print('hm', enum_name)
|
print('hm', enum_name)
|
||||||
else:
|
else:
|
||||||
|
try:
|
||||||
enum_name = mappings.get_field_type(
|
enum_name = mappings.get_field_type(
|
||||||
obfuscated_class_name, enum_field)
|
obfuscated_class_name, enum_field)
|
||||||
|
except:
|
||||||
|
enum_name = mappings.get_class(obfuscated_class_name)
|
||||||
|
print(f'failed getting {obfuscated_class_name}.{enum_field} but continuing with {enum_name} anyways')
|
||||||
print('enum_name', enum_name)
|
print('enum_name', enum_name)
|
||||||
enum_obfuscated_name = mappings.get_class_from_deobfuscated_name(
|
enum_obfuscated_name = mappings.get_class_from_deobfuscated_name(
|
||||||
enum_name)
|
enum_name)
|
||||||
|
|
|
@ -177,7 +177,11 @@ def clear_version_cache():
|
||||||
if os.path.exists(get_dir_location(f'downloads/{file}')):
|
if os.path.exists(get_dir_location(f'downloads/{file}')):
|
||||||
os.remove(get_dir_location(f'downloads/{file}'))
|
os.remove(get_dir_location(f'downloads/{file}'))
|
||||||
|
|
||||||
|
burger_path = get_dir_location("downloads/Burger")
|
||||||
|
if os.path.exists(burger_path):
|
||||||
os.system(
|
os.system(
|
||||||
f'cd {get_dir_location("downloads/Burger")} && git pull')
|
f'cd {burger_path} && git pull')
|
||||||
|
pixlyzer_path = get_dir_location('downloads/pixlyzer')
|
||||||
|
if os.path.exists(pixlyzer_path):
|
||||||
os.system(
|
os.system(
|
||||||
f'cd {get_dir_location("downloads/pixlyzer")} && git pull')
|
f'cd {pixlyzer_path} && git pull')
|
|
@ -117,7 +117,7 @@ def get_pixlyzer_data(version_id: str, category: str):
|
||||||
|
|
||||||
# TODO: right now this False is hard-coded, it should retry with this
|
# TODO: right now this False is hard-coded, it should retry with this
|
||||||
# enabled if # initially getting the data fails
|
# enabled if # initially getting the data fails
|
||||||
if False or (os.path.exists(target_dir) and not os.path.exists(f'{target_dir}/{category}.min.json')):
|
if True or (os.path.exists(target_dir) and not os.path.exists(f'{target_dir}/{category}.min.json')):
|
||||||
print('Downloading', category, 'from pixlyzer-data.')
|
print('Downloading', category, 'from pixlyzer-data.')
|
||||||
data = requests.get(f'https://gitlab.com/Bixilon/pixlyzer-data/-/raw/master/version/{version_id}/{category}.min.json?inline=false').text
|
data = requests.get(f'https://gitlab.com/Bixilon/pixlyzer-data/-/raw/master/version/{version_id}/{category}.min.json?inline=false').text
|
||||||
try:
|
try:
|
||||||
|
@ -219,6 +219,8 @@ def get_pixlyzer_data(version_id: str, category: str):
|
||||||
pom_xml = open(f'{pixlyzer_dir}/pom.xml', 'r').read()
|
pom_xml = open(f'{pixlyzer_dir}/pom.xml', 'r').read()
|
||||||
pom_xml = re.sub(
|
pom_xml = re.sub(
|
||||||
'<dependencies>.*?</dependencies>', f'<dependencies>{pom_xml_dependencies}</dependencies>', pom_xml, flags=re.DOTALL)
|
'<dependencies>.*?</dependencies>', f'<dependencies>{pom_xml_dependencies}</dependencies>', pom_xml, flags=re.DOTALL)
|
||||||
|
pom_xml = re.sub(
|
||||||
|
'<minecraft\.version>.*?</minecraft\.version>', f'<minecraft.version>{version_id}</minecraft.version>', pom_xml, flags=re.DOTALL)
|
||||||
open(f'{pixlyzer_dir}/pom.xml', 'w').write(pom_xml)
|
open(f'{pixlyzer_dir}/pom.xml', 'w').write(pom_xml)
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
|
|
|
@ -68,6 +68,13 @@ class Mappings:
|
||||||
return self.fields.get(obfuscated_class_name, {}).get(obfuscated_field_name)
|
return self.fields.get(obfuscated_class_name, {}).get(obfuscated_field_name)
|
||||||
|
|
||||||
def get_class(self, obfuscated_class_name):
|
def get_class(self, obfuscated_class_name):
|
||||||
|
if '<' in obfuscated_class_name:
|
||||||
|
first_part, args = obfuscated_class_name.split('<')
|
||||||
|
args = args.rstrip('>').strip(';').split(';')
|
||||||
|
print(args)
|
||||||
|
assert len(args) == 1
|
||||||
|
arg = self.get_class(args[0][1:])
|
||||||
|
return f'{first_part}<{arg}>'
|
||||||
return self.classes[obfuscated_class_name]
|
return self.classes[obfuscated_class_name]
|
||||||
|
|
||||||
def get_method(self, obfuscated_class_name, obfuscated_method_name, obfuscated_signature):
|
def get_method(self, obfuscated_class_name, obfuscated_method_name, obfuscated_signature):
|
||||||
|
|
|
@ -6,6 +6,7 @@ import lib.code.version
|
||||||
import lib.code.blocks
|
import lib.code.blocks
|
||||||
import lib.code.packet
|
import lib.code.packet
|
||||||
import lib.code.shapes
|
import lib.code.shapes
|
||||||
|
import lib.code.entity
|
||||||
import lib.code.utils
|
import lib.code.utils
|
||||||
import lib.download
|
import lib.download
|
||||||
import lib.extract
|
import lib.extract
|
||||||
|
@ -134,6 +135,10 @@ print('Generating registries...')
|
||||||
registries = lib.extract.get_registries_report(new_version_id)
|
registries = lib.extract.get_registries_report(new_version_id)
|
||||||
lib.code.registry.generate_registries(registries)
|
lib.code.registry.generate_registries(registries)
|
||||||
|
|
||||||
|
print('Generating entity metadata...')
|
||||||
|
burger_entities_data = new_burger_data[0]['entities']
|
||||||
|
lib.code.entity.generate_entity_metadata(burger_entities_data, new_mappings)
|
||||||
|
|
||||||
print('Finishing touches, setting version in README and formatting code...')
|
print('Finishing touches, setting version in README and formatting code...')
|
||||||
lib.code.version.set_version_id(new_version_id)
|
lib.code.version.set_version_id(new_version_id)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue