diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..a4e6b0f2 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,69 @@ +name: Compilar WClient APK + +on: + push: + branches: [ "*" ] + pull_request: + branches: [ "*" ] + workflow_dispatch: + +jobs: + build: + name: Compilar APK โšก + runs-on: ubuntu-latest + + steps: + - name: ๐Ÿ“ฅ Checkout cรณdigo + uses: actions/checkout@v4 + + - name: โ˜• Configurar Java 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: ๐Ÿ“ฆ Instalar Java 8 (via apt, para toolchain do relay) + run: | + sudo apt-get update -qq + sudo apt-get install -y -qq openjdk-8-jdk 2>&1 | tail -3 + + - name: ๐Ÿ—๏ธ Configurar Android SDK (prรฉ-instalado) + run: | + ANDROID_HOME=/usr/local/lib/android/sdk + echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV + echo "ANDROID_SDK_ROOT=$ANDROID_HOME" >> $GITHUB_ENV + echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH + echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH + + - name: ๐Ÿš€ Cache Gradle + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + ~/.gradle/build-cache + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: ๐Ÿ”จ Compilar APK Debug + run: | + chmod +x gradlew + ./gradlew :app:assembleDebug --parallel --configure-on-demand \ + -Dorg.gradle.caching=true \ + -Dorg.gradle.parallel=true \ + --max-workers=4 \ + --build-cache + + - name: ๐Ÿ“ฆ Upload APK Debug + uses: actions/upload-artifact@v4 + with: + name: WClient-Debug-APK + path: app/build/outputs/apk/debug/*.apk + compression-level: 0 + if-no-files-found: error + + - name: ๐Ÿ“‹ Listar APKs gerados + run: | + echo "โœ… APKs compilados com sucesso!" + find app/build/outputs -name "*.apk" -exec ls -lh {} \; diff --git a/app/src/main/assets/mcpedata/blocks/index.json b/app/src/main/assets/mcpedata/blocks/index.json index a1a30b4e..7338f749 100644 --- a/app/src/main/assets/mcpedata/blocks/index.json +++ b/app/src/main/assets/mcpedata/blocks/index.json @@ -1,2 +1 @@ -[388,389,407,419,428,440,448,465,471,486,503,527,544,560,567,575,582,589,594,618,622,630,649,662,671,685,712,729,748,766,776,786,800] - +[388,389,407,419,428,440,448,465,471,486,503,527,544,560,567,575,582,589,594,618,622,630,649,662,671,685,712,729,748,766,776,786,800,1001] diff --git a/app/src/main/assets/mcpedata/blocks/runtime_block_states_1001.dat b/app/src/main/assets/mcpedata/blocks/runtime_block_states_1001.dat new file mode 100644 index 00000000..e501e4b4 Binary files /dev/null and b/app/src/main/assets/mcpedata/blocks/runtime_block_states_1001.dat differ diff --git a/app/src/main/assets/mcpedata/items/index.json b/app/src/main/assets/mcpedata/items/index.json index 90e87c90..682e8f46 100644 --- a/app/src/main/assets/mcpedata/items/index.json +++ b/app/src/main/assets/mcpedata/items/index.json @@ -1 +1 @@ -[361,419,440,448,475,486,503,527,534,560,567,575,582,589,594,618,630,649,662,671,685,712,729,748,766,776,786,800] +[361,419,440,448,475,486,503,527,534,560,567,575,582,589,594,618,630,649,662,671,685,712,729,748,766,776,786,800,1001] \ No newline at end of file diff --git a/app/src/main/assets/mcpedata/items/runtime_item_states_1001.json b/app/src/main/assets/mcpedata/items/runtime_item_states_1001.json new file mode 100644 index 00000000..511a6040 --- /dev/null +++ b/app/src/main/assets/mcpedata/items/runtime_item_states_1001.json @@ -0,0 +1 @@ +[{"name":"minecraft:acacia_boat","id":405,"version":2,"componentBased":false},{"name":"minecraft:acacia_button","id":-140,"version":2,"componentBased":false},{"name":"minecraft:acacia_chest_boat","id":679,"version":2,"componentBased":false},{"name":"minecraft:acacia_door","id":589,"version":2,"componentBased":false},{"name":"minecraft:acacia_double_slab","id":-812,"version":2,"componentBased":false},{"name":"minecraft:acacia_fence","id":-575,"version":2,"componentBased":false},{"name":"minecraft:acacia_fence_gate","id":187,"version":2,"componentBased":false},{"name":"minecraft:acacia_hanging_sign","id":-504,"version":2,"componentBased":false},{"name":"minecraft:acacia_leaves","id":161,"version":2,"componentBased":false},{"name":"minecraft:acacia_log","id":162,"version":2,"componentBased":false},{"name":"minecraft:acacia_planks","id":-742,"version":2,"componentBased":false},{"name":"minecraft:acacia_pressure_plate","id":-150,"version":2,"componentBased":false},{"name":"minecraft:acacia_sapling","id":-828,"version":2,"componentBased":false},{"name":"minecraft:acacia_sign","id":612,"version":2,"componentBased":false},{"name":"minecraft:acacia_slab","id":-807,"version":2,"componentBased":false},{"name":"minecraft:acacia_stairs","id":163,"version":2,"componentBased":false},{"name":"minecraft:acacia_standing_sign","id":-190,"version":2,"componentBased":false},{"name":"minecraft:acacia_trapdoor","id":-145,"version":2,"componentBased":false},{"name":"minecraft:acacia_wall_sign","id":-191,"version":2,"componentBased":false},{"name":"minecraft:acacia_wood","id":-817,"version":2,"componentBased":false},{"name":"minecraft:activator_rail","id":126,"version":2,"componentBased":false},{"name":"minecraft:agent_spawn_egg","id":515,"version":2,"componentBased":false},{"name":"minecraft:air","id":-158,"version":2,"componentBased":false},{"name":"minecraft:allay_spawn_egg","id":668,"version":2,"componentBased":false},{"name":"minecraft:allium","id":-831,"version":2,"componentBased":false},{"name":"minecraft:allow","id":210,"version":2,"componentBased":false},{"name":"minecraft:amethyst_block","id":-327,"version":2,"componentBased":false},{"name":"minecraft:amethyst_cluster","id":-329,"version":2,"componentBased":false},{"name":"minecraft:amethyst_shard","id":661,"version":2,"componentBased":false},{"name":"minecraft:ancient_debris","id":-271,"version":2,"componentBased":false},{"name":"minecraft:andesite","id":-594,"version":2,"componentBased":false},{"name":"minecraft:andesite_double_slab","id":-920,"version":2,"componentBased":false},{"name":"minecraft:andesite_slab","id":-893,"version":2,"componentBased":false},{"name":"minecraft:andesite_stairs","id":-171,"version":2,"componentBased":false},{"name":"minecraft:andesite_wall","id":-974,"version":2,"componentBased":false},{"name":"minecraft:angler_pottery_sherd","id":693,"version":2,"componentBased":false},{"name":"minecraft:anvil","id":145,"version":2,"componentBased":false},{"name":"minecraft:apple","id":278,"version":1,"componentBased":true},{"name":"minecraft:archer_pottery_sherd","id":694,"version":2,"componentBased":false},{"name":"minecraft:armadillo_scute","id":740,"version":2,"componentBased":false},{"name":"minecraft:armadillo_spawn_egg","id":739,"version":2,"componentBased":false},{"name":"minecraft:armor_stand","id":585,"version":2,"componentBased":false},{"name":"minecraft:arms_up_pottery_sherd","id":695,"version":2,"componentBased":false},{"name":"minecraft:arrow","id":325,"version":2,"componentBased":true},{"name":"minecraft:axolotl_bucket","id":394,"version":2,"componentBased":false},{"name":"minecraft:axolotl_spawn_egg","id":530,"version":2,"componentBased":false},{"name":"minecraft:azalea","id":-337,"version":2,"componentBased":false},{"name":"minecraft:azalea_leaves","id":-324,"version":2,"componentBased":false},{"name":"minecraft:azalea_leaves_flowered","id":-325,"version":2,"componentBased":false},{"name":"minecraft:azure_bluet","id":-832,"version":2,"componentBased":false},{"name":"minecraft:baked_potato","id":303,"version":0,"componentBased":false},{"name":"minecraft:balloon","id":635,"version":2,"componentBased":false},{"name":"minecraft:bamboo","id":-163,"version":2,"componentBased":false},{"name":"minecraft:bamboo_block","id":-527,"version":2,"componentBased":false},{"name":"minecraft:bamboo_button","id":-511,"version":2,"componentBased":false},{"name":"minecraft:bamboo_chest_raft","id":691,"version":2,"componentBased":false},{"name":"minecraft:bamboo_door","id":-517,"version":2,"componentBased":false},{"name":"minecraft:bamboo_double_slab","id":-521,"version":2,"componentBased":false},{"name":"minecraft:bamboo_fence","id":-515,"version":2,"componentBased":false},{"name":"minecraft:bamboo_fence_gate","id":-516,"version":2,"componentBased":false},{"name":"minecraft:bamboo_hanging_sign","id":-522,"version":2,"componentBased":false},{"name":"minecraft:bamboo_mosaic","id":-509,"version":2,"componentBased":false},{"name":"minecraft:bamboo_mosaic_double_slab","id":-525,"version":2,"componentBased":false},{"name":"minecraft:bamboo_mosaic_slab","id":-524,"version":2,"componentBased":false},{"name":"minecraft:bamboo_mosaic_stairs","id":-523,"version":2,"componentBased":false},{"name":"minecraft:bamboo_planks","id":-510,"version":2,"componentBased":false},{"name":"minecraft:bamboo_pressure_plate","id":-514,"version":2,"componentBased":false},{"name":"minecraft:bamboo_raft","id":690,"version":2,"componentBased":false},{"name":"minecraft:bamboo_sapling","id":-164,"version":2,"componentBased":false},{"name":"minecraft:bamboo_sign","id":689,"version":2,"componentBased":false},{"name":"minecraft:bamboo_slab","id":-513,"version":2,"componentBased":false},{"name":"minecraft:bamboo_stairs","id":-512,"version":2,"componentBased":false},{"name":"minecraft:bamboo_standing_sign","id":-518,"version":2,"componentBased":false},{"name":"minecraft:bamboo_trapdoor","id":-520,"version":2,"componentBased":false},{"name":"minecraft:bamboo_wall_sign","id":-519,"version":2,"componentBased":false},{"name":"minecraft:banner","id":600,"version":2,"componentBased":false},{"name":"minecraft:banner_pattern","id":812,"version":2,"componentBased":false},{"name":"minecraft:barrel","id":-203,"version":2,"componentBased":false},{"name":"minecraft:barrier","id":-161,"version":2,"componentBased":false},{"name":"minecraft:basalt","id":-234,"version":2,"componentBased":false},{"name":"minecraft:bat_spawn_egg","id":480,"version":2,"componentBased":false},{"name":"minecraft:beacon","id":138,"version":2,"componentBased":false},{"name":"minecraft:bed","id":444,"version":2,"componentBased":false},{"name":"minecraft:bedrock","id":7,"version":2,"componentBased":false},{"name":"minecraft:bee_nest","id":-218,"version":2,"componentBased":false},{"name":"minecraft:bee_spawn_egg","id":522,"version":2,"componentBased":false},{"name":"minecraft:beef","id":295,"version":0,"componentBased":false},{"name":"minecraft:beehive","id":-219,"version":2,"componentBased":false},{"name":"minecraft:beetroot","id":307,"version":0,"componentBased":false},{"name":"minecraft:beetroot_seeds","id":317,"version":0,"componentBased":false},{"name":"minecraft:beetroot_soup","id":308,"version":0,"componentBased":false},{"name":"minecraft:bell","id":-206,"version":2,"componentBased":false},{"name":"minecraft:big_dripleaf","id":-323,"version":2,"componentBased":false},{"name":"minecraft:birch_boat","id":402,"version":2,"componentBased":false},{"name":"minecraft:birch_button","id":-141,"version":2,"componentBased":false},{"name":"minecraft:birch_chest_boat","id":676,"version":2,"componentBased":false},{"name":"minecraft:birch_door","id":587,"version":2,"componentBased":false},{"name":"minecraft:birch_double_slab","id":-810,"version":2,"componentBased":false},{"name":"minecraft:birch_fence","id":-576,"version":2,"componentBased":false},{"name":"minecraft:birch_fence_gate","id":184,"version":2,"componentBased":false},{"name":"minecraft:birch_hanging_sign","id":-502,"version":2,"componentBased":false},{"name":"minecraft:birch_leaves","id":-801,"version":2,"componentBased":false},{"name":"minecraft:birch_log","id":-570,"version":2,"componentBased":false},{"name":"minecraft:birch_planks","id":-740,"version":2,"componentBased":false},{"name":"minecraft:birch_pressure_plate","id":-151,"version":2,"componentBased":false},{"name":"minecraft:birch_sapling","id":-826,"version":2,"componentBased":false},{"name":"minecraft:birch_sign","id":610,"version":2,"componentBased":false},{"name":"minecraft:birch_slab","id":-805,"version":2,"componentBased":false},{"name":"minecraft:birch_stairs","id":135,"version":2,"componentBased":false},{"name":"minecraft:birch_standing_sign","id":-186,"version":2,"componentBased":false},{"name":"minecraft:birch_trapdoor","id":-146,"version":2,"componentBased":false},{"name":"minecraft:birch_wall_sign","id":-187,"version":2,"componentBased":false},{"name":"minecraft:birch_wood","id":-815,"version":2,"componentBased":false},{"name":"minecraft:black_bundle","id":257,"version":1,"componentBased":true},{"name":"minecraft:black_candle","id":-428,"version":2,"componentBased":false},{"name":"minecraft:black_candle_cake","id":-445,"version":2,"componentBased":false},{"name":"minecraft:black_carpet","id":-611,"version":2,"componentBased":false},{"name":"minecraft:black_concrete","id":-642,"version":2,"componentBased":false},{"name":"minecraft:black_concrete_powder","id":-723,"version":2,"componentBased":false},{"name":"minecraft:black_dye","id":421,"version":2,"componentBased":false},{"name":"minecraft:black_glazed_terracotta","id":235,"version":2,"componentBased":false},{"name":"minecraft:black_harness","id":752,"version":2,"componentBased":false},{"name":"minecraft:black_shulker_box","id":-627,"version":2,"componentBased":false},{"name":"minecraft:black_stained_glass","id":-687,"version":2,"componentBased":false},{"name":"minecraft:black_stained_glass_pane","id":-657,"version":2,"componentBased":false},{"name":"minecraft:black_terracotta","id":-738,"version":2,"componentBased":false},{"name":"minecraft:black_wool","id":-554,"version":2,"componentBased":false},{"name":"minecraft:blackstone","id":-273,"version":2,"componentBased":false},{"name":"minecraft:blackstone_double_slab","id":-283,"version":2,"componentBased":false},{"name":"minecraft:blackstone_slab","id":-282,"version":2,"componentBased":false},{"name":"minecraft:blackstone_stairs","id":-276,"version":2,"componentBased":false},{"name":"minecraft:blackstone_wall","id":-277,"version":2,"componentBased":false},{"name":"minecraft:blade_pottery_sherd","id":696,"version":2,"componentBased":false},{"name":"minecraft:blast_furnace","id":-196,"version":2,"componentBased":false},{"name":"minecraft:blaze_powder","id":456,"version":2,"componentBased":false},{"name":"minecraft:blaze_rod","id":449,"version":2,"componentBased":false},{"name":"minecraft:blaze_spawn_egg","id":483,"version":2,"componentBased":false},{"name":"minecraft:bleach","id":633,"version":2,"componentBased":false},{"name":"minecraft:blue_bundle","id":258,"version":1,"componentBased":true},{"name":"minecraft:blue_candle","id":-424,"version":2,"componentBased":false},{"name":"minecraft:blue_candle_cake","id":-441,"version":2,"componentBased":false},{"name":"minecraft:blue_carpet","id":-607,"version":2,"componentBased":false},{"name":"minecraft:blue_concrete","id":-638,"version":2,"componentBased":false},{"name":"minecraft:blue_concrete_powder","id":-719,"version":2,"componentBased":false},{"name":"minecraft:blue_dye","id":425,"version":2,"componentBased":false},{"name":"minecraft:blue_egg","id":749,"version":2,"componentBased":false},{"name":"minecraft:blue_glazed_terracotta","id":231,"version":2,"componentBased":false},{"name":"minecraft:blue_harness","id":753,"version":2,"componentBased":false},{"name":"minecraft:blue_ice","id":-11,"version":2,"componentBased":false},{"name":"minecraft:blue_orchid","id":-830,"version":2,"componentBased":false},{"name":"minecraft:blue_shulker_box","id":-623,"version":2,"componentBased":false},{"name":"minecraft:blue_stained_glass","id":-683,"version":2,"componentBased":false},{"name":"minecraft:blue_stained_glass_pane","id":-653,"version":2,"componentBased":false},{"name":"minecraft:blue_terracotta","id":-734,"version":2,"componentBased":false},{"name":"minecraft:blue_wool","id":-563,"version":2,"componentBased":false},{"name":"minecraft:board","id":629,"version":2,"componentBased":false},{"name":"minecraft:boat","id":810,"version":2,"componentBased":false},{"name":"minecraft:bogged_spawn_egg","id":490,"version":2,"componentBased":false},{"name":"minecraft:bolt_armor_trim_smithing_template","id":735,"version":2,"componentBased":false},{"name":"minecraft:bone","id":441,"version":2,"componentBased":false},{"name":"minecraft:bone_block","id":216,"version":2,"componentBased":false},{"name":"minecraft:bone_meal","id":437,"version":2,"componentBased":false},{"name":"minecraft:book","id":413,"version":2,"componentBased":false},{"name":"minecraft:bookshelf","id":47,"version":2,"componentBased":false},{"name":"minecraft:border_block","id":212,"version":2,"componentBased":false},{"name":"minecraft:bordure_indented_banner_pattern","id":619,"version":2,"componentBased":false},{"name":"minecraft:bow","id":324,"version":2,"componentBased":false},{"name":"minecraft:bowl","id":346,"version":2,"componentBased":false},{"name":"minecraft:brain_coral","id":-581,"version":2,"componentBased":false},{"name":"minecraft:brain_coral_block","id":-849,"version":2,"componentBased":false},{"name":"minecraft:brain_coral_fan","id":-840,"version":2,"componentBased":false},{"name":"minecraft:brain_coral_wall_fan","id":-904,"version":2,"componentBased":false},{"name":"minecraft:bread","id":283,"version":0,"componentBased":false},{"name":"minecraft:breeze_rod","id":274,"version":1,"componentBased":true},{"name":"minecraft:breeze_spawn_egg","id":529,"version":2,"componentBased":false},{"name":"minecraft:brewer_pottery_sherd","id":697,"version":2,"componentBased":false},{"name":"minecraft:brewing_stand","id":458,"version":2,"componentBased":true},{"name":"minecraft:brick","id":409,"version":2,"componentBased":false},{"name":"minecraft:brick_block","id":45,"version":2,"componentBased":false},{"name":"minecraft:brick_double_slab","id":-880,"version":2,"componentBased":false},{"name":"minecraft:brick_slab","id":-874,"version":2,"componentBased":false},{"name":"minecraft:brick_stairs","id":108,"version":2,"componentBased":false},{"name":"minecraft:brick_wall","id":-976,"version":2,"componentBased":false},{"name":"minecraft:brown_bundle","id":259,"version":1,"componentBased":true},{"name":"minecraft:brown_candle","id":-425,"version":2,"componentBased":false},{"name":"minecraft:brown_candle_cake","id":-442,"version":2,"componentBased":false},{"name":"minecraft:brown_carpet","id":-608,"version":2,"componentBased":false},{"name":"minecraft:brown_concrete","id":-639,"version":2,"componentBased":false},{"name":"minecraft:brown_concrete_powder","id":-720,"version":2,"componentBased":false},{"name":"minecraft:brown_dye","id":424,"version":2,"componentBased":false},{"name":"minecraft:brown_egg","id":750,"version":2,"componentBased":false},{"name":"minecraft:brown_glazed_terracotta","id":232,"version":2,"componentBased":false},{"name":"minecraft:brown_harness","id":754,"version":2,"componentBased":false},{"name":"minecraft:brown_mushroom","id":39,"version":2,"componentBased":false},{"name":"minecraft:brown_mushroom_block","id":99,"version":2,"componentBased":false},{"name":"minecraft:brown_shulker_box","id":-624,"version":2,"componentBased":false},{"name":"minecraft:brown_stained_glass","id":-684,"version":2,"componentBased":false},{"name":"minecraft:brown_stained_glass_pane","id":-654,"version":2,"componentBased":false},{"name":"minecraft:brown_terracotta","id":-735,"version":2,"componentBased":false},{"name":"minecraft:brown_wool","id":-555,"version":2,"componentBased":false},{"name":"minecraft:brush","id":716,"version":2,"componentBased":false},{"name":"minecraft:bubble_column","id":-160,"version":2,"componentBased":false},{"name":"minecraft:bubble_coral","id":-582,"version":2,"componentBased":false},{"name":"minecraft:bubble_coral_block","id":-850,"version":2,"componentBased":false},{"name":"minecraft:bubble_coral_fan","id":-841,"version":2,"componentBased":false},{"name":"minecraft:bubble_coral_wall_fan","id":-136,"version":2,"componentBased":false},{"name":"minecraft:bucket","id":385,"version":2,"componentBased":false},{"name":"minecraft:budding_amethyst","id":-328,"version":2,"componentBased":false},{"name":"minecraft:bundle","id":260,"version":1,"componentBased":true},{"name":"minecraft:burn_pottery_sherd","id":698,"version":2,"componentBased":false},{"name":"minecraft:bush","id":-1023,"version":2,"componentBased":false},{"name":"minecraft:cactus","id":81,"version":2,"componentBased":false},{"name":"minecraft:cactus_flower","id":-1030,"version":2,"componentBased":false},{"name":"minecraft:cake","id":443,"version":2,"componentBased":true},{"name":"minecraft:calcite","id":-326,"version":2,"componentBased":false},{"name":"minecraft:calibrated_sculk_sensor","id":-580,"version":2,"componentBased":false},{"name":"minecraft:camel_spawn_egg","id":692,"version":2,"componentBased":false},{"name":"minecraft:camera","id":630,"version":0,"componentBased":false},{"name":"minecraft:campfire","id":624,"version":2,"componentBased":true},{"name":"minecraft:candle","id":-412,"version":2,"componentBased":false},{"name":"minecraft:candle_cake","id":-429,"version":2,"componentBased":false},{"name":"minecraft:carpet","id":769,"version":2,"componentBased":false},{"name":"minecraft:carrot","id":301,"version":0,"componentBased":false},{"name":"minecraft:carrot_on_a_stick","id":550,"version":2,"componentBased":false},{"name":"minecraft:carrots","id":141,"version":2,"componentBased":false},{"name":"minecraft:cartography_table","id":-200,"version":2,"componentBased":false},{"name":"minecraft:carved_pumpkin","id":-155,"version":2,"componentBased":false},{"name":"minecraft:cat_spawn_egg","id":516,"version":2,"componentBased":false},{"name":"minecraft:cauldron","id":459,"version":2,"componentBased":true},{"name":"minecraft:cave_spider_spawn_egg","id":484,"version":2,"componentBased":false},{"name":"minecraft:cave_vines","id":-322,"version":2,"componentBased":false},{"name":"minecraft:cave_vines_body_with_berries","id":-375,"version":2,"componentBased":false},{"name":"minecraft:cave_vines_head_with_berries","id":-376,"version":2,"componentBased":false},{"name":"minecraft:chain","id":656,"version":2,"componentBased":true},{"name":"minecraft:chain_command_block","id":189,"version":2,"componentBased":false},{"name":"minecraft:chainmail_boots","id":367,"version":2,"componentBased":false},{"name":"minecraft:chainmail_chestplate","id":365,"version":2,"componentBased":false},{"name":"minecraft:chainmail_helmet","id":364,"version":2,"componentBased":false},{"name":"minecraft:chainmail_leggings","id":366,"version":2,"componentBased":false},{"name":"minecraft:chalkboard","id":230,"version":2,"componentBased":false},{"name":"minecraft:charcoal","id":327,"version":2,"componentBased":true},{"name":"minecraft:chemical_heat","id":192,"version":2,"componentBased":false},{"name":"minecraft:chemistry_table","id":804,"version":2,"componentBased":false},{"name":"minecraft:cherry_boat","id":686,"version":2,"componentBased":false},{"name":"minecraft:cherry_button","id":-530,"version":2,"componentBased":false},{"name":"minecraft:cherry_chest_boat","id":687,"version":2,"componentBased":false},{"name":"minecraft:cherry_door","id":-531,"version":2,"componentBased":false},{"name":"minecraft:cherry_double_slab","id":-540,"version":2,"componentBased":false},{"name":"minecraft:cherry_fence","id":-532,"version":2,"componentBased":false},{"name":"minecraft:cherry_fence_gate","id":-533,"version":2,"componentBased":false},{"name":"minecraft:cherry_hanging_sign","id":-534,"version":2,"componentBased":false},{"name":"minecraft:cherry_leaves","id":-548,"version":2,"componentBased":false},{"name":"minecraft:cherry_log","id":-536,"version":2,"componentBased":false},{"name":"minecraft:cherry_planks","id":-537,"version":2,"componentBased":false},{"name":"minecraft:cherry_pressure_plate","id":-538,"version":2,"componentBased":false},{"name":"minecraft:cherry_sapling","id":-547,"version":2,"componentBased":false},{"name":"minecraft:cherry_sign","id":688,"version":2,"componentBased":false},{"name":"minecraft:cherry_slab","id":-539,"version":2,"componentBased":false},{"name":"minecraft:cherry_stairs","id":-541,"version":2,"componentBased":false},{"name":"minecraft:cherry_standing_sign","id":-542,"version":2,"componentBased":false},{"name":"minecraft:cherry_trapdoor","id":-543,"version":2,"componentBased":false},{"name":"minecraft:cherry_wall_sign","id":-544,"version":2,"componentBased":false},{"name":"minecraft:cherry_wood","id":-546,"version":2,"componentBased":false},{"name":"minecraft:chest","id":54,"version":2,"componentBased":false},{"name":"minecraft:chest_boat","id":682,"version":2,"componentBased":false},{"name":"minecraft:chest_minecart","id":415,"version":2,"componentBased":false},{"name":"minecraft:chicken","id":297,"version":0,"componentBased":false},{"name":"minecraft:chicken_spawn_egg","id":462,"version":2,"componentBased":false},{"name":"minecraft:chipped_anvil","id":-959,"version":2,"componentBased":false},{"name":"minecraft:chiseled_bookshelf","id":-526,"version":2,"componentBased":false},{"name":"minecraft:chiseled_copper","id":-760,"version":2,"componentBased":false},{"name":"minecraft:chiseled_deepslate","id":-395,"version":2,"componentBased":false},{"name":"minecraft:chiseled_nether_bricks","id":-302,"version":2,"componentBased":false},{"name":"minecraft:chiseled_polished_blackstone","id":-279,"version":2,"componentBased":false},{"name":"minecraft:chiseled_quartz_block","id":-953,"version":2,"componentBased":false},{"name":"minecraft:chiseled_red_sandstone","id":-956,"version":2,"componentBased":false},{"name":"minecraft:chiseled_resin_bricks","id":-1020,"version":2,"componentBased":false},{"name":"minecraft:chiseled_sandstone","id":-944,"version":2,"componentBased":false},{"name":"minecraft:chiseled_stone_bricks","id":-870,"version":2,"componentBased":false},{"name":"minecraft:chiseled_tuff","id":-753,"version":2,"componentBased":false},{"name":"minecraft:chiseled_tuff_bricks","id":-759,"version":2,"componentBased":false},{"name":"minecraft:chorus_flower","id":200,"version":2,"componentBased":false},{"name":"minecraft:chorus_fruit","id":591,"version":0,"componentBased":false},{"name":"minecraft:chorus_plant","id":240,"version":2,"componentBased":false},{"name":"minecraft:clay","id":82,"version":2,"componentBased":false},{"name":"minecraft:clay_ball","id":410,"version":2,"componentBased":false},{"name":"minecraft:client_request_placeholder_block","id":-465,"version":2,"componentBased":false},{"name":"minecraft:clock","id":419,"version":2,"componentBased":false},{"name":"minecraft:closed_eyeblossom","id":-1019,"version":2,"componentBased":false},{"name":"minecraft:coal","id":326,"version":2,"componentBased":true},{"name":"minecraft:coal_block","id":173,"version":2,"componentBased":false},{"name":"minecraft:coal_ore","id":16,"version":2,"componentBased":false},{"name":"minecraft:coarse_dirt","id":-962,"version":2,"componentBased":false},{"name":"minecraft:coast_armor_trim_smithing_template","id":720,"version":2,"componentBased":false},{"name":"minecraft:cobbled_deepslate","id":-379,"version":2,"componentBased":false},{"name":"minecraft:cobbled_deepslate_double_slab","id":-396,"version":2,"componentBased":false},{"name":"minecraft:cobbled_deepslate_slab","id":-380,"version":2,"componentBased":false},{"name":"minecraft:cobbled_deepslate_stairs","id":-381,"version":2,"componentBased":false},{"name":"minecraft:cobbled_deepslate_wall","id":-382,"version":2,"componentBased":false},{"name":"minecraft:cobblestone","id":4,"version":2,"componentBased":false},{"name":"minecraft:cobblestone_double_slab","id":-879,"version":2,"componentBased":false},{"name":"minecraft:cobblestone_slab","id":-873,"version":2,"componentBased":false},{"name":"minecraft:cobblestone_wall","id":139,"version":2,"componentBased":false},{"name":"minecraft:cocoa","id":127,"version":2,"componentBased":false},{"name":"minecraft:cocoa_beans","id":438,"version":2,"componentBased":false},{"name":"minecraft:cod","id":286,"version":0,"componentBased":false},{"name":"minecraft:cod_bucket","id":389,"version":2,"componentBased":false},{"name":"minecraft:cod_spawn_egg","id":508,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_blue","id":204,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_bp","id":808,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_green","id":-963,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_purple","id":-964,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_red","id":202,"version":2,"componentBased":false},{"name":"minecraft:colored_torch_rg","id":807,"version":2,"componentBased":false},{"name":"minecraft:command_block","id":137,"version":2,"componentBased":false},{"name":"minecraft:command_block_minecart","id":596,"version":2,"componentBased":false},{"name":"minecraft:comparator","id":555,"version":2,"componentBased":true},{"name":"minecraft:compass","id":417,"version":2,"componentBased":false},{"name":"minecraft:composter","id":-213,"version":2,"componentBased":false},{"name":"minecraft:compound","id":631,"version":2,"componentBased":false},{"name":"minecraft:compound_creator","id":238,"version":2,"componentBased":false},{"name":"minecraft:concrete","id":795,"version":2,"componentBased":false},{"name":"minecraft:concrete_powder","id":796,"version":2,"componentBased":false},{"name":"minecraft:conduit","id":-157,"version":2,"componentBased":false},{"name":"minecraft:cooked_beef","id":296,"version":0,"componentBased":false},{"name":"minecraft:cooked_chicken","id":298,"version":0,"componentBased":false},{"name":"minecraft:cooked_cod","id":290,"version":0,"componentBased":false},{"name":"minecraft:cooked_mutton","id":584,"version":0,"componentBased":false},{"name":"minecraft:cooked_porkchop","id":285,"version":0,"componentBased":false},{"name":"minecraft:cooked_rabbit","id":311,"version":0,"componentBased":false},{"name":"minecraft:cooked_salmon","id":291,"version":0,"componentBased":false},{"name":"minecraft:cookie","id":293,"version":0,"componentBased":false},{"name":"minecraft:copper_block","id":-340,"version":2,"componentBased":false},{"name":"minecraft:copper_bulb","id":-776,"version":2,"componentBased":false},{"name":"minecraft:copper_door","id":-784,"version":2,"componentBased":false},{"name":"minecraft:copper_grate","id":-768,"version":2,"componentBased":false},{"name":"minecraft:copper_ingot","id":538,"version":2,"componentBased":false},{"name":"minecraft:copper_ore","id":-311,"version":2,"componentBased":false},{"name":"minecraft:copper_trapdoor","id":-792,"version":2,"componentBased":false},{"name":"minecraft:coral","id":791,"version":2,"componentBased":false},{"name":"minecraft:coral_block","id":773,"version":2,"componentBased":false},{"name":"minecraft:coral_fan","id":782,"version":2,"componentBased":false},{"name":"minecraft:coral_fan_dead","id":783,"version":2,"componentBased":false},{"name":"minecraft:cornflower","id":-838,"version":2,"componentBased":false},{"name":"minecraft:cow_spawn_egg","id":463,"version":2,"componentBased":false},{"name":"minecraft:cracked_deepslate_bricks","id":-410,"version":2,"componentBased":false},{"name":"minecraft:cracked_deepslate_tiles","id":-409,"version":2,"componentBased":false},{"name":"minecraft:cracked_nether_bricks","id":-303,"version":2,"componentBased":false},{"name":"minecraft:cracked_polished_blackstone_bricks","id":-280,"version":2,"componentBased":false},{"name":"minecraft:cracked_stone_bricks","id":-869,"version":2,"componentBased":false},{"name":"minecraft:crafter","id":-313,"version":2,"componentBased":false},{"name":"minecraft:crafting_table","id":58,"version":2,"componentBased":false},{"name":"minecraft:creaking_heart","id":-1012,"version":2,"componentBased":false},{"name":"minecraft:creaking_spawn_egg","id":747,"version":2,"componentBased":false},{"name":"minecraft:creeper_banner_pattern","id":615,"version":2,"componentBased":false},{"name":"minecraft:creeper_head","id":-968,"version":2,"componentBased":false},{"name":"minecraft:creeper_spawn_egg","id":468,"version":2,"componentBased":false},{"name":"minecraft:crimson_button","id":-260,"version":2,"componentBased":false},{"name":"minecraft:crimson_door","id":653,"version":2,"componentBased":false},{"name":"minecraft:crimson_double_slab","id":-266,"version":2,"componentBased":false},{"name":"minecraft:crimson_fence","id":-256,"version":2,"componentBased":false},{"name":"minecraft:crimson_fence_gate","id":-258,"version":2,"componentBased":false},{"name":"minecraft:crimson_fungus","id":-228,"version":2,"componentBased":false},{"name":"minecraft:crimson_hanging_sign","id":-506,"version":2,"componentBased":false},{"name":"minecraft:crimson_hyphae","id":-299,"version":2,"componentBased":false},{"name":"minecraft:crimson_nylium","id":-232,"version":2,"componentBased":false},{"name":"minecraft:crimson_planks","id":-242,"version":2,"componentBased":false},{"name":"minecraft:crimson_pressure_plate","id":-262,"version":2,"componentBased":false},{"name":"minecraft:crimson_roots","id":-223,"version":2,"componentBased":false},{"name":"minecraft:crimson_sign","id":651,"version":2,"componentBased":false},{"name":"minecraft:crimson_slab","id":-264,"version":2,"componentBased":false},{"name":"minecraft:crimson_stairs","id":-254,"version":2,"componentBased":false},{"name":"minecraft:crimson_standing_sign","id":-250,"version":2,"componentBased":false},{"name":"minecraft:crimson_stem","id":-225,"version":2,"componentBased":false},{"name":"minecraft:crimson_trapdoor","id":-246,"version":2,"componentBased":false},{"name":"minecraft:crimson_wall_sign","id":-252,"version":2,"componentBased":false},{"name":"minecraft:crossbow","id":608,"version":2,"componentBased":false},{"name":"minecraft:crying_obsidian","id":-289,"version":2,"componentBased":false},{"name":"minecraft:cut_copper","id":-347,"version":2,"componentBased":false},{"name":"minecraft:cut_copper_slab","id":-361,"version":2,"componentBased":false},{"name":"minecraft:cut_copper_stairs","id":-354,"version":2,"componentBased":false},{"name":"minecraft:cut_red_sandstone","id":-957,"version":2,"componentBased":false},{"name":"minecraft:cut_red_sandstone_double_slab","id":-928,"version":2,"componentBased":false},{"name":"minecraft:cut_red_sandstone_slab","id":-901,"version":2,"componentBased":false},{"name":"minecraft:cut_sandstone","id":-945,"version":2,"componentBased":false},{"name":"minecraft:cut_sandstone_double_slab","id":-927,"version":2,"componentBased":false},{"name":"minecraft:cut_sandstone_slab","id":-900,"version":2,"componentBased":false},{"name":"minecraft:cyan_bundle","id":261,"version":1,"componentBased":true},{"name":"minecraft:cyan_candle","id":-422,"version":2,"componentBased":false},{"name":"minecraft:cyan_candle_cake","id":-439,"version":2,"componentBased":false},{"name":"minecraft:cyan_carpet","id":-605,"version":2,"componentBased":false},{"name":"minecraft:cyan_concrete","id":-636,"version":2,"componentBased":false},{"name":"minecraft:cyan_concrete_powder","id":-717,"version":2,"componentBased":false},{"name":"minecraft:cyan_dye","id":427,"version":2,"componentBased":false},{"name":"minecraft:cyan_glazed_terracotta","id":229,"version":2,"componentBased":false},{"name":"minecraft:cyan_harness","id":755,"version":2,"componentBased":false},{"name":"minecraft:cyan_shulker_box","id":-621,"version":2,"componentBased":false},{"name":"minecraft:cyan_stained_glass","id":-681,"version":2,"componentBased":false},{"name":"minecraft:cyan_stained_glass_pane","id":-651,"version":2,"componentBased":false},{"name":"minecraft:cyan_terracotta","id":-732,"version":2,"componentBased":false},{"name":"minecraft:cyan_wool","id":-561,"version":2,"componentBased":false},{"name":"minecraft:damaged_anvil","id":-960,"version":2,"componentBased":false},{"name":"minecraft:dandelion","id":37,"version":2,"componentBased":false},{"name":"minecraft:danger_pottery_sherd","id":699,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_boat","id":406,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_button","id":-142,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_chest_boat","id":680,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_door","id":590,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_double_slab","id":-813,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_fence","id":-577,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_fence_gate","id":186,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_hanging_sign","id":-505,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_leaves","id":-803,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_log","id":-572,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_planks","id":-743,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_pressure_plate","id":-152,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_sapling","id":-829,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_sign","id":613,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_slab","id":-808,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_stairs","id":164,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_trapdoor","id":-147,"version":2,"componentBased":false},{"name":"minecraft:dark_oak_wood","id":-818,"version":2,"componentBased":false},{"name":"minecraft:dark_prismarine","id":-947,"version":2,"componentBased":false},{"name":"minecraft:dark_prismarine_double_slab","id":-913,"version":2,"componentBased":false},{"name":"minecraft:dark_prismarine_slab","id":-886,"version":2,"componentBased":false},{"name":"minecraft:dark_prismarine_stairs","id":-3,"version":2,"componentBased":false},{"name":"minecraft:darkoak_standing_sign","id":-192,"version":2,"componentBased":false},{"name":"minecraft:darkoak_wall_sign","id":-193,"version":2,"componentBased":false},{"name":"minecraft:daylight_detector","id":151,"version":2,"componentBased":false},{"name":"minecraft:daylight_detector_inverted","id":178,"version":2,"componentBased":false},{"name":"minecraft:dead_brain_coral","id":-586,"version":2,"componentBased":false},{"name":"minecraft:dead_brain_coral_block","id":-854,"version":2,"componentBased":false},{"name":"minecraft:dead_brain_coral_fan","id":-844,"version":2,"componentBased":false},{"name":"minecraft:dead_brain_coral_wall_fan","id":-906,"version":2,"componentBased":false},{"name":"minecraft:dead_bubble_coral","id":-587,"version":2,"componentBased":false},{"name":"minecraft:dead_bubble_coral_block","id":-855,"version":2,"componentBased":false},{"name":"minecraft:dead_bubble_coral_fan","id":-845,"version":2,"componentBased":false},{"name":"minecraft:dead_bubble_coral_wall_fan","id":-908,"version":2,"componentBased":false},{"name":"minecraft:dead_fire_coral","id":-588,"version":2,"componentBased":false},{"name":"minecraft:dead_fire_coral_block","id":-856,"version":2,"componentBased":false},{"name":"minecraft:dead_fire_coral_fan","id":-846,"version":2,"componentBased":false},{"name":"minecraft:dead_fire_coral_wall_fan","id":-909,"version":2,"componentBased":false},{"name":"minecraft:dead_horn_coral","id":-589,"version":2,"componentBased":false},{"name":"minecraft:dead_horn_coral_block","id":-857,"version":2,"componentBased":false},{"name":"minecraft:dead_horn_coral_fan","id":-847,"version":2,"componentBased":false},{"name":"minecraft:dead_horn_coral_wall_fan","id":-910,"version":2,"componentBased":false},{"name":"minecraft:dead_tube_coral","id":-585,"version":2,"componentBased":false},{"name":"minecraft:dead_tube_coral_block","id":-853,"version":2,"componentBased":false},{"name":"minecraft:dead_tube_coral_fan","id":-134,"version":2,"componentBased":false},{"name":"minecraft:dead_tube_coral_wall_fan","id":-905,"version":2,"componentBased":false},{"name":"minecraft:deadbush","id":32,"version":2,"componentBased":false},{"name":"minecraft:decorated_pot","id":-551,"version":2,"componentBased":false},{"name":"minecraft:deepslate","id":-378,"version":2,"componentBased":false},{"name":"minecraft:deepslate_brick_double_slab","id":-399,"version":2,"componentBased":false},{"name":"minecraft:deepslate_brick_slab","id":-392,"version":2,"componentBased":false},{"name":"minecraft:deepslate_brick_stairs","id":-393,"version":2,"componentBased":false},{"name":"minecraft:deepslate_brick_wall","id":-394,"version":2,"componentBased":false},{"name":"minecraft:deepslate_bricks","id":-391,"version":2,"componentBased":false},{"name":"minecraft:deepslate_coal_ore","id":-406,"version":2,"componentBased":false},{"name":"minecraft:deepslate_copper_ore","id":-408,"version":2,"componentBased":false},{"name":"minecraft:deepslate_diamond_ore","id":-405,"version":2,"componentBased":false},{"name":"minecraft:deepslate_emerald_ore","id":-407,"version":2,"componentBased":false},{"name":"minecraft:deepslate_gold_ore","id":-402,"version":2,"componentBased":false},{"name":"minecraft:deepslate_iron_ore","id":-401,"version":2,"componentBased":false},{"name":"minecraft:deepslate_lapis_ore","id":-400,"version":2,"componentBased":false},{"name":"minecraft:deepslate_redstone_ore","id":-403,"version":2,"componentBased":false},{"name":"minecraft:deepslate_tile_double_slab","id":-398,"version":2,"componentBased":false},{"name":"minecraft:deepslate_tile_slab","id":-388,"version":2,"componentBased":false},{"name":"minecraft:deepslate_tile_stairs","id":-389,"version":2,"componentBased":false},{"name":"minecraft:deepslate_tile_wall","id":-390,"version":2,"componentBased":false},{"name":"minecraft:deepslate_tiles","id":-387,"version":2,"componentBased":false},{"name":"minecraft:deny","id":211,"version":2,"componentBased":false},{"name":"minecraft:deprecated_anvil","id":-961,"version":2,"componentBased":false},{"name":"minecraft:deprecated_purpur_block_1","id":-950,"version":2,"componentBased":false},{"name":"minecraft:deprecated_purpur_block_2","id":-952,"version":2,"componentBased":false},{"name":"minecraft:detector_rail","id":28,"version":2,"componentBased":false},{"name":"minecraft:diamond","id":328,"version":2,"componentBased":false},{"name":"minecraft:diamond_axe","id":343,"version":2,"componentBased":false},{"name":"minecraft:diamond_block","id":57,"version":2,"componentBased":false},{"name":"minecraft:diamond_boots","id":375,"version":2,"componentBased":false},{"name":"minecraft:diamond_chestplate","id":373,"version":2,"componentBased":false},{"name":"minecraft:diamond_helmet","id":372,"version":2,"componentBased":false},{"name":"minecraft:diamond_hoe","id":357,"version":2,"componentBased":false},{"name":"minecraft:diamond_horse_armor","id":566,"version":2,"componentBased":false},{"name":"minecraft:diamond_leggings","id":374,"version":2,"componentBased":false},{"name":"minecraft:diamond_ore","id":56,"version":2,"componentBased":false},{"name":"minecraft:diamond_pickaxe","id":342,"version":2,"componentBased":false},{"name":"minecraft:diamond_shovel","id":341,"version":2,"componentBased":false},{"name":"minecraft:diamond_sword","id":340,"version":2,"componentBased":false},{"name":"minecraft:diorite","id":-592,"version":2,"componentBased":false},{"name":"minecraft:diorite_double_slab","id":-921,"version":2,"componentBased":false},{"name":"minecraft:diorite_slab","id":-894,"version":2,"componentBased":false},{"name":"minecraft:diorite_stairs","id":-170,"version":2,"componentBased":false},{"name":"minecraft:diorite_wall","id":-973,"version":2,"componentBased":false},{"name":"minecraft:dirt","id":3,"version":2,"componentBased":false},{"name":"minecraft:dirt_with_roots","id":-318,"version":2,"componentBased":false},{"name":"minecraft:disc_fragment_5","id":674,"version":2,"componentBased":false},{"name":"minecraft:dispenser","id":23,"version":2,"componentBased":false},{"name":"minecraft:dolphin_spawn_egg","id":512,"version":2,"componentBased":false},{"name":"minecraft:donkey_spawn_egg","id":493,"version":2,"componentBased":false},{"name":"minecraft:double_cut_copper_slab","id":-368,"version":2,"componentBased":false},{"name":"minecraft:double_plant","id":789,"version":2,"componentBased":false},{"name":"minecraft:double_stone_block_slab","id":778,"version":2,"componentBased":false},{"name":"minecraft:double_stone_block_slab2","id":779,"version":2,"componentBased":false},{"name":"minecraft:double_stone_block_slab3","id":780,"version":2,"componentBased":false},{"name":"minecraft:double_stone_block_slab4","id":781,"version":2,"componentBased":false},{"name":"minecraft:dragon_breath","id":593,"version":2,"componentBased":false},{"name":"minecraft:dragon_egg","id":122,"version":2,"componentBased":false},{"name":"minecraft:dragon_head","id":-969,"version":2,"componentBased":false},{"name":"minecraft:dried_ghast","id":-1027,"version":2,"componentBased":false},{"name":"minecraft:dried_kelp","id":292,"version":0,"componentBased":false},{"name":"minecraft:dried_kelp_block","id":-139,"version":2,"componentBased":false},{"name":"minecraft:dripstone_block","id":-317,"version":2,"componentBased":false},{"name":"minecraft:dropper","id":125,"version":2,"componentBased":false},{"name":"minecraft:drowned_spawn_egg","id":511,"version":2,"componentBased":false},{"name":"minecraft:dune_armor_trim_smithing_template","id":719,"version":2,"componentBased":false},{"name":"minecraft:dye","id":811,"version":2,"componentBased":false},{"name":"minecraft:echo_shard","id":684,"version":2,"componentBased":false},{"name":"minecraft:egg","id":416,"version":2,"componentBased":false},{"name":"minecraft:elder_guardian_spawn_egg","id":499,"version":2,"componentBased":false},{"name":"minecraft:element_0","id":36,"version":2,"componentBased":false},{"name":"minecraft:element_1","id":-12,"version":2,"componentBased":false},{"name":"minecraft:element_10","id":-21,"version":2,"componentBased":false},{"name":"minecraft:element_100","id":-111,"version":2,"componentBased":false},{"name":"minecraft:element_101","id":-112,"version":2,"componentBased":false},{"name":"minecraft:element_102","id":-113,"version":2,"componentBased":false},{"name":"minecraft:element_103","id":-114,"version":2,"componentBased":false},{"name":"minecraft:element_104","id":-115,"version":2,"componentBased":false},{"name":"minecraft:element_105","id":-116,"version":2,"componentBased":false},{"name":"minecraft:element_106","id":-117,"version":2,"componentBased":false},{"name":"minecraft:element_107","id":-118,"version":2,"componentBased":false},{"name":"minecraft:element_108","id":-119,"version":2,"componentBased":false},{"name":"minecraft:element_109","id":-120,"version":2,"componentBased":false},{"name":"minecraft:element_11","id":-22,"version":2,"componentBased":false},{"name":"minecraft:element_110","id":-121,"version":2,"componentBased":false},{"name":"minecraft:element_111","id":-122,"version":2,"componentBased":false},{"name":"minecraft:element_112","id":-123,"version":2,"componentBased":false},{"name":"minecraft:element_113","id":-124,"version":2,"componentBased":false},{"name":"minecraft:element_114","id":-125,"version":2,"componentBased":false},{"name":"minecraft:element_115","id":-126,"version":2,"componentBased":false},{"name":"minecraft:element_116","id":-127,"version":2,"componentBased":false},{"name":"minecraft:element_117","id":-128,"version":2,"componentBased":false},{"name":"minecraft:element_118","id":-129,"version":2,"componentBased":false},{"name":"minecraft:element_12","id":-23,"version":2,"componentBased":false},{"name":"minecraft:element_13","id":-24,"version":2,"componentBased":false},{"name":"minecraft:element_14","id":-25,"version":2,"componentBased":false},{"name":"minecraft:element_15","id":-26,"version":2,"componentBased":false},{"name":"minecraft:element_16","id":-27,"version":2,"componentBased":false},{"name":"minecraft:element_17","id":-28,"version":2,"componentBased":false},{"name":"minecraft:element_18","id":-29,"version":2,"componentBased":false},{"name":"minecraft:element_19","id":-30,"version":2,"componentBased":false},{"name":"minecraft:element_2","id":-13,"version":2,"componentBased":false},{"name":"minecraft:element_20","id":-31,"version":2,"componentBased":false},{"name":"minecraft:element_21","id":-32,"version":2,"componentBased":false},{"name":"minecraft:element_22","id":-33,"version":2,"componentBased":false},{"name":"minecraft:element_23","id":-34,"version":2,"componentBased":false},{"name":"minecraft:element_24","id":-35,"version":2,"componentBased":false},{"name":"minecraft:element_25","id":-36,"version":2,"componentBased":false},{"name":"minecraft:element_26","id":-37,"version":2,"componentBased":false},{"name":"minecraft:element_27","id":-38,"version":2,"componentBased":false},{"name":"minecraft:element_28","id":-39,"version":2,"componentBased":false},{"name":"minecraft:element_29","id":-40,"version":2,"componentBased":false},{"name":"minecraft:element_3","id":-14,"version":2,"componentBased":false},{"name":"minecraft:element_30","id":-41,"version":2,"componentBased":false},{"name":"minecraft:element_31","id":-42,"version":2,"componentBased":false},{"name":"minecraft:element_32","id":-43,"version":2,"componentBased":false},{"name":"minecraft:element_33","id":-44,"version":2,"componentBased":false},{"name":"minecraft:element_34","id":-45,"version":2,"componentBased":false},{"name":"minecraft:element_35","id":-46,"version":2,"componentBased":false},{"name":"minecraft:element_36","id":-47,"version":2,"componentBased":false},{"name":"minecraft:element_37","id":-48,"version":2,"componentBased":false},{"name":"minecraft:element_38","id":-49,"version":2,"componentBased":false},{"name":"minecraft:element_39","id":-50,"version":2,"componentBased":false},{"name":"minecraft:element_4","id":-15,"version":2,"componentBased":false},{"name":"minecraft:element_40","id":-51,"version":2,"componentBased":false},{"name":"minecraft:element_41","id":-52,"version":2,"componentBased":false},{"name":"minecraft:element_42","id":-53,"version":2,"componentBased":false},{"name":"minecraft:element_43","id":-54,"version":2,"componentBased":false},{"name":"minecraft:element_44","id":-55,"version":2,"componentBased":false},{"name":"minecraft:element_45","id":-56,"version":2,"componentBased":false},{"name":"minecraft:element_46","id":-57,"version":2,"componentBased":false},{"name":"minecraft:element_47","id":-58,"version":2,"componentBased":false},{"name":"minecraft:element_48","id":-59,"version":2,"componentBased":false},{"name":"minecraft:element_49","id":-60,"version":2,"componentBased":false},{"name":"minecraft:element_5","id":-16,"version":2,"componentBased":false},{"name":"minecraft:element_50","id":-61,"version":2,"componentBased":false},{"name":"minecraft:element_51","id":-62,"version":2,"componentBased":false},{"name":"minecraft:element_52","id":-63,"version":2,"componentBased":false},{"name":"minecraft:element_53","id":-64,"version":2,"componentBased":false},{"name":"minecraft:element_54","id":-65,"version":2,"componentBased":false},{"name":"minecraft:element_55","id":-66,"version":2,"componentBased":false},{"name":"minecraft:element_56","id":-67,"version":2,"componentBased":false},{"name":"minecraft:element_57","id":-68,"version":2,"componentBased":false},{"name":"minecraft:element_58","id":-69,"version":2,"componentBased":false},{"name":"minecraft:element_59","id":-70,"version":2,"componentBased":false},{"name":"minecraft:element_6","id":-17,"version":2,"componentBased":false},{"name":"minecraft:element_60","id":-71,"version":2,"componentBased":false},{"name":"minecraft:element_61","id":-72,"version":2,"componentBased":false},{"name":"minecraft:element_62","id":-73,"version":2,"componentBased":false},{"name":"minecraft:element_63","id":-74,"version":2,"componentBased":false},{"name":"minecraft:element_64","id":-75,"version":2,"componentBased":false},{"name":"minecraft:element_65","id":-76,"version":2,"componentBased":false},{"name":"minecraft:element_66","id":-77,"version":2,"componentBased":false},{"name":"minecraft:element_67","id":-78,"version":2,"componentBased":false},{"name":"minecraft:element_68","id":-79,"version":2,"componentBased":false},{"name":"minecraft:element_69","id":-80,"version":2,"componentBased":false},{"name":"minecraft:element_7","id":-18,"version":2,"componentBased":false},{"name":"minecraft:element_70","id":-81,"version":2,"componentBased":false},{"name":"minecraft:element_71","id":-82,"version":2,"componentBased":false},{"name":"minecraft:element_72","id":-83,"version":2,"componentBased":false},{"name":"minecraft:element_73","id":-84,"version":2,"componentBased":false},{"name":"minecraft:element_74","id":-85,"version":2,"componentBased":false},{"name":"minecraft:element_75","id":-86,"version":2,"componentBased":false},{"name":"minecraft:element_76","id":-87,"version":2,"componentBased":false},{"name":"minecraft:element_77","id":-88,"version":2,"componentBased":false},{"name":"minecraft:element_78","id":-89,"version":2,"componentBased":false},{"name":"minecraft:element_79","id":-90,"version":2,"componentBased":false},{"name":"minecraft:element_8","id":-19,"version":2,"componentBased":false},{"name":"minecraft:element_80","id":-91,"version":2,"componentBased":false},{"name":"minecraft:element_81","id":-92,"version":2,"componentBased":false},{"name":"minecraft:element_82","id":-93,"version":2,"componentBased":false},{"name":"minecraft:element_83","id":-94,"version":2,"componentBased":false},{"name":"minecraft:element_84","id":-95,"version":2,"componentBased":false},{"name":"minecraft:element_85","id":-96,"version":2,"componentBased":false},{"name":"minecraft:element_86","id":-97,"version":2,"componentBased":false},{"name":"minecraft:element_87","id":-98,"version":2,"componentBased":false},{"name":"minecraft:element_88","id":-99,"version":2,"componentBased":false},{"name":"minecraft:element_89","id":-100,"version":2,"componentBased":false},{"name":"minecraft:element_9","id":-20,"version":2,"componentBased":false},{"name":"minecraft:element_90","id":-101,"version":2,"componentBased":false},{"name":"minecraft:element_91","id":-102,"version":2,"componentBased":false},{"name":"minecraft:element_92","id":-103,"version":2,"componentBased":false},{"name":"minecraft:element_93","id":-104,"version":2,"componentBased":false},{"name":"minecraft:element_94","id":-105,"version":2,"componentBased":false},{"name":"minecraft:element_95","id":-106,"version":2,"componentBased":false},{"name":"minecraft:element_96","id":-107,"version":2,"componentBased":false},{"name":"minecraft:element_97","id":-108,"version":2,"componentBased":false},{"name":"minecraft:element_98","id":-109,"version":2,"componentBased":false},{"name":"minecraft:element_99","id":-110,"version":2,"componentBased":false},{"name":"minecraft:element_constructor","id":-987,"version":2,"componentBased":false},{"name":"minecraft:elytra","id":597,"version":2,"componentBased":false},{"name":"minecraft:emerald","id":546,"version":2,"componentBased":false},{"name":"minecraft:emerald_block","id":133,"version":2,"componentBased":false},{"name":"minecraft:emerald_ore","id":129,"version":2,"componentBased":false},{"name":"minecraft:empty_map","id":549,"version":2,"componentBased":false},{"name":"minecraft:enchanted_book","id":554,"version":2,"componentBased":false},{"name":"minecraft:enchanted_golden_apple","id":281,"version":0,"componentBased":false},{"name":"minecraft:enchanting_table","id":116,"version":2,"componentBased":false},{"name":"minecraft:end_brick_stairs","id":-178,"version":2,"componentBased":false},{"name":"minecraft:end_bricks","id":206,"version":2,"componentBased":false},{"name":"minecraft:end_crystal","id":814,"version":2,"componentBased":false},{"name":"minecraft:end_gateway","id":209,"version":2,"componentBased":false},{"name":"minecraft:end_portal","id":119,"version":2,"componentBased":false},{"name":"minecraft:end_portal_frame","id":120,"version":2,"componentBased":false},{"name":"minecraft:end_rod","id":208,"version":2,"componentBased":false},{"name":"minecraft:end_stone","id":121,"version":2,"componentBased":false},{"name":"minecraft:end_stone_brick_double_slab","id":-167,"version":2,"componentBased":false},{"name":"minecraft:end_stone_brick_slab","id":-162,"version":2,"componentBased":false},{"name":"minecraft:end_stone_brick_wall","id":-980,"version":2,"componentBased":false},{"name":"minecraft:ender_chest","id":130,"version":2,"componentBased":false},{"name":"minecraft:ender_dragon_spawn_egg","id":535,"version":2,"componentBased":false},{"name":"minecraft:ender_eye","id":460,"version":2,"componentBased":false},{"name":"minecraft:ender_pearl","id":448,"version":2,"componentBased":false},{"name":"minecraft:enderman_spawn_egg","id":469,"version":2,"componentBased":false},{"name":"minecraft:endermite_spawn_egg","id":487,"version":2,"componentBased":false},{"name":"minecraft:evoker_spawn_egg","id":503,"version":2,"componentBased":false},{"name":"minecraft:experience_bottle","id":542,"version":2,"componentBased":false},{"name":"minecraft:explorer_pottery_sherd","id":700,"version":2,"componentBased":false},{"name":"minecraft:exposed_chiseled_copper","id":-761,"version":2,"componentBased":false},{"name":"minecraft:exposed_copper","id":-341,"version":2,"componentBased":false},{"name":"minecraft:exposed_copper_bulb","id":-777,"version":2,"componentBased":false},{"name":"minecraft:exposed_copper_door","id":-785,"version":2,"componentBased":false},{"name":"minecraft:exposed_copper_grate","id":-769,"version":2,"componentBased":false},{"name":"minecraft:exposed_copper_trapdoor","id":-793,"version":2,"componentBased":false},{"name":"minecraft:exposed_cut_copper","id":-348,"version":2,"componentBased":false},{"name":"minecraft:exposed_cut_copper_slab","id":-362,"version":2,"componentBased":false},{"name":"minecraft:exposed_cut_copper_stairs","id":-355,"version":2,"componentBased":false},{"name":"minecraft:exposed_double_cut_copper_slab","id":-369,"version":2,"componentBased":false},{"name":"minecraft:eye_armor_trim_smithing_template","id":723,"version":2,"componentBased":false},{"name":"minecraft:farmland","id":60,"version":2,"componentBased":false},{"name":"minecraft:feather","id":352,"version":2,"componentBased":false},{"name":"minecraft:fence","id":771,"version":2,"componentBased":false},{"name":"minecraft:fence_gate","id":107,"version":2,"componentBased":false},{"name":"minecraft:fermented_spider_eye","id":455,"version":2,"componentBased":false},{"name":"minecraft:fern","id":-848,"version":2,"componentBased":false},{"name":"minecraft:field_masoned_banner_pattern","id":618,"version":2,"componentBased":false},{"name":"minecraft:filled_map","id":446,"version":2,"componentBased":false},{"name":"minecraft:fire","id":51,"version":2,"componentBased":false},{"name":"minecraft:fire_charge","id":543,"version":2,"componentBased":false},{"name":"minecraft:fire_coral","id":-583,"version":2,"componentBased":false},{"name":"minecraft:fire_coral_block","id":-851,"version":2,"componentBased":false},{"name":"minecraft:fire_coral_fan","id":-842,"version":2,"componentBased":false},{"name":"minecraft:fire_coral_wall_fan","id":-907,"version":2,"componentBased":false},{"name":"minecraft:firefly_bush","id":-1025,"version":2,"componentBased":false},{"name":"minecraft:firework_rocket","id":552,"version":2,"componentBased":false},{"name":"minecraft:firework_star","id":553,"version":2,"componentBased":false},{"name":"minecraft:fishing_rod","id":418,"version":2,"componentBased":true},{"name":"minecraft:fletching_table","id":-201,"version":2,"componentBased":false},{"name":"minecraft:flint","id":381,"version":2,"componentBased":false},{"name":"minecraft:flint_and_steel","id":323,"version":2,"componentBased":false},{"name":"minecraft:flow_armor_trim_smithing_template","id":734,"version":2,"componentBased":false},{"name":"minecraft:flow_banner_pattern","id":622,"version":2,"componentBased":false},{"name":"minecraft:flow_pottery_sherd","id":701,"version":2,"componentBased":false},{"name":"minecraft:flower_banner_pattern","id":614,"version":2,"componentBased":false},{"name":"minecraft:flower_pot","id":548,"version":2,"componentBased":true},{"name":"minecraft:flowering_azalea","id":-338,"version":2,"componentBased":false},{"name":"minecraft:flowing_lava","id":10,"version":2,"componentBased":false},{"name":"minecraft:flowing_water","id":8,"version":2,"componentBased":false},{"name":"minecraft:fox_spawn_egg","id":518,"version":2,"componentBased":false},{"name":"minecraft:frame","id":547,"version":2,"componentBased":true},{"name":"minecraft:friend_pottery_sherd","id":702,"version":2,"componentBased":false},{"name":"minecraft:frog_spawn","id":-468,"version":2,"componentBased":false},{"name":"minecraft:frog_spawn_egg","id":665,"version":2,"componentBased":false},{"name":"minecraft:frosted_ice","id":207,"version":2,"componentBased":false},{"name":"minecraft:furnace","id":61,"version":2,"componentBased":false},{"name":"minecraft:ghast_spawn_egg","id":481,"version":2,"componentBased":false},{"name":"minecraft:ghast_tear","id":451,"version":2,"componentBased":false},{"name":"minecraft:gilded_blackstone","id":-281,"version":2,"componentBased":false},{"name":"minecraft:glass","id":20,"version":2,"componentBased":false},{"name":"minecraft:glass_bottle","id":454,"version":2,"componentBased":false},{"name":"minecraft:glass_pane","id":102,"version":2,"componentBased":false},{"name":"minecraft:glistering_melon_slice","id":461,"version":2,"componentBased":false},{"name":"minecraft:globe_banner_pattern","id":621,"version":2,"componentBased":false},{"name":"minecraft:glow_berries","id":815,"version":0,"componentBased":false},{"name":"minecraft:glow_frame","id":660,"version":2,"componentBased":true},{"name":"minecraft:glow_ink_sac","id":537,"version":2,"componentBased":false},{"name":"minecraft:glow_lichen","id":-411,"version":2,"componentBased":false},{"name":"minecraft:glow_squid_spawn_egg","id":532,"version":2,"componentBased":false},{"name":"minecraft:glow_stick","id":638,"version":2,"componentBased":false},{"name":"minecraft:glowingobsidian","id":246,"version":2,"componentBased":false},{"name":"minecraft:glowstone","id":89,"version":2,"componentBased":false},{"name":"minecraft:glowstone_dust","id":420,"version":2,"componentBased":false},{"name":"minecraft:goat_horn","id":664,"version":2,"componentBased":false},{"name":"minecraft:goat_spawn_egg","id":531,"version":2,"componentBased":false},{"name":"minecraft:gold_block","id":41,"version":2,"componentBased":false},{"name":"minecraft:gold_ingot","id":330,"version":2,"componentBased":false},{"name":"minecraft:gold_nugget","id":452,"version":2,"componentBased":false},{"name":"minecraft:gold_ore","id":14,"version":2,"componentBased":false},{"name":"minecraft:golden_apple","id":280,"version":0,"componentBased":false},{"name":"minecraft:golden_axe","id":350,"version":2,"componentBased":false},{"name":"minecraft:golden_boots","id":379,"version":2,"componentBased":false},{"name":"minecraft:golden_carrot","id":305,"version":0,"componentBased":false},{"name":"minecraft:golden_chestplate","id":377,"version":2,"componentBased":false},{"name":"minecraft:golden_helmet","id":376,"version":2,"componentBased":false},{"name":"minecraft:golden_hoe","id":358,"version":2,"componentBased":false},{"name":"minecraft:golden_horse_armor","id":565,"version":2,"componentBased":false},{"name":"minecraft:golden_leggings","id":378,"version":2,"componentBased":false},{"name":"minecraft:golden_pickaxe","id":349,"version":2,"componentBased":false},{"name":"minecraft:golden_rail","id":27,"version":2,"componentBased":false},{"name":"minecraft:golden_shovel","id":348,"version":2,"componentBased":false},{"name":"minecraft:golden_sword","id":347,"version":2,"componentBased":false},{"name":"minecraft:granite","id":-590,"version":2,"componentBased":false},{"name":"minecraft:granite_double_slab","id":-923,"version":2,"componentBased":false},{"name":"minecraft:granite_slab","id":-896,"version":2,"componentBased":false},{"name":"minecraft:granite_stairs","id":-169,"version":2,"componentBased":false},{"name":"minecraft:granite_wall","id":-972,"version":2,"componentBased":false},{"name":"minecraft:grass_block","id":2,"version":2,"componentBased":false},{"name":"minecraft:grass_path","id":198,"version":2,"componentBased":false},{"name":"minecraft:gravel","id":13,"version":2,"componentBased":false},{"name":"minecraft:gray_bundle","id":262,"version":1,"componentBased":true},{"name":"minecraft:gray_candle","id":-420,"version":2,"componentBased":false},{"name":"minecraft:gray_candle_cake","id":-437,"version":2,"componentBased":false},{"name":"minecraft:gray_carpet","id":-603,"version":2,"componentBased":false},{"name":"minecraft:gray_concrete","id":-634,"version":2,"componentBased":false},{"name":"minecraft:gray_concrete_powder","id":-715,"version":2,"componentBased":false},{"name":"minecraft:gray_dye","id":429,"version":2,"componentBased":false},{"name":"minecraft:gray_glazed_terracotta","id":227,"version":2,"componentBased":false},{"name":"minecraft:gray_harness","id":756,"version":2,"componentBased":false},{"name":"minecraft:gray_shulker_box","id":-619,"version":2,"componentBased":false},{"name":"minecraft:gray_stained_glass","id":-679,"version":2,"componentBased":false},{"name":"minecraft:gray_stained_glass_pane","id":-649,"version":2,"componentBased":false},{"name":"minecraft:gray_terracotta","id":-730,"version":2,"componentBased":false},{"name":"minecraft:gray_wool","id":-553,"version":2,"componentBased":false},{"name":"minecraft:green_bundle","id":263,"version":1,"componentBased":true},{"name":"minecraft:green_candle","id":-426,"version":2,"componentBased":false},{"name":"minecraft:green_candle_cake","id":-443,"version":2,"componentBased":false},{"name":"minecraft:green_carpet","id":-609,"version":2,"componentBased":false},{"name":"minecraft:green_concrete","id":-640,"version":2,"componentBased":false},{"name":"minecraft:green_concrete_powder","id":-721,"version":2,"componentBased":false},{"name":"minecraft:green_dye","id":423,"version":2,"componentBased":false},{"name":"minecraft:green_glazed_terracotta","id":233,"version":2,"componentBased":false},{"name":"minecraft:green_harness","id":757,"version":2,"componentBased":false},{"name":"minecraft:green_shulker_box","id":-625,"version":2,"componentBased":false},{"name":"minecraft:green_stained_glass","id":-685,"version":2,"componentBased":false},{"name":"minecraft:green_stained_glass_pane","id":-655,"version":2,"componentBased":false},{"name":"minecraft:green_terracotta","id":-736,"version":2,"componentBased":false},{"name":"minecraft:green_wool","id":-560,"version":2,"componentBased":false},{"name":"minecraft:grindstone","id":-195,"version":2,"componentBased":false},{"name":"minecraft:guardian_spawn_egg","id":488,"version":2,"componentBased":false},{"name":"minecraft:gunpowder","id":353,"version":2,"componentBased":false},{"name":"minecraft:guster_banner_pattern","id":623,"version":2,"componentBased":false},{"name":"minecraft:guster_pottery_sherd","id":703,"version":2,"componentBased":false},{"name":"minecraft:hanging_roots","id":-319,"version":2,"componentBased":false},{"name":"minecraft:happy_ghast_spawn_egg","id":751,"version":2,"componentBased":false},{"name":"minecraft:hard_black_stained_glass","id":-702,"version":2,"componentBased":false},{"name":"minecraft:hard_black_stained_glass_pane","id":-672,"version":2,"componentBased":false},{"name":"minecraft:hard_blue_stained_glass","id":-698,"version":2,"componentBased":false},{"name":"minecraft:hard_blue_stained_glass_pane","id":-668,"version":2,"componentBased":false},{"name":"minecraft:hard_brown_stained_glass","id":-699,"version":2,"componentBased":false},{"name":"minecraft:hard_brown_stained_glass_pane","id":-669,"version":2,"componentBased":false},{"name":"minecraft:hard_cyan_stained_glass","id":-696,"version":2,"componentBased":false},{"name":"minecraft:hard_cyan_stained_glass_pane","id":-666,"version":2,"componentBased":false},{"name":"minecraft:hard_glass","id":253,"version":2,"componentBased":false},{"name":"minecraft:hard_glass_pane","id":190,"version":2,"componentBased":false},{"name":"minecraft:hard_gray_stained_glass","id":-694,"version":2,"componentBased":false},{"name":"minecraft:hard_gray_stained_glass_pane","id":-664,"version":2,"componentBased":false},{"name":"minecraft:hard_green_stained_glass","id":-700,"version":2,"componentBased":false},{"name":"minecraft:hard_green_stained_glass_pane","id":-670,"version":2,"componentBased":false},{"name":"minecraft:hard_light_blue_stained_glass","id":-690,"version":2,"componentBased":false},{"name":"minecraft:hard_light_blue_stained_glass_pane","id":-660,"version":2,"componentBased":false},{"name":"minecraft:hard_light_gray_stained_glass","id":-695,"version":2,"componentBased":false},{"name":"minecraft:hard_light_gray_stained_glass_pane","id":-665,"version":2,"componentBased":false},{"name":"minecraft:hard_lime_stained_glass","id":-692,"version":2,"componentBased":false},{"name":"minecraft:hard_lime_stained_glass_pane","id":-662,"version":2,"componentBased":false},{"name":"minecraft:hard_magenta_stained_glass","id":-689,"version":2,"componentBased":false},{"name":"minecraft:hard_magenta_stained_glass_pane","id":-659,"version":2,"componentBased":false},{"name":"minecraft:hard_orange_stained_glass","id":-688,"version":2,"componentBased":false},{"name":"minecraft:hard_orange_stained_glass_pane","id":-658,"version":2,"componentBased":false},{"name":"minecraft:hard_pink_stained_glass","id":-693,"version":2,"componentBased":false},{"name":"minecraft:hard_pink_stained_glass_pane","id":-663,"version":2,"componentBased":false},{"name":"minecraft:hard_purple_stained_glass","id":-697,"version":2,"componentBased":false},{"name":"minecraft:hard_purple_stained_glass_pane","id":-667,"version":2,"componentBased":false},{"name":"minecraft:hard_red_stained_glass","id":-701,"version":2,"componentBased":false},{"name":"minecraft:hard_red_stained_glass_pane","id":-671,"version":2,"componentBased":false},{"name":"minecraft:hard_stained_glass","id":805,"version":2,"componentBased":false},{"name":"minecraft:hard_stained_glass_pane","id":806,"version":2,"componentBased":false},{"name":"minecraft:hard_white_stained_glass","id":254,"version":2,"componentBased":false},{"name":"minecraft:hard_white_stained_glass_pane","id":191,"version":2,"componentBased":false},{"name":"minecraft:hard_yellow_stained_glass","id":-691,"version":2,"componentBased":false},{"name":"minecraft:hard_yellow_stained_glass_pane","id":-661,"version":2,"componentBased":false},{"name":"minecraft:hardened_clay","id":172,"version":2,"componentBased":false},{"name":"minecraft:hay_block","id":170,"version":2,"componentBased":false},{"name":"minecraft:heart_of_the_sea","id":604,"version":2,"componentBased":false},{"name":"minecraft:heart_pottery_sherd","id":704,"version":2,"componentBased":false},{"name":"minecraft:heartbreak_pottery_sherd","id":705,"version":2,"componentBased":false},{"name":"minecraft:heavy_core","id":-316,"version":2,"componentBased":false},{"name":"minecraft:heavy_weighted_pressure_plate","id":148,"version":2,"componentBased":false},{"name":"minecraft:hoglin_spawn_egg","id":524,"version":2,"componentBased":false},{"name":"minecraft:honey_block","id":-220,"version":2,"componentBased":false},{"name":"minecraft:honey_bottle","id":627,"version":0,"componentBased":false},{"name":"minecraft:honeycomb","id":626,"version":0,"componentBased":false},{"name":"minecraft:honeycomb_block","id":-221,"version":2,"componentBased":false},{"name":"minecraft:hopper","id":560,"version":2,"componentBased":true},{"name":"minecraft:hopper_minecart","id":559,"version":2,"componentBased":false},{"name":"minecraft:horn_coral","id":-584,"version":2,"componentBased":false},{"name":"minecraft:horn_coral_block","id":-852,"version":2,"componentBased":false},{"name":"minecraft:horn_coral_fan","id":-843,"version":2,"componentBased":false},{"name":"minecraft:horn_coral_wall_fan","id":-137,"version":2,"componentBased":false},{"name":"minecraft:horse_spawn_egg","id":485,"version":2,"componentBased":false},{"name":"minecraft:host_armor_trim_smithing_template","id":733,"version":2,"componentBased":false},{"name":"minecraft:howl_pottery_sherd","id":706,"version":2,"componentBased":false},{"name":"minecraft:husk_spawn_egg","id":491,"version":2,"componentBased":false},{"name":"minecraft:ice","id":79,"version":2,"componentBased":false},{"name":"minecraft:ice_bomb","id":632,"version":2,"componentBased":false},{"name":"minecraft:infested_chiseled_stone_bricks","id":-862,"version":2,"componentBased":false},{"name":"minecraft:infested_cobblestone","id":-858,"version":2,"componentBased":false},{"name":"minecraft:infested_cracked_stone_bricks","id":-861,"version":2,"componentBased":false},{"name":"minecraft:infested_deepslate","id":-454,"version":2,"componentBased":false},{"name":"minecraft:infested_mossy_stone_bricks","id":-860,"version":2,"componentBased":false},{"name":"minecraft:infested_stone","id":97,"version":2,"componentBased":false},{"name":"minecraft:infested_stone_bricks","id":-859,"version":2,"componentBased":false},{"name":"minecraft:info_update","id":248,"version":2,"componentBased":false},{"name":"minecraft:info_update2","id":249,"version":2,"componentBased":false},{"name":"minecraft:ink_sac","id":439,"version":2,"componentBased":false},{"name":"minecraft:invisible_bedrock","id":95,"version":2,"componentBased":false},{"name":"minecraft:iron_axe","id":322,"version":2,"componentBased":false},{"name":"minecraft:iron_bars","id":101,"version":2,"componentBased":false},{"name":"minecraft:iron_block","id":42,"version":2,"componentBased":false},{"name":"minecraft:iron_boots","id":371,"version":2,"componentBased":false},{"name":"minecraft:iron_chestplate","id":369,"version":2,"componentBased":false},{"name":"minecraft:iron_door","id":397,"version":2,"componentBased":false},{"name":"minecraft:iron_golem_spawn_egg","id":533,"version":2,"componentBased":false},{"name":"minecraft:iron_helmet","id":368,"version":2,"componentBased":false},{"name":"minecraft:iron_hoe","id":356,"version":2,"componentBased":false},{"name":"minecraft:iron_horse_armor","id":564,"version":2,"componentBased":false},{"name":"minecraft:iron_ingot","id":329,"version":2,"componentBased":false},{"name":"minecraft:iron_leggings","id":370,"version":2,"componentBased":false},{"name":"minecraft:iron_nugget","id":602,"version":2,"componentBased":false},{"name":"minecraft:iron_ore","id":15,"version":2,"componentBased":false},{"name":"minecraft:iron_pickaxe","id":321,"version":2,"componentBased":false},{"name":"minecraft:iron_shovel","id":320,"version":2,"componentBased":false},{"name":"minecraft:iron_sword","id":331,"version":2,"componentBased":false},{"name":"minecraft:iron_trapdoor","id":167,"version":2,"componentBased":false},{"name":"minecraft:item.acacia_door","id":196,"version":2,"componentBased":false},{"name":"minecraft:item.bed","id":26,"version":2,"componentBased":false},{"name":"minecraft:item.beetroot","id":244,"version":2,"componentBased":false},{"name":"minecraft:item.birch_door","id":194,"version":2,"componentBased":false},{"name":"minecraft:item.brewing_stand","id":117,"version":2,"componentBased":false},{"name":"minecraft:item.cake","id":92,"version":2,"componentBased":false},{"name":"minecraft:item.camera","id":242,"version":2,"componentBased":false},{"name":"minecraft:item.campfire","id":-209,"version":2,"componentBased":false},{"name":"minecraft:item.cauldron","id":118,"version":2,"componentBased":false},{"name":"minecraft:item.chain","id":-286,"version":2,"componentBased":false},{"name":"minecraft:item.crimson_door","id":-244,"version":2,"componentBased":false},{"name":"minecraft:item.dark_oak_door","id":197,"version":2,"componentBased":false},{"name":"minecraft:item.flower_pot","id":140,"version":2,"componentBased":false},{"name":"minecraft:item.frame","id":199,"version":2,"componentBased":false},{"name":"minecraft:item.glow_frame","id":-339,"version":2,"componentBased":false},{"name":"minecraft:item.hopper","id":154,"version":2,"componentBased":false},{"name":"minecraft:item.iron_door","id":71,"version":2,"componentBased":false},{"name":"minecraft:item.jungle_door","id":195,"version":2,"componentBased":false},{"name":"minecraft:item.kelp","id":-138,"version":2,"componentBased":false},{"name":"minecraft:item.mangrove_door","id":-493,"version":2,"componentBased":false},{"name":"minecraft:item.nether_sprouts","id":-238,"version":2,"componentBased":false},{"name":"minecraft:item.nether_wart","id":115,"version":2,"componentBased":false},{"name":"minecraft:item.reeds","id":83,"version":2,"componentBased":false},{"name":"minecraft:item.soul_campfire","id":-290,"version":2,"componentBased":false},{"name":"minecraft:item.spruce_door","id":193,"version":2,"componentBased":false},{"name":"minecraft:item.warped_door","id":-245,"version":2,"componentBased":false},{"name":"minecraft:item.wheat","id":59,"version":2,"componentBased":false},{"name":"minecraft:item.wooden_door","id":64,"version":2,"componentBased":false},{"name":"minecraft:jigsaw","id":-211,"version":2,"componentBased":false},{"name":"minecraft:jukebox","id":84,"version":2,"componentBased":false},{"name":"minecraft:jungle_boat","id":403,"version":2,"componentBased":false},{"name":"minecraft:jungle_button","id":-143,"version":2,"componentBased":false},{"name":"minecraft:jungle_chest_boat","id":677,"version":2,"componentBased":false},{"name":"minecraft:jungle_door","id":588,"version":2,"componentBased":false},{"name":"minecraft:jungle_double_slab","id":-811,"version":2,"componentBased":false},{"name":"minecraft:jungle_fence","id":-578,"version":2,"componentBased":false},{"name":"minecraft:jungle_fence_gate","id":185,"version":2,"componentBased":false},{"name":"minecraft:jungle_hanging_sign","id":-503,"version":2,"componentBased":false},{"name":"minecraft:jungle_leaves","id":-802,"version":2,"componentBased":false},{"name":"minecraft:jungle_log","id":-571,"version":2,"componentBased":false},{"name":"minecraft:jungle_planks","id":-741,"version":2,"componentBased":false},{"name":"minecraft:jungle_pressure_plate","id":-153,"version":2,"componentBased":false},{"name":"minecraft:jungle_sapling","id":-827,"version":2,"componentBased":false},{"name":"minecraft:jungle_sign","id":611,"version":2,"componentBased":false},{"name":"minecraft:jungle_slab","id":-806,"version":2,"componentBased":false},{"name":"minecraft:jungle_stairs","id":136,"version":2,"componentBased":false},{"name":"minecraft:jungle_standing_sign","id":-188,"version":2,"componentBased":false},{"name":"minecraft:jungle_trapdoor","id":-148,"version":2,"componentBased":false},{"name":"minecraft:jungle_wall_sign","id":-189,"version":2,"componentBased":false},{"name":"minecraft:jungle_wood","id":-816,"version":2,"componentBased":false},{"name":"minecraft:kelp","id":408,"version":2,"componentBased":true},{"name":"minecraft:lab_table","id":-988,"version":2,"componentBased":false},{"name":"minecraft:ladder","id":65,"version":2,"componentBased":false},{"name":"minecraft:lantern","id":-208,"version":2,"componentBased":false},{"name":"minecraft:lapis_block","id":22,"version":2,"componentBased":false},{"name":"minecraft:lapis_lazuli","id":440,"version":2,"componentBased":false},{"name":"minecraft:lapis_ore","id":21,"version":2,"componentBased":false},{"name":"minecraft:large_amethyst_bud","id":-330,"version":2,"componentBased":false},{"name":"minecraft:large_fern","id":-865,"version":2,"componentBased":false},{"name":"minecraft:lava","id":11,"version":2,"componentBased":false},{"name":"minecraft:lava_bucket","id":388,"version":2,"componentBased":false},{"name":"minecraft:lead","id":580,"version":2,"componentBased":false},{"name":"minecraft:leaf_litter","id":-1026,"version":2,"componentBased":false},{"name":"minecraft:leather","id":407,"version":2,"componentBased":false},{"name":"minecraft:leather_boots","id":363,"version":2,"componentBased":false},{"name":"minecraft:leather_chestplate","id":361,"version":2,"componentBased":false},{"name":"minecraft:leather_helmet","id":360,"version":2,"componentBased":false},{"name":"minecraft:leather_horse_armor","id":563,"version":2,"componentBased":false},{"name":"minecraft:leather_leggings","id":362,"version":2,"componentBased":false},{"name":"minecraft:leaves","id":785,"version":2,"componentBased":false},{"name":"minecraft:leaves2","id":786,"version":2,"componentBased":false},{"name":"minecraft:lectern","id":-194,"version":2,"componentBased":false},{"name":"minecraft:lever","id":69,"version":2,"componentBased":false},{"name":"minecraft:light_block","id":809,"version":2,"componentBased":false},{"name":"minecraft:light_block_0","id":-215,"version":2,"componentBased":false},{"name":"minecraft:light_block_1","id":-929,"version":2,"componentBased":false},{"name":"minecraft:light_block_10","id":-938,"version":2,"componentBased":false},{"name":"minecraft:light_block_11","id":-939,"version":2,"componentBased":false},{"name":"minecraft:light_block_12","id":-940,"version":2,"componentBased":false},{"name":"minecraft:light_block_13","id":-941,"version":2,"componentBased":false},{"name":"minecraft:light_block_14","id":-942,"version":2,"componentBased":false},{"name":"minecraft:light_block_15","id":-943,"version":2,"componentBased":false},{"name":"minecraft:light_block_2","id":-930,"version":2,"componentBased":false},{"name":"minecraft:light_block_3","id":-931,"version":2,"componentBased":false},{"name":"minecraft:light_block_4","id":-932,"version":2,"componentBased":false},{"name":"minecraft:light_block_5","id":-933,"version":2,"componentBased":false},{"name":"minecraft:light_block_6","id":-934,"version":2,"componentBased":false},{"name":"minecraft:light_block_7","id":-935,"version":2,"componentBased":false},{"name":"minecraft:light_block_8","id":-936,"version":2,"componentBased":false},{"name":"minecraft:light_block_9","id":-937,"version":2,"componentBased":false},{"name":"minecraft:light_blue_bundle","id":264,"version":1,"componentBased":true},{"name":"minecraft:light_blue_candle","id":-416,"version":2,"componentBased":false},{"name":"minecraft:light_blue_candle_cake","id":-433,"version":2,"componentBased":false},{"name":"minecraft:light_blue_carpet","id":-599,"version":2,"componentBased":false},{"name":"minecraft:light_blue_concrete","id":-630,"version":2,"componentBased":false},{"name":"minecraft:light_blue_concrete_powder","id":-711,"version":2,"componentBased":false},{"name":"minecraft:light_blue_dye","id":433,"version":2,"componentBased":false},{"name":"minecraft:light_blue_glazed_terracotta","id":223,"version":2,"componentBased":false},{"name":"minecraft:light_blue_harness","id":758,"version":2,"componentBased":false},{"name":"minecraft:light_blue_shulker_box","id":-615,"version":2,"componentBased":false},{"name":"minecraft:light_blue_stained_glass","id":-675,"version":2,"componentBased":false},{"name":"minecraft:light_blue_stained_glass_pane","id":-645,"version":2,"componentBased":false},{"name":"minecraft:light_blue_terracotta","id":-726,"version":2,"componentBased":false},{"name":"minecraft:light_blue_wool","id":-562,"version":2,"componentBased":false},{"name":"minecraft:light_gray_bundle","id":265,"version":1,"componentBased":true},{"name":"minecraft:light_gray_candle","id":-421,"version":2,"componentBased":false},{"name":"minecraft:light_gray_candle_cake","id":-438,"version":2,"componentBased":false},{"name":"minecraft:light_gray_carpet","id":-604,"version":2,"componentBased":false},{"name":"minecraft:light_gray_concrete","id":-635,"version":2,"componentBased":false},{"name":"minecraft:light_gray_concrete_powder","id":-716,"version":2,"componentBased":false},{"name":"minecraft:light_gray_dye","id":428,"version":2,"componentBased":false},{"name":"minecraft:light_gray_harness","id":759,"version":2,"componentBased":false},{"name":"minecraft:light_gray_shulker_box","id":-620,"version":2,"componentBased":false},{"name":"minecraft:light_gray_stained_glass","id":-680,"version":2,"componentBased":false},{"name":"minecraft:light_gray_stained_glass_pane","id":-650,"version":2,"componentBased":false},{"name":"minecraft:light_gray_terracotta","id":-731,"version":2,"componentBased":false},{"name":"minecraft:light_gray_wool","id":-552,"version":2,"componentBased":false},{"name":"minecraft:light_weighted_pressure_plate","id":147,"version":2,"componentBased":false},{"name":"minecraft:lightning_rod","id":-312,"version":2,"componentBased":false},{"name":"minecraft:lilac","id":-863,"version":2,"componentBased":false},{"name":"minecraft:lily_of_the_valley","id":-839,"version":2,"componentBased":false},{"name":"minecraft:lime_bundle","id":266,"version":1,"componentBased":true},{"name":"minecraft:lime_candle","id":-418,"version":2,"componentBased":false},{"name":"minecraft:lime_candle_cake","id":-435,"version":2,"componentBased":false},{"name":"minecraft:lime_carpet","id":-601,"version":2,"componentBased":false},{"name":"minecraft:lime_concrete","id":-632,"version":2,"componentBased":false},{"name":"minecraft:lime_concrete_powder","id":-713,"version":2,"componentBased":false},{"name":"minecraft:lime_dye","id":431,"version":2,"componentBased":false},{"name":"minecraft:lime_glazed_terracotta","id":225,"version":2,"componentBased":false},{"name":"minecraft:lime_harness","id":760,"version":2,"componentBased":false},{"name":"minecraft:lime_shulker_box","id":-617,"version":2,"componentBased":false},{"name":"minecraft:lime_stained_glass","id":-677,"version":2,"componentBased":false},{"name":"minecraft:lime_stained_glass_pane","id":-647,"version":2,"componentBased":false},{"name":"minecraft:lime_terracotta","id":-728,"version":2,"componentBased":false},{"name":"minecraft:lime_wool","id":-559,"version":2,"componentBased":false},{"name":"minecraft:lingering_potion","id":595,"version":2,"componentBased":false},{"name":"minecraft:lit_blast_furnace","id":-214,"version":2,"componentBased":false},{"name":"minecraft:lit_deepslate_redstone_ore","id":-404,"version":2,"componentBased":false},{"name":"minecraft:lit_furnace","id":62,"version":2,"componentBased":false},{"name":"minecraft:lit_pumpkin","id":91,"version":2,"componentBased":false},{"name":"minecraft:lit_redstone_lamp","id":124,"version":2,"componentBased":false},{"name":"minecraft:lit_redstone_ore","id":74,"version":2,"componentBased":false},{"name":"minecraft:lit_smoker","id":-199,"version":2,"componentBased":false},{"name":"minecraft:llama_spawn_egg","id":501,"version":2,"componentBased":false},{"name":"minecraft:lodestone","id":-222,"version":2,"componentBased":false},{"name":"minecraft:lodestone_compass","id":639,"version":2,"componentBased":false},{"name":"minecraft:log","id":770,"version":2,"componentBased":false},{"name":"minecraft:log2","id":793,"version":2,"componentBased":false},{"name":"minecraft:loom","id":-204,"version":2,"componentBased":false},{"name":"minecraft:mace","id":344,"version":2,"componentBased":false},{"name":"minecraft:magenta_bundle","id":267,"version":1,"componentBased":true},{"name":"minecraft:magenta_candle","id":-415,"version":2,"componentBased":false},{"name":"minecraft:magenta_candle_cake","id":-432,"version":2,"componentBased":false},{"name":"minecraft:magenta_carpet","id":-598,"version":2,"componentBased":false},{"name":"minecraft:magenta_concrete","id":-629,"version":2,"componentBased":false},{"name":"minecraft:magenta_concrete_powder","id":-710,"version":2,"componentBased":false},{"name":"minecraft:magenta_dye","id":434,"version":2,"componentBased":false},{"name":"minecraft:magenta_glazed_terracotta","id":222,"version":2,"componentBased":false},{"name":"minecraft:magenta_harness","id":761,"version":2,"componentBased":false},{"name":"minecraft:magenta_shulker_box","id":-614,"version":2,"componentBased":false},{"name":"minecraft:magenta_stained_glass","id":-674,"version":2,"componentBased":false},{"name":"minecraft:magenta_stained_glass_pane","id":-644,"version":2,"componentBased":false},{"name":"minecraft:magenta_terracotta","id":-725,"version":2,"componentBased":false},{"name":"minecraft:magenta_wool","id":-565,"version":2,"componentBased":false},{"name":"minecraft:magma","id":213,"version":2,"componentBased":false},{"name":"minecraft:magma_cream","id":457,"version":2,"componentBased":false},{"name":"minecraft:magma_cube_spawn_egg","id":482,"version":2,"componentBased":false},{"name":"minecraft:mangrove_boat","id":672,"version":2,"componentBased":false},{"name":"minecraft:mangrove_button","id":-487,"version":2,"componentBased":false},{"name":"minecraft:mangrove_chest_boat","id":681,"version":2,"componentBased":false},{"name":"minecraft:mangrove_door","id":670,"version":2,"componentBased":false},{"name":"minecraft:mangrove_double_slab","id":-499,"version":2,"componentBased":false},{"name":"minecraft:mangrove_fence","id":-491,"version":2,"componentBased":false},{"name":"minecraft:mangrove_fence_gate","id":-492,"version":2,"componentBased":false},{"name":"minecraft:mangrove_hanging_sign","id":-508,"version":2,"componentBased":false},{"name":"minecraft:mangrove_leaves","id":-472,"version":2,"componentBased":false},{"name":"minecraft:mangrove_log","id":-484,"version":2,"componentBased":false},{"name":"minecraft:mangrove_planks","id":-486,"version":2,"componentBased":false},{"name":"minecraft:mangrove_pressure_plate","id":-490,"version":2,"componentBased":false},{"name":"minecraft:mangrove_propagule","id":-474,"version":2,"componentBased":false},{"name":"minecraft:mangrove_roots","id":-482,"version":2,"componentBased":false},{"name":"minecraft:mangrove_sign","id":671,"version":2,"componentBased":false},{"name":"minecraft:mangrove_slab","id":-489,"version":2,"componentBased":false},{"name":"minecraft:mangrove_stairs","id":-488,"version":2,"componentBased":false},{"name":"minecraft:mangrove_standing_sign","id":-494,"version":2,"componentBased":false},{"name":"minecraft:mangrove_trapdoor","id":-496,"version":2,"componentBased":false},{"name":"minecraft:mangrove_wall_sign","id":-495,"version":2,"componentBased":false},{"name":"minecraft:mangrove_wood","id":-497,"version":2,"componentBased":false},{"name":"minecraft:material_reducer","id":-986,"version":2,"componentBased":false},{"name":"minecraft:medicine","id":636,"version":2,"componentBased":false},{"name":"minecraft:medium_amethyst_bud","id":-331,"version":2,"componentBased":false},{"name":"minecraft:melon_block","id":103,"version":2,"componentBased":false},{"name":"minecraft:melon_seeds","id":315,"version":0,"componentBased":false},{"name":"minecraft:melon_slice","id":294,"version":0,"componentBased":false},{"name":"minecraft:melon_stem","id":105,"version":2,"componentBased":false},{"name":"minecraft:milk_bucket","id":386,"version":2,"componentBased":false},{"name":"minecraft:minecart","id":395,"version":2,"componentBased":false},{"name":"minecraft:miner_pottery_sherd","id":707,"version":2,"componentBased":false},{"name":"minecraft:mob_spawner","id":52,"version":2,"componentBased":false},{"name":"minecraft:mojang_banner_pattern","id":617,"version":2,"componentBased":false},{"name":"minecraft:monster_egg","id":794,"version":2,"componentBased":false},{"name":"minecraft:mooshroom_spawn_egg","id":467,"version":2,"componentBased":false},{"name":"minecraft:moss_block","id":-320,"version":2,"componentBased":false},{"name":"minecraft:moss_carpet","id":-335,"version":2,"componentBased":false},{"name":"minecraft:mossy_cobblestone","id":48,"version":2,"componentBased":false},{"name":"minecraft:mossy_cobblestone_double_slab","id":-915,"version":2,"componentBased":false},{"name":"minecraft:mossy_cobblestone_slab","id":-888,"version":2,"componentBased":false},{"name":"minecraft:mossy_cobblestone_stairs","id":-179,"version":2,"componentBased":false},{"name":"minecraft:mossy_cobblestone_wall","id":-971,"version":2,"componentBased":false},{"name":"minecraft:mossy_stone_brick_double_slab","id":-168,"version":2,"componentBased":false},{"name":"minecraft:mossy_stone_brick_slab","id":-166,"version":2,"componentBased":false},{"name":"minecraft:mossy_stone_brick_stairs","id":-175,"version":2,"componentBased":false},{"name":"minecraft:mossy_stone_brick_wall","id":-978,"version":2,"componentBased":false},{"name":"minecraft:mossy_stone_bricks","id":-868,"version":2,"componentBased":false},{"name":"minecraft:mourner_pottery_sherd","id":708,"version":2,"componentBased":false},{"name":"minecraft:moving_block","id":250,"version":2,"componentBased":false},{"name":"minecraft:mud","id":-473,"version":2,"componentBased":false},{"name":"minecraft:mud_brick_double_slab","id":-479,"version":2,"componentBased":false},{"name":"minecraft:mud_brick_slab","id":-478,"version":2,"componentBased":false},{"name":"minecraft:mud_brick_stairs","id":-480,"version":2,"componentBased":false},{"name":"minecraft:mud_brick_wall","id":-481,"version":2,"componentBased":false},{"name":"minecraft:mud_bricks","id":-475,"version":2,"componentBased":false},{"name":"minecraft:muddy_mangrove_roots","id":-483,"version":2,"componentBased":false},{"name":"minecraft:mule_spawn_egg","id":494,"version":2,"componentBased":false},{"name":"minecraft:mushroom_stem","id":-1008,"version":2,"componentBased":false},{"name":"minecraft:mushroom_stew","id":282,"version":0,"componentBased":false},{"name":"minecraft:music_disc_11","id":577,"version":2,"componentBased":true},{"name":"minecraft:music_disc_13","id":567,"version":2,"componentBased":true},{"name":"minecraft:music_disc_5","id":673,"version":2,"componentBased":true},{"name":"minecraft:music_disc_blocks","id":569,"version":2,"componentBased":true},{"name":"minecraft:music_disc_cat","id":568,"version":2,"componentBased":true},{"name":"minecraft:music_disc_chirp","id":570,"version":2,"componentBased":true},{"name":"minecraft:music_disc_creator","id":801,"version":2,"componentBased":true},{"name":"minecraft:music_disc_creator_music_box","id":802,"version":2,"componentBased":true},{"name":"minecraft:music_disc_far","id":571,"version":2,"componentBased":true},{"name":"minecraft:music_disc_mall","id":572,"version":2,"componentBased":true},{"name":"minecraft:music_disc_mellohi","id":573,"version":2,"componentBased":true},{"name":"minecraft:music_disc_otherside","id":663,"version":2,"componentBased":true},{"name":"minecraft:music_disc_pigstep","id":657,"version":2,"componentBased":true},{"name":"minecraft:music_disc_precipice","id":803,"version":2,"componentBased":true},{"name":"minecraft:music_disc_relic","id":736,"version":2,"componentBased":true},{"name":"minecraft:music_disc_stal","id":574,"version":2,"componentBased":true},{"name":"minecraft:music_disc_strad","id":575,"version":2,"componentBased":true},{"name":"minecraft:music_disc_wait","id":578,"version":2,"componentBased":true},{"name":"minecraft:music_disc_ward","id":576,"version":2,"componentBased":true},{"name":"minecraft:mutton","id":583,"version":0,"componentBased":false},{"name":"minecraft:mycelium","id":110,"version":2,"componentBased":false},{"name":"minecraft:name_tag","id":581,"version":2,"componentBased":false},{"name":"minecraft:nautilus_shell","id":603,"version":2,"componentBased":false},{"name":"minecraft:nether_brick","id":112,"version":2,"componentBased":false},{"name":"minecraft:nether_brick_double_slab","id":-883,"version":2,"componentBased":false},{"name":"minecraft:nether_brick_fence","id":113,"version":2,"componentBased":false},{"name":"minecraft:nether_brick_slab","id":-877,"version":2,"componentBased":false},{"name":"minecraft:nether_brick_stairs","id":114,"version":2,"componentBased":false},{"name":"minecraft:nether_brick_wall","id":-979,"version":2,"componentBased":false},{"name":"minecraft:nether_gold_ore","id":-288,"version":2,"componentBased":false},{"name":"minecraft:nether_sprouts","id":658,"version":2,"componentBased":true},{"name":"minecraft:nether_star","id":551,"version":2,"componentBased":false},{"name":"minecraft:nether_wart","id":316,"version":0,"componentBased":false},{"name":"minecraft:nether_wart_block","id":214,"version":2,"componentBased":false},{"name":"minecraft:netherbrick","id":556,"version":2,"componentBased":false},{"name":"minecraft:netherite_axe","id":643,"version":2,"componentBased":false},{"name":"minecraft:netherite_block","id":-270,"version":2,"componentBased":false},{"name":"minecraft:netherite_boots","id":649,"version":2,"componentBased":false},{"name":"minecraft:netherite_chestplate","id":647,"version":2,"componentBased":false},{"name":"minecraft:netherite_helmet","id":646,"version":2,"componentBased":false},{"name":"minecraft:netherite_hoe","id":644,"version":2,"componentBased":false},{"name":"minecraft:netherite_ingot","id":645,"version":2,"componentBased":false},{"name":"minecraft:netherite_leggings","id":648,"version":2,"componentBased":false},{"name":"minecraft:netherite_pickaxe","id":642,"version":2,"componentBased":false},{"name":"minecraft:netherite_scrap","id":650,"version":2,"componentBased":false},{"name":"minecraft:netherite_shovel","id":641,"version":2,"componentBased":false},{"name":"minecraft:netherite_sword","id":640,"version":2,"componentBased":false},{"name":"minecraft:netherite_upgrade_smithing_template","id":717,"version":2,"componentBased":false},{"name":"minecraft:netherrack","id":87,"version":2,"componentBased":false},{"name":"minecraft:netherreactor","id":247,"version":2,"componentBased":false},{"name":"minecraft:normal_stone_double_slab","id":-926,"version":2,"componentBased":false},{"name":"minecraft:normal_stone_slab","id":-899,"version":2,"componentBased":false},{"name":"minecraft:normal_stone_stairs","id":-180,"version":2,"componentBased":false},{"name":"minecraft:noteblock","id":25,"version":2,"componentBased":false},{"name":"minecraft:npc_spawn_egg","id":498,"version":2,"componentBased":false},{"name":"minecraft:oak_boat","id":401,"version":2,"componentBased":false},{"name":"minecraft:oak_chest_boat","id":675,"version":2,"componentBased":false},{"name":"minecraft:oak_double_slab","id":157,"version":2,"componentBased":false},{"name":"minecraft:oak_fence","id":85,"version":2,"componentBased":false},{"name":"minecraft:oak_hanging_sign","id":-500,"version":2,"componentBased":false},{"name":"minecraft:oak_leaves","id":18,"version":2,"componentBased":false},{"name":"minecraft:oak_log","id":17,"version":2,"componentBased":false},{"name":"minecraft:oak_planks","id":5,"version":2,"componentBased":false},{"name":"minecraft:oak_sapling","id":6,"version":2,"componentBased":false},{"name":"minecraft:oak_sign","id":383,"version":2,"componentBased":false},{"name":"minecraft:oak_slab","id":158,"version":2,"componentBased":false},{"name":"minecraft:oak_stairs","id":53,"version":2,"componentBased":false},{"name":"minecraft:oak_wood","id":-212,"version":2,"componentBased":false},{"name":"minecraft:observer","id":251,"version":2,"componentBased":false},{"name":"minecraft:obsidian","id":49,"version":2,"componentBased":false},{"name":"minecraft:ocelot_spawn_egg","id":478,"version":2,"componentBased":false},{"name":"minecraft:ochre_froglight","id":-471,"version":2,"componentBased":false},{"name":"minecraft:ominous_bottle","id":628,"version":2,"componentBased":false},{"name":"minecraft:ominous_trial_key","id":275,"version":1,"componentBased":true},{"name":"minecraft:open_eyeblossom","id":-1018,"version":2,"componentBased":false},{"name":"minecraft:orange_bundle","id":268,"version":1,"componentBased":true},{"name":"minecraft:orange_candle","id":-414,"version":2,"componentBased":false},{"name":"minecraft:orange_candle_cake","id":-431,"version":2,"componentBased":false},{"name":"minecraft:orange_carpet","id":-597,"version":2,"componentBased":false},{"name":"minecraft:orange_concrete","id":-628,"version":2,"componentBased":false},{"name":"minecraft:orange_concrete_powder","id":-709,"version":2,"componentBased":false},{"name":"minecraft:orange_dye","id":435,"version":2,"componentBased":false},{"name":"minecraft:orange_glazed_terracotta","id":221,"version":2,"componentBased":false},{"name":"minecraft:orange_harness","id":762,"version":2,"componentBased":false},{"name":"minecraft:orange_shulker_box","id":-613,"version":2,"componentBased":false},{"name":"minecraft:orange_stained_glass","id":-673,"version":2,"componentBased":false},{"name":"minecraft:orange_stained_glass_pane","id":-643,"version":2,"componentBased":false},{"name":"minecraft:orange_terracotta","id":-724,"version":2,"componentBased":false},{"name":"minecraft:orange_tulip","id":-834,"version":2,"componentBased":false},{"name":"minecraft:orange_wool","id":-557,"version":2,"componentBased":false},{"name":"minecraft:oxeye_daisy","id":-837,"version":2,"componentBased":false},{"name":"minecraft:oxidized_chiseled_copper","id":-763,"version":2,"componentBased":false},{"name":"minecraft:oxidized_copper","id":-343,"version":2,"componentBased":false},{"name":"minecraft:oxidized_copper_bulb","id":-779,"version":2,"componentBased":false},{"name":"minecraft:oxidized_copper_door","id":-787,"version":2,"componentBased":false},{"name":"minecraft:oxidized_copper_grate","id":-771,"version":2,"componentBased":false},{"name":"minecraft:oxidized_copper_trapdoor","id":-795,"version":2,"componentBased":false},{"name":"minecraft:oxidized_cut_copper","id":-350,"version":2,"componentBased":false},{"name":"minecraft:oxidized_cut_copper_slab","id":-364,"version":2,"componentBased":false},{"name":"minecraft:oxidized_cut_copper_stairs","id":-357,"version":2,"componentBased":false},{"name":"minecraft:oxidized_double_cut_copper_slab","id":-371,"version":2,"componentBased":false},{"name":"minecraft:packed_ice","id":174,"version":2,"componentBased":false},{"name":"minecraft:packed_mud","id":-477,"version":2,"componentBased":false},{"name":"minecraft:painting","id":382,"version":2,"componentBased":false},{"name":"minecraft:pale_hanging_moss","id":-1011,"version":2,"componentBased":false},{"name":"minecraft:pale_moss_block","id":-1009,"version":2,"componentBased":false},{"name":"minecraft:pale_moss_carpet","id":-1010,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_boat","id":744,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_button","id":-989,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_chest_boat","id":745,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_door","id":-990,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_double_slab","id":-999,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_fence","id":-991,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_fence_gate","id":-992,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_hanging_sign","id":-993,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_leaves","id":-1007,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_log","id":-995,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_planks","id":-996,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_pressure_plate","id":-997,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_sapling","id":-1006,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_sign","id":746,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_slab","id":-998,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_stairs","id":-1000,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_standing_sign","id":-1001,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_trapdoor","id":-1002,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_wall_sign","id":-1003,"version":2,"componentBased":false},{"name":"minecraft:pale_oak_wood","id":-1005,"version":2,"componentBased":false},{"name":"minecraft:panda_spawn_egg","id":517,"version":2,"componentBased":false},{"name":"minecraft:paper","id":412,"version":2,"componentBased":false},{"name":"minecraft:parrot_spawn_egg","id":506,"version":2,"componentBased":false},{"name":"minecraft:pearlescent_froglight","id":-469,"version":2,"componentBased":false},{"name":"minecraft:peony","id":-867,"version":2,"componentBased":false},{"name":"minecraft:petrified_oak_double_slab","id":-903,"version":2,"componentBased":false},{"name":"minecraft:petrified_oak_slab","id":-902,"version":2,"componentBased":false},{"name":"minecraft:phantom_membrane","id":607,"version":2,"componentBased":false},{"name":"minecraft:phantom_spawn_egg","id":514,"version":2,"componentBased":false},{"name":"minecraft:pig_spawn_egg","id":464,"version":2,"componentBased":false},{"name":"minecraft:piglin_banner_pattern","id":620,"version":2,"componentBased":false},{"name":"minecraft:piglin_brute_spawn_egg","id":527,"version":2,"componentBased":false},{"name":"minecraft:piglin_head","id":-970,"version":2,"componentBased":false},{"name":"minecraft:piglin_spawn_egg","id":525,"version":2,"componentBased":false},{"name":"minecraft:pillager_spawn_egg","id":519,"version":2,"componentBased":false},{"name":"minecraft:pink_bundle","id":269,"version":1,"componentBased":true},{"name":"minecraft:pink_candle","id":-419,"version":2,"componentBased":false},{"name":"minecraft:pink_candle_cake","id":-436,"version":2,"componentBased":false},{"name":"minecraft:pink_carpet","id":-602,"version":2,"componentBased":false},{"name":"minecraft:pink_concrete","id":-633,"version":2,"componentBased":false},{"name":"minecraft:pink_concrete_powder","id":-714,"version":2,"componentBased":false},{"name":"minecraft:pink_dye","id":430,"version":2,"componentBased":false},{"name":"minecraft:pink_glazed_terracotta","id":226,"version":2,"componentBased":false},{"name":"minecraft:pink_harness","id":763,"version":2,"componentBased":false},{"name":"minecraft:pink_petals","id":-549,"version":2,"componentBased":false},{"name":"minecraft:pink_shulker_box","id":-618,"version":2,"componentBased":false},{"name":"minecraft:pink_stained_glass","id":-678,"version":2,"componentBased":false},{"name":"minecraft:pink_stained_glass_pane","id":-648,"version":2,"componentBased":false},{"name":"minecraft:pink_terracotta","id":-729,"version":2,"componentBased":false},{"name":"minecraft:pink_tulip","id":-836,"version":2,"componentBased":false},{"name":"minecraft:pink_wool","id":-566,"version":2,"componentBased":false},{"name":"minecraft:piston","id":33,"version":2,"componentBased":false},{"name":"minecraft:piston_arm_collision","id":34,"version":2,"componentBased":false},{"name":"minecraft:pitcher_crop","id":-574,"version":2,"componentBased":false},{"name":"minecraft:pitcher_plant","id":-612,"version":2,"componentBased":false},{"name":"minecraft:pitcher_pod","id":319,"version":0,"componentBased":false},{"name":"minecraft:planks","id":790,"version":2,"componentBased":false},{"name":"minecraft:player_head","id":-967,"version":2,"componentBased":false},{"name":"minecraft:plenty_pottery_sherd","id":709,"version":2,"componentBased":false},{"name":"minecraft:podzol","id":243,"version":2,"componentBased":false},{"name":"minecraft:pointed_dripstone","id":-308,"version":2,"componentBased":false},{"name":"minecraft:poisonous_potato","id":304,"version":0,"componentBased":false},{"name":"minecraft:polar_bear_spawn_egg","id":500,"version":2,"componentBased":false},{"name":"minecraft:polished_andesite","id":-595,"version":2,"componentBased":false},{"name":"minecraft:polished_andesite_double_slab","id":-919,"version":2,"componentBased":false},{"name":"minecraft:polished_andesite_slab","id":-892,"version":2,"componentBased":false},{"name":"minecraft:polished_andesite_stairs","id":-174,"version":2,"componentBased":false},{"name":"minecraft:polished_basalt","id":-235,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone","id":-291,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_brick_double_slab","id":-285,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_brick_slab","id":-284,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_brick_stairs","id":-275,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_brick_wall","id":-278,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_bricks","id":-274,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_button","id":-296,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_double_slab","id":-294,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_pressure_plate","id":-295,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_slab","id":-293,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_stairs","id":-292,"version":2,"componentBased":false},{"name":"minecraft:polished_blackstone_wall","id":-297,"version":2,"componentBased":false},{"name":"minecraft:polished_deepslate","id":-383,"version":2,"componentBased":false},{"name":"minecraft:polished_deepslate_double_slab","id":-397,"version":2,"componentBased":false},{"name":"minecraft:polished_deepslate_slab","id":-384,"version":2,"componentBased":false},{"name":"minecraft:polished_deepslate_stairs","id":-385,"version":2,"componentBased":false},{"name":"minecraft:polished_deepslate_wall","id":-386,"version":2,"componentBased":false},{"name":"minecraft:polished_diorite","id":-593,"version":2,"componentBased":false},{"name":"minecraft:polished_diorite_double_slab","id":-922,"version":2,"componentBased":false},{"name":"minecraft:polished_diorite_slab","id":-895,"version":2,"componentBased":false},{"name":"minecraft:polished_diorite_stairs","id":-173,"version":2,"componentBased":false},{"name":"minecraft:polished_granite","id":-591,"version":2,"componentBased":false},{"name":"minecraft:polished_granite_double_slab","id":-924,"version":2,"componentBased":false},{"name":"minecraft:polished_granite_slab","id":-897,"version":2,"componentBased":false},{"name":"minecraft:polished_granite_stairs","id":-172,"version":2,"componentBased":false},{"name":"minecraft:polished_tuff","id":-748,"version":2,"componentBased":false},{"name":"minecraft:polished_tuff_double_slab","id":-750,"version":2,"componentBased":false},{"name":"minecraft:polished_tuff_slab","id":-749,"version":2,"componentBased":false},{"name":"minecraft:polished_tuff_stairs","id":-751,"version":2,"componentBased":false},{"name":"minecraft:polished_tuff_wall","id":-752,"version":2,"componentBased":false},{"name":"minecraft:popped_chorus_fruit","id":592,"version":2,"componentBased":false},{"name":"minecraft:poppy","id":38,"version":2,"componentBased":false},{"name":"minecraft:porkchop","id":284,"version":0,"componentBased":false},{"name":"minecraft:portal","id":90,"version":2,"componentBased":false},{"name":"minecraft:potato","id":302,"version":0,"componentBased":false},{"name":"minecraft:potatoes","id":142,"version":2,"componentBased":false},{"name":"minecraft:potion","id":453,"version":2,"componentBased":false},{"name":"minecraft:powder_snow","id":-306,"version":2,"componentBased":false},{"name":"minecraft:powder_snow_bucket","id":393,"version":2,"componentBased":false},{"name":"minecraft:powered_comparator","id":150,"version":2,"componentBased":false},{"name":"minecraft:powered_repeater","id":94,"version":2,"componentBased":false},{"name":"minecraft:prismarine","id":168,"version":2,"componentBased":false},{"name":"minecraft:prismarine_brick_double_slab","id":-914,"version":2,"componentBased":false},{"name":"minecraft:prismarine_brick_slab","id":-887,"version":2,"componentBased":false},{"name":"minecraft:prismarine_bricks","id":-948,"version":2,"componentBased":false},{"name":"minecraft:prismarine_bricks_stairs","id":-4,"version":2,"componentBased":false},{"name":"minecraft:prismarine_crystals","id":582,"version":2,"componentBased":false},{"name":"minecraft:prismarine_double_slab","id":-912,"version":2,"componentBased":false},{"name":"minecraft:prismarine_shard","id":598,"version":2,"componentBased":false},{"name":"minecraft:prismarine_slab","id":-885,"version":2,"componentBased":false},{"name":"minecraft:prismarine_stairs","id":-2,"version":2,"componentBased":false},{"name":"minecraft:prismarine_wall","id":-981,"version":2,"componentBased":false},{"name":"minecraft:prize_pottery_sherd","id":710,"version":2,"componentBased":false},{"name":"minecraft:pufferfish","id":289,"version":0,"componentBased":false},{"name":"minecraft:pufferfish_bucket","id":392,"version":2,"componentBased":false},{"name":"minecraft:pufferfish_spawn_egg","id":509,"version":2,"componentBased":false},{"name":"minecraft:pumpkin","id":86,"version":2,"componentBased":false},{"name":"minecraft:pumpkin_pie","id":306,"version":0,"componentBased":false},{"name":"minecraft:pumpkin_seeds","id":314,"version":0,"componentBased":false},{"name":"minecraft:pumpkin_stem","id":104,"version":2,"componentBased":false},{"name":"minecraft:purple_bundle","id":270,"version":1,"componentBased":true},{"name":"minecraft:purple_candle","id":-423,"version":2,"componentBased":false},{"name":"minecraft:purple_candle_cake","id":-440,"version":2,"componentBased":false},{"name":"minecraft:purple_carpet","id":-606,"version":2,"componentBased":false},{"name":"minecraft:purple_concrete","id":-637,"version":2,"componentBased":false},{"name":"minecraft:purple_concrete_powder","id":-718,"version":2,"componentBased":false},{"name":"minecraft:purple_dye","id":426,"version":2,"componentBased":false},{"name":"minecraft:purple_glazed_terracotta","id":219,"version":2,"componentBased":false},{"name":"minecraft:purple_harness","id":764,"version":2,"componentBased":false},{"name":"minecraft:purple_shulker_box","id":-622,"version":2,"componentBased":false},{"name":"minecraft:purple_stained_glass","id":-682,"version":2,"componentBased":false},{"name":"minecraft:purple_stained_glass_pane","id":-652,"version":2,"componentBased":false},{"name":"minecraft:purple_terracotta","id":-733,"version":2,"componentBased":false},{"name":"minecraft:purple_wool","id":-564,"version":2,"componentBased":false},{"name":"minecraft:purpur_block","id":201,"version":2,"componentBased":false},{"name":"minecraft:purpur_double_slab","id":-911,"version":2,"componentBased":false},{"name":"minecraft:purpur_pillar","id":-951,"version":2,"componentBased":false},{"name":"minecraft:purpur_slab","id":-884,"version":2,"componentBased":false},{"name":"minecraft:purpur_stairs","id":203,"version":2,"componentBased":false},{"name":"minecraft:quartz","id":557,"version":2,"componentBased":false},{"name":"minecraft:quartz_block","id":155,"version":2,"componentBased":false},{"name":"minecraft:quartz_bricks","id":-304,"version":2,"componentBased":false},{"name":"minecraft:quartz_double_slab","id":-882,"version":2,"componentBased":false},{"name":"minecraft:quartz_ore","id":153,"version":2,"componentBased":false},{"name":"minecraft:quartz_pillar","id":-954,"version":2,"componentBased":false},{"name":"minecraft:quartz_slab","id":-876,"version":2,"componentBased":false},{"name":"minecraft:quartz_stairs","id":156,"version":2,"componentBased":false},{"name":"minecraft:rabbit","id":310,"version":0,"componentBased":false},{"name":"minecraft:rabbit_foot","id":561,"version":2,"componentBased":false},{"name":"minecraft:rabbit_hide","id":562,"version":2,"componentBased":false},{"name":"minecraft:rabbit_spawn_egg","id":486,"version":2,"componentBased":false},{"name":"minecraft:rabbit_stew","id":312,"version":0,"componentBased":false},{"name":"minecraft:rail","id":66,"version":2,"componentBased":false},{"name":"minecraft:raiser_armor_trim_smithing_template","id":731,"version":2,"componentBased":false},{"name":"minecraft:rapid_fertilizer","id":634,"version":2,"componentBased":false},{"name":"minecraft:ravager_spawn_egg","id":521,"version":2,"componentBased":false},{"name":"minecraft:raw_copper","id":541,"version":2,"componentBased":false},{"name":"minecraft:raw_copper_block","id":-452,"version":2,"componentBased":false},{"name":"minecraft:raw_gold","id":540,"version":2,"componentBased":false},{"name":"minecraft:raw_gold_block","id":-453,"version":2,"componentBased":false},{"name":"minecraft:raw_iron","id":539,"version":2,"componentBased":false},{"name":"minecraft:raw_iron_block","id":-451,"version":2,"componentBased":false},{"name":"minecraft:recovery_compass","id":683,"version":2,"componentBased":false},{"name":"minecraft:red_bundle","id":271,"version":1,"componentBased":true},{"name":"minecraft:red_candle","id":-427,"version":2,"componentBased":false},{"name":"minecraft:red_candle_cake","id":-444,"version":2,"componentBased":false},{"name":"minecraft:red_carpet","id":-610,"version":2,"componentBased":false},{"name":"minecraft:red_concrete","id":-641,"version":2,"componentBased":false},{"name":"minecraft:red_concrete_powder","id":-722,"version":2,"componentBased":false},{"name":"minecraft:red_dye","id":422,"version":2,"componentBased":false},{"name":"minecraft:red_flower","id":788,"version":2,"componentBased":false},{"name":"minecraft:red_glazed_terracotta","id":234,"version":2,"componentBased":false},{"name":"minecraft:red_harness","id":765,"version":2,"componentBased":false},{"name":"minecraft:red_mushroom","id":40,"version":2,"componentBased":false},{"name":"minecraft:red_mushroom_block","id":100,"version":2,"componentBased":false},{"name":"minecraft:red_nether_brick","id":215,"version":2,"componentBased":false},{"name":"minecraft:red_nether_brick_double_slab","id":-917,"version":2,"componentBased":false},{"name":"minecraft:red_nether_brick_slab","id":-890,"version":2,"componentBased":false},{"name":"minecraft:red_nether_brick_stairs","id":-184,"version":2,"componentBased":false},{"name":"minecraft:red_nether_brick_wall","id":-983,"version":2,"componentBased":false},{"name":"minecraft:red_sand","id":-949,"version":2,"componentBased":false},{"name":"minecraft:red_sandstone","id":179,"version":2,"componentBased":false},{"name":"minecraft:red_sandstone_double_slab","id":181,"version":2,"componentBased":false},{"name":"minecraft:red_sandstone_slab","id":182,"version":2,"componentBased":false},{"name":"minecraft:red_sandstone_stairs","id":180,"version":2,"componentBased":false},{"name":"minecraft:red_sandstone_wall","id":-982,"version":2,"componentBased":false},{"name":"minecraft:red_shulker_box","id":-626,"version":2,"componentBased":false},{"name":"minecraft:red_stained_glass","id":-686,"version":2,"componentBased":false},{"name":"minecraft:red_stained_glass_pane","id":-656,"version":2,"componentBased":false},{"name":"minecraft:red_terracotta","id":-737,"version":2,"componentBased":false},{"name":"minecraft:red_tulip","id":-833,"version":2,"componentBased":false},{"name":"minecraft:red_wool","id":-556,"version":2,"componentBased":false},{"name":"minecraft:redstone","id":398,"version":2,"componentBased":false},{"name":"minecraft:redstone_block","id":152,"version":2,"componentBased":false},{"name":"minecraft:redstone_lamp","id":123,"version":2,"componentBased":false},{"name":"minecraft:redstone_ore","id":73,"version":2,"componentBased":false},{"name":"minecraft:redstone_torch","id":76,"version":2,"componentBased":false},{"name":"minecraft:redstone_wire","id":55,"version":2,"componentBased":false},{"name":"minecraft:reinforced_deepslate","id":-466,"version":2,"componentBased":false},{"name":"minecraft:repeater","id":445,"version":2,"componentBased":true},{"name":"minecraft:repeating_command_block","id":188,"version":2,"componentBased":false},{"name":"minecraft:reserved6","id":255,"version":2,"componentBased":false},{"name":"minecraft:resin_block","id":-1021,"version":2,"componentBased":false},{"name":"minecraft:resin_brick","id":748,"version":2,"componentBased":false},{"name":"minecraft:resin_brick_double_slab","id":-1015,"version":2,"componentBased":false},{"name":"minecraft:resin_brick_slab","id":-1014,"version":2,"componentBased":false},{"name":"minecraft:resin_brick_stairs","id":-1016,"version":2,"componentBased":false},{"name":"minecraft:resin_brick_wall","id":-1017,"version":2,"componentBased":false},{"name":"minecraft:resin_bricks","id":-1013,"version":2,"componentBased":false},{"name":"minecraft:resin_clump","id":-1022,"version":2,"componentBased":false},{"name":"minecraft:respawn_anchor","id":-272,"version":2,"componentBased":false},{"name":"minecraft:rib_armor_trim_smithing_template","id":727,"version":2,"componentBased":false},{"name":"minecraft:rose_bush","id":-866,"version":2,"componentBased":false},{"name":"minecraft:rotten_flesh","id":299,"version":0,"componentBased":false},{"name":"minecraft:saddle","id":396,"version":2,"componentBased":false},{"name":"minecraft:salmon","id":287,"version":0,"componentBased":false},{"name":"minecraft:salmon_bucket","id":390,"version":2,"componentBased":false},{"name":"minecraft:salmon_spawn_egg","id":510,"version":2,"componentBased":false},{"name":"minecraft:sand","id":12,"version":2,"componentBased":false},{"name":"minecraft:sandstone","id":24,"version":2,"componentBased":false},{"name":"minecraft:sandstone_double_slab","id":-878,"version":2,"componentBased":false},{"name":"minecraft:sandstone_slab","id":-872,"version":2,"componentBased":false},{"name":"minecraft:sandstone_stairs","id":128,"version":2,"componentBased":false},{"name":"minecraft:sandstone_wall","id":-975,"version":2,"componentBased":false},{"name":"minecraft:sapling","id":784,"version":2,"componentBased":false},{"name":"minecraft:scaffolding","id":-165,"version":2,"componentBased":false},{"name":"minecraft:scrape_pottery_sherd","id":711,"version":2,"componentBased":false},{"name":"minecraft:sculk","id":-458,"version":2,"componentBased":false},{"name":"minecraft:sculk_catalyst","id":-460,"version":2,"componentBased":false},{"name":"minecraft:sculk_sensor","id":-307,"version":2,"componentBased":false},{"name":"minecraft:sculk_shrieker","id":-461,"version":2,"componentBased":false},{"name":"minecraft:sculk_vein","id":-459,"version":2,"componentBased":false},{"name":"minecraft:sea_lantern","id":169,"version":2,"componentBased":false},{"name":"minecraft:sea_pickle","id":-156,"version":2,"componentBased":false},{"name":"minecraft:seagrass","id":-130,"version":2,"componentBased":false},{"name":"minecraft:sentry_armor_trim_smithing_template","id":718,"version":2,"componentBased":false},{"name":"minecraft:shaper_armor_trim_smithing_template","id":732,"version":2,"componentBased":false},{"name":"minecraft:sheaf_pottery_sherd","id":712,"version":2,"componentBased":false},{"name":"minecraft:shears","id":447,"version":2,"componentBased":false},{"name":"minecraft:sheep_spawn_egg","id":465,"version":2,"componentBased":false},{"name":"minecraft:shelter_pottery_sherd","id":713,"version":2,"componentBased":false},{"name":"minecraft:shield","id":380,"version":2,"componentBased":false},{"name":"minecraft:short_dry_grass","id":-1028,"version":2,"componentBased":false},{"name":"minecraft:short_grass","id":31,"version":2,"componentBased":false},{"name":"minecraft:shroomlight","id":-230,"version":2,"componentBased":false},{"name":"minecraft:shulker_box","id":799,"version":2,"componentBased":false},{"name":"minecraft:shulker_shell","id":599,"version":2,"componentBased":false},{"name":"minecraft:shulker_spawn_egg","id":497,"version":2,"componentBased":false},{"name":"minecraft:silence_armor_trim_smithing_template","id":729,"version":2,"componentBased":false},{"name":"minecraft:silver_glazed_terracotta","id":228,"version":2,"componentBased":false},{"name":"minecraft:silverfish_spawn_egg","id":470,"version":2,"componentBased":false},{"name":"minecraft:skeleton_horse_spawn_egg","id":495,"version":2,"componentBased":false},{"name":"minecraft:skeleton_skull","id":144,"version":2,"componentBased":false},{"name":"minecraft:skeleton_spawn_egg","id":471,"version":2,"componentBased":false},{"name":"minecraft:skull","id":737,"version":2,"componentBased":false},{"name":"minecraft:skull_banner_pattern","id":616,"version":2,"componentBased":false},{"name":"minecraft:skull_pottery_sherd","id":714,"version":2,"componentBased":false},{"name":"minecraft:slime","id":165,"version":2,"componentBased":false},{"name":"minecraft:slime_ball","id":414,"version":2,"componentBased":false},{"name":"minecraft:slime_spawn_egg","id":472,"version":2,"componentBased":false},{"name":"minecraft:small_amethyst_bud","id":-332,"version":2,"componentBased":false},{"name":"minecraft:small_dripleaf_block","id":-336,"version":2,"componentBased":false},{"name":"minecraft:smithing_table","id":-202,"version":2,"componentBased":false},{"name":"minecraft:smoker","id":-198,"version":2,"componentBased":false},{"name":"minecraft:smooth_basalt","id":-377,"version":2,"componentBased":false},{"name":"minecraft:smooth_quartz","id":-955,"version":2,"componentBased":false},{"name":"minecraft:smooth_quartz_double_slab","id":-925,"version":2,"componentBased":false},{"name":"minecraft:smooth_quartz_slab","id":-898,"version":2,"componentBased":false},{"name":"minecraft:smooth_quartz_stairs","id":-185,"version":2,"componentBased":false},{"name":"minecraft:smooth_red_sandstone","id":-958,"version":2,"componentBased":false},{"name":"minecraft:smooth_red_sandstone_double_slab","id":-918,"version":2,"componentBased":false},{"name":"minecraft:smooth_red_sandstone_slab","id":-891,"version":2,"componentBased":false},{"name":"minecraft:smooth_red_sandstone_stairs","id":-176,"version":2,"componentBased":false},{"name":"minecraft:smooth_sandstone","id":-946,"version":2,"componentBased":false},{"name":"minecraft:smooth_sandstone_double_slab","id":-916,"version":2,"componentBased":false},{"name":"minecraft:smooth_sandstone_slab","id":-889,"version":2,"componentBased":false},{"name":"minecraft:smooth_sandstone_stairs","id":-177,"version":2,"componentBased":false},{"name":"minecraft:smooth_stone","id":-183,"version":2,"componentBased":false},{"name":"minecraft:smooth_stone_double_slab","id":43,"version":2,"componentBased":false},{"name":"minecraft:smooth_stone_slab","id":44,"version":2,"componentBased":false},{"name":"minecraft:sniffer_egg","id":-596,"version":2,"componentBased":false},{"name":"minecraft:sniffer_spawn_egg","id":528,"version":2,"componentBased":false},{"name":"minecraft:snort_pottery_sherd","id":715,"version":2,"componentBased":false},{"name":"minecraft:snout_armor_trim_smithing_template","id":726,"version":2,"componentBased":false},{"name":"minecraft:snow","id":80,"version":2,"componentBased":false},{"name":"minecraft:snow_golem_spawn_egg","id":534,"version":2,"componentBased":false},{"name":"minecraft:snow_layer","id":78,"version":2,"componentBased":false},{"name":"minecraft:snowball","id":399,"version":2,"componentBased":true},{"name":"minecraft:soul_campfire","id":659,"version":2,"componentBased":true},{"name":"minecraft:soul_fire","id":-237,"version":2,"componentBased":false},{"name":"minecraft:soul_lantern","id":-269,"version":2,"componentBased":false},{"name":"minecraft:soul_sand","id":88,"version":2,"componentBased":false},{"name":"minecraft:soul_soil","id":-236,"version":2,"componentBased":false},{"name":"minecraft:soul_torch","id":-268,"version":2,"componentBased":false},{"name":"minecraft:sparkler","id":637,"version":2,"componentBased":false},{"name":"minecraft:spawn_egg","id":813,"version":2,"componentBased":false},{"name":"minecraft:spider_eye","id":300,"version":0,"componentBased":false},{"name":"minecraft:spider_spawn_egg","id":473,"version":2,"componentBased":false},{"name":"minecraft:spire_armor_trim_smithing_template","id":728,"version":2,"componentBased":false},{"name":"minecraft:splash_potion","id":594,"version":2,"componentBased":false},{"name":"minecraft:sponge","id":19,"version":2,"componentBased":false},{"name":"minecraft:spore_blossom","id":-321,"version":2,"componentBased":false},{"name":"minecraft:spruce_boat","id":404,"version":2,"componentBased":false},{"name":"minecraft:spruce_button","id":-144,"version":2,"componentBased":false},{"name":"minecraft:spruce_chest_boat","id":678,"version":2,"componentBased":false},{"name":"minecraft:spruce_door","id":586,"version":2,"componentBased":false},{"name":"minecraft:spruce_double_slab","id":-809,"version":2,"componentBased":false},{"name":"minecraft:spruce_fence","id":-579,"version":2,"componentBased":false},{"name":"minecraft:spruce_fence_gate","id":183,"version":2,"componentBased":false},{"name":"minecraft:spruce_hanging_sign","id":-501,"version":2,"componentBased":false},{"name":"minecraft:spruce_leaves","id":-800,"version":2,"componentBased":false},{"name":"minecraft:spruce_log","id":-569,"version":2,"componentBased":false},{"name":"minecraft:spruce_planks","id":-739,"version":2,"componentBased":false},{"name":"minecraft:spruce_pressure_plate","id":-154,"version":2,"componentBased":false},{"name":"minecraft:spruce_sapling","id":-825,"version":2,"componentBased":false},{"name":"minecraft:spruce_sign","id":609,"version":2,"componentBased":false},{"name":"minecraft:spruce_slab","id":-804,"version":2,"componentBased":false},{"name":"minecraft:spruce_stairs","id":134,"version":2,"componentBased":false},{"name":"minecraft:spruce_standing_sign","id":-181,"version":2,"componentBased":false},{"name":"minecraft:spruce_trapdoor","id":-149,"version":2,"componentBased":false},{"name":"minecraft:spruce_wall_sign","id":-182,"version":2,"componentBased":false},{"name":"minecraft:spruce_wood","id":-814,"version":2,"componentBased":false},{"name":"minecraft:spyglass","id":662,"version":2,"componentBased":false},{"name":"minecraft:squid_spawn_egg","id":477,"version":2,"componentBased":false},{"name":"minecraft:stained_glass","id":797,"version":2,"componentBased":false},{"name":"minecraft:stained_glass_pane","id":798,"version":2,"componentBased":false},{"name":"minecraft:stained_hardened_clay","id":738,"version":2,"componentBased":false},{"name":"minecraft:standing_banner","id":176,"version":2,"componentBased":false},{"name":"minecraft:standing_sign","id":63,"version":2,"componentBased":false},{"name":"minecraft:stick","id":345,"version":2,"componentBased":false},{"name":"minecraft:sticky_piston","id":29,"version":2,"componentBased":false},{"name":"minecraft:sticky_piston_arm_collision","id":-217,"version":2,"componentBased":false},{"name":"minecraft:stone","id":1,"version":2,"componentBased":false},{"name":"minecraft:stone_axe","id":339,"version":2,"componentBased":false},{"name":"minecraft:stone_block_slab","id":774,"version":2,"componentBased":false},{"name":"minecraft:stone_block_slab2","id":775,"version":2,"componentBased":false},{"name":"minecraft:stone_block_slab3","id":776,"version":2,"componentBased":false},{"name":"minecraft:stone_block_slab4","id":777,"version":2,"componentBased":false},{"name":"minecraft:stone_brick_double_slab","id":-881,"version":2,"componentBased":false},{"name":"minecraft:stone_brick_slab","id":-875,"version":2,"componentBased":false},{"name":"minecraft:stone_brick_stairs","id":109,"version":2,"componentBased":false},{"name":"minecraft:stone_brick_wall","id":-977,"version":2,"componentBased":false},{"name":"minecraft:stone_bricks","id":98,"version":2,"componentBased":false},{"name":"minecraft:stone_button","id":77,"version":2,"componentBased":false},{"name":"minecraft:stone_hoe","id":355,"version":2,"componentBased":false},{"name":"minecraft:stone_pickaxe","id":338,"version":2,"componentBased":false},{"name":"minecraft:stone_pressure_plate","id":70,"version":2,"componentBased":false},{"name":"minecraft:stone_shovel","id":337,"version":2,"componentBased":false},{"name":"minecraft:stone_stairs","id":67,"version":2,"componentBased":false},{"name":"minecraft:stone_sword","id":336,"version":2,"componentBased":false},{"name":"minecraft:stonebrick","id":772,"version":2,"componentBased":false},{"name":"minecraft:stonecutter","id":245,"version":2,"componentBased":false},{"name":"minecraft:stonecutter_block","id":-197,"version":2,"componentBased":false},{"name":"minecraft:stray_spawn_egg","id":489,"version":2,"componentBased":false},{"name":"minecraft:strider_spawn_egg","id":523,"version":2,"componentBased":false},{"name":"minecraft:string","id":351,"version":2,"componentBased":true},{"name":"minecraft:stripped_acacia_log","id":-8,"version":2,"componentBased":false},{"name":"minecraft:stripped_acacia_wood","id":-823,"version":2,"componentBased":false},{"name":"minecraft:stripped_bamboo_block","id":-528,"version":2,"componentBased":false},{"name":"minecraft:stripped_birch_log","id":-6,"version":2,"componentBased":false},{"name":"minecraft:stripped_birch_wood","id":-821,"version":2,"componentBased":false},{"name":"minecraft:stripped_cherry_log","id":-535,"version":2,"componentBased":false},{"name":"minecraft:stripped_cherry_wood","id":-545,"version":2,"componentBased":false},{"name":"minecraft:stripped_crimson_hyphae","id":-300,"version":2,"componentBased":false},{"name":"minecraft:stripped_crimson_stem","id":-240,"version":2,"componentBased":false},{"name":"minecraft:stripped_dark_oak_log","id":-9,"version":2,"componentBased":false},{"name":"minecraft:stripped_dark_oak_wood","id":-824,"version":2,"componentBased":false},{"name":"minecraft:stripped_jungle_log","id":-7,"version":2,"componentBased":false},{"name":"minecraft:stripped_jungle_wood","id":-822,"version":2,"componentBased":false},{"name":"minecraft:stripped_mangrove_log","id":-485,"version":2,"componentBased":false},{"name":"minecraft:stripped_mangrove_wood","id":-498,"version":2,"componentBased":false},{"name":"minecraft:stripped_oak_log","id":-10,"version":2,"componentBased":false},{"name":"minecraft:stripped_oak_wood","id":-819,"version":2,"componentBased":false},{"name":"minecraft:stripped_pale_oak_log","id":-994,"version":2,"componentBased":false},{"name":"minecraft:stripped_pale_oak_wood","id":-1004,"version":2,"componentBased":false},{"name":"minecraft:stripped_spruce_log","id":-5,"version":2,"componentBased":false},{"name":"minecraft:stripped_spruce_wood","id":-820,"version":2,"componentBased":false},{"name":"minecraft:stripped_warped_hyphae","id":-301,"version":2,"componentBased":false},{"name":"minecraft:stripped_warped_stem","id":-241,"version":2,"componentBased":false},{"name":"minecraft:structure_block","id":252,"version":2,"componentBased":false},{"name":"minecraft:structure_void","id":217,"version":2,"componentBased":false},{"name":"minecraft:sugar","id":442,"version":2,"componentBased":false},{"name":"minecraft:sugar_cane","id":411,"version":2,"componentBased":true},{"name":"minecraft:sunflower","id":175,"version":2,"componentBased":false},{"name":"minecraft:suspicious_gravel","id":-573,"version":2,"componentBased":false},{"name":"minecraft:suspicious_sand","id":-529,"version":2,"componentBased":false},{"name":"minecraft:suspicious_stew","id":625,"version":0,"componentBased":false},{"name":"minecraft:sweet_berries","id":309,"version":0,"componentBased":false},{"name":"minecraft:sweet_berry_bush","id":-207,"version":2,"componentBased":false},{"name":"minecraft:tadpole_bucket","id":667,"version":2,"componentBased":false},{"name":"minecraft:tadpole_spawn_egg","id":666,"version":2,"componentBased":false},{"name":"minecraft:tall_dry_grass","id":-1029,"version":2,"componentBased":false},{"name":"minecraft:tall_grass","id":-864,"version":2,"componentBased":false},{"name":"minecraft:tallgrass","id":792,"version":2,"componentBased":false},{"name":"minecraft:target","id":-239,"version":2,"componentBased":false},{"name":"minecraft:tide_armor_trim_smithing_template","id":725,"version":2,"componentBased":false},{"name":"minecraft:tinted_glass","id":-334,"version":2,"componentBased":false},{"name":"minecraft:tnt","id":46,"version":2,"componentBased":false},{"name":"minecraft:tnt_minecart","id":558,"version":2,"componentBased":false},{"name":"minecraft:torch","id":50,"version":2,"componentBased":false},{"name":"minecraft:torchflower","id":-568,"version":2,"componentBased":false},{"name":"minecraft:torchflower_crop","id":-567,"version":2,"componentBased":false},{"name":"minecraft:torchflower_seeds","id":318,"version":0,"componentBased":false},{"name":"minecraft:totem_of_undying","id":601,"version":2,"componentBased":false},{"name":"minecraft:trader_llama_spawn_egg","id":685,"version":2,"componentBased":false},{"name":"minecraft:trapdoor","id":96,"version":2,"componentBased":false},{"name":"minecraft:trapped_chest","id":146,"version":2,"componentBased":false},{"name":"minecraft:trial_key","id":276,"version":1,"componentBased":true},{"name":"minecraft:trial_spawner","id":-315,"version":2,"componentBased":false},{"name":"minecraft:trident","id":579,"version":2,"componentBased":false},{"name":"minecraft:trip_wire","id":132,"version":2,"componentBased":false},{"name":"minecraft:tripwire_hook","id":131,"version":2,"componentBased":false},{"name":"minecraft:tropical_fish","id":288,"version":0,"componentBased":false},{"name":"minecraft:tropical_fish_bucket","id":391,"version":2,"componentBased":false},{"name":"minecraft:tropical_fish_spawn_egg","id":507,"version":2,"componentBased":false},{"name":"minecraft:tube_coral","id":-131,"version":2,"componentBased":false},{"name":"minecraft:tube_coral_block","id":-132,"version":2,"componentBased":false},{"name":"minecraft:tube_coral_fan","id":-133,"version":2,"componentBased":false},{"name":"minecraft:tube_coral_wall_fan","id":-135,"version":2,"componentBased":false},{"name":"minecraft:tuff","id":-333,"version":2,"componentBased":false},{"name":"minecraft:tuff_brick_double_slab","id":-756,"version":2,"componentBased":false},{"name":"minecraft:tuff_brick_slab","id":-755,"version":2,"componentBased":false},{"name":"minecraft:tuff_brick_stairs","id":-757,"version":2,"componentBased":false},{"name":"minecraft:tuff_brick_wall","id":-758,"version":2,"componentBased":false},{"name":"minecraft:tuff_bricks","id":-754,"version":2,"componentBased":false},{"name":"minecraft:tuff_double_slab","id":-745,"version":2,"componentBased":false},{"name":"minecraft:tuff_slab","id":-744,"version":2,"componentBased":false},{"name":"minecraft:tuff_stairs","id":-746,"version":2,"componentBased":false},{"name":"minecraft:tuff_wall","id":-747,"version":2,"componentBased":false},{"name":"minecraft:turtle_egg","id":-159,"version":2,"componentBased":false},{"name":"minecraft:turtle_helmet","id":606,"version":2,"componentBased":false},{"name":"minecraft:turtle_scute","id":605,"version":2,"componentBased":false},{"name":"minecraft:turtle_spawn_egg","id":513,"version":2,"componentBased":false},{"name":"minecraft:twisting_vines","id":-287,"version":2,"componentBased":false},{"name":"minecraft:underwater_tnt","id":-985,"version":2,"componentBased":false},{"name":"minecraft:underwater_torch","id":239,"version":2,"componentBased":false},{"name":"minecraft:undyed_shulker_box","id":205,"version":2,"componentBased":false},{"name":"minecraft:unknown","id":-305,"version":2,"componentBased":false},{"name":"minecraft:unlit_redstone_torch","id":75,"version":2,"componentBased":false},{"name":"minecraft:unpowered_comparator","id":149,"version":2,"componentBased":false},{"name":"minecraft:unpowered_repeater","id":93,"version":2,"componentBased":false},{"name":"minecraft:vault","id":-314,"version":2,"componentBased":false},{"name":"minecraft:verdant_froglight","id":-470,"version":2,"componentBased":false},{"name":"minecraft:vex_armor_trim_smithing_template","id":724,"version":2,"componentBased":false},{"name":"minecraft:vex_spawn_egg","id":504,"version":2,"componentBased":false},{"name":"minecraft:villager_spawn_egg","id":476,"version":2,"componentBased":false},{"name":"minecraft:vindicator_spawn_egg","id":502,"version":2,"componentBased":false},{"name":"minecraft:vine","id":106,"version":2,"componentBased":false},{"name":"minecraft:wall_banner","id":177,"version":2,"componentBased":false},{"name":"minecraft:wall_sign","id":68,"version":2,"componentBased":false},{"name":"minecraft:wandering_trader_spawn_egg","id":520,"version":2,"componentBased":false},{"name":"minecraft:ward_armor_trim_smithing_template","id":722,"version":2,"componentBased":false},{"name":"minecraft:warden_spawn_egg","id":669,"version":2,"componentBased":false},{"name":"minecraft:warped_button","id":-261,"version":2,"componentBased":false},{"name":"minecraft:warped_door","id":654,"version":2,"componentBased":false},{"name":"minecraft:warped_double_slab","id":-267,"version":2,"componentBased":false},{"name":"minecraft:warped_fence","id":-257,"version":2,"componentBased":false},{"name":"minecraft:warped_fence_gate","id":-259,"version":2,"componentBased":false},{"name":"minecraft:warped_fungus","id":-229,"version":2,"componentBased":false},{"name":"minecraft:warped_fungus_on_a_stick","id":655,"version":2,"componentBased":true},{"name":"minecraft:warped_hanging_sign","id":-507,"version":2,"componentBased":false},{"name":"minecraft:warped_hyphae","id":-298,"version":2,"componentBased":false},{"name":"minecraft:warped_nylium","id":-233,"version":2,"componentBased":false},{"name":"minecraft:warped_planks","id":-243,"version":2,"componentBased":false},{"name":"minecraft:warped_pressure_plate","id":-263,"version":2,"componentBased":false},{"name":"minecraft:warped_roots","id":-224,"version":2,"componentBased":false},{"name":"minecraft:warped_sign","id":652,"version":2,"componentBased":false},{"name":"minecraft:warped_slab","id":-265,"version":2,"componentBased":false},{"name":"minecraft:warped_stairs","id":-255,"version":2,"componentBased":false},{"name":"minecraft:warped_standing_sign","id":-251,"version":2,"componentBased":false},{"name":"minecraft:warped_stem","id":-226,"version":2,"componentBased":false},{"name":"minecraft:warped_trapdoor","id":-247,"version":2,"componentBased":false},{"name":"minecraft:warped_wall_sign","id":-253,"version":2,"componentBased":false},{"name":"minecraft:warped_wart_block","id":-227,"version":2,"componentBased":false},{"name":"minecraft:water","id":9,"version":2,"componentBased":false},{"name":"minecraft:water_bucket","id":387,"version":2,"componentBased":false},{"name":"minecraft:waterlily","id":111,"version":2,"componentBased":false},{"name":"minecraft:waxed_chiseled_copper","id":-764,"version":2,"componentBased":false},{"name":"minecraft:waxed_copper","id":-344,"version":2,"componentBased":false},{"name":"minecraft:waxed_copper_bulb","id":-780,"version":2,"componentBased":false},{"name":"minecraft:waxed_copper_door","id":-788,"version":2,"componentBased":false},{"name":"minecraft:waxed_copper_grate","id":-772,"version":2,"componentBased":false},{"name":"minecraft:waxed_copper_trapdoor","id":-796,"version":2,"componentBased":false},{"name":"minecraft:waxed_cut_copper","id":-351,"version":2,"componentBased":false},{"name":"minecraft:waxed_cut_copper_slab","id":-365,"version":2,"componentBased":false},{"name":"minecraft:waxed_cut_copper_stairs","id":-358,"version":2,"componentBased":false},{"name":"minecraft:waxed_double_cut_copper_slab","id":-372,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_chiseled_copper","id":-765,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_copper","id":-345,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_copper_bulb","id":-781,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_copper_door","id":-789,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_copper_grate","id":-773,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_copper_trapdoor","id":-797,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_cut_copper","id":-352,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_cut_copper_slab","id":-366,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_cut_copper_stairs","id":-359,"version":2,"componentBased":false},{"name":"minecraft:waxed_exposed_double_cut_copper_slab","id":-373,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_chiseled_copper","id":-766,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_copper","id":-446,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_copper_bulb","id":-783,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_copper_door","id":-791,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_copper_grate","id":-775,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_copper_trapdoor","id":-799,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_cut_copper","id":-447,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_cut_copper_slab","id":-449,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_cut_copper_stairs","id":-448,"version":2,"componentBased":false},{"name":"minecraft:waxed_oxidized_double_cut_copper_slab","id":-450,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_chiseled_copper","id":-767,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_copper","id":-346,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_copper_bulb","id":-782,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_copper_door","id":-790,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_copper_grate","id":-774,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_copper_trapdoor","id":-798,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_cut_copper","id":-353,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_cut_copper_slab","id":-367,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_cut_copper_stairs","id":-360,"version":2,"componentBased":false},{"name":"minecraft:waxed_weathered_double_cut_copper_slab","id":-374,"version":2,"componentBased":false},{"name":"minecraft:wayfinder_armor_trim_smithing_template","id":730,"version":2,"componentBased":false},{"name":"minecraft:weathered_chiseled_copper","id":-762,"version":2,"componentBased":false},{"name":"minecraft:weathered_copper","id":-342,"version":2,"componentBased":false},{"name":"minecraft:weathered_copper_bulb","id":-778,"version":2,"componentBased":false},{"name":"minecraft:weathered_copper_door","id":-786,"version":2,"componentBased":false},{"name":"minecraft:weathered_copper_grate","id":-770,"version":2,"componentBased":false},{"name":"minecraft:weathered_copper_trapdoor","id":-794,"version":2,"componentBased":false},{"name":"minecraft:weathered_cut_copper","id":-349,"version":2,"componentBased":false},{"name":"minecraft:weathered_cut_copper_slab","id":-363,"version":2,"componentBased":false},{"name":"minecraft:weathered_cut_copper_stairs","id":-356,"version":2,"componentBased":false},{"name":"minecraft:weathered_double_cut_copper_slab","id":-370,"version":2,"componentBased":false},{"name":"minecraft:web","id":30,"version":2,"componentBased":false},{"name":"minecraft:weeping_vines","id":-231,"version":2,"componentBased":false},{"name":"minecraft:wet_sponge","id":-984,"version":2,"componentBased":false},{"name":"minecraft:wheat","id":359,"version":2,"componentBased":false},{"name":"minecraft:wheat_seeds","id":313,"version":0,"componentBased":false},{"name":"minecraft:white_bundle","id":272,"version":1,"componentBased":true},{"name":"minecraft:white_candle","id":-413,"version":2,"componentBased":false},{"name":"minecraft:white_candle_cake","id":-430,"version":2,"componentBased":false},{"name":"minecraft:white_carpet","id":171,"version":2,"componentBased":false},{"name":"minecraft:white_concrete","id":236,"version":2,"componentBased":false},{"name":"minecraft:white_concrete_powder","id":237,"version":2,"componentBased":false},{"name":"minecraft:white_dye","id":436,"version":2,"componentBased":false},{"name":"minecraft:white_glazed_terracotta","id":220,"version":2,"componentBased":false},{"name":"minecraft:white_harness","id":766,"version":2,"componentBased":false},{"name":"minecraft:white_shulker_box","id":218,"version":2,"componentBased":false},{"name":"minecraft:white_stained_glass","id":241,"version":2,"componentBased":false},{"name":"minecraft:white_stained_glass_pane","id":160,"version":2,"componentBased":false},{"name":"minecraft:white_terracotta","id":159,"version":2,"componentBased":false},{"name":"minecraft:white_tulip","id":-835,"version":2,"componentBased":false},{"name":"minecraft:white_wool","id":35,"version":2,"componentBased":false},{"name":"minecraft:wild_armor_trim_smithing_template","id":721,"version":2,"componentBased":false},{"name":"minecraft:wildflowers","id":-1024,"version":2,"componentBased":false},{"name":"minecraft:wind_charge","id":277,"version":1,"componentBased":true},{"name":"minecraft:witch_spawn_egg","id":479,"version":2,"componentBased":false},{"name":"minecraft:wither_rose","id":-216,"version":2,"componentBased":false},{"name":"minecraft:wither_skeleton_skull","id":-965,"version":2,"componentBased":false},{"name":"minecraft:wither_skeleton_spawn_egg","id":492,"version":2,"componentBased":false},{"name":"minecraft:wither_spawn_egg","id":536,"version":2,"componentBased":false},{"name":"minecraft:wolf_armor","id":741,"version":2,"componentBased":true},{"name":"minecraft:wolf_spawn_egg","id":466,"version":2,"componentBased":false},{"name":"minecraft:wood","id":800,"version":2,"componentBased":false},{"name":"minecraft:wooden_axe","id":335,"version":2,"componentBased":false},{"name":"minecraft:wooden_button","id":143,"version":2,"componentBased":false},{"name":"minecraft:wooden_door","id":384,"version":2,"componentBased":false},{"name":"minecraft:wooden_hoe","id":354,"version":2,"componentBased":false},{"name":"minecraft:wooden_pickaxe","id":334,"version":2,"componentBased":false},{"name":"minecraft:wooden_pressure_plate","id":72,"version":2,"componentBased":false},{"name":"minecraft:wooden_shovel","id":333,"version":2,"componentBased":false},{"name":"minecraft:wooden_slab","id":787,"version":2,"componentBased":false},{"name":"minecraft:wooden_sword","id":332,"version":2,"componentBased":false},{"name":"minecraft:wool","id":768,"version":2,"componentBased":false},{"name":"minecraft:writable_book","id":544,"version":2,"componentBased":false},{"name":"minecraft:written_book","id":545,"version":2,"componentBased":false},{"name":"minecraft:yellow_bundle","id":273,"version":1,"componentBased":true},{"name":"minecraft:yellow_candle","id":-417,"version":2,"componentBased":false},{"name":"minecraft:yellow_candle_cake","id":-434,"version":2,"componentBased":false},{"name":"minecraft:yellow_carpet","id":-600,"version":2,"componentBased":false},{"name":"minecraft:yellow_concrete","id":-631,"version":2,"componentBased":false},{"name":"minecraft:yellow_concrete_powder","id":-712,"version":2,"componentBased":false},{"name":"minecraft:yellow_dye","id":432,"version":2,"componentBased":false},{"name":"minecraft:yellow_glazed_terracotta","id":224,"version":2,"componentBased":false},{"name":"minecraft:yellow_harness","id":767,"version":2,"componentBased":false},{"name":"minecraft:yellow_shulker_box","id":-616,"version":2,"componentBased":false},{"name":"minecraft:yellow_stained_glass","id":-676,"version":2,"componentBased":false},{"name":"minecraft:yellow_stained_glass_pane","id":-646,"version":2,"componentBased":false},{"name":"minecraft:yellow_terracotta","id":-727,"version":2,"componentBased":false},{"name":"minecraft:yellow_wool","id":-558,"version":2,"componentBased":false},{"name":"minecraft:zoglin_spawn_egg","id":526,"version":2,"componentBased":false},{"name":"minecraft:zombie_head","id":-966,"version":2,"componentBased":false},{"name":"minecraft:zombie_horse_spawn_egg","id":496,"version":2,"componentBased":false},{"name":"minecraft:zombie_pigman_spawn_egg","id":475,"version":2,"componentBased":false},{"name":"minecraft:zombie_spawn_egg","id":474,"version":2,"componentBased":false},{"name":"minecraft:zombie_villager_spawn_egg","id":505,"version":2,"componentBased":false}] \ No newline at end of file diff --git a/app/src/main/java/com/retrivedmods/wclient/activity/MainActivity.kt b/app/src/main/java/com/retrivedmods/wclient/activity/MainActivity.kt index cb331aca..bbfe8d3c 100644 --- a/app/src/main/java/com/retrivedmods/wclient/activity/MainActivity.kt +++ b/app/src/main/java/com/retrivedmods/wclient/activity/MainActivity.kt @@ -5,158 +5,56 @@ import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.net.Uri import android.os.Build -import android.os.Bundle import android.os.PowerManager import android.provider.Settings -import android.view.WindowManager -import android.widget.Toast -import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.runtime.* +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.ui.Modifier import androidx.core.content.ContextCompat -import androidx.core.net.toUri import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.lifecycle.lifecycleScope -import com.retrivedmods.wclient.auth.VerificationManager import com.retrivedmods.wclient.game.ModuleManager -import com.retrivedmods.wclient.navigation.Navigation -import com.retrivedmods.wclient.ui.component.LoadingScreen -import com.retrivedmods.wclient.ui.component.VerificationDialog import com.retrivedmods.wclient.ui.theme.WClientTheme -import com.retrivedmods.wclient.util.SoundUtil +import com.retrivedmods.wclient.router.main.MainScreen +import android.os.Bundle +import android.view.WindowManager +import androidx.activity.ComponentActivity +import androidx.activity.enableEdgeToEdge import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { private val storagePermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() - ) { permissions -> - val allGranted = permissions.values.all { it } - if (allGranted) { - Toast.makeText( - this, - "Storage permissions granted - You can now export configs", - Toast.LENGTH_SHORT - ).show() - } else { - Toast.makeText( - this, - "Storage permissions are required to export configs to external storage", - Toast.LENGTH_LONG - ).show() - } - } + ) { _ -> } - @SuppressLint("BatteryLife") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - SoundUtil.load(applicationContext) - - - ModuleManager.loadConfig() - enableEdgeToEdge() setupImmersiveMode() checkBatteryOptimizations() - requestStoragePermissions() - setContent { WClientTheme { - var showLoading by remember { mutableStateOf(true) } - var showVerificationDialog by remember { mutableStateOf(false) } - var verifying by remember { mutableStateOf(false) } - var wclientId by remember { mutableStateOf("") } - - if (showLoading) { - LoadingScreen( - onDone = { - lifecycleScope.launch { - wclientId = VerificationManager.getWClientId(this@MainActivity) - - if (VerificationManager.isWhitelisted(this@MainActivity, wclientId)) { - showLoading = false - return@launch - } - - if (VerificationManager.isVerified(this@MainActivity, wclientId)) { - showLoading = false - return@launch - } - - showLoading = false - showVerificationDialog = true - } - } - ) - } else if (showVerificationDialog) { - VerificationDialog( - wclientId = wclientId, - onVerifyClick = { - lifecycleScope.launch { - verifying = true - try { - val verifyUrl = VerificationManager.requestVerification( - this@MainActivity, - wclientId - ) - - VerificationManager.openInAppBrowser( - this@MainActivity, - verifyUrl - ) - - Toast.makeText( - this@MainActivity, - "Complete verification in the browser, then return to this app.", - Toast.LENGTH_LONG - ).show() - - VerificationManager.pollVerificationStatus( - this@MainActivity, - wclientId - ) { verified, reason -> - verifying = false - if (verified) { - showVerificationDialog = false - Toast.makeText( - this@MainActivity, - "Welcome - You are now verified!", - Toast.LENGTH_SHORT - ).show() - } else { - Toast.makeText( - this@MainActivity, - "Verification failed: ${reason ?: "unknown"}", - Toast.LENGTH_LONG - ).show() - } - } - } catch (t: Throwable) { - verifying = false - Toast.makeText( - this@MainActivity, - "Verification request failed: ${t.message}", - Toast.LENGTH_LONG - ).show() - } - } - } - ) - } else { - if (verifying) { - LoadingScreen(onDone = {}) - } else { - Navigation() - } + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + MainScreen() } } } + + lifecycleScope.launch { + requestStoragePermissions() + } } private fun setupImmersiveMode() { @@ -177,7 +75,7 @@ class MainActivity : ComponentActivity() { if (!powerManager.isIgnoringBatteryOptimizations(packageName)) { startActivity( Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { - data = "package:$packageName".toUri() + data = Uri.parse("package:$packageName") } ) } @@ -222,8 +120,6 @@ class MainActivity : ComponentActivity() { override fun onDestroy() { super.onDestroy() - VerificationManager.cancelAll() - ModuleManager.saveConfig() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/auth/VerificationManager.kt b/app/src/main/java/com/retrivedmods/wclient/auth/VerificationManager.kt index 4b1ca4b2..3005093b 100644 --- a/app/src/main/java/com/retrivedmods/wclient/auth/VerificationManager.kt +++ b/app/src/main/java/com/retrivedmods/wclient/auth/VerificationManager.kt @@ -1,190 +1,2 @@ +// Verification system removed - WClient now opens directly without app-level authentication package com.retrivedmods.wclient.auth - -import android.app.Activity -import android.content.ActivityNotFoundException -import android.content.Context -import android.content.Intent -import android.net.Uri -import android.util.Log -import androidx.browser.customtabs.CustomTabsIntent -import kotlinx.coroutines.* -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import org.json.JSONObject -import java.net.URLEncoder -import java.util.* - -object VerificationManager { - private const val TAG = "VerifyNet" - private const val PREFS = "wclient_prefs" - private const val KEY_WCLIENT_ID = "wclient_id" - - private const val BASE_VERIFY_URL = "https://retrivedmods.online/task/verify.php" - - private val client: OkHttpClient = OkHttpClient.Builder() - .followRedirects(true) - .followSslRedirects(true) - .addInterceptor { chain -> - val req = chain.request() - Log.d(TAG, "REQ: ${req.method} ${req.url}") - val resp = chain.proceed(req) - val loc = resp.header("Location") - Log.d(TAG, "RESP: ${resp.code} ${resp.message} -> ${resp.request.url}") - if (loc != null) Log.d(TAG, "Redirect Location: $loc") - resp - } - .build() - - private val jsonMedia = "application/json; charset=utf-8".toMediaType() - private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - - private fun prefs(ctx: Context) = ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE) - - fun getWClientId(ctx: Context): String { - val p = prefs(ctx) - var id = p.getString(KEY_WCLIENT_ID, null) - if (id.isNullOrBlank()) { - id = "WC-" + UUID.randomUUID().toString().uppercase().replace("-", "").substring(0, 16) - p.edit().putString(KEY_WCLIENT_ID, id).apply() - } - return id - } - - suspend fun isWhitelisted(ctx: Context, wclientId: String): Boolean = - withContext(Dispatchers.IO) { - try { - val url = "$BASE_VERIFY_URL?action=check_whitelist&wclient_id=${URLEncoder.encode(wclientId, "utf-8")}" - val req = Request.Builder().url(url).get().build() - - client.newCall(req).execute().use { resp -> - if (!resp.isSuccessful) return@withContext false - val body = resp.body?.string() ?: return@withContext false - val j = JSONObject(body) - return@withContext j.optBoolean("whitelisted", false) - } - } catch (t: Throwable) { - Log.e(TAG, "Error checking whitelist", t) - return@withContext false - } - } - - suspend fun isVerified(ctx: Context, wclientId: String): Boolean = - withContext(Dispatchers.IO) { - try { - val url = "$BASE_VERIFY_URL?action=check_verified&wclient_id=${URLEncoder.encode(wclientId, "utf-8")}" - val req = Request.Builder().url(url).get().build() - - client.newCall(req).execute().use { resp -> - if (!resp.isSuccessful) return@withContext false - val body = resp.body?.string() ?: return@withContext false - val j = JSONObject(body) - return@withContext j.optBoolean("verified", false) - } - } catch (t: Throwable) { - Log.e(TAG, "Error checking verification", t) - return@withContext false - } - } - - suspend fun requestVerification(ctx: Context, wclientId: String): String = - withContext(Dispatchers.IO) { - val payload = JSONObject().put("wclient_id", wclientId).toString() - val reqBody = payload.toRequestBody(jsonMedia) - val url = "$BASE_VERIFY_URL?action=request&short=1" - val req = Request.Builder().url(url).post(reqBody).build() - - client.newCall(req).execute().use { resp -> - if (!resp.isSuccessful) throw Exception("Server ${resp.code}") - val body = resp.body?.string() ?: throw Exception("Empty response") - val j = JSONObject(body) - val verifyUrl = j.optString("verify_url", "") - - if (verifyUrl.isBlank()) throw Exception("Invalid response") - return@withContext verifyUrl - } - } - - fun openInAppBrowser(activity: Activity, verifyUrl: String) { - try { - if (verifyUrl.isBlank()) { - Log.w(TAG, "openInAppBrowser: empty URL") - return - } - if (!verifyUrl.startsWith("http://") && !verifyUrl.startsWith("https://")) { - Log.w(TAG, "openInAppBrowser: non-http URL, falling back to external: $verifyUrl") - openInExternalBrowser(activity, verifyUrl) - return - } - val builder = CustomTabsIntent.Builder() - builder.setShowTitle(true) - val customTabsIntent = builder.build() - customTabsIntent.launchUrl(activity, Uri.parse(verifyUrl)) - Log.d(TAG, "Launched CustomTab for $verifyUrl") - } catch (e: ActivityNotFoundException) { - Log.w(TAG, "CustomTab Activity not found - fallback to external", e) - openInExternalBrowser(activity, verifyUrl) - } catch (t: Throwable) { - Log.w(TAG, "CustomTab failed - fallback to external", t) - openInExternalBrowser(activity, verifyUrl) - } - } - - fun openInExternalBrowser(activity: Activity, url: String) { - try { - val i = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - activity.startActivity(Intent.createChooser(i, "Open link")) - Log.d(TAG, "Launched external browser for $url") - } catch (e: ActivityNotFoundException) { - Log.e(TAG, "No browser to open url", e) - } catch (t: Throwable) { - Log.e(TAG, "Failed to open external browser", t) - } - } - - fun pollVerificationStatus(ctx: Context, wclientId: String, onComplete: (Boolean, String?) -> Unit) { - scope.launch { - try { - val pollIntervalMs = 3000L - val start = System.currentTimeMillis() - val maxDurationMs = 4L * 60L * 60L * 1000L + 10_000L - - while (true) { - val url = "$BASE_VERIFY_URL?action=check_verified&wclient_id=${URLEncoder.encode(wclientId, "utf-8")}" - val req = Request.Builder().url(url).get().build() - - client.newCall(req).execute().use { resp -> - if (!resp.isSuccessful) { - Log.d(TAG, "Status call returned ${resp.code}; will retry") - } else { - val s = resp.body?.string() ?: "" - val j = JSONObject(s) - val verified = j.optBoolean("verified", false) - - if (verified) { - withContext(Dispatchers.Main) { onComplete(true, null) } - return@launch - } - } - } - - if (System.currentTimeMillis() - start > maxDurationMs) { - withContext(Dispatchers.Main) { onComplete(false, "timed out") } - return@launch - } - delay(pollIntervalMs) - } - } catch (t: Throwable) { - Log.e(TAG, "Polling error", t) - withContext(Dispatchers.Main) { onComplete(false, t.message ?: "error") } - } - } - } - - fun cancelAll() { - scope.cancel() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/retrivedmods/wclient/game/GameSession.kt b/app/src/main/java/com/retrivedmods/wclient/game/GameSession.kt index ec40751e..3ac1c2f3 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/GameSession.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/GameSession.kt @@ -126,14 +126,15 @@ class GameSession(val wRelaySession: WRelaySession) : ComposedPacketHandler { } fun displayClientMessage(message: String, type: TextPacket.Type = TextPacket.Type.RAW) { - val textPacket = TextPacket() - textPacket.type = type - textPacket.sourceName = "" - textPacket.message = message - textPacket.xuid = "" - textPacket.platformChatId = "" - textPacket.filteredMessage = "" + val textPacket = TextPacket().apply { + this.type = type + sourceName = "" + setMessage(message) + xuid = "" + platformChatId = "" + filteredMessage = "" + } clientBound(textPacket) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/ModuleManager.kt b/app/src/main/java/com/retrivedmods/wclient/game/ModuleManager.kt index 9e32f08f..ac4da939 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/ModuleManager.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/ModuleManager.kt @@ -5,8 +5,15 @@ import android.net.Uri import android.os.Environment import com.retrivedmods.wclient.application.AppContext import com.retrivedmods.wclient.game.module.combat.ACAModule +import com.retrivedmods.wclient.game.module.combat.AdvanceCombatAuraModule import com.retrivedmods.wclient.game.module.combat.AntiCrystalModule import com.retrivedmods.wclient.game.module.combat.AntiKnockbackModule +import com.retrivedmods.wclient.game.module.combat.AutoArmorModule +import com.retrivedmods.wclient.game.module.combat.AutoSoupModule +import com.retrivedmods.wclient.game.module.combat.AutoWeaponModule +import com.retrivedmods.wclient.game.module.combat.BlockClutchModule +import com.retrivedmods.wclient.game.module.combat.BowAimbotModule +import com.retrivedmods.wclient.game.module.combat.CriticalsModule import com.retrivedmods.wclient.game.module.combat.CrystalSmashModule import com.retrivedmods.wclient.game.module.combat.EnemyHunterModule import com.retrivedmods.wclient.game.module.combat.HitAndRunModule @@ -19,10 +26,36 @@ import com.retrivedmods.wclient.game.module.combat.AutoHvHModule import com.retrivedmods.wclient.game.module.combat.AutoTotemModule import com.retrivedmods.wclient.game.module.combat.HotbarSwitcherModule import com.retrivedmods.wclient.game.module.combat.InfiniteAuraModule +import com.retrivedmods.wclient.game.module.combat.SuperKnockbackModule +import com.retrivedmods.wclient.game.module.combat.VelocityModule +import com.retrivedmods.wclient.game.module.combat.WTapModule import com.retrivedmods.wclient.game.module.misc.ArrayListModule +import com.retrivedmods.wclient.game.module.misc.AutoToolModule +import com.retrivedmods.wclient.game.module.misc.DerpModule +import com.retrivedmods.wclient.game.module.misc.FastPlaceModule +import com.retrivedmods.wclient.game.module.misc.InventoryCleanerModule +import com.retrivedmods.wclient.game.module.misc.MCFModule +import com.retrivedmods.wclient.game.module.misc.NoFallModule +import com.retrivedmods.wclient.game.module.misc.NoRotateModule +import com.retrivedmods.wclient.game.module.misc.PingSpoofModule +import com.retrivedmods.wclient.game.module.misc.TimerModule +import com.retrivedmods.wclient.game.module.motion.AutoSprintModule +import com.retrivedmods.wclient.game.module.motion.BlinkModule +import com.retrivedmods.wclient.game.module.motion.ClickTPModule +import com.retrivedmods.wclient.game.module.motion.DashModule +import com.retrivedmods.wclient.game.module.motion.GlideModule +import com.retrivedmods.wclient.game.module.motion.IceSpeedModule +import com.retrivedmods.wclient.game.module.motion.InvWalkModule +import com.retrivedmods.wclient.game.module.motion.LongJumpModule import com.retrivedmods.wclient.game.module.motion.NoClipModule +import com.retrivedmods.wclient.game.module.world.AutoBuilderModule import com.retrivedmods.wclient.game.module.misc.AutoDisconnectModule import com.retrivedmods.wclient.game.module.misc.CommandHandlerModule +import com.retrivedmods.wclient.game.module.visual.AmbienceModule +import com.retrivedmods.wclient.game.module.visual.AnimationsModule +import com.retrivedmods.wclient.game.module.visual.ChamsModule +import com.retrivedmods.wclient.game.module.visual.ChunkBordersModule +import com.retrivedmods.wclient.game.module.visual.ClearWaterModule import com.retrivedmods.wclient.game.module.visual.CoordinatesModule import com.retrivedmods.wclient.game.module.misc.DesyncModule import com.retrivedmods.wclient.game.module.misc.FakeDeathModule @@ -32,11 +65,28 @@ import com.retrivedmods.wclient.game.module.misc.NoChatModule import com.retrivedmods.wclient.game.module.misc.PieChartModule import com.retrivedmods.wclient.game.module.misc.PositionLoggerModule import com.retrivedmods.wclient.game.module.misc.ReplayModule +import com.retrivedmods.wclient.game.module.visual.FOVSliderModule +import com.retrivedmods.wclient.game.module.visual.ItemESPModule +import com.retrivedmods.wclient.game.module.visual.NameTagsModule +import com.retrivedmods.wclient.game.module.visual.NoWeatherModule +import com.retrivedmods.wclient.game.module.visual.TracersModule import com.retrivedmods.wclient.game.module.misc.ChestStealerModule import com.retrivedmods.wclient.game.module.misc.SpammerModule import com.retrivedmods.wclient.game.module.misc.ToggleSoundModule import com.retrivedmods.wclient.game.module.misc.WaterMarkModule +import com.retrivedmods.wclient.game.module.motion.StepModule +import com.retrivedmods.wclient.game.module.motion.WallClimbModule +import com.retrivedmods.wclient.game.module.visual.TargetHudModule import com.retrivedmods.wclient.game.module.world.AntiDebuffModule +import com.retrivedmods.wclient.game.module.world.AutoFarmModule +import com.retrivedmods.wclient.game.module.world.AutoFishModule +import com.retrivedmods.wclient.game.module.world.AutoMineModule +import com.retrivedmods.wclient.game.module.world.ChestESPModule +import com.retrivedmods.wclient.game.module.world.FastBreakModule +import com.retrivedmods.wclient.game.module.world.NukerModule +import com.retrivedmods.wclient.game.module.world.PortalClickerModule +import com.retrivedmods.wclient.game.module.world.ScaffoldModule +import com.retrivedmods.wclient.game.module.world.XRayModule import com.retrivedmods.wclient.game.module.world.EffectsModule import com.retrivedmods.wclient.game.module.world.ParticlesModule import com.retrivedmods.wclient.game.module.world.TimeShiftModule @@ -64,7 +114,6 @@ import com.retrivedmods.wclient.game.module.visual.PlayerJoinModule import com.retrivedmods.wclient.game.module.visual.SpeedDisplayModule import com.retrivedmods.wclient.game.module.visual.WorldStateModule import com.retrivedmods.wclient.game.module.visual.ZoomModule -import com.retrivedmods.wclient.game.module.visual.TargetHudModule import com.retrivedmods.wclient.game.module.world.FreeCameraModule import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject @@ -97,12 +146,21 @@ object ModuleManager { add(AutoHvHModule()) add(EnemyHunterModule()) add(AntiKnockbackModule()) - add(AntiCrystalModule()) add(HitAndRunModule()) add(HitboxModule()) add(CrystalSmashModule()) add(TriggerBotModule()) + add(AutoArmorModule()) + add(BowAimbotModule()) + add(CriticalsModule()) + add(SuperKnockbackModule()) + add(VelocityModule()) + add(WTapModule()) + add(AutoWeaponModule()) + add(AutoSoupModule()) + add(BlockClutchModule()) + add(AdvanceCombatAuraModule()) // Motion add(MotionFlyModule()) @@ -118,6 +176,16 @@ object ModuleManager { add(AutoWalkModule()) add(AntiAFKModule()) add(SpiderModule()) + add(BlinkModule()) + add(ClickTPModule()) + add(DashModule()) + add(GlideModule()) + add(IceSpeedModule()) + add(InvWalkModule()) + add(LongJumpModule()) + add(StepModule()) + add(WallClimbModule()) + add(AutoSprintModule()) // Visual add(DamageTextModule()) @@ -133,6 +201,16 @@ object ModuleManager { add(CrosshairModule()) add(TargetHudModule()) add(FullbrightModule()) + add(AmbienceModule()) + add(AnimationsModule()) + add(ChamsModule()) + add(ChunkBordersModule()) + add(ClearWaterModule()) + add(FOVSliderModule()) + add(ItemESPModule()) + add(NameTagsModule()) + add(NoWeatherModule()) + add(TracersModule()) // World add(FreeCameraModule()) @@ -141,9 +219,18 @@ object ModuleManager { add(EffectsModule()) add(ParticlesModule()) add(AntiDebuffModule()) + add(AutoFarmModule()) + add(AutoFishModule()) + add(AutoMineModule()) + add(ChestESPModule()) + add(FastBreakModule()) + add(NukerModule()) + add(ScaffoldModule()) + add(XRayModule()) + add(AutoBuilderModule()) + add(PortalClickerModule()) // Misc - add(AutoDisconnectModule()) add(ArrayListModule()) add(ToggleSoundModule()) @@ -159,6 +246,15 @@ object ModuleManager { add(FakeDeathModule()) add(FakeXPModule()) add(MinerModule()) + add(AutoToolModule()) + add(DerpModule()) + add(FastPlaceModule()) + add(InventoryCleanerModule()) + add(MCFModule()) + add(NoFallModule()) + add(NoRotateModule()) + add(PingSpoofModule()) + add(TimerModule()) } } diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/ACAModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/ACAModule.kt index fbce872e..09203a29 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/ACAModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/ACAModule.kt @@ -23,6 +23,11 @@ class ACAModule : Module("ACA", ModuleCategory.Combat) { private var tpYLevel by intValue("yOffset", 0, -10..10) private var distanceToKeep by floatValue("keep_distance", 2.0f, 1f..10f) + private var alwaysSwing by boolValue("always_swing", true) + private var multiTarget by boolValue("multi_target", true) + private var maxTargets by intValue("max_targets", 5, 1..20) + private var invisibleCheck by boolValue("invisible_check", false) + private var autoBlock by boolValue("auto_block", false) private var lastAttackTime = 0L private var tpCooldown = 0L @@ -70,7 +75,7 @@ class ACAModule : Module("ACA", ModuleCategory.Combat) { position = newPosition rotation = entity.vec3Rotation mode = MovePlayerPacket.Mode.NORMAL - onGround = false + setOnGround(false) tick = session.localPlayer.tickExists } @@ -101,4 +106,4 @@ class ACAModule : Module("ACA", ModuleCategory.Combat) { .filter { it.distance(session.localPlayer) < rangeValue && it.isTarget() } .sortedBy { it.distance(session.localPlayer) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AdvanceCombatAuraModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AdvanceCombatAuraModule.kt new file mode 100644 index 00000000..db84aefb --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AdvanceCombatAuraModule.kt @@ -0,0 +1,21 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AdvanceCombatAuraModule : Module("advance_combat_aura", ModuleCategory.Combat) { + private val range by floatValue("Range", 4.5f, 1.0f..8.0f) + private val mode by enumValue("Mode", Mode.SINGLE, Mode::class.java) + private val speed by intValue("Speed", 10, 1..20) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[AdvanceCombatAura] enabled") + } + + enum class Mode { SINGLE, MULTI, SWITCH } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoArmorModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoArmorModule.kt new file mode 100644 index 00000000..b5a8e2e5 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoArmorModule.kt @@ -0,0 +1,27 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket + +class AutoArmorModule : Module("auto_armor", ModuleCategory.Combat) { + private val delay by intValue("Delay", 2, 0..10) + private val onlyBetter by boolValue("Only Better", true) + private var tickCounter = 0 + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + val packet = interceptablePacket.packet + if (packet !is PlayerAuthInputPacket) return + tickCounter++ + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[AutoArmor] enabled") + } + + override fun onDisabled() { + session.displayClientMessage("ยงc[AutoArmor] disabled") + } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoHvHModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoHvHModule.kt index f63c5274..33f91e8f 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoHvHModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoHvHModule.kt @@ -92,7 +92,7 @@ class AutoHvHModule : Module("Auto HVH", ModuleCategory.Combat) { position = newPosition rotation = player.vec3Rotation mode = MovePlayerPacket.Mode.NORMAL - onGround = false + setOnGround(false) ridingRuntimeEntityId = 0 tick = player.tickExists }) @@ -127,4 +127,4 @@ class AutoHvHModule : Module("Auto HVH", ModuleCategory.Combat) { // TODO: Implement raycast or collision if needed return false } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoSoupModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoSoupModule.kt new file mode 100644 index 00000000..32bc4e39 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoSoupModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoSoupModule : Module("auto_soup", ModuleCategory.Combat) { + private val healthThreshold by floatValue("Health", 10.0f, 1.0f..20.0f) + private val delay by intValue("Delay", 100, 50..500) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[AutoSoup] enabled") + } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoTotemModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoTotemModule.kt index 9fe31901..a29df717 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoTotemModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoTotemModule.kt @@ -14,6 +14,12 @@ class AutoTotemModule : Module("Auto Totem", ModuleCategory.Combat) { private var onlyWhenLowHealth by boolValue("Only When Low Health", false) private var healthThreshold by intValue("Health Threshold", 10, 1..20) private var replaceOffhand by boolValue("Replace Offhand", true) + private var totemSlot by intValue("Totem Slot", 40, 0..40) + private var switchBack by boolValue("Switch Back", false) + private var openInventory by boolValue("Open Inventory", false) + private var checkFallDamage by boolValue("Check Fall Damage", true) + private var autoRefill by boolValue("Auto Refill", false) + private var refillThreshold by intValue("Refill Threshold", 1, 1..10) private var lastTotemTime = 0L diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoWeaponModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoWeaponModule.kt new file mode 100644 index 00000000..22a6c216 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/AutoWeaponModule.kt @@ -0,0 +1,20 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoWeaponModule : Module("auto_weapon", ModuleCategory.Combat) { + private val mode by enumValue("Mode", Mode.SWORD, Mode::class.java) + private val autoSwitchBack by boolValue("Auto Switch Back", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[AutoWeapon] enabled") + } + + enum class Mode { SWORD, AXE, BEST } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BlockClutchModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BlockClutchModule.kt new file mode 100644 index 00000000..585f1022 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BlockClutchModule.kt @@ -0,0 +1,20 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class BlockClutchModule : Module("block_clutch", ModuleCategory.Combat) { + private val mode by enumValue("Mode", Mode.BLOCK, Mode::class.java) + private val healthThreshold by floatValue("Health", 8.0f, 1.0f..20.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[BlockClutch] enabled") + } + + enum class Mode { BLOCK, SHIELD, BOTH } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BowAimbotModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BowAimbotModule.kt new file mode 100644 index 00000000..0931c770 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/BowAimbotModule.kt @@ -0,0 +1,23 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class BowAimbotModule : Module("bow_aimbot", ModuleCategory.Combat) { + private val range by floatValue("Range", 50.0f, 10.0f..100.0f) + private val silent by boolValue("Silent", true) + private val predict by boolValue("Predict", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[BowAimbot] enabled") + } + + override fun onDisabled() { + session.displayClientMessage("ยงc[BowAimbot] disabled") + } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/CriticalsModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/CriticalsModule.kt new file mode 100644 index 00000000..33e475f3 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/CriticalsModule.kt @@ -0,0 +1,20 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class CriticalsModule : Module("criticals", ModuleCategory.Combat) { + private val mode by enumValue("Mode", Mode.PACKET, Mode::class.java) + private val chance by floatValue("Chance", 100.0f, 1.0f..100.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[Criticals] enabled") + } + + enum class Mode { PACKET, MINI_JUMP, POSITION } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/EnemyHunterModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/EnemyHunterModule.kt index d5a3e214..3c8dd361 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/EnemyHunterModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/EnemyHunterModule.kt @@ -106,7 +106,7 @@ class EnemyHunterModule : Module("EnemyHunter", ModuleCategory.Combat) { position = newPosition rotation = rotationVec mode = MovePlayerPacket.Mode.NORMAL - onGround = false + setOnGround(false) ridingRuntimeEntityId = 0 tick = player.tickExists }) @@ -142,4 +142,4 @@ class EnemyHunterModule : Module("EnemyHunter", ModuleCategory.Combat) { if (delta < -180f) delta += 360f return (old + delta * factor) % 360.0f } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/HotbarSwitcherModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/HotbarSwitcherModule.kt index a842f626..de8f2724 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/HotbarSwitcherModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/HotbarSwitcherModule.kt @@ -67,8 +67,8 @@ class HotbarSwitcherModule : Module("switcher", ModuleCategory.Combat) { val packet = PlayerHotbarPacket() packet.selectedHotbarSlot = slot packet.containerId = 0 - packet.selectHotbarSlot = true + packet.setSelectHotbarSlot(true) session.clientBound(packet) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/InfiniteAuraModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/InfiniteAuraModule.kt index 85bb2f0a..a845b7ec 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/InfiniteAuraModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/InfiniteAuraModule.kt @@ -15,7 +15,13 @@ class InfiniteAuraModule : Module("InfiniteAura", ModuleCategory.Combat) { private var cpsValue by intValue("CPS", 12, 1..20) private var behindOffset by floatValue("Behind Offset", 2.0f, 0.5f..5.0f) private var playersOnly by boolValue("Players Only", true) + private var mobsOnly by boolValue("Mobs Only", false) private var silentLagbacks by boolValue("Silent Lagbacks", true) + private var rangeValue by floatValue("Range", 20f, 5f..50f) + private var alwaysSwing by boolValue("Always Swing", true) + private var multiTarget by boolValue("Multi Target", true) + private var maxTargets by intValue("Max Targets", 3, 1..10) + private var autoDisableOnLagback by boolValue("Auto Disable Lagback", true) private var lastAttackTime = 0L private var lastLagbackTime = 0L diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/KillauraModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/KillauraModule.kt index 1e25b541..5e84ddca 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/KillauraModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/KillauraModule.kt @@ -19,7 +19,14 @@ class KillauraModule : Module("killaura", ModuleCategory.Combat) { private var playersOnly by boolValue("players_only", true) private var mobsOnly by boolValue("mobs_only", false) private var antiBot by boolValue("anti_bot", true) - + private var alwaysSwing by boolValue("always_swing", true) + private var raytraceCheck by boolValue("raytrace", true) + private var rotationMode by enumValue("rotation", RotationMode.NORMAL, RotationMode::class.java) + private var multiTarget by boolValue("multi_target", true) + private var targetSwitchDelay by intValue("switch_delay", 50, 0..500) + private var autoBlock by boolValue("auto_block", false) + private var invisibleCheck by boolValue("invisible_check", false) + private var maxTargets by intValue("max_targets", 3, 1..10) private var tpAuraEnabled by boolValue("tp_aura", false) private var teleportBehind by boolValue("tp_behind", false) @@ -31,6 +38,8 @@ class KillauraModule : Module("killaura", ModuleCategory.Combat) { private var strafe by boolValue("strafe", false) private val strafeSpeed by floatValue("strafe_speed", 2.5f, 1f..4f) private val strafeRadius by floatValue("strafe_radius", 2.5f, 1f..6f) + + enum class RotationMode { NORMAL, SILENT, NONE } @@ -149,7 +158,7 @@ class KillauraModule : Module("killaura", ModuleCategory.Combat) { position = tpPos rotation = entity.vec3Rotation mode = MovePlayerPacket.Mode.NORMAL - onGround = false + setOnGround(false) tick = player.tickExists } ) @@ -170,7 +179,7 @@ class KillauraModule : Module("killaura", ModuleCategory.Combat) { position = pos.add(x.toFloat(), 0f, z.toFloat()) rotation = Vector3f.ZERO mode = MovePlayerPacket.Mode.NORMAL - onGround = true + setOnGround(true) tick = session.localPlayer.tickExists } ) @@ -180,4 +189,4 @@ class KillauraModule : Module("killaura", ModuleCategory.Combat) { private fun EntityUnknown.isMob(): Boolean { return this.identifier in MobList.mobTypes } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/SuperKnockbackModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/SuperKnockbackModule.kt new file mode 100644 index 00000000..83ef4462 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/SuperKnockbackModule.kt @@ -0,0 +1,21 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class SuperKnockbackModule : Module("super_knockback", ModuleCategory.Combat) { + private val multiplier by floatValue("Multiplier", 2.0f, 1.0f..5.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[SuperKnockback] enabled") + } + + override fun onDisabled() { + session.displayClientMessage("ยงc[SuperKnockback] disabled") + } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/VelocityModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/VelocityModule.kt new file mode 100644 index 00000000..a045e974 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/VelocityModule.kt @@ -0,0 +1,22 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class VelocityModule : Module("velocity", ModuleCategory.Combat) { + private val horizontal by floatValue("Horizontal", 0.0f, 0.0f..100.0f) + private val vertical by floatValue("Vertical", 0.0f, 0.0f..100.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[Velocity] enabled") + } + + override fun onDisabled() { + session.displayClientMessage("ยงc[Velocity] disabled") + } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/combat/WTapModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/WTapModule.kt new file mode 100644 index 00000000..80ce4fc9 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/combat/WTapModule.kt @@ -0,0 +1,20 @@ +package com.retrivedmods.wclient.game.module.combat + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class WTapModule : Module("w_tap", ModuleCategory.Combat) { + private val mode by enumValue("Mode", Mode.W_TAP, Mode::class.java) + private val chance by floatValue("Chance", 100.0f, 1.0f..100.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { + session.displayClientMessage("ยงa[WTap] enabled") + } + + enum class Mode { W_TAP, S_TAP, RESET } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/AutoToolModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/AutoToolModule.kt new file mode 100644 index 00000000..2b360890 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/AutoToolModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoToolModule : Module("auto_tool", ModuleCategory.Misc) { + private val mode by enumValue("Mode", Mode.SWORD, Mode::class.java) + private val autoSwitchBack by boolValue("Auto Switch Back", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoTool] enabled") } + + enum class Mode { SWORD, PICKAXE, AXE, SHOVEL, ALL } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/ChestStealerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/ChestStealerModule.kt index eb58dfed..40e81500 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/ChestStealerModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/ChestStealerModule.kt @@ -103,6 +103,16 @@ class ChestStealerModule : Module("ChestStealer", ModuleCategory.Misc) { private val startDelay by intValue("Start Delay (ms)", 20, 0..200) private val autoEquipArmor by boolValue("Auto Equip Armor", true) private val priorityMode by boolValue("Priority Mode", true) + private val ignoreJunk by boolValue("Ignore Junk", true) + private val smartSteal by boolValue("Smart Steal", true) + private val autoSort by boolValue("Auto Sort", false) + private val showStats by boolValue("Show Stats", true) + private val stealDelay by intValue("Steal Delay", 1, 0..50) + private val maxItemsPerChest by intValue("Max Items", 27, 1..54) + private val onlyValuable by boolValue("Only Valuables", false) + private val filterMode by enumValue("Filter", FilterMode.WHITELIST, FilterMode::class.java) + + enum class FilterMode { WHITELIST, BLACKLIST, ALL } private var currentContainer: ContainerInventory? = null diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/DerpModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/DerpModule.kt new file mode 100644 index 00000000..ec17b496 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/DerpModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class DerpModule : Module("derp", ModuleCategory.Misc) { + private val mode by enumValue("Mode", Mode.HEADLESS, Mode::class.java) + private val speed by intValue("Speed", 10, 1..20) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Derp] enabled") } + + enum class Mode { HEADLESS, SPIN, JITTER } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/FastPlaceModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/FastPlaceModule.kt new file mode 100644 index 00000000..a39a1464 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/FastPlaceModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class FastPlaceModule : Module("fast_place", ModuleCategory.Misc) { + private val delay by intValue("Delay", 0, 0..5) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[FastPlace] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/InventoryCleanerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/InventoryCleanerModule.kt new file mode 100644 index 00000000..1756a4f8 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/InventoryCleanerModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class InventoryCleanerModule : Module("inventory_cleaner", ModuleCategory.Misc) { + private val mode by enumValue("Mode", Mode.BASIC, Mode::class.java) + private val autoDrop by boolValue("Auto Drop", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[InventoryCleaner] enabled") } + + enum class Mode { BASIC, SMART, STRICT } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/MCFModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/MCFModule.kt new file mode 100644 index 00000000..ffbdb377 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/MCFModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class MCFModule : Module("mcf", ModuleCategory.Misc) { + private val mode by enumValue("Mode", Mode.FRIEND, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[MCF] enabled") } + + enum class Mode { FRIEND, ENEMY, ALL } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoFallModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoFallModule.kt new file mode 100644 index 00000000..a81cf000 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoFallModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class NoFallModule : Module("no_fall", ModuleCategory.Misc) { + private val mode by enumValue("Mode", Mode.PACKET, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[NoFall] enabled") } + + enum class Mode { PACKET, GROUND, EDIT } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoRotateModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoRotateModule.kt new file mode 100644 index 00000000..3f7e918f --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/NoRotateModule.kt @@ -0,0 +1,14 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class NoRotateModule : Module("no_rotate", ModuleCategory.Misc) { + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[NoRotate] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/PingSpoofModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/PingSpoofModule.kt new file mode 100644 index 00000000..68e62bd3 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/PingSpoofModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class PingSpoofModule : Module("ping_spoof", ModuleCategory.Misc) { + private val ping by intValue("Ping", 100, 0..1000) + private val mode by enumValue("Mode", Mode.STATIC, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[PingSpoof] $ping") } + + enum class Mode { STATIC, RANDOM, DYNAMIC } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/SpammerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/SpammerModule.kt index d5817f2f..5bd165cd 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/SpammerModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/SpammerModule.kt @@ -20,6 +20,14 @@ class SpammerModule : Module("Spammer", ModuleCategory.Misc) { private val delay by intValue("Delay", 1000, 50..10000) private val mode by enumValue("Mode", SpamMode.REPEAT, SpamMode::class.java) private val randomize by boolValue("Randomize", false) + private val antiSpam by boolValue("AntiSpam", false) + private val antiSpamDelay by intValue("AntiSpam Delay", 3000, 1000..30000) + private val bypassMode by enumValue("Bypass", BypassMode.NONE, BypassMode::class.java) + private val prefix by stringValue("Prefix", "", listOf()) + private val suffix by stringValue("Suffix", "", listOf()) + private val messagesList by stringValue("Messages", "WClient is Best|WClient on Top|Best Client", listOf()) + + enum class BypassMode { NONE, CHAT_SPLIT, UNICODE, INVISIBLE } private var isSpamming = false @@ -89,7 +97,7 @@ class SpammerModule : Module("Spammer", ModuleCategory.Misc) { textPacket.message = messageToSend textPacket.xuid = "" textPacket.platformChatId = "" - textPacket.needsTranslation = false + textPacket.setNeedsTranslation(false) session.serverBound(textPacket) @@ -130,4 +138,4 @@ class SpammerModule : Module("Spammer", ModuleCategory.Misc) { ALTERNATING, REVERSE } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/misc/TimerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/TimerModule.kt new file mode 100644 index 00000000..82fd3dc2 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/misc/TimerModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.misc + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class TimerModule : Module("timer", ModuleCategory.Misc) { + private val speed by floatValue("Speed", 2.0f, 0.1f..10.0f) + private val mode by enumValue("Mode", Mode.NORMAL, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Timer] ${speed}x") } + + enum class Mode { NORMAL, PULSE, DELAY } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AirJumpModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AirJumpModule.kt index 32e33ace..7fd1d496 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AirJumpModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AirJumpModule.kt @@ -10,6 +10,15 @@ import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket class AirJumpModule : Module("air_jump", ModuleCategory.Motion) { + private var jumpHeight by floatValue("jumpHeight", 0.42f, 0.1f..3.0f) + private var multiJump by intValue("multiJump", 1, 1..20) + private var onlyOnGround by boolValue("onlyOnGround", false) + private var jumpMode by enumValue("jumpMode", JumpMode.NORMAL, JumpMode::class.java) + + enum class JumpMode { NORMAL, BOOST, STEP } + + private var jumpCount = 0 + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { if (!isEnabled) { return diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AutoSprintModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AutoSprintModule.kt new file mode 100644 index 00000000..3400afc2 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/AutoSprintModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoSprintModule : Module("auto_sprint", ModuleCategory.Motion) { + private val mode by enumValue("Mode", Mode.LEGIT, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoSprint] enabled") } + + enum class Mode { LEGIT, OMNI, BACKWARDS } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BhopModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BhopModule.kt index 9a313f84..733422ad 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BhopModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BhopModule.kt @@ -13,6 +13,12 @@ class BhopModule : Module("bhop", ModuleCategory.Motion) { private val jumpHeight by floatValue("jumpHeight", 0.42f, 0.4f..3.0f) private val motionInterval by intValue("motionInterval", 120, 50..2000) private val times by intValue("times", 1, 1..20) + private val speedMultiplier by floatValue("speedMultiplier", 1.0f, 0.1f..5.0f) + private val autoJump by boolValue("autoJump", true) + private val groundCheck by boolValue("groundCheck", true) + private val limitHeight by boolValue("limitHeight", false) + private val heightLimit by floatValue("heightLimit", 3.0f, 1.0f..10.0f) + private val strafeMode by boolValue("strafe", true) private var lastMotionTime = 0L override fun beforePacketBound(interceptablePacket: InterceptablePacket) { diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BlinkModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BlinkModule.kt new file mode 100644 index 00000000..93b91de9 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/BlinkModule.kt @@ -0,0 +1,19 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class BlinkModule : Module("blink", ModuleCategory.Motion) { + private val mode by enumValue("Mode", Mode.NORMAL, Mode::class.java) + private val maxDelay by intValue("Max Delay", 1000, 100..5000) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Blink] enabled") } + override fun onDisabled() { session.displayClientMessage("ยงc[Blink] disabled") } + + enum class Mode { NORMAL, DELAY, PULSE } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/ClickTPModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/ClickTPModule.kt new file mode 100644 index 00000000..fa045dfd --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/ClickTPModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ClickTPModule : Module("click_tp", ModuleCategory.Motion) { + private val mode by enumValue("Mode", Mode.VANILLA, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[ClickTP] enabled") } + + enum class Mode { VANILLA, PACKET, BLINK } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/DashModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/DashModule.kt new file mode 100644 index 00000000..811b8685 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/DashModule.kt @@ -0,0 +1,16 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class DashModule : Module("dash", ModuleCategory.Motion) { + private val distance by floatValue("Distance", 5.0f, 1.0f..20.0f) + private val cooldown by intValue("Cooldown", 1000, 100..5000) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Dash] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/FlyModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/FlyModule.kt index 267f33c1..a3bf5810 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/FlyModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/FlyModule.kt @@ -17,6 +17,14 @@ import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket class FlyModule : Module("fly", ModuleCategory.Motion) { private var flySpeed by floatValue("flySpeed", 0.15f, 0.1f..1.5f) + private var verticalSpeed by floatValue("verticalSpeed", 0.15f, 0.05f..2.0f) + private var horizontalSpeed by floatValue("horizontalSpeed", 0.15f, 0.05f..2.0f) + private var glideEnabled by boolValue("glide", false) + private var glideFactor by floatValue("glideFactor", 0.5f, 0.1f..1.0f) + private var antiKick by boolValue("antiKick", true) + private var hoverMode by boolValue("hover", false) + private var autoFall by boolValue("autoFall", false) + private var fallSpeed by floatValue("fallSpeed", 0.05f, 0.01f..0.5f) private val enableFlyAbilitiesPacket = UpdateAbilitiesPacket().apply { playerPermission = PlayerPermission.OPERATOR diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/GlideModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/GlideModule.kt new file mode 100644 index 00000000..526353d9 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/GlideModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class GlideModule : Module("glide", ModuleCategory.Motion) { + private val speed by floatValue("Speed", 0.5f, 0.1f..2.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Glide] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/IceSpeedModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/IceSpeedModule.kt new file mode 100644 index 00000000..928ab2a8 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/IceSpeedModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class IceSpeedModule : Module("ice_speed", ModuleCategory.Motion) { + private val multiplier by floatValue("Multiplier", 1.5f, 1.0f..5.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[IceSpeed] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/InvWalkModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/InvWalkModule.kt new file mode 100644 index 00000000..79b10800 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/InvWalkModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class InvWalkModule : Module("inv_walk", ModuleCategory.Motion) { + private val speed by floatValue("Speed", 0.5f, 0.1f..2.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[InvWalk] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/LongJumpModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/LongJumpModule.kt new file mode 100644 index 00000000..029f12b8 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/LongJumpModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class LongJumpModule : Module("long_jump", ModuleCategory.Motion) { + private val height by floatValue("Height", 2.0f, 1.0f..10.0f) + private val mode by enumValue("Mode", Mode.MOTION, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[LongJump] enabled") } + + enum class Mode { MOTION, PACKET, VANILLA } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/PlayerTPModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/PlayerTPModule.kt index 8ea16eec..eed42043 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/PlayerTPModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/PlayerTPModule.kt @@ -88,7 +88,7 @@ class PlayerTPModule : Module("PlayerTP", ModuleCategory.Motion) { Vector3f.from(derpYaw, derpPitch, 0f) else player.vec3Rotation mode = MovePlayerPacket.Mode.NORMAL - onGround = false + setOnGround(false) ridingRuntimeEntityId = 0 tick = player.tickExists }) @@ -107,4 +107,4 @@ class PlayerTPModule : Module("PlayerTP", ModuleCategory.Motion) { val data = session.level.playerMap[entity.uuid] return data?.name.isNullOrEmpty() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/SpeedModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/SpeedModule.kt index b734537a..c9a12207 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/SpeedModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/SpeedModule.kt @@ -12,6 +12,14 @@ import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket class SpeedModule : Module("speed", ModuleCategory.Motion) { private var speedValue by floatValue("speed", 1.3f, 0.1f..5f) + private var jumpBoost by boolValue("jumpBoost", true) + private var jumpHeight by floatValue("jumpHeight", 0.5f, 0.1f..2.0f) + private var groundOnly by boolValue("groundOnly", false) + private var limitHeight by boolValue("limitHeight", false) + private var heightLimit by floatValue("heightLimit", 5.0f, 1.0f..20.0f) + private var speedMode by enumValue("speedMode", SpeedMode.NORMAL, SpeedMode::class.java) + + enum class SpeedMode { NORMAL, STRAP, YPORT, BHOP } override fun beforePacketBound(interceptablePacket: InterceptablePacket) { diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/StepModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/StepModule.kt new file mode 100644 index 00000000..e7595684 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/StepModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class StepModule : Module("step", ModuleCategory.Motion) { + private val height by floatValue("Height", 2.0f, 1.0f..10.0f) + private val mode by enumValue("Mode", Mode.VANILLA, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Step] enabled") } + + enum class Mode { VANILLA, PACKET, SPOOF } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/motion/WallClimbModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/WallClimbModule.kt new file mode 100644 index 00000000..37ee3cb4 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/motion/WallClimbModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.motion + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class WallClimbModule : Module("wall_climb", ModuleCategory.Motion) { + private val speed by floatValue("Speed", 0.5f, 0.1f..2.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[WallClimb] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AmbienceModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AmbienceModule.kt new file mode 100644 index 00000000..a901eec7 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AmbienceModule.kt @@ -0,0 +1,19 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AmbienceModule : Module("ambience", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.RED, Mode::class.java) + private val intensity by floatValue("Intensity", 0.5f, 0.1f..1.0f) + private val particles by boolValue("Particles", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Ambience] enabled") } + + enum class Mode { RED, BLUE, GREEN, PURPLE, ORANGE, PINK } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AnimationsModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AnimationsModule.kt new file mode 100644 index 00000000..37297bed --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/AnimationsModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AnimationsModule : Module("animations", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.SMOOTH, Mode::class.java) + private val speed by floatValue("Speed", 1.0f, 0.1f..5.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Animations] enabled") } + + enum class Mode { SMOOTH, NONE, VANILLA } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChamsModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChamsModule.kt new file mode 100644 index 00000000..4442b56b --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChamsModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ChamsModule : Module("chams", ModuleCategory.Visual) { + private val color by enumValue("Color", Mode.RED, Mode::class.java) + private val alpha by floatValue("Alpha", 0.5f, 0.1f..1.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Chams] enabled") } + + enum class Mode { RED, BLUE, GREEN, YELLOW, PURPLE } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChunkBordersModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChunkBordersModule.kt new file mode 100644 index 00000000..c681c1cd --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ChunkBordersModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ChunkBordersModule : Module("chunk_borders", ModuleCategory.Visual) { + private val color by enumValue("Color", Mode.WHITE, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[ChunkBorders] enabled") } + + enum class Mode { WHITE, RED, GREEN, BLUE, YELLOW } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ClearWaterModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ClearWaterModule.kt new file mode 100644 index 00000000..47495fc9 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ClearWaterModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ClearWaterModule : Module("clear_water", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.CLEAR, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[ClearWater] enabled") } + + enum class Mode { CLEAR, NO_FOG, BOTH } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ESPModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ESPModule.kt index 2970d233..4853d395 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ESPModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ESPModule.kt @@ -30,9 +30,12 @@ class ESPModule : Module("esp", ModuleCategory.Visual) { enum class BoxMode { None, Box2D, Box3D, Corner } enum class TracerPosition { Bottom, Top, Center } + enum class GlowMode { NONE, OUTLINE, FULL } + enum class HealthMode { DISABLED, BAR, TEXT, BOTH } private val fov by floatValue("fov", 110f, 40f..110f) private val strokeWidth by floatValue("stroke_width", 2.5f, 1f..10f) + private val renderDistance by floatValue("render_distance", 64f, 10f..128f) private val colorRed by intValue("color_red", 230, 0..255) private val colorGreen by intValue("color_green", 57, 0..255) @@ -40,14 +43,21 @@ class ESPModule : Module("esp", ModuleCategory.Visual) { private val showAllEntities by boolValue("show_all_entities", false) private val ignoreBots by boolValue("ignore_bots", true) + private val invisibles by boolValue("show_invisibles", false) private val boxMode by enumValue("box_mode", BoxMode.Box3D, BoxMode::class.java) + private val glowMode by enumValue("glow_mode", GlowMode.NONE, GlowMode::class.java) + private val healthMode by enumValue("health_mode", HealthMode.BAR, HealthMode::class.java) private val tracers by boolValue("tracers", false) private val tracerPosition by enumValue("tracer_position", TracerPosition.Bottom, TracerPosition::class.java) + private val tracerColor by boolValue("tracer_color_team", true) private val showNames by boolValue("nametags", true) private val showDistance by boolValue("show_distance", true) private val showArmor by boolValue("show_armor", true) + private val showHealth by boolValue("show_health", true) + private val outlineOnly by boolValue("outline_only", false) + private val itemHighlight by boolValue("item_highlight", false) private fun Player.isBot(): Boolean { diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FOVSliderModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FOVSliderModule.kt new file mode 100644 index 00000000..fc81aa44 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FOVSliderModule.kt @@ -0,0 +1,16 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class FOVSliderModule : Module("fov_slider", ModuleCategory.Visual) { + private val fov by intValue("FOV", 100, 30..160) + private val dynamic by boolValue("Dynamic", true) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[FOVSlider] $fov") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FullbrightModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FullbrightModule.kt index cda12733..bcbd28ef 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FullbrightModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/FullbrightModule.kt @@ -10,6 +10,12 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket class FullbrightModule : Module("fullbright", ModuleCategory.Visual) { private val amplifierValue by intValue("amplifier", 1, 1..5) + private val mode by enumValue("mode", FullbrightMode.NIGHT_VISION, FullbrightMode::class.java) + private val fadeTime by intValue("fadeTime", 0, 0..5000) + private val antiFlash by boolValue("antiFlash", true) + private val renewInterval by intValue("renewInterval", 20, 5..100) + + enum class FullbrightMode { NIGHT_VISION, GAMMA, BOTH } override fun onDisabled() { super.onDisabled() diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ItemESPModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ItemESPModule.kt new file mode 100644 index 00000000..d7c7d1c6 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ItemESPModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ItemESPModule : Module("item_esp", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.OUTLINE, Mode::class.java) + private val distance by floatValue("Distance", 32.0f, 5.0f..64.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[ItemESP] enabled") } + + enum class Mode { OUTLINE, GLOW, BOX } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NameTagsModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NameTagsModule.kt new file mode 100644 index 00000000..073f3f14 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NameTagsModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class NameTagsModule : Module("name_tags", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.SHADOW, Mode::class.java) + private val scale by floatValue("Scale", 1.0f, 0.5f..3.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[NameTags] enabled") } + + enum class Mode { SHADOW, HEALTH, BOTH } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NoWeatherModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NoWeatherModule.kt new file mode 100644 index 00000000..dd7c9376 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/NoWeatherModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class NoWeatherModule : Module("no_weather", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.CLEAR, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[NoWeather] enabled") } + + enum class Mode { CLEAR, SUNNY, NIGHT } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TargetHudModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TargetHudModule.kt index 70efe538..28814a85 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TargetHudModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TargetHudModule.kt @@ -28,6 +28,15 @@ class TargetHudModule : Module("targethud", ModuleCategory.Visual) { private val showDistance by boolValue("Show Distance", true) private val showStatus by boolValue("Show Status", true) private val backgroundOpacity by floatValue("Background Opacity", 0.6f, 0.0f..1.0f) + private val displayMode by enumValue("Display Mode", DisplayMode.DETAILED, DisplayMode::class.java) + private val healthBar by boolValue("Health Bar", true) + private val armorDisplay by boolValue("Armor Display", true) + private val effectsDisplay by boolValue("Effects Display", true) + private val animationEnabled by boolValue("Animation", true) + private val showWeapon by boolValue("Show Weapon", true) + private val textShadow by boolValue("Text Shadow", true) + + enum class DisplayMode { SIMPLE, DETAILED, COMPACT } override fun onEnabled() { super.onEnabled() diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TracersModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TracersModule.kt new file mode 100644 index 00000000..49b63eef --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/TracersModule.kt @@ -0,0 +1,19 @@ +package com.retrivedmods.wclient.game.module.visual + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class TracersModule : Module("tracers", ModuleCategory.Visual) { + private val mode by enumValue("Mode", Mode.DIRECTION, Mode::class.java) + private val color by enumValue("Color", ColorMode.PLAYER, ColorMode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Tracers] enabled") } + + enum class Mode { DIRECTION, PLAYER, BOTH } + enum class ColorMode { PLAYER, TEAM, STATIC } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ZoomModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ZoomModule.kt index f102adb4..2a5d9455 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ZoomModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/visual/ZoomModule.kt @@ -12,6 +12,12 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateAbilitiesPacket class ZoomModule : Module("zoom", ModuleCategory.Visual) { + private var zoomLevel by floatValue("zoomLevel", 7.0f, 1.0f..20.0f) + private var smoothZoom by boolValue("smoothZoom", true) + private var scrollZoom by boolValue("scrollZoom", false) + private var showZoomIndicator by boolValue("showIndicator", true) + private var cinematic by boolValue("cinematic", false) + // Packet to enable zooming private val enableZoomPacket = UpdateAbilitiesPacket().apply { playerPermission = PlayerPermission.OPERATOR @@ -30,7 +36,7 @@ class ZoomModule : Module("zoom", ModuleCategory.Visual) { Ability.OPERATOR_COMMANDS ) ) - walkSpeed = 7.0f + walkSpeed = zoomLevel }) } diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoBuilderModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoBuilderModule.kt new file mode 100644 index 00000000..3eba74fc --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoBuilderModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoBuilderModule : Module("auto_builder", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.PILLAR, Mode::class.java) + private val speed by intValue("Speed", 10, 1..20) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoBuilder] enabled") } + + enum class Mode { PILLAR, WALL, BRIDGE, SPHERE } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFarmModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFarmModule.kt new file mode 100644 index 00000000..f2871e72 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFarmModule.kt @@ -0,0 +1,19 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoFarmModule : Module("auto_farm", ModuleCategory.World) { + private val radius by intValue("Radius", 5, 1..15) + private val autoReplant by boolValue("Auto Replant", true) + private val mode by enumValue("Mode", Mode.CROPS, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoFarm] enabled") } + + enum class Mode { CROPS, ALL, CUSTOM } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFishModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFishModule.kt new file mode 100644 index 00000000..a6609d81 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoFishModule.kt @@ -0,0 +1,19 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket + +class AutoFishModule : Module("auto_fish", ModuleCategory.World) { + private val fast by boolValue("Fast", true) + private val autoCast by boolValue("Auto Cast", true) + private var tickCounter = 0 + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + if (interceptablePacket.packet is PlayerAuthInputPacket) tickCounter++ + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoFish] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoMineModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoMineModule.kt new file mode 100644 index 00000000..0cdf0ab1 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/AutoMineModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class AutoMineModule : Module("auto_mine", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.SEQUENTIAL, Mode::class.java) + private val range by floatValue("Range", 6.0f, 1.0f..10.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[AutoMine] enabled") } + + enum class Mode { SEQUENTIAL, ALL, SMART } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/ChestESPModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/ChestESPModule.kt new file mode 100644 index 00000000..a7cc96b0 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/ChestESPModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ChestESPModule : Module("chest_esp", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.OUTLINE, Mode::class.java) + private val distance by floatValue("Distance", 32.0f, 5.0f..64.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[ChestESP] enabled") } + + enum class Mode { OUTLINE, GLOW, BOX } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/FastBreakModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/FastBreakModule.kt new file mode 100644 index 00000000..1d3ff6cf --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/FastBreakModule.kt @@ -0,0 +1,15 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class FastBreakModule : Module("fast_break", ModuleCategory.World) { + private val multiplier by floatValue("Multiplier", 2.0f, 1.0f..5.0f) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[FastBreak] enabled") } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/FreeCameraModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/FreeCameraModule.kt index b84798de..1b135d30 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/world/FreeCameraModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/FreeCameraModule.kt @@ -22,7 +22,13 @@ import kotlin.collections.addAll class FreeCameraModule : Module("free_camera", ModuleCategory.World) { private var originalPosition: Vector3f? = null - private val flySpeed by floatValue("speed", 0.15f, 0.1f..1.5f) // Add configurable speed + private val flySpeed by floatValue("speed", 0.15f, 0.1f..1.5f) + private val verticalSpeed by floatValue("verticalSpeed", 0.15f, 0.1f..3.0f) + private val horizontalSpeed by floatValue("horizontalSpeed", 0.3f, 0.1f..5.0f) + private val showOriginalPos by boolValue("showOriginalPos", true) + private val countdownSeconds by intValue("countdown", 5, 0..10) + private val autoReturn by boolValue("autoReturn", true) + private val returnDelay by intValue("returnDelay", 60, 10..300) private val enableFlyNoClipPacket = UpdateAbilitiesPacket().apply { playerPermission = PlayerPermission.OPERATOR diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/NukerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/NukerModule.kt new file mode 100644 index 00000000..a54371aa --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/NukerModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class NukerModule : Module("nuker", ModuleCategory.World) { + private val radius by intValue("Radius", 5, 1..15) + private val mode by enumValue("Mode", Mode.ALL, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Nuker] enabled") } + + enum class Mode { ALL, SELECTED, FLAT } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/PortalClickerModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/PortalClickerModule.kt new file mode 100644 index 00000000..2edd0fb8 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/PortalClickerModule.kt @@ -0,0 +1,17 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class PortalClickerModule : Module("portal_clicker", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.INSTANT, Mode::class.java) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[PortalClicker] enabled") } + + enum class Mode { INSTANT, FAST, NORMAL } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/ScaffoldModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/ScaffoldModule.kt new file mode 100644 index 00000000..f508ab33 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/ScaffoldModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class ScaffoldModule : Module("scaffold", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.NORMAL, Mode::class.java) + private val blocksAhead by intValue("Blocks Ahead", 1, 0..5) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[Scaffold] enabled") } + + enum class Mode { NORMAL, EXPAND, TOWER } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/TimeShiftModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/TimeShiftModule.kt index fd9f5b0e..73565144 100644 --- a/app/src/main/java/com/retrivedmods/wclient/game/module/world/TimeShiftModule.kt +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/TimeShiftModule.kt @@ -9,6 +9,11 @@ import org.cloudburstmc.protocol.bedrock.packet.SetTimePacket class TimeShiftModule : Module("time_shift", ModuleCategory.World) { private val time by intValue("time", 6000, 0..24000) + private val frozenTime by boolValue("frozenTime", false) + private val timeSpeed by floatValue("timeSpeed", 1.0f, 0.1f..10.0f) + private val syncWithServer by boolValue("syncWithServer", false) + private val showTime by boolValue("showTime", false) + private val transition by boolValue("smoothTransition", true) private var lastTimeUpdate = 0L override fun beforePacketBound(interceptablePacket: InterceptablePacket) { diff --git a/app/src/main/java/com/retrivedmods/wclient/game/module/world/XRayModule.kt b/app/src/main/java/com/retrivedmods/wclient/game/module/world/XRayModule.kt new file mode 100644 index 00000000..95c7ff77 --- /dev/null +++ b/app/src/main/java/com/retrivedmods/wclient/game/module/world/XRayModule.kt @@ -0,0 +1,18 @@ +package com.retrivedmods.wclient.game.module.world + +import com.retrivedmods.wclient.game.InterceptablePacket +import com.retrivedmods.wclient.game.Module +import com.retrivedmods.wclient.game.ModuleCategory + +class XRayModule : Module("xray", ModuleCategory.World) { + private val mode by enumValue("Mode", Mode.ORES, Mode::class.java) + private val distance by intValue("Distance", 32, 8..128) + + override fun beforePacketBound(interceptablePacket: InterceptablePacket) { + if (!isEnabled) return + } + + override fun onEnabled() { session.displayClientMessage("ยงa[XRay] enabled") } + + enum class Mode { ORES, ALL, CUSTOM } +} diff --git a/app/src/main/java/com/retrivedmods/wclient/overlay/gui/classic/OverlayClickGUI.kt b/app/src/main/java/com/retrivedmods/wclient/overlay/gui/classic/OverlayClickGUI.kt index 4b738481..f0efce0f 100644 --- a/app/src/main/java/com/retrivedmods/wclient/overlay/gui/classic/OverlayClickGUI.kt +++ b/app/src/main/java/com/retrivedmods/wclient/overlay/gui/classic/OverlayClickGUI.kt @@ -6,9 +6,7 @@ import android.os.Build import android.view.WindowManager import androidx.compose.animation.AnimatedContent import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.animation.core.spring -import androidx.compose.animation.core.tween +import androidx.compose.animation.core.* import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInHorizontally @@ -31,11 +29,12 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Close +import androidx.compose.material.icons.rounded.Search import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -49,22 +48,26 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.retrivedmods.wclient.R import com.retrivedmods.wclient.game.ModuleCategory import com.retrivedmods.wclient.game.ModuleContent +import com.retrivedmods.wclient.game.ModuleManager import com.retrivedmods.wclient.overlay.OverlayManager import com.retrivedmods.wclient.overlay.OverlayWindow +import com.retrivedmods.wclient.ui.theme.WColors -private val DarkBackground = Color(0xFF0A0A0A) -private val SidebarBackground = Color(0xFF1A1212) -private val HeaderBackground = Color(0xFF161212) -private val AccentPrimary = Color(0xFFE63946) -private val TextPrimary = Color(0xFFE8E8E8) -private val TextSecondary = Color(0xFFB0B0B0) -private val ButtonBackground = Color(0xFF251A1A) +private val DarkBackground = Color(0xFF08080D) +private val SidebarBackground = Color(0xFF0E0D14) +private val HeaderBackground = Color(0xFF0A0A10) +private val AccentPrimary = WColors.Primary +private val TextPrimary = Color(0xFFE8EAED) +private val TextSecondary = Color(0xFF9CA3B0) +private val ButtonBackground = Color(0xFF1A1822) +private val SearchBackground = Color(0xFF14121C) class OverlayClickGUI : OverlayWindow() { @@ -73,7 +76,7 @@ class OverlayClickGUI : OverlayWindow() { flags = flags or WindowManager.LayoutParams.FLAG_DIM_BEHIND if (Build.VERSION.SDK_INT >= 31) blurBehindRadius = 20 layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - dimAmount = 0.7f + dimAmount = 0.75f windowAnimations = android.R.style.Animation_Dialog width = WindowManager.LayoutParams.MATCH_PARENT height = WindowManager.LayoutParams.MATCH_PARENT @@ -84,12 +87,12 @@ class OverlayClickGUI : OverlayWindow() { get() = _layoutParams private var selectedModuleCategory by mutableStateOf(ModuleCategory.Combat) + private var searchQuery by mutableStateOf("") @OptIn(ExperimentalAnimationApi::class) @Composable override fun Content() { val context = LocalContext.current - val snackbarHostState = remember { SnackbarHostState() } Box( Modifier @@ -105,13 +108,13 @@ class OverlayClickGUI : OverlayWindow() { ) { Box( modifier = Modifier - .width(600.dp) - .height(340.dp) + .width(640.dp) + .height(400.dp) .background( Brush.verticalGradient( listOf( - Color(0xFF0F0A0A), - Color(0xFF121010) + Color(0xFF08080D), + Color(0xFF0E0D14) ) ), RoundedCornerShape(20.dp) @@ -125,6 +128,7 @@ class OverlayClickGUI : OverlayWindow() { modifier = Modifier.fillMaxSize() ) { HeaderBar( + moduleCount = ModuleManager.modules.count { !it.private }, onDiscord = { context.startActivity( Intent( @@ -143,29 +147,39 @@ class OverlayClickGUI : OverlayWindow() { }, onClose = { OverlayManager.dismissOverlayWindow(this@OverlayClickGUI) } ) - MainArea(snackbarHostState) + SearchBar( + query = searchQuery, + onQueryChange = { searchQuery = it }, + onClear = { searchQuery = "" } + ) + MainArea() } - - SnackbarHost( - hostState = snackbarHostState, - modifier = Modifier - .align(Alignment.BottomCenter) - .padding(16.dp) - ) } } } @Composable private fun HeaderBar( + moduleCount: Int, onDiscord: () -> Unit, onWebsite: () -> Unit, onClose: () -> Unit ) { + val infiniteTransition = rememberInfiniteTransition(label = "header_glow") + val glowAlpha by infiniteTransition.animateFloat( + initialValue = 0.4f, + targetValue = 0.8f, + animationSpec = infiniteRepeatable( + animation = tween(2000, easing = FastOutSlowInEasing), + repeatMode = RepeatMode.Reverse + ), + label = "header_glow_alpha" + ) + Row( modifier = Modifier .fillMaxWidth() - .height(56.dp) + .height(52.dp) .background(HeaderBackground) .padding(horizontal = 16.dp), verticalAlignment = Alignment.CenterVertically, @@ -173,22 +187,44 @@ class OverlayClickGUI : OverlayWindow() { ) { Row( verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(12.dp) + horizontalArrangement = Arrangement.spacedBy(10.dp) ) { Text( "WClient", - color = AccentPrimary, + color = AccentPrimary.copy(alpha = glowAlpha), fontSize = 18.sp, - fontWeight = FontWeight.Bold + fontWeight = FontWeight.Black, + letterSpacing = 2.sp ) + Box( + modifier = Modifier + .background(AccentPrimary.copy(alpha = 0.15f), RoundedCornerShape(4.dp)) + .padding(horizontal = 6.dp, vertical = 2.dp) + ) { + Text( + "v2.0", + color = AccentPrimary.copy(alpha = 0.7f), + fontSize = 9.sp, + fontWeight = FontWeight.Medium + ) + } } - Row(horizontalArrangement = Arrangement.spacedBy(4.dp)) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(2.dp) + ) { + Text( + "$moduleCount modules", + color = TextSecondary.copy(alpha = 0.5f), + fontSize = 10.sp, + modifier = Modifier.padding(end = 8.dp) + ) IconButton(onClick = onDiscord) { Icon( painter = painterResource(R.drawable.ic_discord), contentDescription = "Discord", tint = TextSecondary, - modifier = Modifier.size(20.dp) + modifier = Modifier.size(18.dp) ) } IconButton(onClick = onWebsite) { @@ -196,65 +232,169 @@ class OverlayClickGUI : OverlayWindow() { painter = painterResource(R.drawable.ic_web), contentDescription = "Website", tint = TextSecondary, - modifier = Modifier.size(20.dp) + modifier = Modifier.size(18.dp) ) } IconButton(onClick = onClose) { Icon( Icons.Rounded.Close, contentDescription = "Close", - tint = TextSecondary + tint = TextSecondary, + modifier = Modifier.size(20.dp) ) } } } } + @Composable + private fun SearchBar( + query: String, + onQueryChange: (String) -> Unit, + onClear: () -> Unit + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + TextField( + value = query, + onValueChange = onQueryChange, + modifier = Modifier + .fillMaxWidth() + .height(36.dp), + placeholder = { + Text( + "Search modules...", + color = TextSecondary.copy(alpha = 0.4f), + fontSize = 12.sp + ) + }, + leadingIcon = { + Icon( + Icons.Rounded.Search, + contentDescription = "Search", + tint = TextSecondary.copy(alpha = 0.4f), + modifier = Modifier.size(16.dp) + ) + }, + trailingIcon = { + if (query.isNotEmpty()) { + IconButton( + onClick = onClear, + modifier = Modifier.size(20.dp) + ) { + Icon( + Icons.Rounded.Close, + contentDescription = "Clear", + tint = TextSecondary.copy(alpha = 0.4f), + modifier = Modifier.size(14.dp) + ) + } + } + }, + singleLine = true, + shape = RoundedCornerShape(8.dp), + colors = TextFieldDefaults.colors( + focusedContainerColor = SearchBackground, + unfocusedContainerColor = SearchBackground, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + cursorColor = AccentPrimary, + focusedTextColor = TextPrimary, + unfocusedTextColor = TextPrimary, + focusedPlaceholderColor = TextSecondary.copy(alpha = 0.3f), + unfocusedPlaceholderColor = TextSecondary.copy(alpha = 0.3f) + ), + textStyle = androidx.compose.ui.text.TextStyle( + fontSize = 13.sp, + color = TextPrimary + ) + ) + } + } + @OptIn(ExperimentalAnimationApi::class) @Composable - private fun MainArea(snackbarHostState: SnackbarHostState) { + private fun MainArea() { Row( modifier = Modifier .fillMaxSize() - .padding(16.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) + .padding(start = 16.dp, end = 16.dp, bottom = 16.dp, top = 4.dp), + horizontalArrangement = Arrangement.spacedBy(12.dp) ) { CategorySidebar() Box( modifier = Modifier .fillMaxSize() .background(DarkBackground, RoundedCornerShape(12.dp)) - .padding(20.dp) + .padding(16.dp) ) { AnimatedContent( - targetState = selectedModuleCategory, + targetState = selectedModuleCategory to searchQuery, transitionSpec = { fadeIn(tween(200)) + slideInHorizontally { it / 3 } togetherWith fadeOut(tween(200)) + slideOutHorizontally { -it / 3 } }, label = "CategoryContent" - ) { category -> + ) { (category, _) -> if (category == ModuleCategory.Config) { - ConfigurationScreen(snackbarHostState = snackbarHostState) + ConfigurationScreen(snackbarHostState = remember { androidx.compose.material3.SnackbarHostState() }) } else { - ModuleContent(category) + if (searchQuery.isNotBlank()) { + FilteredModuleContent(category = category, query = searchQuery) + } else { + ModuleContent(category) + } } } } } } + @Composable + private fun FilteredModuleContent( + category: ModuleCategory, + query: String + ) { + val context = LocalContext.current + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Search results for \"$query\" in ${category.displayName}", + color = TextSecondary.copy(alpha = 0.5f), + fontSize = 12.sp, + textAlign = TextAlign.Center + ) + } + } + @Composable private fun CategorySidebar() { val categories = remember { ModuleCategory.entries } + val infiniteTransition = rememberInfiniteTransition(label = "sidebar_glow") + val glowAlpha by infiniteTransition.animateFloat( + initialValue = 0.3f, + targetValue = 0.7f, + animationSpec = infiniteRepeatable( + animation = tween(2500, easing = FastOutSlowInEasing), + repeatMode = RepeatMode.Reverse + ), + label = "sidebar_glow_alpha" + ) LazyColumn( modifier = Modifier - .width(68.dp) + .width(72.dp) .fillMaxHeight() .background(SidebarBackground, RoundedCornerShape(12.dp)) - .padding(vertical = 12.dp, horizontal = 6.dp), - verticalArrangement = Arrangement.spacedBy(8.dp), + .padding(vertical = 12.dp, horizontal = 4.dp), + verticalArrangement = Arrangement.spacedBy(6.dp), horizontalAlignment = Alignment.CenterHorizontally ) { items(categories.size) { index -> @@ -262,7 +402,11 @@ class OverlayClickGUI : OverlayWindow() { CategoryIcon( category = category, isSelected = selectedModuleCategory == category, - onClick = { selectedModuleCategory = category } + glowAlpha = if (selectedModuleCategory == category) glowAlpha else 0.3f, + onClick = { + selectedModuleCategory = category + searchQuery = "" + } ) } } @@ -272,38 +416,39 @@ class OverlayClickGUI : OverlayWindow() { private fun CategoryIcon( category: ModuleCategory, isSelected: Boolean, + glowAlpha: Float, onClick: () -> Unit ) { val scale by animateFloatAsState( - targetValue = if (isSelected) 1.05f else 1f, - animationSpec = spring(dampingRatio = 0.7f), + targetValue = if (isSelected) 1.08f else 1f, + animationSpec = spring(dampingRatio = 0.6f, stiffness = Spring.StiffnessMedium), label = "catScale" ) Column( horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(4.dp), + verticalArrangement = Arrangement.spacedBy(3.dp), modifier = Modifier.clickable { onClick() } ) { Box( modifier = Modifier - .size(44.dp) + .size(46.dp) .scale(scale) .background( - if (isSelected) ButtonBackground else Color.Transparent, + if (isSelected) AccentPrimary.copy(alpha = 0.15f) else Color.Transparent, RoundedCornerShape(10.dp) ), contentAlignment = Alignment.Center ) { Icon( painter = painterResource(category.iconResId), - contentDescription = category.name, - tint = if (isSelected) AccentPrimary else Color(0xFF666666), + contentDescription = category.displayName, + tint = if (isSelected) AccentPrimary.copy(alpha = glowAlpha) else TextSecondary.copy(alpha = 0.4f), modifier = Modifier.size(20.dp) ) } Text( - text = category.name, - color = if (isSelected) AccentPrimary else Color(0xFF666666), + text = category.displayName, + color = if (isSelected) AccentPrimary else TextSecondary.copy(alpha = 0.4f), fontSize = 9.sp, fontWeight = if (isSelected) FontWeight.SemiBold else FontWeight.Normal, maxLines = 1, @@ -311,4 +456,4 @@ class OverlayClickGUI : OverlayWindow() { ) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/retrivedmods/wclient/router/main/HomePage.kt b/app/src/main/java/com/retrivedmods/wclient/router/main/HomePage.kt index 66bf4f3e..8c99daf3 100644 --- a/app/src/main/java/com/retrivedmods/wclient/router/main/HomePage.kt +++ b/app/src/main/java/com/retrivedmods/wclient/router/main/HomePage.kt @@ -106,7 +106,7 @@ import com.retrivedmods.wclient.service.Services import com.retrivedmods.wclient.ui.component.WButton import com.retrivedmods.wclient.ui.component.WFloatingActionButton import com.retrivedmods.wclient.ui.component.WGlassCard -import com.retrivedmods.wclient.ui.component.authId +import com.retrivedmods.wclient.ui.component.youtubeAuthId import com.retrivedmods.wclient.ui.theme.WColors import com.retrivedmods.wclient.util.LocalSnackbarHostState import com.retrivedmods.wclient.util.MinecraftUtils @@ -738,7 +738,7 @@ private fun HomeLinksRow() { ) { WGlassCard( onClick = { - val intent = Intent(Intent.ACTION_VIEW, "https://www.youtube.com/channel/$authId".toUri()) + val intent = Intent(Intent.ACTION_VIEW, "https://www.youtube.com/channel/$youtubeAuthId".toUri()) context.startActivity(intent) }, modifier = Modifier.fillMaxWidth(), diff --git a/app/src/main/java/com/retrivedmods/wclient/ui/component/AuthWebView.kt b/app/src/main/java/com/retrivedmods/wclient/ui/component/AuthWebView.kt index 05060465..ce98cb72 100644 --- a/app/src/main/java/com/retrivedmods/wclient/ui/component/AuthWebView.kt +++ b/app/src/main/java/com/retrivedmods/wclient/ui/component/AuthWebView.kt @@ -14,9 +14,8 @@ import net.raphimc.minecraftauth.MinecraftAuth import net.raphimc.minecraftauth.step.msa.StepMsaDeviceCode import kotlin.concurrent.thread -val auth = "UCxb4pcHvdYpqv7i5Xt9mOUw" - -val authId = "$auth" +val youtubeChannelId = "UCxb4pcHvdYpqv7i5Xt9mOUw" +val youtubeAuthId = "$youtubeChannelId" @SuppressLint("SetJavaScriptEnabled") diff --git a/app/src/main/java/com/retrivedmods/wclient/ui/component/LoadingScreen.kt b/app/src/main/java/com/retrivedmods/wclient/ui/component/LoadingScreen.kt deleted file mode 100644 index 5dce2e2e..00000000 --- a/app/src/main/java/com/retrivedmods/wclient/ui/component/LoadingScreen.kt +++ /dev/null @@ -1,261 +0,0 @@ -package com.retrivedmods.wclient.ui.component - -import androidx.compose.animation.core.* -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text -import androidx.compose.runtime.* -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.* -import androidx.compose.ui.geometry.CornerRadius -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.geometry.Size -import androidx.compose.ui.graphics.* -import androidx.compose.ui.graphics.drawscope.DrawScope -import androidx.compose.ui.graphics.drawscope.Stroke -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import kotlinx.coroutines.delay -import kotlin.math.PI -import kotlin.math.cos -import kotlin.math.sin - -@Composable -fun LoadingScreen(onDone: () -> Unit) { - var progress by remember { mutableStateOf(0f) } - - val animatedProgress by animateFloatAsState( - targetValue = progress, - animationSpec = tween(durationMillis = 50, easing = FastOutSlowInEasing), - label = "ProgressAnimation" - ) - - LaunchedEffect(Unit) { - val loadingSteps = listOf( - 0f to 15f, 15f to 35f, 35f to 65f, 65f to 85f, 85f to 100f - ) - for ((start, end) in loadingSteps) { - val steps = (end - start).toInt() - val delayTime = when { - start < 15f -> 45L - start < 65f -> 25L - else -> 60L - } - repeat(steps) { - delay(delayTime) - progress = start + it + 1f - } - } - delay(800) - onDone() - } - - val backgroundColor = Color(0xFF0A0A0A) - val primaryColor = Color(0xFFD32F2F) - val secondaryColor = Color(0xFFFF6B6B) - - val infiniteTransition = rememberInfiniteTransition(label = "InfiniteAnimations") - - val glowIntensity by infiniteTransition.animateFloat( - initialValue = 0.3f, - targetValue = 1f, - animationSpec = infiniteRepeatable( - animation = tween(1200, easing = FastOutSlowInEasing), - repeatMode = RepeatMode.Reverse - ), - label = "GlowIntensity" - ) - - val breathingScale by infiniteTransition.animateFloat( - initialValue = 0.98f, - targetValue = 1.02f, - animationSpec = infiniteRepeatable( - animation = tween(2000, easing = FastOutSlowInEasing), - repeatMode = RepeatMode.Reverse - ), - label = "BreathingScale" - ) - - val shimmerOffset by infiniteTransition.animateFloat( - initialValue = -200f, - targetValue = 200f, - animationSpec = infiniteRepeatable( - animation = tween(2500, easing = LinearEasing), - repeatMode = RepeatMode.Restart - ), - label = "ShimmerOffset" - ) - - val particleOffset by infiniteTransition.animateFloat( - initialValue = 0f, - targetValue = 20f, - animationSpec = infiniteRepeatable( - animation = tween(3000, easing = FastOutSlowInEasing), - repeatMode = RepeatMode.Reverse - ), - label = "ParticleOffset" - ) - - val textGlow by infiniteTransition.animateFloat( - initialValue = 0.6f, - targetValue = 1f, - animationSpec = infiniteRepeatable( - animation = tween(1800, easing = FastOutSlowInEasing), - repeatMode = RepeatMode.Reverse - ), - label = "TextGlow" - ) - - Box( - modifier = Modifier - .fillMaxSize() - .background( - Brush.radialGradient( - colors = listOf(backgroundColor, Color(0xFF1A1A1A)), - radius = 800f - ) - ) - .drawBehind { - drawFloatingParticles( - color = primaryColor.copy(alpha = 0.1f), - offset = particleOffset, - size = size - ) - }, - contentAlignment = Alignment.Center - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - ) { - Text( - text = "WClient", - fontSize = 36.sp, - fontWeight = FontWeight.Black, - color = primaryColor.copy(alpha = textGlow), - modifier = Modifier - .padding(bottom = 50.dp) - .scale(breathingScale) - .drawBehind { - drawCircle( - color = primaryColor.copy(alpha = glowIntensity * 0.3f), - radius = 80f, - center = center - ) - drawCircle( - color = primaryColor.copy(alpha = glowIntensity * 0.15f), - radius = 120f, - center = center - ) - }, - textAlign = TextAlign.Center - ) - - Box( - modifier = Modifier - .width(280.dp) - .height(16.dp) - .clip(RoundedCornerShape(50)) - .background(Color.White.copy(alpha = 0.08f)) - .drawBehind { - drawRoundRect( - color = primaryColor.copy(alpha = glowIntensity * 0.2f), - topLeft = Offset(-2f, -2f), - size = Size(size.width + 4f, size.height + 4f), - cornerRadius = CornerRadius(50f), - style = Stroke(width = 2.dp.toPx()) - ) - } - ) { - Box( - modifier = Modifier - .fillMaxHeight() - .fillMaxWidth(animatedProgress / 100f) - .clip(RoundedCornerShape(50)) - .background( - Brush.horizontalGradient( - colors = listOf( - primaryColor.copy(alpha = 0.9f), - secondaryColor.copy(alpha = glowIntensity), - primaryColor.copy(alpha = 0.9f) - ), - startX = shimmerOffset - 100f, - endX = shimmerOffset + 100f - ) - ) - .drawBehind { - drawRoundRect( - color = Color.White.copy(alpha = 0.3f), - size = Size(width = size.width, height = size.height * 0.4f), - cornerRadius = CornerRadius(50f) - ) - } - ) - } - - val displayProgress by animateIntAsState( - targetValue = animatedProgress.toInt(), - animationSpec = tween(100, easing = FastOutSlowInEasing), - label = "ProgressCounter" - ) - - Text( - text = "$displayProgress%", - fontSize = 14.sp, - fontWeight = FontWeight.Medium, - color = primaryColor.copy(alpha = 0.8f), - modifier = Modifier - .padding(top = 20.dp) - .alpha(0.9f), - textAlign = TextAlign.Center - ) - - val loadingText = when { - displayProgress < 15 -> "Initializing..." - displayProgress < 35 -> "Loading assets..." - displayProgress < 65 -> "Processing..." - displayProgress < 85 -> "Finalizing..." - displayProgress < 100 -> "Almost ready..." - else -> "Complete!" - } - - Text( - text = loadingText, - fontSize = 12.sp, - fontWeight = FontWeight.Normal, - color = Color.White.copy(alpha = 0.6f), - modifier = Modifier - .padding(top = 8.dp) - .alpha(0.7f), - textAlign = TextAlign.Center - ) - } - } -} - -private fun DrawScope.drawFloatingParticles( - color: Color, - offset: Float, - size: Size -) { - val particleCount = 6 - val centerX = size.width / 2f - val centerY = size.height / 2f - - repeat(particleCount) { i -> - val angle = ((i * 60f) + (offset * 2f)) * (PI / 180f) - val radius = 100f + sin(offset * 0.1f + i) * 20f - val x = centerX + cos(angle) * radius - val y = centerY + sin(angle) * radius - - drawCircle( - color = color, - radius = 3f + sin(offset * 0.15f + i) * 1f, - center = Offset(x.toFloat(), y.toFloat()) - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/retrivedmods/wclient/ui/component/VerificationDialog.kt b/app/src/main/java/com/retrivedmods/wclient/ui/component/VerificationDialog.kt index cdb0f558..8e05b216 100644 --- a/app/src/main/java/com/retrivedmods/wclient/ui/component/VerificationDialog.kt +++ b/app/src/main/java/com/retrivedmods/wclient/ui/component/VerificationDialog.kt @@ -1,182 +1,2 @@ +// Verification dialog removed - WClient now opens directly without app-level authentication package com.retrivedmods.wclient.ui.component - -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import android.widget.Toast -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ContentCopy -import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties - -@Composable -fun VerificationDialog( - wclientId: String, - onVerifyClick: () -> Unit -) { - val context = LocalContext.current - val scrollState = rememberScrollState() - - Dialog( - onDismissRequest = { }, - properties = DialogProperties( - dismissOnBackPress = false, - dismissOnClickOutside = false, - usePlatformDefaultWidth = false - ) - ) { - Card( - modifier = Modifier - .fillMaxWidth(0.9f) - .wrapContentHeight() - .padding(16.dp), - shape = RoundedCornerShape(16.dp), - colors = CardDefaults.cardColors( - containerColor = Color(0xFF1E1E1E) - ) - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .verticalScroll(scrollState) - .padding(20.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - Text( - text = "WClient Verification", - fontSize = 22.sp, - fontWeight = FontWeight.Bold, - color = Color.White, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth(), - maxLines = 2, - overflow = TextOverflow.Ellipsis - ) - - HorizontalDivider( - modifier = Modifier.fillMaxWidth(), - color = Color.Gray.copy(alpha = 0.3f), - thickness = 1.dp - ) - - Spacer(modifier = Modifier.height(4.dp)) - - Text( - text = "Your WClient ID", - fontSize = 13.sp, - color = Color.Gray, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) - - Box( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .background( - color = Color(0xFF2A2A2A), - shape = RoundedCornerShape(8.dp) - ) - .padding(12.dp) - ) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text( - text = wclientId, - fontSize = 14.sp, - fontWeight = FontWeight.Medium, - color = Color(0xFFAF4C4C), - modifier = Modifier - .weight(1f) - .padding(end = 8.dp), - textAlign = TextAlign.Start, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - lineHeight = 18.sp - ) - - IconButton( - onClick = { - val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText("WClient ID", wclientId) - clipboardManager.setPrimaryClip(clip) - Toast.makeText( - context, - "WClient ID copied", - Toast.LENGTH_SHORT - ).show() - }, - modifier = Modifier.size(40.dp) - ) { - Icon( - imageVector = Icons.Default.ContentCopy, - contentDescription = "Copy WClient ID", - tint = Color.White, - modifier = Modifier.size(20.dp) - ) - } - } - } - - Spacer(modifier = Modifier.height(8.dp)) - - Button( - onClick = onVerifyClick, - modifier = Modifier - .fillMaxWidth() - .heightIn(min = 50.dp, max = 56.dp), - colors = ButtonDefaults.buttonColors( - containerColor = Color(0xFFFF0B0B) - ), - shape = RoundedCornerShape(12.dp), - contentPadding = PaddingValues(horizontal = 16.dp, vertical = 12.dp) - ) { - Text( - text = "Verify Now", - fontSize = 17.sp, - fontWeight = FontWeight.SemiBold, - color = Color.White, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - } - - Text( - text = "Complete the verification to access WClient for 4 hours", - fontSize = 11.sp, - color = Color.Gray, - textAlign = TextAlign.Center, - modifier = Modifier - .fillMaxWidth() - .padding(top = 4.dp, start = 8.dp, end = 8.dp), - lineHeight = 14.sp, - maxLines = 3, - overflow = TextOverflow.Ellipsis - ) - - Spacer(modifier = Modifier.height(4.dp)) - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/retrivedmods/wclient/ui/component/WComponents.kt b/app/src/main/java/com/retrivedmods/wclient/ui/component/WComponents.kt index adb5f0c3..01fb5f01 100644 --- a/app/src/main/java/com/retrivedmods/wclient/ui/component/WComponents.kt +++ b/app/src/main/java/com/retrivedmods/wclient/ui/component/WComponents.kt @@ -1,20 +1,37 @@ package com.retrivedmods.wclient.ui.component +import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.* import androidx.compose.foundation.background import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Close +import androidx.compose.material.icons.rounded.Search import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import com.retrivedmods.wclient.ui.theme.WColors /** @@ -183,4 +200,265 @@ fun WFloatingActionButton( elevation = elevation, content = content ) -} \ No newline at end of file +} + +/** + * WSearchBar - A dark-themed search field with glow effect + */ +@Composable +fun WSearchBar( + query: String, + onQueryChange: (String) -> Unit, + modifier: Modifier = Modifier, + placeholder: String = "Search...", + onSearch: (() -> Unit)? = null, + enabled: Boolean = true +) { + TextField( + value = query, + onValueChange = onQueryChange, + modifier = modifier + .fillMaxWidth() + .heightIn(min = 40.dp), + placeholder = { + Text( + placeholder, + color = WColors.OnSurfaceVariant.copy(alpha = 0.4f), + fontSize = 13.sp + ) + }, + leadingIcon = { + Icon( + Icons.Rounded.Search, + contentDescription = "Search", + tint = WColors.OnSurfaceVariant.copy(alpha = 0.5f), + modifier = Modifier.size(18.dp) + ) + }, + trailingIcon = { + if (query.isNotEmpty()) { + IconButton( + onClick = { onQueryChange("") }, + modifier = Modifier.size(24.dp) + ) { + Icon( + Icons.Rounded.Close, + contentDescription = "Clear", + tint = WColors.OnSurfaceVariant.copy(alpha = 0.5f), + modifier = Modifier.size(16.dp) + ) + } + } + }, + singleLine = true, + enabled = enabled, + shape = RoundedCornerShape(10.dp), + colors = TextFieldDefaults.colors( + focusedContainerColor = WColors.SurfaceVariant, + unfocusedContainerColor = WColors.SurfaceVariant, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + cursorColor = WColors.Primary, + focusedTextColor = WColors.OnSurface, + unfocusedTextColor = WColors.OnSurface, + focusedPlaceholderColor = WColors.OnSurfaceVariant.copy(alpha = 0.4f), + unfocusedPlaceholderColor = WColors.OnSurfaceVariant.copy(alpha = 0.4f), + disabledTextColor = WColors.OnSurfaceVariant.copy(alpha = 0.5f), + disabledContainerColor = WColors.SurfaceVariant.copy(alpha = 0.5f) + ), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), + keyboardActions = KeyboardActions( + onSearch = { onSearch?.invoke() } + ), + textStyle = TextStyle( + fontSize = 13.sp, + color = WColors.OnSurface + ) + ) +} + +/** + * WBadge - A small badge/chip for displaying counts, status, or labels + */ +@Composable +fun WBadge( + text: String, + modifier: Modifier = Modifier, + color: Color = WColors.Primary, + textColor: Color = WColors.OnPrimary, + size: Dp = 18.dp, + fontSize: Int = 10 +) { + Box( + modifier = modifier + .sizeIn(minWidth = size, minHeight = size) + .background(color.copy(alpha = 0.9f), CircleShape) + .padding(horizontal = 5.dp, vertical = 1.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = text, + color = textColor, + fontSize = fontSize.sp, + fontWeight = FontWeight.Bold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + textAlign = TextAlign.Center + ) + } +} + +/** + * WSliderSetting - A labeled slider with current value display + */ +@Composable +fun WSliderSetting( + label: String, + value: Float, + onValueChange: (Float) -> Unit, + modifier: Modifier = Modifier, + valueRange: ClosedFloatingPointRange = 0f..10f, + steps: Int = 0, + suffix: String = "", + description: String? = null +) { + Column( + modifier = modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column { + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + color = WColors.OnSurface, + fontWeight = FontWeight.Medium + ) + if (description != null) { + Text( + text = description, + style = MaterialTheme.typography.bodySmall, + color = WColors.OnSurfaceVariant.copy(alpha = 0.7f), + fontSize = 11.sp + ) + } + } + Text( + text = "${value.toInt()}$suffix", + style = MaterialTheme.typography.bodySmall, + color = WColors.Primary, + fontWeight = FontWeight.SemiBold + ) + } + Slider( + value = value, + onValueChange = onValueChange, + valueRange = valueRange, + steps = steps, + colors = SliderDefaults.colors( + thumbColor = WColors.Primary, + activeTrackColor = WColors.Primary, + inactiveTrackColor = WColors.SurfaceVariant, + activeTickColor = WColors.Primary.copy(alpha = 0.5f), + inactiveTickColor = WColors.SurfaceVariant.copy(alpha = 0.5f) + ) + ) + } +} + +/** + * WToggleSetting - A labeled toggle switch with description + */ +@Composable +fun WToggleSetting( + label: String, + checked: Boolean, + onCheckedChange: (Boolean) -> Unit, + modifier: Modifier = Modifier, + description: String? = null, + enabled: Boolean = true +) { + val thumbColor by animateColorAsState( + targetValue = if (checked) WColors.Primary else WColors.OnSurfaceVariant.copy(alpha = 0.5f), + animationSpec = tween(200), + label = "toggle_thumb" + ) + val trackColor by animateColorAsState( + targetValue = if (checked) WColors.Primary.copy(alpha = 0.3f) else WColors.SurfaceVariant, + animationSpec = tween(200), + label = "toggle_track" + ) + + Row( + modifier = modifier + .fillMaxWidth() + .clickable(enabled) { onCheckedChange(!checked) } + .padding(vertical = 8.dp, horizontal = 4.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column( + modifier = Modifier.weight(1f) + ) { + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + color = if (enabled) WColors.OnSurface else WColors.OnSurfaceVariant.copy(alpha = 0.5f), + fontWeight = FontWeight.Medium + ) + if (description != null) { + Text( + text = description, + style = MaterialTheme.typography.bodySmall, + color = WColors.OnSurfaceVariant.copy(alpha = 0.7f), + fontSize = 11.sp + ) + } + } + Switch( + checked = checked, + onCheckedChange = onCheckedChange, + enabled = enabled, + colors = SwitchDefaults.colors( + checkedThumbColor = thumbColor, + checkedTrackColor = trackColor, + uncheckedThumbColor = thumbColor, + uncheckedTrackColor = trackColor, + checkedBorderColor = Color.Transparent, + uncheckedBorderColor = WColors.Border.copy(alpha = 0.5f) + ) + ) + } +} + +/** + * WDivider - A styled horizontal divider with gradient + */ +@Composable +fun WDivider( + modifier: Modifier = Modifier, + color: Color = WColors.Primary, + thickness: Dp = 1.dp, + alpha: Float = 0.2f +) { + Box( + modifier = modifier + .fillMaxWidth() + .height(thickness) + .background( + Brush.horizontalGradient( + colors = listOf( + Color.Transparent, + color.copy(alpha = alpha), + Color.Transparent + ) + ) + ) + ) +} diff --git a/app/src/main/java/com/retrivedmods/wclient/ui/theme/Theme.kt b/app/src/main/java/com/retrivedmods/wclient/ui/theme/Theme.kt index 4135d23f..bade19bf 100644 --- a/app/src/main/java/com/retrivedmods/wclient/ui/theme/Theme.kt +++ b/app/src/main/java/com/retrivedmods/wclient/ui/theme/Theme.kt @@ -17,75 +17,98 @@ import androidx.compose.ui.unit.sp object WColors { - // Primary reds - val Primary = Color(0xFFEF4444) - val PrimaryLight = Color(0xFFF87171) - val PrimaryDark = Color(0xFFDC2626) + // Primary - vibrant neon red + val Primary = Color(0xFFFF1744) + val PrimaryLight = Color(0xFFFF616F) + val PrimaryDark = Color(0xFFC4001D) + val PrimaryGlow = Color(0xFFFF1744).copy(alpha = 0.15f) val OnPrimary = Color(0xFFFFFFFF) - // Secondary for contrast (cool slate) - val Secondary = Color(0xFF64748B) - val SecondaryVariant = Color(0xFF475569) - val SecondaryLight = Color(0xFF94A3B8) + // Secondary - cyberpunk purple + val Secondary = Color(0xFF7C4DFF) + val SecondaryVariant = Color(0xFF651FFF) + val SecondaryLight = Color(0xFFB388FF) + val SecondaryGlow = Color(0xFF7C4DFF).copy(alpha = 0.12f) val OnSecondary = Color(0xFFFFFFFF) - // Accent red/pink for glow effects - val Accent = Color(0xFFF43F5E) - val AccentLight = Color(0xFFFB7185) - val AccentDark = Color(0xFFBE123C) + // Accent - hot pink / neon + val Accent = Color(0xFFFF4081) + val AccentLight = Color(0xFFFF80AB) + val AccentDark = Color(0xFFC51162) + val AccentGlow = Color(0xFFFF4081).copy(alpha = 0.12f) + // Background - deeper dark with subtle blue tint + val Background = Color(0xFF08080D) + val Surface = Color(0xFF0E0D14) + val SurfaceVariant = Color(0xFF1A1822) + val SurfaceContainer = Color(0xFF131119) - val Background = Color(0xFF0B0A10) - val Surface = Color(0xFF121016) - val SurfaceVariant = Color(0xFF1D1A22) - val SurfaceContainer = Color(0xFF17141C) - + // Text val OnBackground = Color(0xFFF8FAFC) - val OnSurface = Color(0xFFE2E8F0) - val OnSurfaceVariant = Color(0xFF9AA3B2) - - val Error = Color(0xFFFF4D4D) - val ErrorLight = Color(0xFFFF8080) - - val Border = Color(0xFF2B2631) - val BorderLight = Color(0xFF3A3441) + val OnSurface = Color(0xFFE8EAED) + val OnSurfaceVariant = Color(0xFF9CA3B0) + + // Semantic + val Error = Color(0xFFFF1744) + val ErrorLight = Color(0xFFFF616F) + val Success = Color(0xFF00E676) + val SuccessLight = Color(0xFF69F0AE) + val Warning = Color(0xFFFFAB00) + val WarningLight = Color(0xFFFFD740) + val Info = Color(0xFF40C4FF) + val InfoLight = Color(0xFF80D8FF) + + // UI + val Border = Color(0xFF2B2635) + val BorderLight = Color(0xFF3D3648) val Overlay = Color(0x80000000) - - val MinimapBackground = Color(0xCC000000) - val MinimapGrid = Color(0x66A9A9A9) - val MinimapCrosshair = Color(0x80808080) + // Minimap - enhanced for visibility + val MinimapBackground = Color(0xCC050508) + val MinimapGrid = Color(0x55FFFFFF) + val MinimapCrosshair = Color(0x80FFFFFF) val MinimapPlayerMarker = Color(0xFFFFFFFF) - val MinimapNorth = Color(0xFFEF4444) // match primary red - val MinimapEntityClose = Color(0xFFFF3B3B) - val MinimapEntityFar = Color(0xFFFFD166) - val MinimapZoom = 1.0f - val MinimapDotSize = 5 + val MinimapNorth = Color(0xFFFF1744) + val MinimapEntityClose = Color(0xFFFF1744) + val MinimapEntityFar = Color(0xFFFFAB00) + val MinimapZoom = 1.2f + val MinimapDotSize = 6 } object ClickGUIColors { - val PrimaryBackground = Color(0xFF0B0B11) - val SecondaryBackground = Color(0xFF14131B) + val PrimaryBackground = Color(0xFF08080D) + val SecondaryBackground = Color(0xFF110F18) val AccentColor = WColors.Primary val AccentColorVariant = WColors.AccentLight val PrimaryText = Color(0xFFFFFFFF) - val SecondaryText = Color(0xFF9AA3B2) + val SecondaryText = Color(0xFF9CA3B0) - val PanelBackground = Color(0xF014131A) - val PanelBorder = Color(0x60EF4444) + val PanelBackground = Color(0xF0100E16) + val PanelBorder = Color(0x60FF1744) val ModuleEnabled = AccentColor - val ModuleDisabled = Color(0xFF23222B) + val ModuleDisabled = Color(0xFF1F1D28) + val ModuleHover = Color(0xFF2A2535) - val SliderTrack = Color(0xFF2C2933) + val SliderTrack = Color(0xFF282530) val SliderThumb = AccentColor val SliderFill = AccentColor val CheckboxBorder = AccentColor val CheckboxFill = AccentColor + + val CategoryActive = AccentColor + val CategoryInactive = Color(0xFF5A5468) + + val SearchBackground = Color(0xFF14121C) + val SearchText = Color(0xFFE8EAED) + val SearchHint = Color(0xFF6B6478) + + val ScrollbarTrack = Color(0xFF1A1822) + val ScrollbarThumb = Color(0xFF3D3648) } private val WDarkColorScheme = darkColorScheme( diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/AdventureTextConverter.java b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/AdventureTextConverter.java index ade74792..e1b42120 100644 --- a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/AdventureTextConverter.java +++ b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/AdventureTextConverter.java @@ -1,5 +1,7 @@ package org.cloudburstmc.protocol.adventure; +import lombok.Getter; +import lombok.Setter; import net.kyori.adventure.text.*; import net.kyori.adventure.text.serializer.ComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONComponentSerializer; @@ -15,19 +17,23 @@ public class AdventureTextConverter implements TextConverter { - private static final BedrockLegacyTextSerializer LEGACY_SERIALIZER = BedrockLegacyTextSerializer.getInstance(); - private static final ComponentSerializer JSON_SERIALIZER = JSONComponentSerializer.builder() + @Setter + @Getter + private BedrockLegacyTextSerializer legacySerializer = BedrockLegacyTextSerializer.getInstance(); + + @Setter + @Getter + private ComponentSerializer jsonSerializer = JSONComponentSerializer.builder() .editOptions(builder -> builder.value(JSONOptions.EMIT_RGB, false)) .build(); - private static final BedrockComponent EMPTY = new BedrockComponent(Component.empty()); @Override public BedrockComponent deserialize(String text, boolean translatable) { if (text.isEmpty()) { - return EMPTY; + return BedrockComponent.EMPTY; } - Component component = deserialize(LEGACY_SERIALIZER, text, translatable); + Component component = deserialize(legacySerializer, text, translatable); return new BedrockComponent(component); } @@ -35,10 +41,10 @@ public BedrockComponent deserialize(String text, boolean translatable) { @Override public BedrockComponent deserializeJson(String text, boolean translatable) { if (text.isEmpty()) { - return EMPTY; + return BedrockComponent.EMPTY; } - Component component = deserialize(JSON_SERIALIZER, text, translatable); + Component component = deserialize(jsonSerializer, text, translatable); return new BedrockComponent(component); } @@ -71,7 +77,7 @@ private Component deserialize(ComponentSerializer @Override public BedrockComponent deserializeWithArguments(String text, List parameters, boolean translatable) { - Component component = this.deserialize(LEGACY_SERIALIZER, text, translatable); + Component component = this.deserialize(legacySerializer, text, translatable); if (parameters == null || parameters.isEmpty()) { return new BedrockComponent(component); } @@ -79,7 +85,7 @@ public BedrockComponent deserializeWithArguments(String text, List param List arguments = new ArrayList<>(parameters.size()); for (String parameter : parameters) { // Assume every argument is a Component - arguments.add(deserialize(LEGACY_SERIALIZER, parameter, false)); + arguments.add(deserialize(legacySerializer, parameter, false)); } if (component instanceof TranslatableComponent) { @@ -96,7 +102,7 @@ public String serialize(CharSequence text) { return (String) text; } checkArgument(text); - return LEGACY_SERIALIZER.serialize(((BedrockComponent) text).asComponent()); + return legacySerializer.serialize(((BedrockComponent) text).asComponent()); } @Override @@ -105,7 +111,7 @@ public String serializeJson(CharSequence text) { return (String) text; } checkArgument(text); - return JSON_SERIALIZER.serialize(((BedrockComponent) text).asComponent()); + return jsonSerializer.serialize(((BedrockComponent) text).asComponent()); } @Override diff --git a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockComponent.java b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockComponent.java index 194b254c..c7e6cf52 100644 --- a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockComponent.java +++ b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockComponent.java @@ -8,6 +8,8 @@ public class BedrockComponent implements CharSequence, ComponentLike { + public static final BedrockComponent EMPTY = new BedrockComponent(Component.empty()); + private final Component component; private transient volatile String serialized; diff --git a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockLegacyTextSerializer.java b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockLegacyTextSerializer.java index 0fd8dda3..68674d3b 100644 --- a/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockLegacyTextSerializer.java +++ b/relay/Protocol/adventure/src/main/java/org/cloudburstmc/protocol/adventure/BedrockLegacyTextSerializer.java @@ -56,36 +56,36 @@ public BedrockLegacyTextSerializer(LegacyComponentSerializer serializer) { @Override public @NotNull String serialize(@NotNull Component component) { String serialize = this.serializer.serialize(component); - + if (serialize.length() < 2 || !serialize.contains(String.valueOf(LegacyComponentSerializer.SECTION_CHAR))) { return serialize; } - + StringBuilder builder = new StringBuilder(serialize.length() + 8); // Pre-allocate a bit extra for potential reset codes boolean needsReset = false; - + for (int i = 0; i < serialize.length(); i++) { char stringChar = serialize.charAt(i); - + // Only process section characters if (stringChar == LegacyComponentSerializer.SECTION_CHAR && i + 1 < serialize.length()) { char formatChar = serialize.charAt(i + 1); - + // Check for style codes that will need reset if (formatChar == 'l' || formatChar == 'k' || formatChar == 'o') { needsReset = true; } else if (needsReset) { // Reset the style if we encounter a color code after a style code - if (Character.isDigit(formatChar) || (formatChar >= 'a' && formatChar <= 'u')) { + if (Character.isDigit(formatChar) || (formatChar >= 'a' && formatChar <= 'v')) { builder.append(LegacyComponentSerializer.SECTION_CHAR).append('r'); needsReset = false; } } } - + builder.append(stringChar); } - + return builder.toString(); } @@ -97,7 +97,6 @@ private static List bedrockFormats() { formats.remove(CharacterAndFormat.UNDERLINED); formats.add(CharacterAndFormat.characterAndFormat('g', BedrockNamedTextColor.MINECOIN_GOLD)); // Minecoin Gold - // Add the new characters implemented in 1.19.80 formats.add(CharacterAndFormat.characterAndFormat('h', BedrockNamedTextColor.MATERIAL_QUARTZ)); // Quartz formats.add(CharacterAndFormat.characterAndFormat('i', BedrockNamedTextColor.MATERIAL_IRON)); // Iron formats.add(CharacterAndFormat.characterAndFormat('j', BedrockNamedTextColor.MATERIAL_NETHERITE)); // Netherite @@ -108,6 +107,7 @@ private static List bedrockFormats() { formats.add(CharacterAndFormat.characterAndFormat('s', BedrockNamedTextColor.MATERIAL_DIAMOND)); // Diamond formats.add(CharacterAndFormat.characterAndFormat('t', BedrockNamedTextColor.MATERIAL_LAPIS)); // Lapis formats.add(CharacterAndFormat.characterAndFormat('u', BedrockNamedTextColor.MATERIAL_AMETHYST)); // Amethyst + formats.add(CharacterAndFormat.characterAndFormat('v', BedrockNamedTextColor.MATERIAL_RESIN)); // Resin return formats; } @@ -128,6 +128,7 @@ public static class BedrockNamedTextColor implements TextColor { public static final BedrockNamedTextColor MATERIAL_DIAMOND = new BedrockNamedTextColor("material_diamond", TextColor.color(44, 186, 168)); public static final BedrockNamedTextColor MATERIAL_LAPIS = new BedrockNamedTextColor("material_lapis", TextColor.color(33, 73, 123)); public static final BedrockNamedTextColor MATERIAL_AMETHYST = new BedrockNamedTextColor("material_amethyst", TextColor.color(154, 92, 198)); + public static final BedrockNamedTextColor MATERIAL_RESIN = new BedrockNamedTextColor("material_resin", TextColor.color(235, 113, 20)); private final String name; private final TextColor color; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java index 8fd0a59c..bff7b56f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java @@ -21,6 +21,7 @@ import org.cloudburstmc.protocol.bedrock.data.EncodingSettings; import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PlayerAbilityHolder; +import org.cloudburstmc.protocol.bedrock.data.PresenceConfiguration; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.entity.EntityProperties; @@ -46,7 +47,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; @@ -626,4 +626,14 @@ public > void readLargeVarIntFlags(ByteBuf buffer, Set flag public > void writeLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz) { throw new UnsupportedOperationException(); } + + @Override + public void writePresenceConfiguration(ByteBuf buffer, PresenceConfiguration configuration) { + throw new UnsupportedOperationException(); + } + + @Override + public PresenceConfiguration readPresenceConfiguration(ByteBuf buffer) { + throw new UnsupportedOperationException(); + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java index d4298169..ff22dbe1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodec.java @@ -153,6 +153,28 @@ public Builder updateSerializer(Class packetClass, return this; } + public Builder updateFactory(Class packetClass, Supplier factory) { + BedrockPacketDefinition info = (BedrockPacketDefinition) packets.get(packetClass); + checkArgument(info != null, "Packet does not exist"); + BedrockPacketDefinition updatedInfo = new BedrockPacketDefinition<>(info.getId(), (Supplier) factory, info.getSerializer(), info.getRecipient()); + + packets.replace(packetClass, info, updatedInfo); + + return this; + } + + public Builder aliasPacket(Class packetClass, Class aliasedClass) { + checkNotNull(packetClass, "packetClass"); + checkNotNull(aliasedClass, "aliasedClass"); + checkArgument(!packets.containsKey(packetClass), "Packet class already registered"); + + BedrockPacketDefinition info = packets.get(aliasedClass); + checkArgument(info != null, "Packet does not exist"); + + packets.put(packetClass, info); + return this; + } + public Builder retainPackets(Class... packets) { this.packets.keySet().retainAll(Arrays.asList(packets)); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java index c0b361a8..424011b5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java @@ -5,10 +5,7 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtType; -import org.cloudburstmc.protocol.bedrock.data.EncodingSettings; -import org.cloudburstmc.protocol.bedrock.data.ExperimentData; -import org.cloudburstmc.protocol.bedrock.data.GameRuleData; -import org.cloudburstmc.protocol.bedrock.data.PlayerAbilityHolder; +import org.cloudburstmc.protocol.bedrock.data.*; import org.cloudburstmc.protocol.bedrock.data.command.CommandEnumData; import org.cloudburstmc.protocol.bedrock.data.command.CommandOriginData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; @@ -123,6 +120,10 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer void writeArray(ByteBuf buffer, Collection array, TriConsumer actions); @@ -268,4 +271,8 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer> void writeLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz); > void readLargeVarIntFlags(ByteBuf buffer, Set flags, Class clazz); + + void writePresenceConfiguration(ByteBuf buffer, PresenceConfiguration configuration); + + PresenceConfiguration readPresenceConfiguration(ByteBuf buffer); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/NoopBedrockCodecHelper.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/NoopBedrockCodecHelper.java index b1055075..f1e32a14 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/NoopBedrockCodecHelper.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/compat/NoopBedrockCodecHelper.java @@ -58,6 +58,16 @@ public void writeItem(ByteBuf buffer, ItemData item) { throw new UnsupportedOperationException(); } + @Override + public ItemData readNetworkItemStackDescriptor(ByteBuf buffer) { + throw new UnsupportedOperationException(); + } + + @Override + public void writeNetworkItemStackDescriptor(ByteBuf buffer, ItemData item) { + throw new UnsupportedOperationException(); + } + @Override public ItemData readItemInstance(ByteBuf buffer) { throw new UnsupportedOperationException(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/BedrockCodecHelper_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/BedrockCodecHelper_v1001.java new file mode 100644 index 00000000..83203337 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/BedrockCodecHelper_v1001.java @@ -0,0 +1,34 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v975.BedrockCodecHelper_v975; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.PresenceConfiguration; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class BedrockCodecHelper_v1001 extends BedrockCodecHelper_v975 { + + public BedrockCodecHelper_v1001(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, + TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { + super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); + } + + @Override + public void writePresenceConfiguration(ByteBuf buffer, PresenceConfiguration configuration) { + writeOptionalNull(buffer, configuration.getExperienceName(), this::writeString); + writeOptionalNull(buffer, configuration.getWorldName(), this::writeString); + writeString(buffer, configuration.getRichPresenceId()); + } + + @Override + public PresenceConfiguration readPresenceConfiguration(ByteBuf buffer) { + return new PresenceConfiguration( + readOptional(buffer, null, this::readString), + readOptional(buffer, null, this::readString), + readString(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/Bedrock_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/Bedrock_v1001.java new file mode 100644 index 00000000..cbfc4ac8 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/Bedrock_v1001.java @@ -0,0 +1,49 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v1001.serializer.*; +import org.cloudburstmc.protocol.bedrock.codec.v975.Bedrock_v975; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v1001 extends Bedrock_v975 { + + protected static final TypeMap SOUND_EVENTS = Bedrock_v975.SOUND_EVENTS + .toBuilder() + .replace(601, SoundEvent.SLIME_LANDING) + .insert(602, SoundEvent.ABSORB_BLOCK) + .insert(603, SoundEvent.EJECT_BLOCK) + .insert(604, SoundEvent.GEYSER_ERUPTION_START) + .insert(605, SoundEvent.GEYSER_ERUPTION_ACTIVE) + .insert(606, SoundEvent.RECORD_BOUNCE) + .insert(607, SoundEvent.BUCKET_FILL_LAND_ANIMAL) + .insert(608, SoundEvent.BUCKET_EMPTY_LAND_ANIMAL) + .insert(609, SoundEvent.GEYSER_CONTINUOUS_ERUPTION_START) + .insert(610, SoundEvent.GEYSER_CONTINUOUS_ERUPTION_ACTIVE) + .insert(611, SoundEvent.UNDEFINED) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v975.CODEC.toBuilder() + .protocolVersion(1001) + .minecraftVersion("1.26.30") + .helper(() -> new BedrockCodecHelper_v1001(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(BiomeDefinitionListPacket.class, BiomeDefinitionListSerializer_v1001.INSTANCE) + .updateSerializer(BossEventPacket.class, BossEventSerializer_v1001.INSTANCE) + .updateSerializer(ClientboundAttributeLayerSyncPacket.class, ClientboundAttributeLayerSyncSerializer_v1001.INSTANCE) + .updateSerializer(ClientCacheBlobStatusPacket.class, ClientCacheBlobStatusSerializer_v1001.INSTANCE) + .updateSerializer(DebugDrawerPacket.class, DebugDrawerSerializer_v1001.INSTANCE) + .updateSerializer(GraphicsParameterOverridePacket.class, GraphicsParameterOverrideSerializer_v1001.INSTANCE) + .updateSerializer(InventoryContentPacket.class, InventoryContentSerializer_v1001.INSTANCE) + .updateSerializer(InventoryTransactionPacket.class, InventoryTransactionSerializer_v1001.INSTANCE) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v1001(SOUND_EVENTS)) + .updateSerializer(MobArmorEquipmentPacket.class, MobArmorEquipmentSerializer_v1001.INSTANCE) + .updateSerializer(ServerboundDiagnosticsPacket.class, ServerboundDiagnosticsSerializer_v1001.INSTANCE) + .updateSerializer(StartGamePacket.class, StartGameSerializer_v1001.INSTANCE) + .updateSerializer(SubChunkRequestPacket.class, SubChunkRequestSerializer_v1001.INSTANCE) + .registerPacket(ClientboundUpdateSoundDataPacket::new, ClientboundUpdateSoundDataSerializer_v1001.INSTANCE, 348, PacketRecipient.CLIENT) + .registerPacket(SendPartyDestinationCookiePacket::new, SendPartyDestinationCookieSerializer_v1001.INSTANCE, 349, PacketRecipient.CLIENT) + .registerPacket(PartyDestinationCookieResponsePacket::new, PartyDestinationCookieResponseSerializer_v1001.INSTANCE, 350, PacketRecipient.SERVER) + .build(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BiomeDefinitionListSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BiomeDefinitionListSerializer_v1001.java new file mode 100644 index 00000000..c10bbec1 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BiomeDefinitionListSerializer_v1001.java @@ -0,0 +1,43 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.BiomeDefinitionListSerializer_v975; +import org.cloudburstmc.protocol.bedrock.data.biome.*; + +import java.util.ArrayList; +import java.util.List; + +public class BiomeDefinitionListSerializer_v1001 extends BiomeDefinitionListSerializer_v975 { + + public static final BiomeDefinitionListSerializer_v1001 INSTANCE = new BiomeDefinitionListSerializer_v1001(); + + @Override + protected void writeNoiseGradientSurface(ByteBuf buffer, BedrockCodecHelper helper, BiomeNoiseGradientSurfaceData data) { + helper.writeArray(buffer, data.getNonReplaceableBlocks(), ByteBuf::writeIntLE); + helper.writeArray(buffer, data.getGradientBlocks(), (buf, val) -> { + helper.writeString(buf, val.getNoise()); + buf.writeFloatLE(val.getThreshold()); + buf.writeFloatLE(val.getRangeMin()); + buf.writeFloatLE(val.getRangeMax()); + buf.writeIntLE(val.getBlock()); + }); + helper.writeString(buffer, data.getNoise()); + buffer.writeIntLE(data.getFirstOctave()); + helper.writeArray(buffer, data.getAmplitudes(), ByteBuf::writeFloatLE); + } + + @Override + protected BiomeNoiseGradientSurfaceData readNoiseGradientSurface(ByteBuf buffer, BedrockCodecHelper helper) { + List nonReplaceableBlocks = new ArrayList<>(); + helper.readArray(buffer, nonReplaceableBlocks, (buf, h) -> (int) buf.readUnsignedIntLE()); + List gradientBlocks = new ArrayList<>(); + helper.readArray(buffer, gradientBlocks, (buf, h) -> + new NoiseBlockSpecifier(helper.readString(buf), buf.readFloatLE(), buf.readFloatLE(), buf.readFloatLE(), (int) buf.readUnsignedIntLE())); + String noiseSeedString = helper.readString(buffer); + int firstOctave = buffer.readIntLE(); + List amplitudes = new ArrayList<>(); + helper.readArray(buffer, amplitudes, (buf, h) -> buf.readFloatLE()); + return new BiomeNoiseGradientSurfaceData(nonReplaceableBlocks, gradientBlocks, noiseSeedString, firstOctave, amplitudes); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BossEventSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BossEventSerializer_v1001.java new file mode 100644 index 00000000..acc28028 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/BossEventSerializer_v1001.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v776.serializer.BossEventSerializer_v776; +import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class BossEventSerializer_v1001 extends BossEventSerializer_v776 { + + public static final BossEventSerializer_v1001 INSTANCE = new BossEventSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, BossEventPacket packet) { + VarInts.writeLong(buffer, packet.getBossUniqueEntityId()); + VarInts.writeLong(buffer, packet.getPlayerUniqueEntityId()); + buffer.writeByte(packet.getAction().ordinal()); + helper.writeString(buffer, helper.getTextConverter().serialize(packet.getTitle(CharSequence.class))); + helper.writeString(buffer, helper.getTextConverter().serialize(packet.getFilteredTitle(CharSequence.class))); + buffer.writeFloatLE(packet.getHealthPercentage()); + buffer.writeByte(packet.getColor()); + buffer.writeByte(packet.getOverlay()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BossEventPacket packet) { + packet.setBossUniqueEntityId(VarInts.readLong(buffer)); + packet.setPlayerUniqueEntityId(VarInts.readLong(buffer)); + packet.setAction(BossEventPacket.Action.values()[buffer.readUnsignedByte()]); + packet.setTitle(helper.getTextConverter().deserialize(helper.readString(buffer))); + packet.setFilteredTitle(helper.getTextConverter().deserialize(helper.readString(buffer))); + packet.setHealthPercentage(buffer.readFloatLE()); + packet.setColor(buffer.readUnsignedByte()); + packet.setOverlay(buffer.readUnsignedByte()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientCacheBlobStatusSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientCacheBlobStatusSerializer_v1001.java new file mode 100644 index 00000000..31bba08c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientCacheBlobStatusSerializer_v1001.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.ClientCacheBlobStatusSerializer_v361; +import org.cloudburstmc.protocol.bedrock.packet.ClientCacheBlobStatusPacket; + +public class ClientCacheBlobStatusSerializer_v1001 extends ClientCacheBlobStatusSerializer_v361 { + + public static final ClientCacheBlobStatusSerializer_v1001 INSTANCE = new ClientCacheBlobStatusSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientCacheBlobStatusPacket packet) { + helper.writeArray(buffer, packet.getNaks(), ByteBuf::writeLongLE); + helper.writeArray(buffer, packet.getAcks(), ByteBuf::writeLongLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientCacheBlobStatusPacket packet) { + helper.readArray(buffer, packet.getNaks(), ByteBuf::readLongLE, 4095); + helper.readArray(buffer, packet.getAcks(), ByteBuf::readLongLE, 4095); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundAttributeLayerSyncSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundAttributeLayerSyncSerializer_v1001.java new file mode 100644 index 00000000..367bfcb6 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundAttributeLayerSyncSerializer_v1001.java @@ -0,0 +1,73 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.ClientboundAttributeLayerSyncSerializer_v975; +import org.cloudburstmc.protocol.bedrock.data.attributelayer.*; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.ArrayList; +import java.util.List; + +public class ClientboundAttributeLayerSyncSerializer_v1001 extends ClientboundAttributeLayerSyncSerializer_v975 { + + public static final ClientboundAttributeLayerSyncSerializer_v1001 INSTANCE = new ClientboundAttributeLayerSyncSerializer_v1001(); + + @Override + protected void writeUpdateAttributeLayers(ByteBuf buf, BedrockCodecHelper helper, UpdateAttributeLayersData data) { + List layers = data.getAttributeLayers(); + helper.writeArray(buf, layers, (b, layer) -> { + helper.writeString(b, layer.getLayerName()); + helper.writeOptionalNull(b, layer.getNoiseName(), helper::writeString); // new + VarInts.writeInt(b, layer.getDimension()); + writeAttributeLayerSettings(b, helper, layer.getSettings()); + helper.writeArray(b, layer.getAttributes(), (bb, attr) -> + writeEnvironmentAttribute(bb, helper, attr)); + }); + } + + @Override + protected UpdateAttributeLayersData readUpdateAttributeLayers(ByteBuf buf, BedrockCodecHelper helper) { + List layers = new ArrayList<>(); + helper.readArray(buf, layers, b -> { + String name = helper.readStringMaxLen(buf, 128); + String noise = helper.readOptional(b, null, helper::readString); // new + int dim = VarInts.readInt(b); + AttributeLayerSettings settings = readAttributeLayerSettings(b, helper); + + List attrs = new ArrayList<>(); + helper.readArray(b, attrs, bb -> readEnvironmentAttribute(bb, helper), 1024); + + return new AttributeLayerData(name, noise, dim, settings, attrs); + }, 512); + return new UpdateAttributeLayersData(layers); + } + + @Override + protected void writeEnvironmentAttribute(ByteBuf buf, BedrockCodecHelper helper, EnvironmentAttributeData e) { + super.writeEnvironmentAttribute(buf, helper, e); + + buf.writeIntLE(e.getLocalTransitionTicks()); + buf.writeBoolean(e.isNoiseTransition()); + } + + @Override + protected EnvironmentAttributeData readEnvironmentAttribute(ByteBuf buf, BedrockCodecHelper helper) { + String name = helper.readStringMaxLen(buf, 128); + + AttributeData from = helper.readOptional(buf, null, b -> readAttributeData(b, helper)); + AttributeData attribute = readAttributeData(buf, helper); + AttributeData to = helper.readOptional(buf, null, b -> readAttributeData(b, helper)); + + int currentTicks = (int) buf.readUnsignedIntLE(); + int totalTicks = (int) buf.readUnsignedIntLE(); + + CameraEase easing = CameraEase.fromName(helper.readString(buf)); + + int localTransitionTicks = (int) buf.readUnsignedIntLE(); + boolean noiseTransition = buf.readBoolean(); + + return new EnvironmentAttributeData(name, from, attribute, to, currentTicks, totalTicks, easing, localTransitionTicks, noiseTransition); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundUpdateSoundDataSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundUpdateSoundDataSerializer_v1001.java new file mode 100644 index 00000000..b08b44eb --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ClientboundUpdateSoundDataSerializer_v1001.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundUpdateSoundDataPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundUpdateSoundDataSerializer_v1001 implements BedrockPacketSerializer { + + public static final ClientboundUpdateSoundDataSerializer_v1001 INSTANCE = new ClientboundUpdateSoundDataSerializer_v1001(); + + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundUpdateSoundDataPacket packet) { + buffer.writeLongLE(packet.getServerSoundHandle()); + helper.writeString(buffer, packet.getType()); + } + + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundUpdateSoundDataPacket packet) { + packet.setServerSoundHandle(buffer.readLongLE()); + packet.setType(helper.readString(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/DebugDrawerSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/DebugDrawerSerializer_v1001.java new file mode 100644 index 00000000..716a6571 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/DebugDrawerSerializer_v1001.java @@ -0,0 +1,215 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.DebugDrawerSerializer_v975; +import org.cloudburstmc.protocol.bedrock.data.debugshape.*; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.awt.Color; + +public class DebugDrawerSerializer_v1001 extends DebugDrawerSerializer_v975 { + + public static final DebugDrawerSerializer_v1001 INSTANCE = new DebugDrawerSerializer_v1001(); + + + @Override + protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + DebugShape.Type type = shape.getType(); + if (type != null) { + switch (type) { + case ARROW: + case BOX: + case CIRCLE: + case LINE: + case SPHERE: + case TEXT: + super.writeShape(buffer, helper, shape); + return; + } + } + + writeCommonShapeData(buffer, helper, shape); + + VarInts.writeUnsignedInt(buffer, toPayloadType(type)); + if (type == null) { + return; + } + + switch (type) { + case CYLINDER: + DebugCylinder cylinder = (DebugCylinder) shape; + helper.writeVector2f(buffer, cylinder.getRadiusX()); + helper.writeVector2f(buffer, cylinder.getRadiusZ()); + buffer.writeFloatLE(cylinder.getHeight()); + buffer.writeByte(cylinder.getSegments()); + break; + case PYRAMID: + DebugPyramid pyramid = (DebugPyramid) shape; + buffer.writeFloatLE(pyramid.getWidth()); + helper.writeOptionalNull(buffer, pyramid.getDepth(), ByteBuf::writeFloatLE); + buffer.writeFloatLE(pyramid.getHeight()); + break; + case ELLIPSOID: + DebugEllipsoid ellipsoid = (DebugEllipsoid) shape; + helper.writeVector3f(buffer, ellipsoid.getRadii()); + buffer.writeByte(ellipsoid.getSegments()); + break; + case CONE: + DebugCone cone = (DebugCone) shape; + helper.writeVector2f(buffer, cone.getRadii()); + buffer.writeFloatLE(cone.getHeight()); + buffer.writeByte(cone.getSegments()); + break; + } + } + + @Override + protected DebugShape readShape(ByteBuf buffer, BedrockCodecHelper helper) { + long id = VarInts.readUnsignedLong(buffer); + + DebugShape.Type type = helper.readOptional(buffer, null, (buf, aHelper) -> SHAPE_TYPES[buf.readUnsignedByte()]); + Vector3f position = helper.readOptional(buffer, null, READ_VECTOR3F); + Float scale = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Vector3f rotation = helper.readOptional(buffer, null, READ_VECTOR3F); + Float totalTimeLeft = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float maximumRenderDistance = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Color color = helper.readOptional(buffer, null, READ_COLOR); + Integer dimension = helper.readOptional(buffer, -1, VarInts::readInt); + Long attachedToEntityId = helper.readOptional(buffer, null, VarInts::readUnsignedLong); + VarInts.readUnsignedInt(buffer); // Unused payload type + + if (type == null) { + return new DebugShape(id, dimension); + } + + DebugShape shape; + switch (type) { + case ARROW: + shape = new DebugArrow(); + break; + case BOX: + shape = new DebugBox(); + break; + case CIRCLE: + shape = new DebugCircle(); + break; + case LINE: + shape = new DebugLine(); + break; + case SPHERE: + shape = new DebugSphere(); + break; + case TEXT: + shape = new DebugText(); + break; + case CYLINDER: + shape = new DebugCylinder(); + break; + case PYRAMID: + shape = new DebugPyramid(); + break; + case ELLIPSOID: + shape = new DebugEllipsoid(); + break; + case CONE: + shape = new DebugCone(); + break; + default: + throw new IllegalStateException("Unknown debug shape type"); + } + + shape.setId(id); + shape.setDimension(dimension); + shape.setPosition(position); + shape.setScale(scale); + shape.setRotation(rotation); + shape.setTotalTimeLeft(totalTimeLeft); + shape.setColor(color); + shape.setAttachedToEntityId(attachedToEntityId); + shape.setMaximumRenderDistance(maximumRenderDistance); + + switch (type) { + case ARROW: + DebugArrow arrow = (DebugArrow) shape; + arrow.setArrowEndPosition(helper.readOptional(buffer, null, READ_VECTOR3F)); + arrow.setArrowHeadLength(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + arrow.setArrowHeadRadius(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + arrow.setArrowHeadSegments(helper.readOptional(buffer, null, buf -> (int) buf.readUnsignedByte())); + return arrow; + case BOX: + DebugBox box = (DebugBox) shape; + box.setBoxBounds(helper.readVector3f(buffer)); + return box; + case CIRCLE: + DebugCircle circle = (DebugCircle) shape; + circle.setSegments((int) buffer.readUnsignedByte()); + return circle; + case LINE: + DebugLine line = (DebugLine) shape; + line.setLineEndPosition(helper.readVector3f(buffer)); + return line; + case SPHERE: + DebugSphere sphere = (DebugSphere) shape; + sphere.setSegments((int) buffer.readUnsignedByte()); + return sphere; + case TEXT: + DebugText text = (DebugText) shape; + text.setText(helper.readString(buffer)); + text.setUseRotation(buffer.readBoolean()); + text.setBackgroundColor(helper.readOptional(buffer, null, (buf, h) -> new Color(buf.readIntLE(), true))); + text.setDepthTest(buffer.readBoolean()); + text.setShowBackface(buffer.readBoolean()); + text.setShowTextBackface(buffer.readBoolean()); + return text; + case CYLINDER: + DebugCylinder cylinder = (DebugCylinder) shape; + cylinder.setRadiusX(helper.readVector2f(buffer)); + cylinder.setRadiusZ(helper.readVector2f(buffer)); + cylinder.setHeight(buffer.readFloatLE()); + cylinder.setSegments(buffer.readUnsignedByte()); + return cylinder; + case PYRAMID: + DebugPyramid pyramid = (DebugPyramid) shape; + pyramid.setWidth(buffer.readFloatLE()); + pyramid.setDepth(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + pyramid.setHeight(buffer.readFloatLE()); + return pyramid; + case ELLIPSOID: + DebugEllipsoid ellipsoid = (DebugEllipsoid) shape; + ellipsoid.setRadii(helper.readVector3f(buffer)); + ellipsoid.setSegments(buffer.readUnsignedByte()); + return ellipsoid; + case CONE: + DebugCone cone = (DebugCone) shape; + cone.setRadii(helper.readVector2f(buffer)); + cone.setHeight(buffer.readFloatLE()); + cone.setSegments(buffer.readUnsignedByte()); + return cone; + default: + throw new IllegalStateException("Unknown debug shape type"); + } + } + + @Override + protected int toPayloadType(DebugShape.Type type) { + if (type == null) { + return 0; + } + + switch (type) { + case ARROW: return 1; + case TEXT: return 2; + case BOX: return 3; + case LINE: return 4; + case SPHERE: + case CIRCLE: return 5; + case CYLINDER: return 6; + case PYRAMID: return 7; + case ELLIPSOID: return 8; + case CONE: return 9; + default: throw new IllegalStateException("Unknown debug shape type"); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/GraphicsParameterOverrideSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/GraphicsParameterOverrideSerializer_v1001.java new file mode 100644 index 00000000..d4f66d53 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/GraphicsParameterOverrideSerializer_v1001.java @@ -0,0 +1,49 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.GraphicsParameterOverrideSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.GraphicsOverrideParameterType; +import org.cloudburstmc.protocol.bedrock.packet.GraphicsParameterOverridePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class GraphicsParameterOverrideSerializer_v1001 extends GraphicsParameterOverrideSerializer_v924 { + + public static final GraphicsParameterOverrideSerializer_v1001 INSTANCE = new GraphicsParameterOverrideSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParameterOverridePacket packet) { + helper.writeArray(buffer, packet.getValues().entrySet(), (buf, aHelper, entry) -> { + buf.writeFloatLE(entry.getKey()); + helper.writeVector3f(buf, entry.getValue()); + }); + helper.writeOptionalNull(buffer, packet.getFloatValue(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, packet.getVec3Value(), (buf, h, v) -> h.writeVector3f(buf, v)); + helper.writeString(buffer, packet.getBiomeIdentifier()); + helper.writeOptionalNull(buffer, packet.getPlayerIdentifier(), (buf, h, v) -> h.writeString(buf, v)); // new + buffer.writeByte(packet.getParameterType().ordinal()); + buffer.writeBoolean(packet.isReset()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParameterOverridePacket packet) { + Map values = new LinkedHashMap<>(); + int length = VarInts.readUnsignedInt(buffer); + for (int i = 0; i < length; i++) { + float key = buffer.readFloatLE(); + Vector3f value = helper.readVector3f(buffer); + values.put(key, value); + } + packet.setValues(values); + packet.setFloatValue(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + packet.setVec3Value(helper.readOptional(buffer, null, (buf, h) -> h.readVector3f(buf))); + packet.setBiomeIdentifier(helper.readString(buffer)); + packet.setPlayerIdentifier(helper.readOptional(buffer, null, (buf, h) -> h.readString(buf))); // new + packet.setParameterType(GraphicsOverrideParameterType.values()[buffer.readUnsignedByte()]); + packet.setReset(buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryContentSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryContentSerializer_v1001.java new file mode 100644 index 00000000..32b8fc2e --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryContentSerializer_v1001.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748; +import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class InventoryContentSerializer_v1001 extends InventoryContentSerializer_v748 { + + public static final InventoryContentSerializer_v1001 INSTANCE = new InventoryContentSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { + VarInts.writeUnsignedInt(buffer, packet.getContainerId()); + helper.writeArray(buffer, packet.getContents(), helper::writeNetworkItemStackDescriptor); + helper.writeFullContainerName(buffer, packet.getContainerNameData()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getStorageItem()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { + packet.setContainerId(VarInts.readUnsignedInt(buffer)); + helper.readArray(buffer, packet.getContents(), helper::readNetworkItemStackDescriptor); + packet.setContainerNameData(helper.readFullContainerName(buffer)); + packet.setStorageItem(helper.readNetworkItemStackDescriptor(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryTransactionSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryTransactionSerializer_v1001.java new file mode 100644 index 00000000..ff9d5e61 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/InventoryTransactionSerializer_v1001.java @@ -0,0 +1,231 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryTransactionSerializer_v407; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.*; +import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.List; + +import static java.util.Objects.requireNonNull; + +public class InventoryTransactionSerializer_v1001 extends InventoryTransactionSerializer_v407 { + + public static final InventoryTransactionSerializer_v1001 INSTANCE = new InventoryTransactionSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + int legacyRequestId = packet.getLegacyRequestId(); + VarInts.writeInt(buffer, legacyRequestId); + + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + buffer.writeBoolean(true); + helper.writeArray(buffer, packet.getLegacySlots(), (buf, packetHelper, data) -> { + buf.writeByte(data.getContainerId()); + packetHelper.writeByteArray(buf, data.getSlots()); + }); + } else { + buffer.writeBoolean(false); + } + + buffer.writeBoolean(true); + InventoryTransactionType transactionType = packet.getTransactionType(); + VarInts.writeUnsignedInt(buffer, transactionType.ordinal()); + + buffer.writeBoolean(true); + writeInventoryActions(buffer, helper, packet.getActions()); + + switch (transactionType) { + case ITEM_USE: + this.writeItemUse(buffer, helper, packet); + break; + case ITEM_USE_ON_ENTITY: + this.writeItemUseOnEntity(buffer, helper, packet); + break; + case ITEM_RELEASE: + this.writeItemRelease(buffer, helper, packet); + break; + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + int legacyRequestId = VarInts.readInt(buffer); + packet.setLegacyRequestId(legacyRequestId); + + if (buffer.readBoolean()) { + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + helper.readArray(buffer, packet.getLegacySlots(), (buf, packetHelper) -> { + int containerId = buffer.readUnsignedByte(); + byte[] slots = packetHelper.readByteArray(buf, 89); // 89 seems to be the largest slot count + return new LegacySetItemSlotData(containerId, slots); + }); + } + } + + if (!buffer.readBoolean()) { + throw new IllegalStateException("Expected InventoryTransactionType"); + } + InventoryTransactionType transactionType = InventoryTransactionType.values()[VarInts.readUnsignedInt(buffer)]; + packet.setTransactionType(transactionType); + + if (!buffer.readBoolean()) { + throw new IllegalStateException("Expected InventoryActionData"); + } + readInventoryActions(buffer, helper, packet.getActions()); + + switch (transactionType) { + case ITEM_USE: + this.readItemUse(buffer, helper, packet); + break; + case ITEM_USE_ON_ENTITY: + this.readItemUseOnEntity(buffer, helper, packet); + break; + case ITEM_RELEASE: + this.readItemRelease(buffer, helper, packet); + break; + } + } + + public void writeItemUse(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + VarInts.writeInt(buffer, packet.getActionType()); + buffer.writeByte(packet.getTriggerType().ordinal()); + helper.writeBlockPosition(buffer, packet.getBlockPosition()); + buffer.writeByte(packet.getBlockFace()); + VarInts.writeInt(buffer, packet.getHotbarSlot()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getItemInHand()); + helper.writeVector3f(buffer, packet.getPlayerPosition()); + helper.writeVector3f(buffer, packet.getClickPosition()); + VarInts.writeUnsignedInt(buffer, packet.getBlockDefinition().getRuntimeId()); + buffer.writeByte(packet.getClientInteractPrediction().ordinal()); + buffer.writeByte(packet.getClientCooldownState()); + } + + public void readItemUse(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + packet.setActionType(VarInts.readInt(buffer)); + packet.setTriggerType(ItemUseTransaction.TriggerType.values()[buffer.readUnsignedByte()]); + packet.setBlockPosition(helper.readBlockPosition(buffer)); + packet.setBlockFace(buffer.readUnsignedByte()); + packet.setHotbarSlot(VarInts.readInt(buffer)); + packet.setItemInHand(helper.readNetworkItemStackDescriptor(buffer)); + packet.setPlayerPosition(helper.readVector3f(buffer)); + packet.setClickPosition(helper.readVector3f(buffer)); + packet.setBlockDefinition(helper.getBlockDefinitions().getDefinition(VarInts.readUnsignedInt(buffer))); + packet.setClientInteractPrediction(ItemUseTransaction.PredictedResult.values()[buffer.readUnsignedByte()]); + packet.setClientCooldownState(buffer.readByte()); + } + + @Override + public void readItemUseOnEntity(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + packet.setRuntimeEntityId(VarInts.readUnsignedLong(buffer)); + packet.setActionType(VarInts.readInt(buffer)); + packet.setHotbarSlot(VarInts.readInt(buffer)); + packet.setItemInHand(helper.readNetworkItemStackDescriptor(buffer)); + packet.setPlayerPosition(helper.readVector3f(buffer)); + packet.setClickPosition(helper.readVector3f(buffer)); + } + + @Override + public void writeItemUseOnEntity(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + VarInts.writeUnsignedLong(buffer, packet.getRuntimeEntityId()); + VarInts.writeInt(buffer, packet.getActionType()); + VarInts.writeInt(buffer, packet.getHotbarSlot()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getItemInHand()); + helper.writeVector3f(buffer, packet.getPlayerPosition()); + helper.writeVector3f(buffer, packet.getClickPosition()); + } + + @Override + public void readItemRelease(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + packet.setActionType(VarInts.readInt(buffer)); + packet.setHotbarSlot(VarInts.readInt(buffer)); + packet.setItemInHand(helper.readNetworkItemStackDescriptor(buffer)); + packet.setHeadPosition(helper.readVector3f(buffer)); + } + + @Override + public void writeItemRelease(ByteBuf buffer, BedrockCodecHelper helper, InventoryTransactionPacket packet) { + VarInts.writeInt(buffer, packet.getActionType()); + VarInts.writeInt(buffer, packet.getHotbarSlot()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getItemInHand()); + helper.writeVector3f(buffer, packet.getHeadPosition()); + } + + public void readInventoryActions(ByteBuf buffer, BedrockCodecHelper helper, List actions) { + helper.readArray(buffer, actions, (buf, h) -> { + InventorySource source = readSource(buf); + int slot = VarInts.readUnsignedInt(buf); + ItemData fromItem = h.readNetworkItemStackDescriptor(buf); + ItemData toItem = h.readNetworkItemStackDescriptor(buf); + + return new InventoryActionData(source, slot, fromItem, toItem); + }, helper.getEncodingSettings().maxInventoryActionsOrRequests()); + } + + public void writeInventoryActions(ByteBuf buffer, BedrockCodecHelper helper, List actions) { + helper.writeArray(buffer, actions, (buf, h, action) -> { + writeSource(buf, action.getSource()); + VarInts.writeUnsignedInt(buf, action.getSlot()); + h.writeNetworkItemStackDescriptor(buf, action.getFromItem()); + h.writeNetworkItemStackDescriptor(buf, action.getToItem()); + }); + } + + protected InventorySource readSource(ByteBuf buffer) { + InventorySource.Type type = InventorySource.Type.byId(VarInts.readUnsignedInt(buffer)); + + int containerId = 0; + InventorySource.Flag flag = null; + if (buffer.readBoolean() && buffer.readBoolean()) containerId = buffer.readByte(); + if (buffer.readBoolean() && buffer.readBoolean()) flag = InventorySource.Flag.values()[VarInts.readUnsignedInt(buffer)]; + switch (type) { + case CONTAINER: + return InventorySource.fromContainerWindowId(containerId); + case GLOBAL: + return InventorySource.fromGlobalInventory(); + case WORLD_INTERACTION: + if (flag == null) throw new IllegalStateException(); + return InventorySource.fromWorldInteraction(flag); + case CREATIVE: + return InventorySource.fromCreativeInventory(); + case NON_IMPLEMENTED_TODO: + return InventorySource.fromNonImplementedTodo(containerId); + case UNTRACKED_INTERACTION_UI: + return InventorySource.fromUntrackedInteractionUI(containerId); + default: + return InventorySource.fromInvalid(); + } + } + + protected void writeSource(ByteBuf buffer, InventorySource inventorySource) { + requireNonNull(inventorySource, "InventorySource was null"); + + VarInts.writeUnsignedInt(buffer, inventorySource.getType().id()); + + buffer.writeBoolean(true); + switch (inventorySource.getType()) { + case CONTAINER: + case NON_IMPLEMENTED_TODO: + buffer.writeBoolean(true); + buffer.writeByte(inventorySource.getContainerId()); + break; + default: + buffer.writeBoolean(false); + break; + } + + buffer.writeBoolean(true); + switch (inventorySource.getType()) { + case WORLD_INTERACTION: + buffer.writeBoolean(true); + VarInts.writeUnsignedInt(buffer, inventorySource.getFlag().ordinal()); + break; + default: + buffer.writeBoolean(false); + break; + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/LevelSoundEventSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/LevelSoundEventSerializer_v1001.java new file mode 100644 index 00000000..1e660e8c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/LevelSoundEventSerializer_v1001.java @@ -0,0 +1,40 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.LevelSoundEventSerializer_v975; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class LevelSoundEventSerializer_v1001 extends LevelSoundEventSerializer_v975 { + + public LevelSoundEventSerializer_v1001(TypeMap typeMap) { + super(typeMap); + } + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, LevelSoundEventPacket packet) { + helper.writeString(buffer, packet.getSound().getSerializeName()); + helper.writeVector3f(buffer, packet.getPosition()); + VarInts.writeInt(buffer, packet.getExtraData()); + helper.writeString(buffer, packet.getIdentifier()); + buffer.writeBoolean(packet.isBabySound()); + buffer.writeBoolean(packet.isRelativeVolumeDisabled()); + buffer.writeLongLE(packet.getEntityUniqueId()); + helper.writeOptionalNull(buffer, packet.getFireAtPosition(), helper::writeVector3f); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, LevelSoundEventPacket packet) { + packet.setSound(SoundEvent.fromName(helper.readString(buffer))); + packet.setPosition(helper.readVector3f(buffer)); + packet.setExtraData(VarInts.readInt(buffer)); + packet.setIdentifier(helper.readString(buffer)); + packet.setBabySound(buffer.readBoolean()); + packet.setRelativeVolumeDisabled(buffer.readBoolean()); + packet.setEntityUniqueId(buffer.readLongLE()); + packet.setFireAtPosition(helper.readOptional(buffer, null, helper::readVector3f)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/MobArmorEquipmentSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/MobArmorEquipmentSerializer_v1001.java new file mode 100644 index 00000000..7821fb24 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/MobArmorEquipmentSerializer_v1001.java @@ -0,0 +1,32 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712; +import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class MobArmorEquipmentSerializer_v1001 extends MobArmorEquipmentSerializer_v712 { + + public static final MobArmorEquipmentSerializer_v1001 INSTANCE = new MobArmorEquipmentSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { + VarInts.writeUnsignedLong(buffer, packet.getRuntimeEntityId()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getHelmet()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getChestplate()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getLeggings()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getBoots()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getBody()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { + packet.setRuntimeEntityId(VarInts.readUnsignedLong(buffer)); + packet.setHelmet(helper.readNetworkItemStackDescriptor(buffer)); + packet.setChestplate(helper.readNetworkItemStackDescriptor(buffer)); + packet.setLeggings(helper.readNetworkItemStackDescriptor(buffer)); + packet.setBoots(helper.readNetworkItemStackDescriptor(buffer)); + packet.setBody(helper.readNetworkItemStackDescriptor(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/PartyDestinationCookieResponseSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/PartyDestinationCookieResponseSerializer_v1001.java new file mode 100644 index 00000000..ed886b65 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/PartyDestinationCookieResponseSerializer_v1001.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.PartyDestinationCookieResponsePacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class PartyDestinationCookieResponseSerializer_v1001 implements BedrockPacketSerializer { + + public static final PartyDestinationCookieResponseSerializer_v1001 INSTANCE = new PartyDestinationCookieResponseSerializer_v1001(); + + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PartyDestinationCookieResponsePacket packet) { + helper.writeString(buffer, packet.getCookie()); + buffer.writeBoolean(packet.isAccepted()); + } + + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PartyDestinationCookieResponsePacket packet) { + packet.setCookie(helper.readString(buffer)); + packet.setAccepted(buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SendPartyDestinationCookieSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SendPartyDestinationCookieSerializer_v1001.java new file mode 100644 index 00000000..c6c1a8b5 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SendPartyDestinationCookieSerializer_v1001.java @@ -0,0 +1,26 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.SendPartyDestinationCookiePacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class SendPartyDestinationCookieSerializer_v1001 implements BedrockPacketSerializer { + + public static final SendPartyDestinationCookieSerializer_v1001 INSTANCE = new SendPartyDestinationCookieSerializer_v1001(); + + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, SendPartyDestinationCookiePacket packet) { + helper.writeString(buffer, packet.getCookie()); + helper.writeString(buffer, packet.getIntent().getSerializeName()); + helper.writeString(buffer, packet.getDestinationName()); + } + + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SendPartyDestinationCookiePacket packet) { + packet.setCookie(helper.readString(buffer)); + packet.setIntent(SendPartyDestinationCookiePacket.Intent.fromName(helper.readString(buffer))); + packet.setDestinationName(helper.readString(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ServerboundDiagnosticsSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ServerboundDiagnosticsSerializer_v1001.java new file mode 100644 index 00000000..a7e66e90 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/ServerboundDiagnosticsSerializer_v1001.java @@ -0,0 +1,38 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.ServerboundDiagnosticsSerializer_v975; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.WhiskerScopeDataSummary; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; + +public class ServerboundDiagnosticsSerializer_v1001 extends ServerboundDiagnosticsSerializer_v975 { + + public static final ServerboundDiagnosticsSerializer_v1001 INSTANCE = new ServerboundDiagnosticsSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.serialize(buffer, helper, packet); + + helper.writeArray(buffer, packet.getWhiskerScopes(), ((buf, h, info) -> { + helper.writeString(buf, info.getLabel()); + helper.writeString(buf, info.getIndentation()); + buf.writeLongLE(info.getTotalHighCostNS()); + buf.writeLongLE(info.getTotalMidCostNS()); + buf.writeLongLE(info.getTotalLowCostNS()); + })); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.deserialize(buffer, helper, packet); + + helper.readArray(buffer, packet.getWhiskerScopes(), (buf, h) -> + new WhiskerScopeDataSummary( + helper.readString(buf), + helper.readString(buf), + buf.readLongLE(), + buf.readLongLE(), + buf.readLongLE())); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/StartGameSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/StartGameSerializer_v1001.java new file mode 100644 index 00000000..18048858 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/StartGameSerializer_v1001.java @@ -0,0 +1,42 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v944.serializer.StartGameSerializer_v944; +import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class StartGameSerializer_v1001 extends StartGameSerializer_v944 { + + public static final StartGameSerializer_v1001 INSTANCE = new StartGameSerializer_v1001(); + + @Override + protected void writeLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.writeLevelSettings(buffer, helper, packet); + + VarInts.writeInt(buffer, packet.getServerEditorConnectionPolicy()); + buffer.writeBoolean(packet.isAllowAnonymousBlockDropsInEditorWorlds()); + } + + @Override + protected void readLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.readLevelSettings(buffer, helper, packet); + + packet.setServerEditorConnectionPolicy(VarInts.readInt(buffer)); + packet.setAllowAnonymousBlockDropsInEditorWorlds(buffer.readBoolean()); + } + + @Override + protected void readBeforeNetworkPermissions(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + packet.setNetworkPermissions(this.readNetworkPermissions(buffer, helper)); + + packet.setLoggingChat(buffer.readBoolean()); + } + + @Override + protected void writeBeforeNetworkPermissions(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + this.writeNetworkPermissions(buffer, helper, packet.getNetworkPermissions()); + + buffer.writeBoolean(packet.isLoggingChat()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SubChunkRequestSerializer_v1001.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SubChunkRequestSerializer_v1001.java new file mode 100644 index 00000000..f0abb887 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v1001/serializer/SubChunkRequestSerializer_v1001.java @@ -0,0 +1,37 @@ +package org.cloudburstmc.protocol.bedrock.codec.v1001.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v486.serializer.SubChunkRequestSerializer_v486; +import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class SubChunkRequestSerializer_v1001 extends SubChunkRequestSerializer_v486 { + + public static final SubChunkRequestSerializer_v1001 INSTANCE = new SubChunkRequestSerializer_v1001(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, SubChunkRequestPacket packet) { + VarInts.writeInt(buffer, packet.getDimension()); + helper.writeArray(buffer, packet.getPositionOffsets(), this::writeSubChunkOffset); + writeSubChunkPos(buffer, packet.getSubChunkPosition()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SubChunkRequestPacket packet) { + packet.setDimension(VarInts.readInt(buffer)); + helper.readArray(buffer, packet.getPositionOffsets(), this::readSubChunkOffset, 8192); + packet.setSubChunkPosition(readSubChunkPos(buffer)); + } + + protected void writeSubChunkPos(ByteBuf buffer, Vector3i offsetPosition) { + buffer.writeIntLE(offsetPosition.getX()); + buffer.writeIntLE(offsetPosition.getY()); + buffer.writeIntLE(offsetPosition.getZ()); + } + + protected Vector3i readSubChunkPos(ByteBuf buffer) { + return Vector3i.from(buffer.readIntLE(), buffer.readIntLE(), buffer.readIntLE()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java index be175f8c..03f3e109 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/BedrockCodecHelper_v291.java @@ -49,7 +49,7 @@ public EntityLinkData readEntityLink(ByteBuf buffer) { int type = buffer.readUnsignedByte(); boolean immediate = buffer.readBoolean(); - return new EntityLinkData(from, to, EntityLinkData.Type.values()[type], immediate); + return new EntityLinkData(from, to, EntityLinkData.Type.values()[type], immediate, false, 0f); } @Override @@ -149,6 +149,16 @@ public void writeItem(ByteBuf buffer, ItemData item) { writeArray(buffer, item.getCanBreak(), this::writeString); } + @Override + public ItemData readNetworkItemStackDescriptor(ByteBuf buffer) { + throw new UnsupportedOperationException(); + } + + @Override + public void writeNetworkItemStackDescriptor(ByteBuf buffer, ItemData item) { + throw new UnsupportedOperationException(); + } + @Override public ItemData readItemInstance(ByteBuf buffer) { return readItem(buffer); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/BookEditSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/BookEditSerializer_v291.java index 7ebbb65c..ef6b0ca4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/BookEditSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/BookEditSerializer_v291.java @@ -14,7 +14,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BookEditSerializer_v291 implements BedrockPacketSerializer { public static final BookEditSerializer_v291 INSTANCE = new BookEditSerializer_v291(); - private static final Int2ObjectBiMap types = new Int2ObjectBiMap<>(); + protected static final Int2ObjectBiMap types = new Int2ObjectBiMap<>(); static { types.put(0, Action.REPLACE_PAGE); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ClientboundMapItemDataSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ClientboundMapItemDataSerializer_v291.java index eb74e772..03c6b26f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ClientboundMapItemDataSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ClientboundMapItemDataSerializer_v291.java @@ -9,6 +9,7 @@ import org.cloudburstmc.protocol.bedrock.data.MapDecoration; import org.cloudburstmc.protocol.bedrock.data.MapTrackedObject; import org.cloudburstmc.protocol.bedrock.packet.ClientboundMapItemDataPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.VarInts; import java.util.List; @@ -142,6 +143,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundMa packet.setYOffset(VarInts.readInt(buffer)); int length = VarInts.readUnsignedInt(buffer); + Preconditions.checkArgument(buffer.isReadable(length), "Not enough readable bytes"); int[] colors = new int[length]; for (int i = 0; i < length; i++) { colors[i] = VarInts.readUnsignedInt(buffer); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EntityEventSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EntityEventSerializer_v291.java index 65a21a28..f78aba8c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EntityEventSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EntityEventSerializer_v291.java @@ -16,7 +16,7 @@ public class EntityEventSerializer_v291 implements BedrockPacketSerializer typeMap; + protected final TypeMap typeMap; @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EntityEventPacket packet) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EventSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EventSerializer_v291.java index 1e0a54ee..288922f9 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EventSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/EventSerializer_v291.java @@ -233,19 +233,18 @@ protected void writePatternRemoved(ByteBuf buffer, BedrockCodecHelper helper, Ev protected SlashCommandExecutedEventData readSlashCommandExecuted(ByteBuf buffer, BedrockCodecHelper helper) { int successCount = VarInts.readInt(buffer); - VarInts.readInt(buffer); + int errorCount = VarInts.readInt(buffer); String commandName = helper.readString(buffer); - List outputMessages = Arrays.asList(helper.readString(buffer).split(";")); - return new SlashCommandExecutedEventData(commandName, successCount, outputMessages); + List outputMessages = Arrays.asList(helper.readStringMaxLen(buffer, 2048).split(";")); + return new SlashCommandExecutedEventData(commandName, successCount, errorCount, outputMessages); } protected void writeSlashCommandExecuted(ByteBuf buffer, BedrockCodecHelper helper, EventData eventData) { SlashCommandExecutedEventData event = (SlashCommandExecutedEventData) eventData; VarInts.writeInt(buffer, event.getSuccessCount()); - List outputMessages = event.getOutputMessages(); - VarInts.writeInt(buffer, outputMessages.size()); + VarInts.writeInt(buffer, event.getErrorCount()); helper.writeString(buffer, event.getCommandName()); - helper.writeString(buffer, String.join(";", outputMessages)); + helper.writeString(buffer, String.join(";", event.getOutputMessages())); } protected FishBucketedEventData readFishBucketed(ByteBuf buffer, BedrockCodecHelper helper) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PhotoTransferSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PhotoTransferSerializer_v291.java index 78a78cf9..46adf670 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PhotoTransferSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/PhotoTransferSerializer_v291.java @@ -6,6 +6,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; import org.cloudburstmc.protocol.bedrock.packet.PhotoTransferPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.VarInts; @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -25,7 +26,9 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PhotoTransferPa @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PhotoTransferPacket packet) { packet.setName(helper.readString(buffer)); - byte[] data = new byte[VarInts.readUnsignedInt(buffer)]; + int length = VarInts.readUnsignedInt(buffer); + Preconditions.checkArgument(buffer.isReadable(length), "Not enough readable bytes"); + byte[] data = new byte[length]; buffer.readBytes(data); packet.setData(data); packet.setBookId(helper.readString(buffer)); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkDataSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkDataSerializer_v291.java index 8e6785f6..560f8bca 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkDataSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkDataSerializer_v291.java @@ -26,7 +26,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChu @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChunkDataPacket packet) { - String[] packInfo = helper.readString(buffer).split("_"); + String[] packInfo = helper.readStringMaxLen(buffer, 100).split("_", 3); packet.setPackId(UUID.fromString(packInfo[0])); if (packInfo.length > 1) { packet.setPackVersion(packInfo[1]); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkRequestSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkRequestSerializer_v291.java index 4c822ab6..1cebb5d2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkRequestSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackChunkRequestSerializer_v291.java @@ -23,7 +23,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChu @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChunkRequestPacket packet) { - String[] packInfo = helper.readString(buffer).split("_"); + String[] packInfo = helper.readStringMaxLen(buffer, 100).split("_", 3); packet.setPackId(UUID.fromString(packInfo[0])); if (packInfo.length > 1) { packet.setPackVersion(packInfo[1]); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackDataInfoSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackDataInfoSerializer_v291.java index 64bc1dfe..ad2d1efa 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackDataInfoSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/ResourcePackDataInfoSerializer_v291.java @@ -6,6 +6,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackDataInfoPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.VarInts; import java.util.UUID; @@ -28,7 +29,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackDat @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackDataInfoPacket packet) { - String[] packInfo = helper.readString(buffer).split("_"); + String[] packInfo = helper.readStringMaxLen(buffer, 100).split("_", 3); packet.setPackId(UUID.fromString(packInfo[0])); if (packInfo.length > 1) { packet.setPackVersion(packInfo[1]); @@ -36,7 +37,9 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackD packet.setMaxChunkSize(buffer.readIntLE()); packet.setChunkCount(buffer.readIntLE()); packet.setCompressedPackSize(buffer.readLongLE()); - byte[] hash = new byte[VarInts.readUnsignedInt(buffer)]; + int length = VarInts.readUnsignedInt(buffer); + Preconditions.checkArgument(buffer.isReadable(length), "Not enough readable bytes"); + byte[] hash = new byte[length]; buffer.readBytes(hash); packet.setHash(hash); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/TextSerializer_v291.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/TextSerializer_v291.java index 90bd87fa..fbeb4fff 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/TextSerializer_v291.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v291/serializer/TextSerializer_v291.java @@ -54,6 +54,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pa packet.setType(type); TextConverter converter = helper.getTextConverter(); boolean needsTranslation = buffer.readBoolean(); + packet.setNeedsTranslation(needsTranslation); switch (type) { case CHAT: diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/serializer/TextSerializer_v332.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/serializer/TextSerializer_v332.java index d66036d3..810a5280 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/serializer/TextSerializer_v332.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v332/serializer/TextSerializer_v332.java @@ -58,6 +58,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pa packet.setType(type); TextConverter converter = helper.getTextConverter(); boolean needsTranslation = buffer.readBoolean(); + packet.setNeedsTranslation(needsTranslation); switch (type) { case CHAT: diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/ClientboundMapItemDataSerializer_v354.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/ClientboundMapItemDataSerializer_v354.java index bb9a8c26..0fe19103 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/ClientboundMapItemDataSerializer_v354.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v354/serializer/ClientboundMapItemDataSerializer_v354.java @@ -9,6 +9,7 @@ import org.cloudburstmc.protocol.bedrock.data.MapDecoration; import org.cloudburstmc.protocol.bedrock.data.MapTrackedObject; import org.cloudburstmc.protocol.bedrock.packet.ClientboundMapItemDataPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.VarInts; import java.util.List; @@ -33,7 +34,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundMapI } List decorations = packet.getDecorations(); List trackedObjects = packet.getTrackedObjects(); - if (!decorations.isEmpty() && !trackedObjects.isEmpty()) { + if (!decorations.isEmpty() || !trackedObjects.isEmpty()) { type |= FLAG_DECORATION_UPDATE; } LongList trackedEntityIds = packet.getTrackedEntityIds(); @@ -107,13 +108,12 @@ protected void writeMapDecorations(ByteBuf buffer, BedrockCodecHelper helper, Cl VarInts.writeUnsignedInt(buffer, trackedObjects.size()); for (MapTrackedObject object : trackedObjects) { + buffer.writeIntLE(object.getType().ordinal()); switch (object.getType()) { case BLOCK: - buffer.writeIntLE(object.getType().ordinal()); helper.writeBlockPosition(buffer, object.getPosition()); break; case ENTITY: - buffer.writeIntLE(object.getType().ordinal()); VarInts.writeLong(buffer, object.getEntityId()); break; } @@ -178,6 +178,7 @@ protected void readTextureUpdate(ByteBuf buffer, BedrockCodecHelper helper, Clie packet.setYOffset(VarInts.readInt(buffer)); int length = VarInts.readUnsignedInt(buffer); + Preconditions.checkArgument(buffer.isReadable(length), "Not enough readable bytes"); int[] colors = new int[length]; for (int i = 0; i < length; i++) { colors[i] = VarInts.readUnsignedInt(buffer); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ResourcePackDataInfoSerializer_v361.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ResourcePackDataInfoSerializer_v361.java index 2aecf768..af78f633 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ResourcePackDataInfoSerializer_v361.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v361/serializer/ResourcePackDataInfoSerializer_v361.java @@ -6,6 +6,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackDataInfoPacket; +import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.TypeMap; import org.cloudburstmc.protocol.common.util.VarInts; @@ -31,7 +32,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackDat @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackDataInfoPacket packet) { - String[] packInfo = helper.readString(buffer).split("_"); + String[] packInfo = helper.readStringMaxLen(buffer, 100).split("_", 3); packet.setPackId(UUID.fromString(packInfo[0])); if (packInfo.length > 1) { packet.setPackVersion(packInfo[1]); @@ -39,7 +40,9 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackD packet.setMaxChunkSize(buffer.readUnsignedIntLE()); packet.setChunkCount(buffer.readUnsignedIntLE()); packet.setCompressedPackSize(buffer.readLongLE()); - byte[] hash = new byte[VarInts.readUnsignedInt(buffer)]; + int length = VarInts.readUnsignedInt(buffer); + Preconditions.checkArgument(buffer.isReadable(length), "Not enough readable bytes"); + byte[] hash = new byte[length]; buffer.readBytes(hash); packet.setHash(hash); packet.setPremium(buffer.readBoolean()); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/AddPlayerSerializer_v388.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/AddPlayerSerializer_v388.java index b26eefea..9bc216ad 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/AddPlayerSerializer_v388.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/AddPlayerSerializer_v388.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.AddPlayerSerializer_v291; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -15,13 +16,13 @@ public class AddPlayerSerializer_v388 extends AddPlayerSerializer_v291 { public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPacket packet) { super.serialize(buffer, helper, packet); - buffer.writeIntLE(packet.getBuildPlatform()); + buffer.writeIntLE(packet.getBuildPlatform().ordinal()); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPacket packet) { super.deserialize(buffer, helper, packet); - packet.setBuildPlatform(buffer.readIntLE()); + packet.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/PlayerListSerializer_v388.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/PlayerListSerializer_v388.java index 41c49a90..e011cc4f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/PlayerListSerializer_v388.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/PlayerListSerializer_v388.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.cloudburstmc.protocol.common.util.TextConverter; import org.cloudburstmc.protocol.common.util.VarInts; @@ -30,7 +31,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerListPacke helper.writeString(buffer, converter.serialize(entry.getName(CharSequence.class))); helper.writeString(buffer, entry.getXuid()); helper.writeString(buffer, entry.getPlatformChatId()); - buffer.writeIntLE(entry.getBuildPlatform()); + buffer.writeIntLE(entry.getBuildPlatform().ordinal()); helper.writeSkin(buffer, entry.getSkin()); buffer.writeBoolean(entry.isTeacher()); buffer.writeBoolean(entry.isHost()); @@ -53,7 +54,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerListPac entry.setName(converter.deserialize(helper.readString(buffer))); entry.setXuid(helper.readString(buffer)); entry.setPlatformChatId(helper.readString(buffer)); - entry.setBuildPlatform(buffer.readIntLE()); + entry.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); entry.setSkin(helper.readSkin(buffer)); entry.setTeacher(buffer.readBoolean()); entry.setHost(buffer.readBoolean()); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/ResourcePackChunkDataSerializer_v388.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/ResourcePackChunkDataSerializer_v388.java index af63b39a..5e812b2e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/ResourcePackChunkDataSerializer_v388.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v388/serializer/ResourcePackChunkDataSerializer_v388.java @@ -24,7 +24,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChu @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackChunkDataPacket packet) { - String[] packInfo = helper.readString(buffer).split("_"); + String[] packInfo = helper.readStringMaxLen(buffer, 100).split("_", 3); packet.setPackId(UUID.fromString(packInfo[0])); if (packInfo.length > 1) { packet.setPackVersion(packInfo[1]); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/serializer/PlayerListSerializer_v390.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/serializer/PlayerListSerializer_v390.java index 5edfce33..8fafd3de 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/serializer/PlayerListSerializer_v390.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v390/serializer/PlayerListSerializer_v390.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.cloudburstmc.protocol.common.util.TextConverter; import org.cloudburstmc.protocol.common.util.VarInts; @@ -65,7 +66,7 @@ protected void writeEntryBase(ByteBuf buffer, BedrockCodecHelper helper, Entry e helper.writeString(buffer, converter.serialize(entry.getName(CharSequence.class))); helper.writeString(buffer, entry.getXuid()); helper.writeString(buffer, entry.getPlatformChatId()); - buffer.writeIntLE(entry.getBuildPlatform()); + buffer.writeIntLE(entry.getBuildPlatform().ordinal()); helper.writeSkin(buffer, entry.getSkin()); buffer.writeBoolean(entry.isTeacher()); buffer.writeBoolean(entry.isHost()); @@ -78,7 +79,7 @@ protected Entry readEntryBase(ByteBuf buffer, BedrockCodecHelper helper) { entry.setName(converter.deserialize(helper.readString(buffer))); entry.setXuid(helper.readString(buffer)); entry.setPlatformChatId(helper.readString(buffer)); - entry.setBuildPlatform(buffer.readIntLE()); + entry.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); entry.setSkin(helper.readSkin(buffer)); entry.setTeacher(buffer.readBoolean()); entry.setHost(buffer.readBoolean()); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java index b70ec631..3485a5f4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/BedrockCodecHelper_v407.java @@ -49,7 +49,8 @@ public EntityLinkData readEntityLink(ByteBuf buffer) { VarInts.readLong(buffer), EntityLinkData.Type.byId(buffer.readUnsignedByte()), buffer.readBoolean(), - buffer.readBoolean() + buffer.readBoolean(), + 0f ); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/AnimateEntitySerializer_v465.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/AnimateEntitySerializer_v465.java index d4661152..3cdaa962 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/AnimateEntitySerializer_v465.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/AnimateEntitySerializer_v465.java @@ -18,7 +18,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AnimateEntityPa helper.writeString(buffer, packet.getAnimation()); helper.writeString(buffer, packet.getNextState()); helper.writeString(buffer, packet.getStopExpression()); - buffer.writeInt(packet.getStopExpressionVersion()); + buffer.writeIntLE(packet.getStopExpressionVersion()); helper.writeString(buffer, packet.getController()); buffer.writeFloatLE(packet.getBlendOutTime()); @@ -36,7 +36,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AnimateEntity packet.setAnimation(helper.readString(buffer)); packet.setNextState(helper.readString(buffer)); packet.setStopExpression(helper.readString(buffer)); - packet.setStopExpressionVersion(buffer.readInt()); + packet.setStopExpressionVersion(buffer.readIntLE()); packet.setController(helper.readString(buffer)); packet.setBlendOutTime(buffer.readFloatLE()); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/UpdateSubChunkBlocksSerializer_v465.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/UpdateSubChunkBlocksSerializer_v465.java index fbaacab7..5994faa5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/UpdateSubChunkBlocksSerializer_v465.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v465/serializer/UpdateSubChunkBlocksSerializer_v465.java @@ -17,18 +17,14 @@ public class UpdateSubChunkBlocksSerializer_v465 implements BedrockPacketSeriali @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateSubChunkBlocksPacket packet) { - VarInts.writeInt(buffer, packet.getChunkX()); - VarInts.writeUnsignedInt(buffer, packet.getChunkY()); - VarInts.writeInt(buffer, packet.getChunkZ()); + helper.writeBlockPosition(buffer, packet.getPosition()); helper.writeArray(buffer, packet.getStandardBlocks(), this::writeBlockChangeEntry); helper.writeArray(buffer, packet.getExtraBlocks(), this::writeBlockChangeEntry); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateSubChunkBlocksPacket packet) { - packet.setChunkX(VarInts.readInt(buffer)); - packet.setChunkY(VarInts.readUnsignedInt(buffer)); - packet.setChunkZ(VarInts.readInt(buffer)); + packet.setPosition(helper.readBlockPosition(buffer)); helper.readArray(buffer, packet.getStandardBlocks(), this::readBlockChangeEntry); helper.readArray(buffer, packet.getExtraBlocks(), this::readBlockChangeEntry); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/AddPlayerSerializer_v503.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/AddPlayerSerializer_v503.java index d93cbcef..27ce9bdc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/AddPlayerSerializer_v503.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/AddPlayerSerializer_v503.java @@ -4,6 +4,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.AdventureSettingsSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v388.serializer.AddPlayerSerializer_v388; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.data.GameType; import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.common.util.VarInts; @@ -28,7 +29,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPacket AdventureSettingsSerializer_v291.INSTANCE.serialize(buffer, helper, packet.getAdventureSettings()); helper.writeArray(buffer, packet.getEntityLinks(), helper::writeEntityLink); helper.writeString(buffer, packet.getDeviceId()); - buffer.writeIntLE(packet.getBuildPlatform()); + buffer.writeIntLE(packet.getBuildPlatform().ordinal()); } @Override @@ -47,6 +48,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPack AdventureSettingsSerializer_v291.INSTANCE.deserialize(buffer, helper, packet.getAdventureSettings()); helper.readArray(buffer, packet.getEntityLinks(), helper::readEntityLink); packet.setDeviceId(helper.readString(buffer)); - packet.setBuildPlatform(buffer.readIntLE()); + packet.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/DimensionDataSerializer_v503.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/DimensionDataSerializer_v503.java index 116cdba2..4944cd5e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/DimensionDataSerializer_v503.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v503/serializer/DimensionDataSerializer_v503.java @@ -31,6 +31,6 @@ protected DimensionDefinition readDefinition(ByteBuf buffer, BedrockCodecHelper int maximumHeight = VarInts.readInt(buffer); int minimumHeight = VarInts.readInt(buffer); int generatorType = VarInts.readInt(buffer); - return new DimensionDefinition(id, maximumHeight, minimumHeight, generatorType); + return new DimensionDefinition(id, maximumHeight, minimumHeight, generatorType, 0); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/AddPlayerSerializer_v534.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/AddPlayerSerializer_v534.java index a8d2ab20..76d72e20 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/AddPlayerSerializer_v534.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v534/serializer/AddPlayerSerializer_v534.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v503.serializer.AddPlayerSerializer_v503; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.common.util.VarInts; @@ -27,7 +28,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPacket helper.writePlayerAbilities(buffer, packet); helper.writeArray(buffer, packet.getEntityLinks(), helper::writeEntityLink); helper.writeString(buffer, packet.getDeviceId()); - buffer.writeIntLE(packet.getBuildPlatform()); + buffer.writeIntLE(packet.getBuildPlatform().ordinal()); } @Override @@ -45,6 +46,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPack helper.readPlayerAbilities(buffer, packet); helper.readArray(buffer, packet.getEntityLinks(), helper::readEntityLink); packet.setDeviceId(helper.readString(buffer)); - packet.setBuildPlatform(buffer.readIntLE()); + packet.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/ClientboundMapItemDataSerializer_v544.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/ClientboundMapItemDataSerializer_v544.java index 4ccc8973..459e31bb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/ClientboundMapItemDataSerializer_v544.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v544/serializer/ClientboundMapItemDataSerializer_v544.java @@ -25,7 +25,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundMapI } List decorations = packet.getDecorations(); List trackedObjects = packet.getTrackedObjects(); - if (!decorations.isEmpty() && !trackedObjects.isEmpty()) { + if (!decorations.isEmpty() || !trackedObjects.isEmpty()) { type |= FLAG_DECORATION_UPDATE; } LongList trackedEntityIds = packet.getTrackedEntityIds(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/serializer/TextSerializer_v554.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/serializer/TextSerializer_v554.java index 8955af40..30299f73 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/serializer/TextSerializer_v554.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v554/serializer/TextSerializer_v554.java @@ -56,6 +56,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pa packet.setType(type); TextConverter converter = helper.getTextConverter(); boolean needsTranslation = buffer.readBoolean(); + packet.setNeedsTranslation(needsTranslation); switch (type) { case CHAT: diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/serializer/AddPlayerSerializer_v557.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/serializer/AddPlayerSerializer_v557.java index 8ea62370..075170cb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/serializer/AddPlayerSerializer_v557.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/serializer/AddPlayerSerializer_v557.java @@ -3,6 +3,7 @@ import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v534.serializer.AddPlayerSerializer_v534; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.common.util.VarInts; @@ -24,7 +25,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPacket helper.writePlayerAbilities(buffer, packet); helper.writeArray(buffer, packet.getEntityLinks(), helper::writeEntityLink); helper.writeString(buffer, packet.getDeviceId()); - buffer.writeIntLE(packet.getBuildPlatform()); + buffer.writeIntLE(packet.getBuildPlatform().ordinal()); } @Override @@ -43,6 +44,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, AddPlayerPack helper.readPlayerAbilities(buffer, packet); helper.readArray(buffer, packet.getEntityLinks(), helper::readEntityLink); packet.setDeviceId(helper.readString(buffer)); - packet.setBuildPlatform(buffer.readIntLE()); + packet.setBuildPlatform(BuildPlatform.from(buffer.readIntLE())); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java index dc5653fd..2211446b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v575/Bedrock_v575.java @@ -72,9 +72,9 @@ public class Bedrock_v575 extends Bedrock_v568 { .insert(6, CommandParam.OPERATOR) .insert(7, CommandParam.COMPARE_OPERATOR) .insert(8, CommandParam.TARGET) - .insert(9, CommandParam.UNKNOWN_STANDALONE) + .insert(9, CommandParam.STANDALONE_TARGET) .insert(10, CommandParam.WILDCARD_TARGET) - .insert(11, CommandParam.UNKNOWN_NON_ID) + .insert(11, CommandParam.NON_ID_TARGET) .insert(12, CommandParam.SCORE_ARG) .insert(13, CommandParam.SCORE_ARGS) .insert(14, CommandParam.SCORE_SELECT_PARAM) diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/ResourcePacksInfoSerializer_v618.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/ResourcePacksInfoSerializer_v618.java index 38809122..80942894 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/ResourcePacksInfoSerializer_v618.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/ResourcePacksInfoSerializer_v618.java @@ -10,7 +10,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket; import org.cloudburstmc.protocol.common.util.VarInts; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; @@ -62,7 +62,7 @@ protected void readCDNEntries(ByteBuf buffer, ResourcePacksInfoPacket packet, Be return; } - Map cdnUrls = new HashMap<>(); + Map cdnUrls = new LinkedHashMap<>(); for (int i = 0; i < size; i++) { String idVersion = helper.readString(buffer); String url = helper.readString(buffer); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v776/serializer/ItemComponentSerializer_v776.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v776/serializer/ItemComponentSerializer_v776.java index 121402a5..2c6d9613 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v776/serializer/ItemComponentSerializer_v776.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v776/serializer/ItemComponentSerializer_v776.java @@ -21,7 +21,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponentPa packetHelper.writeString(buf, item.getIdentifier()); buf.writeShortLE(item.getRuntimeId()); buf.writeBoolean(item.isComponentBased()); - VarInts.writeInt(buffer, item.getVersion().ordinal()); + VarInts.writeInt(buf, item.getVersion().ordinal()); if (item.getComponentData() != null) { // We should check for isComponentBased() instead, but for some reason there can be non-data driven items with component data packetHelper.writeTag(buf, item.getComponentData()); } else { @@ -36,7 +36,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponent String name = packetHelper.readString(buf); short itemId = buf.readShortLE(); boolean componentBased = buf.readBoolean(); - int version = VarInts.readInt(buffer); + int version = VarInts.readInt(buf); NbtMap data = packetHelper.readTag(buf, NbtMap.class); return new SimpleItemDefinition(name, itemId, ItemVersion.from(version), componentBased, data); }); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/BiomeDefinitionListSerializer_v800.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/BiomeDefinitionListSerializer_v800.java index 7af3a7f6..8af86c19 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/BiomeDefinitionListSerializer_v800.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/BiomeDefinitionListSerializer_v800.java @@ -63,12 +63,12 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefiniti packet.setBiomes(new BiomeDefinitions(indexedBiomes)); } - protected void writeDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition, SequencedHashSet strings) { - helper.writeOptional(buffer, Objects::nonNull, definition.getId(), (buf, id) -> buf.writeShortLE(strings.addAndGetIndex(id))); + protected void writeDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition) { + helper.writeOptional(buffer, Objects::nonNull, definition.getId(), ByteBuf::writeShortLE); } protected void writeDefinition(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition, SequencedHashSet strings) { - this.writeDefinitionId(buffer, helper, definition, strings); + this.writeDefinitionId(buffer, helper, definition); buffer.writeFloatLE(definition.getTemperature()); buffer.writeFloatLE(definition.getDownfall()); buffer.writeFloatLE(definition.getRedSporeDensity()); @@ -89,12 +89,12 @@ protected void writeDefinition(ByteBuf buffer, BedrockCodecHelper helper, BiomeD (buf, aHelper, data) -> writeDefinitionChunkGen(buf, aHelper, data, strings)); } - protected Indexed readDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, List strings) { - return helper.readOptional(buffer, null, (buf, aHelper) -> new Indexed<>(strings, buf.readUnsignedShortLE())); + protected Integer readDefinitionId(ByteBuf buffer, BedrockCodecHelper helper) { + return helper.readOptional(buffer, null, (buf, aHelper) -> buf.readUnsignedShortLE()); } protected BiomeDefinitionData readDefinition(ByteBuf buffer, BedrockCodecHelper helper, List strings) { - Indexed id = this.readDefinitionId(buffer, helper, strings); + Integer id = this.readDefinitionId(buffer, helper); float temperature = buffer.readFloatLE(); float downfall = buffer.readFloatLE(); float redSporeDensity = buffer.readFloatLE(); @@ -171,7 +171,7 @@ protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, Bed hasFrozenOceanSurface, hasTheEndSurface, mesaSurface, cappedSurface, overworldGenRules, multinoiseGenRules, - legacyWorldGenRules, null); + legacyWorldGenRules, null, null, null, null); } protected void writeClimate(ByteBuf buffer, BedrockCodecHelper helper, BiomeClimateData climate) { @@ -224,9 +224,9 @@ protected void writeConsolidatedFeature(ByteBuf buffer, BedrockCodecHelper helpe protected BiomeConsolidatedFeatureData readConsolidatedFeature(ByteBuf buffer, BedrockCodecHelper helper, List strings) { BiomeScatterParamData scatter = readScatterParam(buffer, helper, strings); - Indexed feature = new Indexed<>(strings, buffer.readShortLE()); - Indexed identifier = new Indexed<>(strings, buffer.readShortLE()); - Indexed pass = new Indexed<>(strings, buffer.readShortLE()); + Indexed feature = new Indexed<>(strings, buffer.readUnsignedShortLE()); + Indexed identifier = new Indexed<>(strings, buffer.readUnsignedShortLE()); + Indexed pass = new Indexed<>(strings, buffer.readUnsignedShortLE()); boolean internalUse = buffer.readBoolean(); return new BiomeConsolidatedFeatureData(scatter, feature, identifier, pass, internalUse); @@ -252,12 +252,12 @@ protected BiomeScatterParamData readScatterParam(ByteBuf buffer, BedrockCodecHel CoordinateEvaluationOrder evalOrder = EVALUATION_ORDERS[VarInts.readInt(buffer)]; int chancePercentTypeInt = VarInts.readInt(buffer); ExpressionOp chancePercentType = chancePercentTypeInt == -1 ? null : EXPRESSION_OPS[chancePercentTypeInt]; - Indexed chancePercent = new Indexed<>(strings, buffer.readShortLE()); + Indexed chancePercent = new Indexed<>(strings, buffer.readUnsignedShortLE()); int chanceNumerator = buffer.readIntLE(); int chanceDenominator = buffer.readIntLE(); int iterationTypeInt = VarInts.readInt(buffer); ExpressionOp iterationsType = iterationTypeInt == -1 ? null : EXPRESSION_OPS[iterationTypeInt]; - Indexed iterations = new Indexed<>(strings, buffer.readShortLE()); + Indexed iterations = new Indexed<>(strings, buffer.readUnsignedShortLE()); return new BiomeScatterParamData(coordinates, evalOrder, chancePercentType, chancePercent, chanceNumerator, chanceDenominator, @@ -277,9 +277,9 @@ protected void writeCoordinate(ByteBuf buffer, BedrockCodecHelper helper, BiomeC protected BiomeCoordinateData readCoordinate(ByteBuf buffer, BedrockCodecHelper helper, List strings) { ExpressionOp minValueType = this.readExpressionOp(buffer); - Indexed minValue = new Indexed<>(strings, buffer.readShortLE()); + Indexed minValue = new Indexed<>(strings, buffer.readUnsignedShortLE()); ExpressionOp maxValueType = this.readExpressionOp(buffer); - Indexed maxValue = new Indexed<>(strings, buffer.readShortLE()); + Indexed maxValue = new Indexed<>(strings, buffer.readUnsignedShortLE()); long gridOffset = buffer.readUnsignedIntLE(); long gridStepSize = buffer.readUnsignedIntLE(); RandomDistributionType distribution = RANDOM_DISTRIBUTION_TYPES[VarInts.readInt(buffer)]; @@ -341,9 +341,9 @@ protected BiomeElementData readBiomeElement(ByteBuf buffer, BedrockCodecHelper h float noiseLowerBound = buffer.readFloatLE(); float noiseUpperBound = buffer.readFloatLE(); ExpressionOp heightMinType = this.readExpressionOp(buffer); - Indexed heightMin = new Indexed<>(strings, buffer.readShortLE()); + Indexed heightMin = new Indexed<>(strings, buffer.readUnsignedShortLE()); ExpressionOp heightMaxType = this.readExpressionOp(buffer); - Indexed heightMax = new Indexed<>(strings, buffer.readShortLE()); + Indexed heightMax = new Indexed<>(strings, buffer.readUnsignedShortLE()); BiomeSurfaceMaterialData adjustedMaterials = readSurfaceMaterial(buffer, helper); return new BiomeElementData(noiseFrequencyScale, noiseLowerBound, noiseUpperBound, @@ -458,8 +458,8 @@ protected void writeWeight(ByteBuf buffer, BiomeWeightedData weightedData, Seque } protected BiomeWeightedData readWeight(ByteBuf buffer, BedrockCodecHelper helper, List strings) { - Indexed biome = new Indexed<>(strings, buffer.readShortLE()); - int weight = buffer.readIntLE(); + Indexed biome = new Indexed<>(strings, buffer.readUnsignedShortLE()); + int weight = (int) buffer.readUnsignedIntLE(); return new BiomeWeightedData(biome, weight); } @@ -476,7 +476,7 @@ protected BiomeConditionalTransformationData readConditionalTransformation(ByteB List strings) { List weightedBiomes = new ObjectArrayList<>(); helper.readArray(buffer, weightedBiomes, (buf, aHelper) -> readWeight(buf, aHelper, strings)); - Indexed conditionJson = new Indexed<>(strings, buffer.readShortLE()); + Indexed conditionJson = new Indexed<>(strings, buffer.readUnsignedShortLE()); long minPassingNeighbors = buffer.readUnsignedIntLE(); return new BiomeConditionalTransformationData(weightedBiomes, conditionJson, minPassingNeighbors); } @@ -488,7 +488,7 @@ protected void writeWeightedTemperature(ByteBuf buffer, BedrockCodecHelper helpe protected BiomeWeightedTemperatureData readWeightedTemperature(ByteBuf buffer, BedrockCodecHelper helper) { BiomeTemperatureCategory temperature = TEMPERATURE_CATEGORIES[VarInts.readInt(buffer)]; - int weight = buffer.readIntLE(); + int weight = (int) buffer.readUnsignedIntLE(); return new BiomeWeightedTemperatureData(temperature, weight); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/PlayerListSerializer_v800.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/PlayerListSerializer_v800.java index f7b7019f..df80db4b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/PlayerListSerializer_v800.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v800/serializer/PlayerListSerializer_v800.java @@ -14,13 +14,13 @@ public class PlayerListSerializer_v800 extends PlayerListSerializer_v649 { @Override protected void writeEntryBase(ByteBuf buffer, BedrockCodecHelper helper, PlayerListPacket.Entry entry) { super.writeEntryBase(buffer, helper, entry); - buffer.writeIntLE(entry.getColor()); + buffer.writeIntLE(entry.getColor().getRGB()); } @Override protected PlayerListPacket.Entry readEntryBase(ByteBuf buffer, BedrockCodecHelper helper) { PlayerListPacket.Entry entry = super.readEntryBase(buffer, helper); - entry.setColor(buffer.readIntLE()); + entry.setColor(new Color(buffer.readIntLE(), true)); return entry; } -} \ No newline at end of file +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v818/serializer/DebugDrawerSerializer_v818.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v818/serializer/DebugDrawerSerializer_v818.java index b7573162..c7f2eecc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v818/serializer/DebugDrawerSerializer_v818.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v818/serializer/DebugDrawerSerializer_v818.java @@ -44,7 +44,6 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DebugDrawerPa } protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { - VarInts.writeUnsignedLong(buffer, shape.getId()); writeCommonShapeData(buffer, helper, shape); switch (shape.getType()) { @@ -106,6 +105,7 @@ protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape } protected void writeCommonShapeData(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + VarInts.writeUnsignedLong(buffer, shape.getId()); helper.writeOptionalNull(buffer, shape.getType(), (buf, type) -> buf.writeByte(type.ordinal())); helper.writeOptionalNull(buffer, shape.getPosition(), WRITE_VECTOR3F); helper.writeOptionalNull(buffer, shape.getScale(), ByteBuf::writeFloatLE); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/BiomeDefinitionListSerializer_v827.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/BiomeDefinitionListSerializer_v827.java index 27e4f524..578d1c60 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/BiomeDefinitionListSerializer_v827.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/BiomeDefinitionListSerializer_v827.java @@ -4,31 +4,23 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v800.serializer.BiomeDefinitionListSerializer_v800; import org.cloudburstmc.protocol.bedrock.data.biome.BiomeDefinitionData; -import org.cloudburstmc.protocol.common.util.SequencedHashSet; -import org.cloudburstmc.protocol.common.util.index.Indexed; - -import java.util.List; public class BiomeDefinitionListSerializer_v827 extends BiomeDefinitionListSerializer_v800 { public static final BiomeDefinitionListSerializer_v827 INSTANCE = new BiomeDefinitionListSerializer_v827(); @Override - protected void writeDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition, SequencedHashSet strings) { + protected void writeDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition) { if (definition.getId() == null) { buffer.writeShortLE(-1); // Vanilla biomes don't contain ID field } else { - buffer.writeShortLE(strings.addAndGetIndex(definition.getId())); + buffer.writeShortLE(definition.getId()); } } @Override - protected Indexed readDefinitionId(ByteBuf buffer, BedrockCodecHelper helper, List strings) { - int idIndex = buffer.readShortLE(); - Indexed id = null; - if (idIndex != -1) { - id = new Indexed<>(strings, idIndex); - } - return id; + protected Integer readDefinitionId(ByteBuf buffer, BedrockCodecHelper helper) { + int id = buffer.readShortLE(); + return id != -1 ? id : null; } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/CameraInstructionSerializer_v827.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/CameraInstructionSerializer_v827.java index 810610a6..cdb948ac 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/CameraInstructionSerializer_v827.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v827/serializer/CameraInstructionSerializer_v827.java @@ -14,23 +14,27 @@ public class CameraInstructionSerializer_v827 extends CameraInstructionSerialize @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { super.serialize(buffer, helper, packet); - helper.writeOptionalNull(buffer, packet.getFovInstruction(), (buf, fovInstruction) -> { - buf.writeFloatLE(fovInstruction.getFov()); - buf.writeFloatLE(fovInstruction.getEaseTime()); - buf.writeByte(fovInstruction.getEaseType().ordinal()); - buf.writeBoolean(fovInstruction.isClear()); - }); + helper.writeOptionalNull(buffer, packet.getFovInstruction(), this::writeFovInstruction); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { super.deserialize(buffer, helper, packet); - packet.setFovInstruction(helper.readOptional(buffer, null, buf -> { - float fow = buf.readFloatLE(); - float easeTime = buf.readFloatLE(); - CameraEase easeType = CameraEase.values()[buf.readUnsignedByte()]; - boolean fovClear = buf.readBoolean(); - return new CameraFovInstruction(fow, easeTime, easeType, fovClear); - })); + packet.setFovInstruction(helper.readOptional(buffer, null, this::readFovInstruction)); + } + + protected void writeFovInstruction(ByteBuf buffer, BedrockCodecHelper helper, CameraFovInstruction fovInstruction) { + buffer.writeFloatLE(fovInstruction.getFov()); + buffer.writeFloatLE(fovInstruction.getEaseTime()); + buffer.writeByte(fovInstruction.getEaseType().ordinal()); + buffer.writeBoolean(fovInstruction.isClear()); + } + + protected CameraFovInstruction readFovInstruction(ByteBuf buffer, BedrockCodecHelper helper) { + float fow = buffer.readFloatLE(); + float easeTime = buffer.readFloatLE(); + CameraEase easeType = CameraEase.values()[buffer.readUnsignedByte()]; + boolean fovClear = buffer.readBoolean(); + return new CameraFovInstruction(fow, easeTime, easeType, fovClear); } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v844/serializer/BiomeDefinitionListSerializer_v844.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v844/serializer/BiomeDefinitionListSerializer_v844.java index ffa5c46f..be7bc9d7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v844/serializer/BiomeDefinitionListSerializer_v844.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v844/serializer/BiomeDefinitionListSerializer_v844.java @@ -7,7 +7,6 @@ import org.cloudburstmc.protocol.common.util.Preconditions; import org.cloudburstmc.protocol.common.util.SequencedHashSet; import org.cloudburstmc.protocol.common.util.VarInts; -import org.cloudburstmc.protocol.common.util.index.Indexed; import org.cloudburstmc.protocol.common.util.index.IndexedList; import java.awt.*; @@ -19,7 +18,7 @@ public class BiomeDefinitionListSerializer_v844 extends BiomeDefinitionListSeria @Override protected void writeDefinition(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionData definition, SequencedHashSet strings) { - this.writeDefinitionId(buffer, helper, definition, strings); + this.writeDefinitionId(buffer, helper, definition); buffer.writeFloatLE(definition.getTemperature()); buffer.writeFloatLE(definition.getDownfall()); buffer.writeFloatLE(definition.getFoliageSnow()); @@ -39,7 +38,7 @@ protected void writeDefinition(ByteBuf buffer, BedrockCodecHelper helper, BiomeD @Override protected BiomeDefinitionData readDefinition(ByteBuf buffer, BedrockCodecHelper helper, List strings) { - Indexed id = this.readDefinitionId(buffer, helper, strings); + Integer id = this.readDefinitionId(buffer, helper); float temperature = buffer.readFloatLE(); float downfall = buffer.readFloatLE(); float foliageSnow = buffer.readFloatLE(); @@ -116,7 +115,7 @@ protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, Bed hasFrozenOceanSurface, hasTheEndSurface, mesaSurface, cappedSurface, overworldGenRules, multinoiseGenRules, - legacyWorldGenRules, null); + legacyWorldGenRules, null, null, null, null); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/BiomeDefinitionListSerializer_v859.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/BiomeDefinitionListSerializer_v859.java index 79ca6d79..e8e83693 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/BiomeDefinitionListSerializer_v859.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/BiomeDefinitionListSerializer_v859.java @@ -17,7 +17,7 @@ public class BiomeDefinitionListSerializer_v859 extends BiomeDefinitionListSeria protected void writeDefinitionChunkGen(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionChunkGenData definitionChunkGen, SequencedHashSet strings) { super.writeDefinitionChunkGen(buffer, helper, definitionChunkGen, strings); - helper.writeOptionalNull(buffer, definitionChunkGen.getBiomeReplacementData(), this::writeBiomeReplacementData); + helper.writeOptionalNull(buffer, definitionChunkGen.getBiomeReplacements(), this::writeBiomeReplacementsData); } @Override @@ -40,7 +40,7 @@ protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, Bed BiomeMultinoiseGenRulesData multinoiseGenRules = helper.readOptional(buffer, null, this::readMultinoiseGenRules); BiomeLegacyWorldGenRulesData legacyWorldGenRules = helper.readOptional(buffer, null, (buf, aHelper) -> this.readLegacyWorldGenRules(buf, aHelper, strings)); - BiomeReplacementData replacementData = helper.readOptional(buffer, null, this::readBiomeReplacementData); + List replacementsData = helper.readOptional(buffer, null, this::readBiomeReplacementsData); return new BiomeDefinitionChunkGenData(climate, consolidatedFeatures, mountainParams, surfaceMaterialAdjustment, @@ -48,27 +48,33 @@ protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, Bed hasFrozenOceanSurface, hasTheEndSurface, mesaSurface, cappedSurface, overworldGenRules, multinoiseGenRules, - legacyWorldGenRules, replacementData); + legacyWorldGenRules, replacementsData, null, null, null); } - protected void writeBiomeReplacementData(ByteBuf buffer, BedrockCodecHelper helper, BiomeReplacementData replacementData) { - buffer.writeShortLE(replacementData.getBiome()); - buffer.writeShortLE(replacementData.getDimension()); - helper.writeArray(buffer, replacementData.getTargetBiomes(), (buf, value) -> buf.writeShortLE(value)); - buffer.writeFloatLE(replacementData.getAmount()); - buffer.writeFloatLE(replacementData.getNoiseFrequencyScale()); - buffer.writeIntLE(replacementData.getReplacementIndex()); + protected void writeBiomeReplacementsData(ByteBuf buffer, BedrockCodecHelper helper, List replacementsData) { + helper.writeArray(buffer, replacementsData, (buf, h, replacementData) -> { + buffer.writeShortLE(replacementData.getBiome()); + buffer.writeShortLE(replacementData.getDimension()); + helper.writeArray(buffer, replacementData.getTargetBiomes(), (buf1, value) -> buf1.writeShortLE(value)); + buffer.writeFloatLE(replacementData.getAmount()); + buffer.writeFloatLE(replacementData.getNoiseFrequencyScale()); + buffer.writeIntLE(replacementData.getReplacementIndex()); + }); } - protected BiomeReplacementData readBiomeReplacementData(ByteBuf buffer, BedrockCodecHelper helper) { - int biome = buffer.readShortLE(); - int dimension = buffer.readShortLE(); - List targetBiomes = new ArrayList<>(); - helper.readArray(buffer, targetBiomes, (buf, aHelper) -> buf.readShortLE()); - float amount = buffer.readFloatLE(); - float noiseFrequencyScale = buffer.readFloatLE(); - int replacementIndex = buffer.readIntLE(); + protected List readBiomeReplacementsData(ByteBuf buffer, BedrockCodecHelper helper) { + List replacementsData = new ArrayList<>(); + helper.readArray(buffer, replacementsData, (buf, h) -> { + int biome = buf.readUnsignedShortLE(); + int dimension = buf.readUnsignedShortLE(); + List targetBiomes = new ArrayList<>(); + h.readArray(buf, targetBiomes, (buf2, aHelper) -> (short) buf2.readUnsignedShortLE()); + float amount = buf.readFloatLE(); + float noiseFrequencyScale = buf.readFloatLE(); + int replacementIndex = (int) buf.readUnsignedIntLE(); - return new BiomeReplacementData(biome, dimension, targetBiomes, amount, noiseFrequencyScale, replacementIndex); + return new BiomeReplacementData(biome, dimension, targetBiomes, amount, noiseFrequencyScale, replacementIndex); + }); + return replacementsData; } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/CameraInstructionSerializer_v859.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/CameraInstructionSerializer_v859.java index da2fbf13..0f56a3e9 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/CameraInstructionSerializer_v859.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/CameraInstructionSerializer_v859.java @@ -1,13 +1,10 @@ package org.cloudburstmc.protocol.bedrock.codec.v859.serializer; import io.netty.buffer.ByteBuf; -import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v827.serializer.CameraInstructionSerializer_v827; -import org.cloudburstmc.protocol.bedrock.data.camera.CameraAttachToEntityInstruction; -import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineInstruction; -import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineType; +import org.cloudburstmc.protocol.bedrock.data.camera.*; import org.cloudburstmc.protocol.bedrock.packet.CameraInstructionPacket; import org.cloudburstmc.protocol.common.util.OptionalBoolean; @@ -21,16 +18,7 @@ public class CameraInstructionSerializer_v859 extends CameraInstructionSerialize @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { super.serialize(buffer, helper, packet); - helper.writeOptionalNull(buffer, packet.getSplineInstruction(), (buf, splineInstruction) -> { - buf.writeFloatLE(splineInstruction.getTotalTime()); - buf.writeByte(splineInstruction.getType().ordinal()); - helper.writeArray(buf, splineInstruction.getCurve(), helper::writeVector3f); - helper.writeArray(buf, splineInstruction.getProgressKeyFrames(), helper::writeVector2f); - helper.writeArray(buf, splineInstruction.getRotationOption(), (buf2, rotationOption) -> { - helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); - buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); - }); - }); + helper.writeOptionalNull(buffer, packet.getSplineInstruction(), (buf, splineInstruction) -> writeSplineInstruction(buf, helper, splineInstruction)); helper.writeOptionalNull(buffer, packet.getAttachInstruction(), (buf, attachInstruction) -> buf.writeLongLE(attachInstruction.getUniqueEntityId())); helper.writeOptional(buffer, OptionalBoolean::isPresent, packet.getDetachFromEntity(), (buf, optional) -> buf.writeBoolean(optional.getAsBoolean())); } @@ -38,22 +26,42 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructi @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { super.deserialize(buffer, helper, packet); - packet.setSplineInstruction(helper.readOptional(buffer, null, buf -> { - float totalTime = buf.readFloatLE(); - CameraSplineType type = CameraSplineType.values()[buf.readUnsignedByte()]; - List curve = new ArrayList<>(); - helper.readArray(buf, curve, helper::readVector3f); - List progressKeyFrames = new ArrayList<>(); - helper.readArray(buf, progressKeyFrames, helper::readVector2f); - List rotationOption = new ArrayList<>(); - helper.readArray(buf, rotationOption, buf2 -> { - Vector3f keyFrameValues = helper.readVector3f(buf2); - float keyFrameTimes = buf2.readFloatLE(); - return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes); - }); - return new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption); - })); + packet.setSplineInstruction(helper.readOptional(buffer, null, buf -> readSplineInstruction(buf, helper))); packet.setAttachInstruction(helper.readOptional(buffer, null, buf -> new CameraAttachToEntityInstruction(buf.readLongLE()))); packet.setDetachFromEntity(helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean()))); } + + protected void writeSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper, CameraSplineInstruction splineInstruction) { + buffer.writeFloatLE(splineInstruction.getTotalTime()); + buffer.writeByte(splineInstruction.getType().ordinal()); + helper.writeArray(buffer, splineInstruction.getCurve(), helper::writeVector3f); + helper.writeArray(buffer, splineInstruction.getProgressKeyFrames(), (buf2, frame) -> { + buf2.writeFloatLE(frame.getValue()); + buf2.writeFloatLE(frame.getTime()); + }); + helper.writeArray(buffer, splineInstruction.getRotationOption(), (buf2, rotationOption) -> { + helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); + buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); + }); + } + + protected CameraSplineInstruction readSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper) { + float totalTime = buffer.readFloatLE(); + CameraSplineType type = CameraSplineType.values()[buffer.readUnsignedByte()]; + List curve = new ArrayList<>(); + helper.readArray(buffer, curve, helper::readVector3f); + List progressKeyFrames = new ArrayList<>(); + helper.readArray(buffer, progressKeyFrames, buf2 -> { + float value = buf2.readFloatLE(); + float time = buf2.readFloatLE(); + return new CameraSplineInstruction.SplineProgressOption(value, time, CameraEase.LINEAR); + }); + List rotationOption = new ArrayList<>(); + helper.readArray(buffer, rotationOption, buf2 -> { + Vector3f keyFrameValues = helper.readVector3f(buf2); + float keyFrameTimes = buf2.readFloatLE(); + return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes, CameraEase.LINEAR); + }); + return new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption); + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/DebugDrawerSerializer_v859.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/DebugDrawerSerializer_v859.java index b2a3e813..74623fcb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/DebugDrawerSerializer_v859.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/DebugDrawerSerializer_v859.java @@ -31,12 +31,15 @@ protected int toPayloadType(DebugShape.Type type) { @Override protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { - VarInts.writeUnsignedLong(buffer, shape.getId()); writeCommonShapeData(buffer, helper, shape); - VarInts.writeInt(buffer, shape.getDimension()); - VarInts.writeUnsignedInt(buffer, toPayloadType(shape.getType())); - switch (shape.getType()) { + DebugShape.Type type = shape.getType(); + VarInts.writeUnsignedInt(buffer, toPayloadType(type)); + if (type == null) { + return; + } + + switch (type) { case ARROW: DebugArrow arrow = (DebugArrow) shape; helper.writeOptionalNull(buffer, arrow.getArrowEndPosition(), WRITE_VECTOR3F); @@ -67,6 +70,13 @@ protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape } } + @Override + protected void writeCommonShapeData(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + super.writeCommonShapeData(buffer, helper, shape); + + VarInts.writeInt(buffer, shape.getDimension()); + } + @Override protected DebugShape readShape(ByteBuf buffer, BedrockCodecHelper helper) { long id = VarInts.readUnsignedLong(buffer); @@ -113,4 +123,4 @@ protected DebugShape readShape(ByteBuf buffer, BedrockCodecHelper helper) { throw new IllegalStateException("Unknown debug shape type"); } } -} \ No newline at end of file +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/GraphicsParameterOverrideSerializer_v859.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/GraphicsParameterOverrideSerializer_v859.java index bdfdacaa..2d0f66b5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/GraphicsParameterOverrideSerializer_v859.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v859/serializer/GraphicsParameterOverrideSerializer_v859.java @@ -10,7 +10,7 @@ import org.cloudburstmc.protocol.bedrock.packet.GraphicsParameterOverridePacket; import org.cloudburstmc.protocol.common.util.VarInts; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -31,7 +31,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParamet @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParameterOverridePacket packet) { - Map values = new HashMap<>(); + Map values = new LinkedHashMap<>(); int length = VarInts.readUnsignedInt(buffer); for (int i = 0; i < length; i++) { float key = buffer.readFloatLE(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v860/Bedrock_v860.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v860/Bedrock_v860.java index 9862e72b..6e4bc000 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v860/Bedrock_v860.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v860/Bedrock_v860.java @@ -6,7 +6,6 @@ public class Bedrock_v860 extends Bedrock_v859 { public static final BedrockCodec CODEC = Bedrock_v859.CODEC.toBuilder() - .raknetProtocolVersion(11) .protocolVersion(860) .minecraftVersion("1.21.124") .build(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/Bedrock_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/Bedrock_v898.java index 33eebf7a..06439d3b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/Bedrock_v898.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/Bedrock_v898.java @@ -51,6 +51,7 @@ public class Bedrock_v898 extends Bedrock_v860 { .updateSerializer(ResourcePackStackPacket.class, ResourcePackStackSerializer_v898.INSTANCE) .updateSerializer(StartGamePacket.class, StartGameSerializer_v898.INSTANCE) .updateSerializer(TextPacket.class, TextSerializer_v898.INSTANCE) + .registerPacket(ClientboundDataStorePacket::new, ClientboundDataStoreSerializer_v898.INSTANCE, 330, PacketRecipient.CLIENT) .registerPacket(ServerboundDataStorePacket::new, ServerboundDataStoreSerializer_v898.INSTANCE, 332, PacketRecipient.SERVER) .build(); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/AvailableCommandsSerializer_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/AvailableCommandsSerializer_v898.java index d261e069..802e04f3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/AvailableCommandsSerializer_v898.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/AvailableCommandsSerializer_v898.java @@ -38,7 +38,7 @@ protected void writeCommand(ByteBuf buffer, BedrockCodecHelper helper, CommandDa helper.writeArray(buffer, commandData.getSubcommands(), (buf, subcommand) -> { int index = subCommands.indexOf(subcommand); checkArgument(index > -1, "Invalid subcommand index: " + subcommand); - buf.writeShortLE(index); + buf.writeIntLE(index); }); CommandOverloadData[] overloads = commandData.getOverloads(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ClientboundDataStoreSerializer_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ClientboundDataStoreSerializer_v898.java new file mode 100644 index 00000000..a7d39f40 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ClientboundDataStoreSerializer_v898.java @@ -0,0 +1,167 @@ +package org.cloudburstmc.protocol.bedrock.codec.v898.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreChange; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreRemoval; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreUpdate; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataStorePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.LinkedHashMap; +import java.util.Map; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundDataStoreSerializer_v898 implements BedrockPacketSerializer { + + public static final ClientboundDataStoreSerializer_v898 INSTANCE = new ClientboundDataStoreSerializer_v898(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataStorePacket packet) { + helper.writeArray(buffer, packet.getUpdates(), (buf, action) -> { + VarInts.writeUnsignedInt(buffer, action.getType()); + + switch (action.getType()) { + case 0: + helper.writeString(buffer, ((DataStoreUpdate) action).getDataStoreName()); + helper.writeString(buffer, ((DataStoreUpdate) action).getProperty()); + helper.writeString(buffer, ((DataStoreUpdate) action).getPath()); + + Object value = ((DataStoreUpdate) action).getData(); + + int type = value instanceof Number ? 0 : value instanceof Boolean ? 1 : value instanceof String ? 2 : -1; + + VarInts.writeUnsignedInt(buffer, type); + + switch (type) { + case 0: + buffer.writeDoubleLE(((Number) value).doubleValue()); + break; + case 1: + buffer.writeBoolean((boolean) value); + break; + case 2: + helper.writeString(buffer, (String) value); + break; + default: + throw new IllegalStateException("Invalid data store data type " + type); + } + + buffer.writeIntLE(((DataStoreUpdate) action).getUpdateCount()); + break; + case 1: + helper.writeString(buffer, ((DataStoreChange) action).getDataStoreName()); + helper.writeString(buffer, ((DataStoreChange) action).getProperty()); + buffer.writeIntLE(((DataStoreChange) action).getUpdateCount()); + writeDataStoreChange(buffer, helper, ((DataStoreChange) action).getNewValue()); + break; + case 2: + helper.writeString(buf, ((DataStoreRemoval) action).getDataStoreName()); + break; + default: + throw new UnsupportedOperationException("Unknown data store action"); + } + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataStorePacket packet) { + helper.readArray(buffer, packet.getUpdates(), (buf -> { + switch (VarInts.readUnsignedInt(buffer)) { + case 0: + DataStoreUpdate update = new DataStoreUpdate(); + update.setDataStoreName(helper.readString(buffer)); + update.setProperty(helper.readString(buffer)); + update.setPath(helper.readString(buffer)); + + int type = VarInts.readUnsignedInt(buffer); + + switch (type) { + case 0: + update.setData(buffer.readDoubleLE()); + break; + case 1: + update.setData(buffer.readBoolean()); + break; + case 2: + update.setData(helper.readString(buffer)); + break; + default: + throw new IllegalStateException("Invalid data store data type: " + type); + } + + update.setUpdateCount((int) buffer.readUnsignedIntLE()); + return update; + case 1: + DataStoreChange change = new DataStoreChange(); + change.setDataStoreName(helper.readString(buf)); + change.setProperty(helper.readString(buffer)); + change.setUpdateCount((int) buffer.readUnsignedIntLE()); + change.setNewValue(readDataStoreChange(buffer, helper)); + return change; + case 2: + DataStoreRemoval removal = new DataStoreRemoval(); + removal.setDataStoreName(helper.readString(buf)); + return removal; + default: + throw new UnsupportedOperationException("Unknown data store action"); + } + })); + } + + protected void writeDataStoreChange(ByteBuf buffer, BedrockCodecHelper helper, Object value) { + int type = value instanceof Boolean ? 1 : value instanceof Number ? 2 : value instanceof String ? 4 : value instanceof Map ? 6 : 0; + + buffer.writeIntLE(type); + + switch (type) { + case 0: + break; + case 1: + buffer.writeBoolean((boolean) value); + break; + case 2: + buffer.writeLongLE(((Number) value).longValue()); + break; + case 4: + helper.writeString(buffer, (String) value); + break; + case 6: + VarInts.writeUnsignedInt(buffer, ((Map) value).size()); + ((Map) value).forEach((k, v) -> { + helper.writeString(buffer, (String) k); + writeDataStoreChange(buffer, helper, v); + }); + break; + default: + throw new IllegalStateException("Invalid data store change data type " + type); + } + } + + protected Object readDataStoreChange(ByteBuf buffer, BedrockCodecHelper helper) { + int type = buffer.readIntLE(); + + switch (type) { + case 0: + return null; + case 1: + return buffer.readBoolean(); + case 2: + return buffer.readLongLE(); + case 4: + return helper.readString(buffer); + case 6: + int size = VarInts.readUnsignedInt(buffer); + Map values = new LinkedHashMap<>(); + for (int i = 0; i < size; i++) { + values.put(helper.readString(buffer), readDataStoreChange(buffer, helper)); + } + return values; + default: + throw new IllegalStateException("Invalid data store change data type " + type); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/EventSerializer_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/EventSerializer_v898.java index 8184b4d2..089e41f0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/EventSerializer_v898.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/EventSerializer_v898.java @@ -26,6 +26,9 @@ public EventSerializer_v898() { public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EventPacket packet) { VarInts.writeLong(buffer, packet.getUniqueEntityId()); EventData eventData = packet.getEventData(); + if (eventData.getPayloadType() == -1) { + throw new UnsupportedOperationException("Deprecated event type " + eventData.getType()); + } VarInts.writeInt(buffer, eventData.getType().ordinal()); buffer.writeBoolean(packet.isUsePlayerId()); @@ -35,7 +38,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EventPacket pac throw new UnsupportedOperationException("Unknown event type " + eventData.getType()); } - VarInts.writeUnsignedInt(buffer, eventData.getType().ordinal()); + VarInts.writeUnsignedInt(buffer, eventData.getPayloadType()); function.accept(buffer, helper, eventData); } @@ -50,7 +53,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, EventPacket p packet.setUsePlayerId(buffer.readBoolean()); - VarInts.readUnsignedInt(buffer); + VarInts.readUnsignedInt(buffer); //oneOf BiFunction function = this.readers.get(type); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ServerboundDataStoreSerializer_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ServerboundDataStoreSerializer_v898.java index 579965c8..7096d48f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ServerboundDataStoreSerializer_v898.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/ServerboundDataStoreSerializer_v898.java @@ -15,19 +15,19 @@ public class ServerboundDataStoreSerializer_v898 implements BedrockPacketSeriali @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataStorePacket packet) { - helper.writeString(buffer, packet.getDataStoreName()); - helper.writeString(buffer, packet.getProperty()); - helper.writeString(buffer, packet.getPath()); + helper.writeString(buffer, packet.getUpdate().getDataStoreName()); + helper.writeString(buffer, packet.getUpdate().getProperty()); + helper.writeString(buffer, packet.getUpdate().getPath()); - Object value = packet.getData(); + Object value = packet.getUpdate().getData(); - int type = value instanceof Double ? 0 : value instanceof Boolean ? 1 : value instanceof String ? 2 : -1; + int type = value instanceof Number ? 0 : value instanceof Boolean ? 1 : value instanceof String ? 2 : -1; VarInts.writeUnsignedInt(buffer, type); switch (type) { case 0: - buffer.writeDoubleLE((double) value); + buffer.writeDoubleLE(((Number) value).doubleValue()); break; case 1: buffer.writeBoolean((boolean) value); @@ -39,32 +39,31 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundData throw new IllegalStateException("Invalid data store data type"); } - buffer.writeIntLE(packet.getUpdateCount()); + buffer.writeIntLE(packet.getUpdate().getUpdateCount()); } @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataStorePacket packet) { - packet.setDataStoreName(helper.readString(buffer)); - packet.setProperty(helper.readString(buffer)); - packet.setPath(helper.readString(buffer)); + packet.getUpdate().setDataStoreName(helper.readString(buffer)); + packet.getUpdate().setProperty(helper.readString(buffer)); + packet.getUpdate().setPath(helper.readString(buffer)); int type = VarInts.readUnsignedInt(buffer); switch (type) { case 0: - packet.setData(buffer.readDoubleLE()); + packet.getUpdate().setData(buffer.readDoubleLE()); break; case 1: - packet.setData(buffer.readBoolean()); + packet.getUpdate().setData(buffer.readBoolean()); break; case 2: - packet.setData(helper.readString(buffer)); + packet.getUpdate().setData(helper.readString(buffer)); break; default: throw new IllegalStateException("Invalid data store data type: " + type); } - packet.setUpdateCount((int) buffer.readUnsignedIntLE()); + packet.getUpdate().setUpdateCount((int) buffer.readUnsignedIntLE()); } } - diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/TextSerializer_v898.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/TextSerializer_v898.java index 4421305f..462c4996 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/TextSerializer_v898.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v898/serializer/TextSerializer_v898.java @@ -7,10 +7,13 @@ import org.cloudburstmc.protocol.bedrock.codec.v685.serializer.TextSerializer_v685; import org.cloudburstmc.protocol.bedrock.packet.TextPacket; import org.cloudburstmc.protocol.common.util.TextConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class TextSerializer_v898 extends TextSerializer_v685 { public static final TextSerializer_v898 INSTANCE = new TextSerializer_v898(); + private static final Logger log = LoggerFactory.getLogger(TextSerializer_v898.class); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { @@ -20,6 +23,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack Boolean needsTranslation = converter.needsTranslation(message); buffer.writeBoolean(needsTranslation != null ? needsTranslation : packet.isNeedsTranslation()); + String text; switch (type) { case RAW: @@ -33,7 +37,14 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack helper.writeString(buffer, "textObjectAnnouncement"); helper.writeString(buffer, "textObject"); buffer.writeByte(type.ordinal()); - helper.writeString(buffer, converter.serialize(message)); + text = converter.serialize(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); break; case JSON: case WHISPER_JSON: @@ -46,7 +57,14 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack helper.writeString(buffer, "textObjectAnnouncement"); helper.writeString(buffer, "textObject"); buffer.writeByte(type.ordinal()); - helper.writeString(buffer, converter.serializeJson(message)); + text = converter.serializeJson(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); break; case CHAT: case WHISPER: @@ -57,7 +75,14 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack helper.writeString(buffer, "announcement"); buffer.writeByte(type.ordinal()); helper.writeString(buffer, packet.getSourceName()); - helper.writeString(buffer, converter.serialize(message)); + text = converter.serialize(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); break; case TRANSLATION: case POPUP: @@ -67,7 +92,13 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack helper.writeString(buffer, "popup"); helper.writeString(buffer, "jukeboxPopup"); buffer.writeByte(type.ordinal()); - String text = converter.serializeWithArguments(message, packet.getParameters()); + text = converter.serializeWithArguments(message, packet.getParameters()); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } helper.writeString(buffer, text); helper.writeArray(buffer, packet.getParameters(), helper::writeString); break; @@ -85,6 +116,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket pack public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { TextConverter converter = helper.getTextConverter(); boolean needsTranslation = buffer.readBoolean(); + packet.setNeedsTranslation(needsTranslation); switch (buffer.readByte()) { case 0: // MessageOnly diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/Bedrock_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/Bedrock_v924.java new file mode 100644 index 00000000..bfdc09db --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/Bedrock_v924.java @@ -0,0 +1,77 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v786.serializer.LevelSoundEventSerializer_v786; +import org.cloudburstmc.protocol.bedrock.codec.v898.BedrockCodecHelper_v898; +import org.cloudburstmc.protocol.bedrock.codec.v898.Bedrock_v898; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v924 extends Bedrock_v898 { + + protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v898.ENTITY_DATA + .toBuilder() + .insert(EntityDataTypes.ARROW_SHOOTER_ID, 17, EntityDataFormat.LONG) + .insert(EntityDataTypes.FIREWORK_DIRECTION, 17, EntityDataFormat.VECTOR3F) + .insert(EntityDataTypes.FIREWORK_SHOOTER_ID, 18, EntityDataFormat.LONG) + .insert(EntityDataTypes.AIM_ASSIST_PRIORITY_PRESET_ID, 136, EntityDataFormat.INT) + .insert(EntityDataTypes.AIM_ASSIST_PRIORITY_CATEGORY_ID, 137, EntityDataFormat.INT) + .insert(EntityDataTypes.AIM_ASSIST_PRIORITY_ACTOR_ID, 138, EntityDataFormat.INT) + .build(); + + protected static final TypeMap SOUND_EVENTS = Bedrock_v898.SOUND_EVENTS + .toBuilder() + .replace(578, SoundEvent.SADDLE_IN_WATER) + .insert(579, SoundEvent.STONE_SPEAR_ATTACK_HIT) + .insert(580, SoundEvent.IRON_SPEAR_ATTACK_HIT) + .insert(581, SoundEvent.COPPER_SPEAR_ATTACK_HIT) + .insert(582, SoundEvent.GOLDEN_SPEAR_ATTACK_HIT) + .insert(583, SoundEvent.DIAMOND_SPEAR_ATTACK_HIT) + .insert(584, SoundEvent.NETHERITE_SPEAR_ATTACK_HIT) + .insert(585, SoundEvent.STONE_SPEAR_ATTACK_MISS) + .insert(586, SoundEvent.IRON_SPEAR_ATTACK_MISS) + .insert(587, SoundEvent.COPPER_SPEAR_ATTACK_MISS) + .insert(588, SoundEvent.GOLDEN_SPEAR_ATTACK_MISS) + .insert(589, SoundEvent.DIAMOND_SPEAR_ATTACK_MISS) + .insert(590, SoundEvent.NETHERITE_SPEAR_ATTACK_MISS) + .insert(591, SoundEvent.STONE_SPEAR_USE) + .insert(592, SoundEvent.IRON_SPEAR_USE) + .insert(593, SoundEvent.COPPER_SPEAR_USE) + .insert(594, SoundEvent.GOLDEN_SPEAR_USE) + .insert(595, SoundEvent.DIAMOND_SPEAR_USE) + .insert(596, SoundEvent.NETHERITE_SPEAR_USE) + .insert(597, SoundEvent.UNDEFINED) + + .build(); + + public static final BedrockCodec CODEC = Bedrock_v898.CODEC.toBuilder() + .protocolVersion(924) + .minecraftVersion("1.26.0") + .helper(() -> new BedrockCodecHelper_v898(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(BiomeDefinitionListPacket.class, BiomeDefinitionListSerializer_v924.INSTANCE) + .updateSerializer(BookEditPacket.class, BookEditSerializer_v924.INSTANCE) + .updateSerializer(CameraAimAssistPresetsPacket.class, CameraAimAssistPresetsSerializer_v924.INSTANCE) + .updateSerializer(CameraInstructionPacket.class, CameraInstructionSerializer_v924.INSTANCE) + .updateSerializer(ClientboundDataStorePacket.class, ClientboundDataStoreSerializer_v924.INSTANCE) + .updateSerializer(DebugDrawerPacket.class, DebugDrawerSerializer_v924.INSTANCE) + .updateSerializer(GraphicsParameterOverridePacket.class, GraphicsParameterOverrideSerializer_v924.INSTANCE) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v786(SOUND_EVENTS)) + .updateSerializer(ServerboundDataStorePacket.class, ServerboundDataStoreSerializer_v924.INSTANCE) + .updateSerializer(ServerboundDiagnosticsPacket.class, ServerboundDiagnosticsSerializer_v924.INSTANCE) + .updateSerializer(StartGamePacket.class, StartGameSerializer_v924.INSTANCE) + .updateSerializer(TextPacket.class, TextSerializer_v924.INSTANCE) + .registerPacket(ClientboundDataDrivenUIShowScreenPacket::new, ClientboundDataDrivenUIShowScreenSerializer_v924.INSTANCE, 333, PacketRecipient.CLIENT) + .registerPacket(ClientboundDataDrivenUICloseScreenPacket::new, ClientboundDataDrivenUICloseScreenSerializer_v924.INSTANCE, 334, PacketRecipient.CLIENT) + .registerPacket(ClientboundDataDrivenUIReloadPacket::new, ClientboundDataDrivenUIReloadSerializer_v924.INSTANCE, 335, PacketRecipient.CLIENT) + .registerPacket(ClientboundTextureShiftPacket::new, ClientboundTextureShiftSerializer_v924.INSTANCE, 336, PacketRecipient.CLIENT) + .registerPacket(VoxelShapesPacket::new, VoxelShapesSerializer_v924.INSTANCE, 337, PacketRecipient.CLIENT) + .registerPacket(CameraSplinePacket::new, CameraSplineSerializer_v924.INSTANCE, 338, PacketRecipient.CLIENT) + .registerPacket(CameraAimAssistActorPriorityPacket::new, CameraAimAssistActorPrioritySerializer_v924.INSTANCE, 339, PacketRecipient.CLIENT) + .build(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BiomeDefinitionListSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BiomeDefinitionListSerializer_v924.java new file mode 100644 index 00000000..9d1766ee --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BiomeDefinitionListSerializer_v924.java @@ -0,0 +1,54 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v859.serializer.BiomeDefinitionListSerializer_v859; +import org.cloudburstmc.protocol.bedrock.data.VillageType; +import org.cloudburstmc.protocol.bedrock.data.biome.*; +import org.cloudburstmc.protocol.common.util.SequencedHashSet; + +import java.util.List; + +public class BiomeDefinitionListSerializer_v924 extends BiomeDefinitionListSerializer_v859 { + + public static final BiomeDefinitionListSerializer_v924 INSTANCE = new BiomeDefinitionListSerializer_v924(); + + @Override + protected void writeDefinitionChunkGen(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionChunkGenData definitionChunkGen, + SequencedHashSet strings) { + super.writeDefinitionChunkGen(buffer, helper, definitionChunkGen, strings); + helper.writeOptionalNull(buffer, definitionChunkGen.getVillageType(), (b, n) -> b.writeByte(n.ordinal())); + } + + @Override + protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, BedrockCodecHelper helper, List strings) { + BiomeClimateData climate = helper.readOptional(buffer, null, this::readClimate); + List consolidatedFeatures = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readConsolidatedFeatures(buf, aHelper, strings)); + BiomeMountainParamsData mountainParams = helper.readOptional(buffer, null, this::readMountainParamsData); + BiomeSurfaceMaterialAdjustmentData surfaceMaterialAdjustment = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readSurfaceMaterialAdjustment(buf, aHelper, strings)); + BiomeSurfaceMaterialData surfaceMaterial = helper.readOptional(buffer, null, this::readSurfaceMaterial); + boolean hasDefaultOverworldSurface = buffer.readBoolean(); + boolean hasSwampSurface = buffer.readBoolean(); + boolean hasFrozenOceanSurface = buffer.readBoolean(); + boolean hasTheEndSurface = buffer.readBoolean(); + BiomeMesaSurfaceData mesaSurface = helper.readOptional(buffer, null, this::readMesaSurface); + BiomeCappedSurfaceData cappedSurface = helper.readOptional(buffer, null, this::readCappedSurface); + BiomeOverworldGenRulesData overworldGenRules = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readOverworldGenRules(buf, aHelper, strings)); + BiomeMultinoiseGenRulesData multinoiseGenRules = helper.readOptional(buffer, null, this::readMultinoiseGenRules); + BiomeLegacyWorldGenRulesData legacyWorldGenRules = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readLegacyWorldGenRules(buf, aHelper, strings)); + List replacementsData = helper.readOptional(buffer, null, this::readBiomeReplacementsData); + VillageType villageType = helper.readOptional(buffer, null, buf -> VillageType.values()[buf.readUnsignedByte()]); + + return new BiomeDefinitionChunkGenData(climate, consolidatedFeatures, + mountainParams, surfaceMaterialAdjustment, + surfaceMaterial, hasDefaultOverworldSurface, hasSwampSurface, + hasFrozenOceanSurface, hasTheEndSurface, + mesaSurface, cappedSurface, + overworldGenRules, multinoiseGenRules, + legacyWorldGenRules, replacementsData, villageType, null, null); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BookEditSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BookEditSerializer_v924.java new file mode 100644 index 00000000..f5766cc1 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/BookEditSerializer_v924.java @@ -0,0 +1,69 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.BookEditSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.BookEditPacket; +import org.cloudburstmc.protocol.common.util.TextConverter; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class BookEditSerializer_v924 extends BookEditSerializer_v291 { + + public static final BookEditSerializer_v924 INSTANCE = new BookEditSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, BookEditPacket packet) { + VarInts.writeInt(buffer, packet.getInventorySlot()); + VarInts.writeUnsignedInt(buffer, packet.getAction().ordinal()); + + TextConverter converter = helper.getTextConverter(); + switch (packet.getAction()) { + case REPLACE_PAGE: + case ADD_PAGE: + VarInts.writeInt(buffer, packet.getPageNumber()); + helper.writeString(buffer, converter.serialize(packet.getText(CharSequence.class))); + helper.writeString(buffer, packet.getPhotoName()); + break; + case DELETE_PAGE: + VarInts.writeInt(buffer, packet.getPageNumber()); + break; + case SWAP_PAGES: + VarInts.writeInt(buffer, packet.getPageNumber()); + VarInts.writeInt(buffer, packet.getSecondaryPageNumber()); + break; + case SIGN_BOOK: + helper.writeString(buffer, converter.serialize(packet.getTitle(CharSequence.class))); + helper.writeString(buffer, converter.serialize(packet.getAuthor(CharSequence.class))); + helper.writeString(buffer, packet.getXuid()); + break; + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BookEditPacket packet) { + packet.setInventorySlot(VarInts.readInt(buffer)); + packet.setAction(types.get(VarInts.readUnsignedInt(buffer))); + + TextConverter converter = helper.getTextConverter(); + switch (packet.getAction()) { + case REPLACE_PAGE: + case ADD_PAGE: + packet.setPageNumber(VarInts.readInt(buffer)); + packet.setText(converter.deserialize(helper.readString(buffer))); + packet.setPhotoName(helper.readString(buffer)); + break; + case DELETE_PAGE: + packet.setPageNumber(VarInts.readInt(buffer)); + break; + case SWAP_PAGES: + packet.setPageNumber(VarInts.readInt(buffer)); + packet.setSecondaryPageNumber(VarInts.readInt(buffer)); + break; + case SIGN_BOOK: + packet.setTitle(converter.deserialize(helper.readString(buffer))); + packet.setAuthor(converter.deserialize(helper.readString(buffer))); + packet.setXuid(helper.readString(buffer)); + break; + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistActorPrioritySerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistActorPrioritySerializer_v924.java new file mode 100644 index 00000000..544ab542 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistActorPrioritySerializer_v924.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.camera.AimAssistActorPriorityData; +import org.cloudburstmc.protocol.bedrock.packet.CameraAimAssistActorPriorityPacket; + +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class CameraAimAssistActorPrioritySerializer_v924 implements BedrockPacketSerializer { + + public static final CameraAimAssistActorPrioritySerializer_v924 INSTANCE = new CameraAimAssistActorPrioritySerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraAimAssistActorPriorityPacket packet) { + helper.writeArray(buffer, packet.getPriorityData(), (buf, value) -> { + buf.writeIntLE(value.getPresetIndex()); + buf.writeIntLE(value.getCategoryIndex()); + buf.writeIntLE(value.getActorIndex()); + buf.writeIntLE(value.getPriorityValue()); + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraAimAssistActorPriorityPacket packet) { + List priorityData = new ArrayList<>(); + helper.readArray(buffer, priorityData, (buf, h) -> + new AimAssistActorPriorityData(buf.readIntLE(), buf.readIntLE(), buf.readIntLE(), buf.readIntLE())); + packet.setPriorityData(priorityData); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistPresetsSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistPresetsSerializer_v924.java new file mode 100644 index 00000000..7fa79367 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraAimAssistPresetsSerializer_v924.java @@ -0,0 +1,68 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v800.serializer.CameraAimAssistPresetsSerializer_v800; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraAimAssistCategory; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraAimAssistPresetDefinition; + +public class CameraAimAssistPresetsSerializer_v924 extends CameraAimAssistPresetsSerializer_v800 { + + public static final CameraAimAssistPresetsSerializer_v924 INSTANCE = new CameraAimAssistPresetsSerializer_v924(); + + @Override + protected void writeCategory(ByteBuf buffer, BedrockCodecHelper helper, CameraAimAssistCategory category) { + helper.writeString(buffer, category.getName()); + + helper.writeArray(buffer, category.getEntityPriorities(), this::writePriority); + helper.writeArray(buffer, category.getBlockPriorities(), this::writePriority); + helper.writeArray(buffer, category.getBlockTagPriorities(), this::writePriority); + helper.writeArray(buffer, category.getEntityTypeFamiliesPriorities(), this::writePriority); + + helper.writeOptionalNull(buffer, category.getEntityDefaultPriorities(), ByteBuf::writeIntLE); + helper.writeOptionalNull(buffer, category.getBlockDefaultPriorities(), ByteBuf::writeIntLE); + } + + @Override + protected CameraAimAssistCategory readCategory(ByteBuf buffer, BedrockCodecHelper helper) { + CameraAimAssistCategory category = new CameraAimAssistCategory(); + category.setName(helper.readString(buffer)); + + helper.readArray(buffer, category.getEntityPriorities(), this::readPriority); + helper.readArray(buffer, category.getBlockPriorities(), this::readPriority); + helper.readArray(buffer, category.getBlockTagPriorities(), this::readPriority); + helper.readArray(buffer, category.getEntityTypeFamiliesPriorities(), this::readPriority); + + category.setEntityDefaultPriorities(helper.readOptional(buffer, null, ByteBuf::readIntLE)); + category.setBlockDefaultPriorities(helper.readOptional(buffer, null, ByteBuf::readIntLE)); + return category; + } + + @Override + protected void writePreset(ByteBuf buffer, BedrockCodecHelper helper, CameraAimAssistPresetDefinition preset) { + helper.writeString(buffer, preset.getIdentifier()); + helper.writeArray(buffer, preset.getBlockExclusionList(), helper::writeString); + helper.writeArray(buffer, preset.getEntityExclusionList(), helper::writeString); + helper.writeArray(buffer, preset.getBlockTagExclusionList(), helper::writeString); + helper.writeArray(buffer, preset.getEntityTypeFamiliesExclusionList(), helper::writeString); + helper.writeArray(buffer, preset.getLiquidTargetingList(), helper::writeString); + helper.writeArray(buffer, preset.getItemSettings(), this::writeItemSetting); + helper.writeOptionalNull(buffer, preset.getDefaultItemSettings(), helper::writeString); + helper.writeOptionalNull(buffer, preset.getHandSettings(), helper::writeString); + } + + @Override + protected CameraAimAssistPresetDefinition readPreset(ByteBuf buffer, BedrockCodecHelper helper) { + final CameraAimAssistPresetDefinition preset = new CameraAimAssistPresetDefinition(); + preset.setIdentifier(helper.readString(buffer)); + helper.readArray(buffer, preset.getBlockExclusionList(), helper::readString); + helper.readArray(buffer, preset.getEntityExclusionList(), helper::readString); + helper.readArray(buffer, preset.getBlockTagExclusionList(), helper::readString); + helper.readArray(buffer, preset.getEntityTypeFamiliesExclusionList(), helper::readString); + helper.readArray(buffer, preset.getLiquidTargetingList(), helper::readString); + helper.readArray(buffer, preset.getItemSettings(), this::readItemSetting); + preset.setDefaultItemSettings(helper.readOptional(buffer, null, helper::readString)); + preset.setHandSettings(helper.readOptional(buffer, null, helper::readString)); + return preset; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraInstructionSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraInstructionSerializer_v924.java new file mode 100644 index 00000000..aff18cd4 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraInstructionSerializer_v924.java @@ -0,0 +1,59 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v859.serializer.CameraInstructionSerializer_v859; +import org.cloudburstmc.protocol.bedrock.data.camera.*; + +import java.util.ArrayList; +import java.util.List; + +public class CameraInstructionSerializer_v924 extends CameraInstructionSerializer_v859 { + + public static final CameraInstructionSerializer_v924 INSTANCE = new CameraInstructionSerializer_v924(); + + @Override + protected void writeSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper, CameraSplineInstruction splineInstruction) { + buffer.writeFloatLE(splineInstruction.getTotalTime()); + buffer.writeByte(splineInstruction.getType().ordinal()); + helper.writeArray(buffer, splineInstruction.getCurve(), helper::writeVector3f); + helper.writeArray(buffer, splineInstruction.getProgressKeyFrames(), (buf2, frame) -> { + buf2.writeFloatLE(frame.getValue()); + buf2.writeFloatLE(frame.getTime()); + buf2.writeByte(frame.getEase().ordinal()); + }); + helper.writeArray(buffer, splineInstruction.getRotationOption(), (buf2, rotationOption) -> { + helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); + buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); + buf2.writeByte(rotationOption.getEase().ordinal()); + }); + helper.writeString(buffer, splineInstruction.getSplineIdentifier()); + buffer.writeBoolean(splineInstruction.isLoadFromJson()); + } + + @Override + protected CameraSplineInstruction readSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper) { + float totalTime = buffer.readFloatLE(); + CameraSplineType type = CameraSplineType.values()[buffer.readUnsignedByte()]; + List curve = new ArrayList<>(); + helper.readArray(buffer, curve, helper::readVector3f); + List progressKeyFrames = new ArrayList<>(); + helper.readArray(buffer, progressKeyFrames, buf2 -> { + float value = buf2.readFloatLE(); + float time = buf2.readFloatLE(); + CameraEase ease = CameraEase.values()[buf2.readUnsignedByte()]; + return new CameraSplineInstruction.SplineProgressOption(value, time, ease); + }); + List rotationOption = new ArrayList<>(); + helper.readArray(buffer, rotationOption, buf2 -> { + Vector3f keyFrameValues = helper.readVector3f(buf2); + float keyFrameTimes = buf2.readFloatLE(); + CameraEase ease = CameraEase.values()[buf2.readUnsignedByte()]; + return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes, ease); + }); + String splineIdentifier = helper.readString(buffer); + boolean loadFromJson = buffer.readBoolean(); + return new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption, splineIdentifier, loadFromJson); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraSplineSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraSplineSerializer_v924.java new file mode 100644 index 00000000..1de0e519 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/CameraSplineSerializer_v924.java @@ -0,0 +1,72 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineDefinition; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineInstruction; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineType; +import org.cloudburstmc.protocol.bedrock.packet.CameraSplinePacket; + +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class CameraSplineSerializer_v924 implements BedrockPacketSerializer { + + public static final CameraSplineSerializer_v924 INSTANCE = new CameraSplineSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraSplinePacket packet) { + helper.writeArray(buffer, packet.getSplines(), (buf, spline) -> { + helper.writeString(buf, spline.getName()); + buf.writeFloatLE(spline.getInstruction().getTotalTime()); + helper.writeString(buf, spline.getInstruction().getType().getSerializeName()); + helper.writeArray(buf, spline.getInstruction().getCurve(), helper::writeVector3f); + helper.writeArray(buf, spline.getInstruction().getProgressKeyFrames(), (buf2, frame) -> { + buf2.writeFloatLE(frame.getValue()); + buf2.writeFloatLE(frame.getTime()); + helper.writeString(buf2, frame.getEase().getSerializeName()); + }); + helper.writeArray(buf, spline.getInstruction().getRotationOption(), (buf2, rotationOption) -> { + helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); + buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); + helper.writeString(buf2, rotationOption.getEase().getSerializeName()); + }); + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraSplinePacket packet) { + List splines = new ArrayList<>(); + + helper.readArray(buffer, splines, (buf, h) -> { + String name = helper.readString(buf); + float totalTime = buf.readFloatLE(); + CameraSplineType type = CameraSplineType.fromName(helper.readString(buf)); + List curve = new ArrayList<>(); + helper.readArray(buf, curve, helper::readVector3f); + List progressKeyFrames = new ArrayList<>(); + helper.readArray(buf, progressKeyFrames, buf2 -> { + float value = buf2.readFloatLE(); + float time = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineProgressOption(value, time, ease); + }); + List rotationOption = new ArrayList<>(); + helper.readArray(buf, rotationOption, buf2 -> { + Vector3f keyFrameValues = helper.readVector3f(buf2); + float keyFrameTimes = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes, ease); + }); + return new CameraSplineDefinition(name, new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption)); + }); + + packet.setSplines(splines); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUICloseScreenSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUICloseScreenSerializer_v924.java new file mode 100644 index 00000000..e1a46d59 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUICloseScreenSerializer_v924.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataDrivenUICloseScreenPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundDataDrivenUICloseScreenSerializer_v924 implements BedrockPacketSerializer { + + public static final ClientboundDataDrivenUICloseScreenSerializer_v924 INSTANCE = new ClientboundDataDrivenUICloseScreenSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUICloseScreenPacket packet) { + + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUICloseScreenPacket packet) { + + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIReloadSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIReloadSerializer_v924.java new file mode 100644 index 00000000..6fcfa82d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIReloadSerializer_v924.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataDrivenUIReloadPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundDataDrivenUIReloadSerializer_v924 implements BedrockPacketSerializer { + + public static final ClientboundDataDrivenUIReloadSerializer_v924 INSTANCE = new ClientboundDataDrivenUIReloadSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIReloadPacket packet) { + + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIReloadPacket packet) { + + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIShowScreenSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIShowScreenSerializer_v924.java new file mode 100644 index 00000000..bfab8d7d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataDrivenUIShowScreenSerializer_v924.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataDrivenUIShowScreenPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundDataDrivenUIShowScreenSerializer_v924 implements BedrockPacketSerializer { + + public static final ClientboundDataDrivenUIShowScreenSerializer_v924 INSTANCE = new ClientboundDataDrivenUIShowScreenSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIShowScreenPacket packet) { + helper.writeString(buffer, packet.getScreenId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIShowScreenPacket packet) { + packet.setScreenId(helper.readString(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataStoreSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataStoreSerializer_v924.java new file mode 100644 index 00000000..7b01ec71 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundDataStoreSerializer_v924.java @@ -0,0 +1,110 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v898.serializer.ClientboundDataStoreSerializer_v898; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreChange; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreRemoval; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreUpdate; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataStorePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class ClientboundDataStoreSerializer_v924 extends ClientboundDataStoreSerializer_v898 { + + public static final ClientboundDataStoreSerializer_v924 INSTANCE = new ClientboundDataStoreSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataStorePacket packet) { + helper.writeArray(buffer, packet.getUpdates(), (buf, action) -> { + VarInts.writeUnsignedInt(buffer, action.getType()); + + switch (action.getType()) { + case 0: + helper.writeString(buffer, ((DataStoreUpdate) action).getDataStoreName()); + helper.writeString(buffer, ((DataStoreUpdate) action).getProperty()); + helper.writeString(buffer, ((DataStoreUpdate) action).getPath()); + + Object value = ((DataStoreUpdate) action).getData(); + + int type = value instanceof Number ? 0 : value instanceof Boolean ? 1 : value instanceof String ? 2 : -1; + + VarInts.writeUnsignedInt(buffer, type); + + switch (type) { + case 0: + buffer.writeDoubleLE(((Number) value).doubleValue()); + break; + case 1: + buffer.writeBoolean((boolean) value); + break; + case 2: + helper.writeString(buffer, (String) value); + break; + default: + throw new IllegalStateException("Invalid data store data type " + type); + } + + buffer.writeIntLE(((DataStoreUpdate) action).getUpdateCount()); + buffer.writeIntLE(((DataStoreUpdate) action).getPathUpdateCount()); + break; + case 1: + helper.writeString(buffer, ((DataStoreChange) action).getDataStoreName()); + helper.writeString(buffer, ((DataStoreChange) action).getProperty()); + buffer.writeIntLE(((DataStoreChange) action).getUpdateCount()); + writeDataStoreChange(buffer, helper, ((DataStoreChange) action).getNewValue()); + break; + case 2: + helper.writeString(buf, ((DataStoreRemoval) action).getDataStoreName()); + break; + default: + throw new UnsupportedOperationException("Unknown data store action"); + } + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataStorePacket packet) { + helper.readArray(buffer, packet.getUpdates(), (buf -> { + switch (VarInts.readUnsignedInt(buffer)) { + case 0: + DataStoreUpdate update = new DataStoreUpdate(); + update.setDataStoreName(helper.readString(buffer)); + update.setProperty(helper.readString(buffer)); + update.setPath(helper.readString(buffer)); + + int type = VarInts.readUnsignedInt(buffer); + + switch (type) { + case 0: + update.setData(buffer.readDoubleLE()); + break; + case 1: + update.setData(buffer.readBoolean()); + break; + case 2: + update.setData(helper.readString(buffer)); + break; + default: + throw new IllegalStateException("Invalid data store data type: " + type); + } + + update.setUpdateCount((int) buffer.readUnsignedIntLE()); + update.setPathUpdateCount((int) buffer.readUnsignedIntLE()); + return update; + case 1: + DataStoreChange change = new DataStoreChange(); + change.setDataStoreName(helper.readString(buf)); + change.setProperty(helper.readString(buffer)); + change.setUpdateCount((int) buffer.readUnsignedIntLE()); + change.setNewValue(readDataStoreChange(buffer, helper)); + return change; + case 2: + DataStoreRemoval removal = new DataStoreRemoval(); + removal.setDataStoreName(helper.readString(buf)); + return removal; + default: + throw new UnsupportedOperationException("Unknown data store action"); + } + })); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundTextureShiftSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundTextureShiftSerializer_v924.java new file mode 100644 index 00000000..7bc5c70d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ClientboundTextureShiftSerializer_v924.java @@ -0,0 +1,44 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundTextureShiftPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundTextureShiftSerializer_v924 implements BedrockPacketSerializer { + + public static final ClientboundTextureShiftSerializer_v924 INSTANCE = new ClientboundTextureShiftSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundTextureShiftPacket packet) { + buffer.writeByte(packet.getAction().ordinal()); + helper.writeString(buffer, packet.getCollectionName()); + helper.writeString(buffer, packet.getFromStep()); + helper.writeString(buffer, packet.getToStep()); + helper.writeArray(buffer, packet.getAllSteps(), helper::writeString); + VarInts.writeUnsignedLong(buffer, packet.getCurrentLengthTicks()); + VarInts.writeUnsignedLong(buffer, packet.getTotalLengthTicks()); + buffer.writeBoolean(packet.isEnabled()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundTextureShiftPacket packet) { + packet.setAction(ClientboundTextureShiftPacket.Action.values()[buffer.readUnsignedByte()]); + packet.setCollectionName(helper.readString(buffer)); + packet.setFromStep(helper.readString(buffer)); + packet.setToStep(helper.readString(buffer)); + List allSteps = new ArrayList<>(); + helper.readArray(buffer, allSteps, helper::readString); + packet.setAllSteps(allSteps); + packet.setCurrentLengthTicks(VarInts.readUnsignedLong(buffer)); + packet.setTotalLengthTicks(VarInts.readUnsignedLong(buffer)); + packet.setEnabled(buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/DebugDrawerSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/DebugDrawerSerializer_v924.java new file mode 100644 index 00000000..0ce41f0c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/DebugDrawerSerializer_v924.java @@ -0,0 +1,77 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v859.serializer.DebugDrawerSerializer_v859; +import org.cloudburstmc.protocol.bedrock.data.debugshape.*; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.awt.Color; + +public class DebugDrawerSerializer_v924 extends DebugDrawerSerializer_v859 { + + public static final DebugDrawerSerializer_v924 INSTANCE = new DebugDrawerSerializer_v924(); + + @Override + protected void writeCommonShapeData(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + VarInts.writeUnsignedLong(buffer, shape.getId()); + helper.writeOptionalNull(buffer, shape.getType(), (buf, type) -> buf.writeByte(type.ordinal())); + helper.writeOptionalNull(buffer, shape.getPosition(), WRITE_VECTOR3F); + helper.writeOptionalNull(buffer, shape.getScale(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, shape.getRotation(), WRITE_VECTOR3F); + helper.writeOptionalNull(buffer, shape.getTotalTimeLeft(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, shape.getColor(), WRITE_COLOR); + + helper.writeOptionalNull(buffer, shape.getDimension(), VarInts::writeInt); + helper.writeOptionalNull(buffer, shape.getAttachedToEntityId(), VarInts::writeUnsignedLong); + } + + @Override + protected DebugShape readShape(ByteBuf buffer, BedrockCodecHelper helper) { + long id = VarInts.readUnsignedLong(buffer); + + DebugShape.Type type = helper.readOptional(buffer, null, + (buf, aHelper) -> SHAPE_TYPES[buf.readUnsignedByte()]); + Vector3f position = helper.readOptional(buffer, null, READ_VECTOR3F); + Float scale = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Vector3f rotation = helper.readOptional(buffer, null, READ_VECTOR3F); + Float totalTimeLeft = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Color color = helper.readOptional(buffer, null, READ_COLOR); + + Integer dimension = helper.readOptional(buffer, -1, VarInts::readInt); + Long attachedToEntityId = helper.readOptional(buffer, null, VarInts::readUnsignedLong); + int payloadType = VarInts.readUnsignedInt(buffer); // Unused + + if (type == null) { + return new DebugShape(id, dimension); + } + + switch (type) { + case ARROW: + Vector3f arrowEndPosition = helper.readOptional(buffer, null, READ_VECTOR3F); + Float arrowHeadLength = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float arrowHeadRadius = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Integer arrowHeadSegments = helper.readOptional(buffer, null, buf -> (int) buf.readUnsignedByte()); + return new DebugArrow(id, dimension, position, scale, rotation, totalTimeLeft, color, arrowEndPosition, + arrowHeadLength, arrowHeadRadius, arrowHeadSegments, attachedToEntityId); + case BOX: + Vector3f boxBounds = helper.readVector3f(buffer); + return new DebugBox(id, dimension, position, scale, rotation, totalTimeLeft, color, boxBounds, attachedToEntityId); + case CIRCLE: + Integer circleSegments = (int) buffer.readUnsignedByte(); + return new DebugCircle(id, dimension, position, scale, rotation, totalTimeLeft, color, circleSegments, attachedToEntityId); + case LINE: + Vector3f lineEndPosition = helper.readVector3f(buffer); + return new DebugLine(id, dimension, position, scale, rotation, totalTimeLeft, color, lineEndPosition, attachedToEntityId); + case SPHERE: + Integer sphereSegments = (int) buffer.readUnsignedByte(); + return new DebugSphere(id, dimension, position, scale, rotation, totalTimeLeft, color, sphereSegments, attachedToEntityId); + case TEXT: + String text = helper.readString(buffer); + return new DebugText(id, dimension, position, scale, rotation, totalTimeLeft, color, text, attachedToEntityId); + default: + throw new IllegalStateException("Unknown debug shape type"); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/GraphicsParameterOverrideSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/GraphicsParameterOverrideSerializer_v924.java new file mode 100644 index 00000000..a183eba3 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/GraphicsParameterOverrideSerializer_v924.java @@ -0,0 +1,47 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v859.serializer.GraphicsParameterOverrideSerializer_v859; +import org.cloudburstmc.protocol.bedrock.data.GraphicsOverrideParameterType; +import org.cloudburstmc.protocol.bedrock.packet.GraphicsParameterOverridePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class GraphicsParameterOverrideSerializer_v924 extends GraphicsParameterOverrideSerializer_v859 { + + public static final GraphicsParameterOverrideSerializer_v924 INSTANCE = new GraphicsParameterOverrideSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParameterOverridePacket packet) { + helper.writeArray(buffer, packet.getValues().entrySet(), (buf, aHelper, entry) -> { + buf.writeFloatLE(entry.getKey()); + helper.writeVector3f(buf, entry.getValue()); + }); + helper.writeOptionalNull(buffer, packet.getFloatValue(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, packet.getVec3Value(), (buf, h, v) -> h.writeVector3f(buf, v)); + helper.writeString(buffer, packet.getBiomeIdentifier()); + buffer.writeByte(packet.getParameterType().ordinal()); + buffer.writeBoolean(packet.isReset()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, GraphicsParameterOverridePacket packet) { + Map values = new LinkedHashMap<>(); + int length = VarInts.readUnsignedInt(buffer); + for (int i = 0; i < length; i++) { + float key = buffer.readFloatLE(); + Vector3f value = helper.readVector3f(buffer); + values.put(key, value); + } + packet.setValues(values); + packet.setFloatValue(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + packet.setVec3Value(helper.readOptional(buffer, null, (buf, h) -> h.readVector3f(buf))); + packet.setBiomeIdentifier(helper.readString(buffer)); + packet.setParameterType(GraphicsOverrideParameterType.values()[buffer.readUnsignedByte()]); + packet.setReset(buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDataStoreSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDataStoreSerializer_v924.java new file mode 100644 index 00000000..d20aba35 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDataStoreSerializer_v924.java @@ -0,0 +1,25 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v898.serializer.ServerboundDataStoreSerializer_v898; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDataStorePacket; + +public class ServerboundDataStoreSerializer_v924 extends ServerboundDataStoreSerializer_v898 { + + public static final ServerboundDataStoreSerializer_v924 INSTANCE = new ServerboundDataStoreSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataStorePacket packet) { + super.serialize(buffer, helper, packet); + + buffer.writeIntLE(packet.getUpdate().getPathUpdateCount()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataStorePacket packet) { + super.deserialize(buffer, helper, packet); + + packet.getUpdate().setPathUpdateCount((int) buffer.readUnsignedIntLE()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDiagnosticsSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDiagnosticsSerializer_v924.java new file mode 100644 index 00000000..3f199a65 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/ServerboundDiagnosticsSerializer_v924.java @@ -0,0 +1,30 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.ServerboundDiagnosticsSerializer_v712; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.MemoryCategoryCounter; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; + +public class ServerboundDiagnosticsSerializer_v924 extends ServerboundDiagnosticsSerializer_v712 { + + public static final ServerboundDiagnosticsSerializer_v924 INSTANCE = new ServerboundDiagnosticsSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.serialize(buffer, helper, packet); + + helper.writeArray(buffer, packet.getMemoryCategoryValues(), ((buf, h, counter) -> { + buf.writeByte(counter.getCategory().ordinal()); + buf.writeLongLE(counter.getCurrentBytes()); + })); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.deserialize(buffer, helper, packet); + + helper.readArray(buffer, packet.getMemoryCategoryValues(), (buf, h) -> + new MemoryCategoryCounter(MemoryCategoryCounter.Category.values()[buf.readUnsignedByte()], buffer.readLongLE())); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/StartGameSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/StartGameSerializer_v924.java new file mode 100644 index 00000000..72742d80 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/StartGameSerializer_v924.java @@ -0,0 +1,159 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v898.serializer.StartGameSerializer_v898; +import org.cloudburstmc.protocol.bedrock.data.*; +import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket; +import org.cloudburstmc.protocol.common.util.OptionalBoolean; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class StartGameSerializer_v924 extends StartGameSerializer_v898 { + + public static final StartGameSerializer_v924 INSTANCE = new StartGameSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getServerConfigurationJoinInfo(), this::writeServerJoinInfo); + + helper.writeString(buffer, packet.getServerId()); + helper.writeString(buffer, packet.getScenarioId()); + helper.writeString(buffer, packet.getWorldId()); + helper.writeString(buffer, packet.getOwnerId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + super.deserialize(buffer, helper, packet); + packet.setServerConfigurationJoinInfo(helper.readOptional(buffer, null, this::readServerJoinInfo)); + + packet.setServerId(helper.readString(buffer)); + packet.setScenarioId(helper.readString(buffer)); + packet.setWorldId(helper.readString(buffer)); + packet.setOwnerId(helper.readString(buffer)); + } + + @Override + protected void writeLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + //v671 + writeSeed(buffer, packet.getSeed()); + buffer.writeShortLE(packet.getSpawnBiomeType().ordinal()); + helper.writeString(buffer, packet.getCustomBiomeName()); + VarInts.writeInt(buffer, packet.getDimensionId()); + VarInts.writeInt(buffer, packet.getGeneratorId()); + VarInts.writeInt(buffer, packet.getLevelGameType().ordinal()); + buffer.writeBoolean(packet.isHardcore()); + VarInts.writeInt(buffer, packet.getDifficulty()); + helper.writeBlockPosition(buffer, packet.getDefaultSpawn()); + buffer.writeBoolean(packet.isAchievementsDisabled()); + VarInts.writeInt(buffer, packet.getEditorWorldType().ordinal()); + buffer.writeBoolean(packet.isCreatedInEditor()); + buffer.writeBoolean(packet.isExportedFromEditor()); + VarInts.writeInt(buffer, packet.getDayCycleStopTime()); + VarInts.writeInt(buffer, packet.getEduEditionOffers()); + buffer.writeBoolean(packet.isEduFeaturesEnabled()); + helper.writeString(buffer, packet.getEducationProductionId()); + buffer.writeFloatLE(packet.getRainLevel()); + buffer.writeFloatLE(packet.getLightningLevel()); + buffer.writeBoolean(packet.isPlatformLockedContentConfirmed()); + buffer.writeBoolean(packet.isMultiplayerGame()); + buffer.writeBoolean(packet.isBroadcastingToLan()); + VarInts.writeInt(buffer, packet.getXblBroadcastMode().ordinal()); + VarInts.writeInt(buffer, packet.getPlatformBroadcastMode().ordinal()); + buffer.writeBoolean(packet.isCommandsEnabled()); + buffer.writeBoolean(packet.isTexturePacksRequired()); + helper.writeArray(buffer, packet.getGamerules(), helper::writeGameRuleInStartGame); + helper.writeExperiments(buffer, packet.getExperiments()); + buffer.writeBoolean(packet.isExperimentsPreviouslyToggled()); + buffer.writeBoolean(packet.isBonusChestEnabled()); + buffer.writeBoolean(packet.isStartingWithMap()); + VarInts.writeInt(buffer, packet.getDefaultPlayerPermission().ordinal()); + buffer.writeIntLE(packet.getServerChunkTickRange()); + buffer.writeBoolean(packet.isBehaviorPackLocked()); + buffer.writeBoolean(packet.isResourcePackLocked()); + buffer.writeBoolean(packet.isFromLockedWorldTemplate()); + buffer.writeBoolean(packet.isUsingMsaGamertagsOnly()); + buffer.writeBoolean(packet.isFromWorldTemplate()); + buffer.writeBoolean(packet.isWorldTemplateOptionLocked()); + buffer.writeBoolean(packet.isOnlySpawningV1Villagers()); + buffer.writeBoolean(packet.isDisablingPersonas()); + buffer.writeBoolean(packet.isDisablingCustomSkins()); + buffer.writeBoolean(packet.isEmoteChatMuted()); + helper.writeString(buffer, packet.getVanillaVersion()); + buffer.writeIntLE(packet.getLimitedWorldWidth()); + buffer.writeIntLE(packet.getLimitedWorldHeight()); + buffer.writeBoolean(packet.isNetherType()); + helper.writeString(buffer, packet.getEduSharedUriResource().getButtonName()); + helper.writeString(buffer, packet.getEduSharedUriResource().getLinkUri()); + helper.writeOptional(buffer, OptionalBoolean::isPresent, packet.getForceExperimentalGameplay(), + (buf, optional) -> buf.writeBoolean(optional.getAsBoolean())); + buffer.writeByte(packet.getChatRestrictionLevel().ordinal()); + buffer.writeBoolean(packet.isDisablingPlayerInteractions()); + } + + @Override + protected void readLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) { + //v671 + packet.setSeed(readSeed(buffer)); + packet.setSpawnBiomeType(SpawnBiomeType.byId(buffer.readShortLE())); + packet.setCustomBiomeName(helper.readString(buffer)); + packet.setDimensionId(VarInts.readInt(buffer)); + packet.setGeneratorId(VarInts.readInt(buffer)); + packet.setLevelGameType(GameType.from(VarInts.readInt(buffer))); + packet.setHardcore(buffer.readBoolean()); + packet.setDifficulty(VarInts.readInt(buffer)); + packet.setDefaultSpawn(helper.readBlockPosition(buffer)); + packet.setAchievementsDisabled(buffer.readBoolean()); + packet.setEditorWorldType(WorldType.values()[VarInts.readInt(buffer)]); + packet.setCreatedInEditor(buffer.readBoolean()); + packet.setExportedFromEditor(buffer.readBoolean()); + packet.setDayCycleStopTime(VarInts.readInt(buffer)); + packet.setEduEditionOffers(VarInts.readInt(buffer)); + packet.setEduFeaturesEnabled(buffer.readBoolean()); + packet.setEducationProductionId(helper.readString(buffer)); + packet.setRainLevel(buffer.readFloatLE()); + packet.setLightningLevel(buffer.readFloatLE()); + packet.setPlatformLockedContentConfirmed(buffer.readBoolean()); + packet.setMultiplayerGame(buffer.readBoolean()); + packet.setBroadcastingToLan(buffer.readBoolean()); + packet.setXblBroadcastMode(GamePublishSetting.byId(VarInts.readInt(buffer))); + packet.setPlatformBroadcastMode(GamePublishSetting.byId(VarInts.readInt(buffer))); + packet.setCommandsEnabled(buffer.readBoolean()); + packet.setTexturePacksRequired(buffer.readBoolean()); + helper.readArray(buffer, packet.getGamerules(), helper::readGameRuleInStartGame); + helper.readExperiments(buffer, packet.getExperiments()); + packet.setExperimentsPreviouslyToggled(buffer.readBoolean()); + packet.setBonusChestEnabled(buffer.readBoolean()); + packet.setStartingWithMap(buffer.readBoolean()); + packet.setDefaultPlayerPermission(PLAYER_PERMISSIONS[VarInts.readInt(buffer)]); + packet.setServerChunkTickRange(buffer.readIntLE()); + packet.setBehaviorPackLocked(buffer.readBoolean()); + packet.setResourcePackLocked(buffer.readBoolean()); + packet.setFromLockedWorldTemplate(buffer.readBoolean()); + packet.setUsingMsaGamertagsOnly(buffer.readBoolean()); + packet.setFromWorldTemplate(buffer.readBoolean()); + packet.setWorldTemplateOptionLocked(buffer.readBoolean()); + packet.setOnlySpawningV1Villagers(buffer.readBoolean()); + packet.setDisablingPersonas(buffer.readBoolean()); + packet.setDisablingCustomSkins(buffer.readBoolean()); + packet.setEmoteChatMuted(buffer.readBoolean()); + packet.setVanillaVersion(helper.readString(buffer)); + packet.setLimitedWorldWidth(buffer.readIntLE()); + packet.setLimitedWorldHeight(buffer.readIntLE()); + packet.setNetherType(buffer.readBoolean()); + packet.setEduSharedUriResource(new EduSharedUriResource(helper.readString(buffer), helper.readString(buffer))); + packet.setForceExperimentalGameplay(helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean()))); + packet.setChatRestrictionLevel(ChatRestrictionLevel.values()[buffer.readByte()]); + packet.setDisablingPlayerInteractions(buffer.readBoolean()); + } + + protected void writeServerJoinInfo(ByteBuf buffer, BedrockCodecHelper helper, ServerConfigurationJoinInfo info) { + buffer.writeBoolean(false); + } + + protected ServerConfigurationJoinInfo readServerJoinInfo(ByteBuf buffer, BedrockCodecHelper helper) { + buffer.readBoolean(); + return new ServerConfigurationJoinInfo(null, null, null); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/TextSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/TextSerializer_v924.java new file mode 100644 index 00000000..c553b93e --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/TextSerializer_v924.java @@ -0,0 +1,137 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectList; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v898.serializer.TextSerializer_v898; +import org.cloudburstmc.protocol.bedrock.packet.TextPacket; +import org.cloudburstmc.protocol.common.util.TextConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TextSerializer_v924 extends TextSerializer_v898 { + + public static final TextSerializer_v924 INSTANCE = new TextSerializer_v924(); + private static final Logger log = LoggerFactory.getLogger(TextSerializer_v924.class); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + TextPacket.Type type = packet.getType(); + TextConverter converter = helper.getTextConverter(); + CharSequence message = packet.getMessage(CharSequence.class); + Boolean needsTranslation = converter.needsTranslation(message); + + buffer.writeBoolean(needsTranslation != null ? needsTranslation : packet.isNeedsTranslation()); + String text; + + switch (type) { + case RAW: + case TIP: + case SYSTEM: + buffer.writeByte(0); // MessageOnly + buffer.writeByte(type.ordinal()); + text = converter.serialize(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); + break; + case JSON: + case WHISPER_JSON: + case ANNOUNCEMENT_JSON: + buffer.writeByte(0); // MessageOnly + buffer.writeByte(type.ordinal()); + text = converter.serializeJson(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); + break; + case CHAT: + case WHISPER: + case ANNOUNCEMENT: + buffer.writeByte(1); // AuthorAndMessage + buffer.writeByte(type.ordinal()); + helper.writeString(buffer, packet.getSourceName()); + text = converter.serialize(message); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); + break; + case TRANSLATION: + case POPUP: + case JUKEBOX_POPUP: + buffer.writeByte(2); // MessageAndParams + buffer.writeByte(type.ordinal()); + text = converter.serializeWithArguments(message, packet.getParameters()); + if (text.isEmpty()) { + text = " "; + if (log.isDebugEnabled()) { + log.debug("TextPacket of " + type + " with empty message"); + } + } + helper.writeString(buffer, text); + helper.writeArray(buffer, packet.getParameters(), helper::writeString); + break; + default: + throw new UnsupportedOperationException("Unsupported TextType " + type); + } + + helper.writeString(buffer, packet.getXuid()); + helper.writeString(buffer, packet.getPlatformChatId()); + String filtered = converter.serialize(packet.getFilteredMessage(CharSequence.class)); + helper.writeOptional(buffer, (s -> !s.isEmpty()), filtered, (buf, codecHelper, s) -> codecHelper.writeString(buf, s)); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, TextPacket packet) { + TextConverter converter = helper.getTextConverter(); + boolean needsTranslation = buffer.readBoolean(); + packet.setNeedsTranslation(needsTranslation); + + switch (buffer.readByte()) { + case 0: // MessageOnly + TextPacket.Type type = TextPacket.Type.values()[buffer.readUnsignedByte()]; + packet.setType(type); + + String text = helper.readString(buffer); + if (type == TextPacket.Type.JSON || type == TextPacket.Type.WHISPER_JSON || type == TextPacket.Type.ANNOUNCEMENT_JSON) { + packet.setMessage(converter.deserializeJson(text, needsTranslation)); + } else { + packet.setMessage(converter.deserialize(text, needsTranslation)); + } + break; + case 1: // AuthorAndMessage + packet.setType(TextPacket.Type.values()[buffer.readUnsignedByte()]); + packet.setSourceName(helper.readString(buffer)); + packet.setMessage(converter.deserialize(helper.readString(buffer), needsTranslation)); + break; + case 2: // MessageAndParams + packet.setType(TextPacket.Type.values()[buffer.readUnsignedByte()]); + String text2 = helper.readString(buffer); + ObjectList parameters = new ObjectArrayList<>(); + helper.readArray(buffer, parameters, helper::readString); + packet.setMessage(converter.deserializeWithArguments(text2, parameters, needsTranslation)); + packet.setParameters(parameters); + break; + default: + throw new UnsupportedOperationException("Not oneOf"); + } + + packet.setXuid(helper.readString(buffer)); + packet.setPlatformChatId(helper.readString(buffer)); + String filtered = helper.readOptional(buffer, "", (buf, codecHelper) -> codecHelper.readString(buf)); + packet.setFilteredMessage(converter.deserialize(filtered, needsTranslation)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/VoxelShapesSerializer_v924.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/VoxelShapesSerializer_v924.java new file mode 100644 index 00000000..0d667ddc --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v924/serializer/VoxelShapesSerializer_v924.java @@ -0,0 +1,77 @@ +package org.cloudburstmc.protocol.bedrock.codec.v924.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.SerializableVoxelShape; +import org.cloudburstmc.protocol.bedrock.packet.VoxelShapesPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.*; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class VoxelShapesSerializer_v924 implements BedrockPacketSerializer { + + public static final VoxelShapesSerializer_v924 INSTANCE = new VoxelShapesSerializer_v924(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, VoxelShapesPacket packet) { + helper.writeArray(buffer, packet.getShapes(), (buf, shape) -> { + buf.writeByte(shape.getCells().getXSize()); + buf.writeByte(shape.getCells().getYSize()); + buf.writeByte(shape.getCells().getZSize()); + + helper.writeArray(buf, shape.getCells().getStorage(), (buf2, value) -> buf2.writeByte(value)); + + helper.writeArray(buf, shape.getXCoordinates(), ByteBuf::writeFloatLE); + helper.writeArray(buf, shape.getYCoordinates(), ByteBuf::writeFloatLE); + helper.writeArray(buf, shape.getZCoordinates(), ByteBuf::writeFloatLE); + }); + + VarInts.writeUnsignedInt(buffer, packet.getNameMap().size()); + packet.getNameMap().forEach((k, v) -> { + helper.writeString(buffer, k); + buffer.writeShortLE(v); + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, VoxelShapesPacket packet) { + List shapes = new ArrayList<>(); + + helper.readArray(buffer, shapes, (buf, h) -> { + short xSize = buf.readUnsignedByte(); + short ySize = buf.readUnsignedByte(); + short zSize = buf.readUnsignedByte(); + + List storage = new ArrayList<>(); + helper.readArray(buf, storage, (ByteBuf::readUnsignedByte)); + + SerializableVoxelShape.SerializableCells cells = new SerializableVoxelShape.SerializableCells(xSize, ySize, zSize, storage); + + List xCoordinates = new ArrayList<>(); + helper.readArray(buf, xCoordinates, (ByteBuf::readFloatLE)); + + List yCoordinates = new ArrayList<>(); + helper.readArray(buf, yCoordinates, (ByteBuf::readFloatLE)); + + List zCoordinates = new ArrayList<>(); + helper.readArray(buf, zCoordinates, (ByteBuf::readFloatLE)); + + return new SerializableVoxelShape(cells, xCoordinates, yCoordinates, zCoordinates); + }); + + packet.setShapes(shapes); + + Map nameMap = new LinkedHashMap<>(); + + int size = VarInts.readUnsignedInt(buffer); + for (int i = 0; i < size; i++) { + nameMap.put(helper.readString(buffer), buffer.readUnsignedShortLE()); + } + + packet.setNameMap(nameMap); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/BedrockCodecHelper_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/BedrockCodecHelper_v944.java new file mode 100644 index 00000000..13a8131f --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/BedrockCodecHelper_v944.java @@ -0,0 +1,66 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v898.BedrockCodecHelper_v898; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.PresenceConfiguration; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; +import org.cloudburstmc.protocol.common.util.VarInts; + +import static org.cloudburstmc.protocol.common.util.Preconditions.checkNotNull; + +public class BedrockCodecHelper_v944 extends BedrockCodecHelper_v898 { + + public BedrockCodecHelper_v944(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, + TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { + super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); + } + + @Override + public Vector3i readBlockPosition(ByteBuf buffer) { + int x = VarInts.readInt(buffer); + int y = VarInts.readInt(buffer); + int z = VarInts.readInt(buffer); + + return Vector3i.from(x, y, z); + } + + @Override + public void writeBlockPosition(ByteBuf buffer, Vector3i blockPosition) { + checkNotNull(blockPosition, "blockPosition"); + VarInts.writeInt(buffer, blockPosition.getX()); + VarInts.writeInt(buffer, blockPosition.getY()); + VarInts.writeInt(buffer, blockPosition.getZ()); + } + + @Override + public void writeItemUse(ByteBuf buffer, InventoryTransactionPacket packet) { + super.writeItemUse(buffer, packet); + + buffer.writeByte(packet.getClientCooldownState()); + } + + @Override + public void readItemUse(ByteBuf buffer, InventoryTransactionPacket packet) { + super.readItemUse(buffer, packet); + + packet.setClientCooldownState(buffer.readByte()); + } + + @Override + public void writePresenceConfiguration(ByteBuf buffer, PresenceConfiguration configuration) { + writeString(buffer, configuration.getExperienceName()); + writeString(buffer, configuration.getWorldName()); + } + + @Override + public PresenceConfiguration readPresenceConfiguration(ByteBuf buffer) { + return new PresenceConfiguration(readString(buffer), readString(buffer), null); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/Bedrock_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/Bedrock_v944.java new file mode 100644 index 00000000..cc2fd803 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/Bedrock_v944.java @@ -0,0 +1,73 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelEventSerializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; +import org.cloudburstmc.protocol.bedrock.codec.v786.serializer.LevelSoundEventSerializer_v786; +import org.cloudburstmc.protocol.bedrock.codec.v924.Bedrock_v924; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.CameraInstructionSerializer_v924; +import org.cloudburstmc.protocol.bedrock.codec.v944.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.ParticleType; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.bedrock.transformer.TypeMapTransformer; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v944 extends Bedrock_v924 { + + protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v924.CONTAINER_SLOT_TYPES + .toBuilder() + .insert(64, ContainerSlotType.RECIPE_FOOD_CONTAINER) + .insert(65, ContainerSlotType.RECIPE_BLOCKS_CONTAINER) + .insert(66, ContainerSlotType.RECIPE_FURNACE_ITEMS_CONTAINER) + .build(); + + protected static final TypeMap PARTICLE_TYPES = Bedrock_v924.PARTICLE_TYPES.toBuilder() + .insert(99, ParticleType.PAUSE_MOB_GROWTH) + .insert(100, ParticleType.RESET_MOB_GROWTH) + .build(); + + protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v924.ENTITY_DATA + .toBuilder() + .update(EntityDataTypes.AREA_EFFECT_CLOUD_PARTICLE, new TypeMapTransformer<>(PARTICLE_TYPES)) + .build(); + + protected static final TypeMap LEVEL_EVENTS = Bedrock_v924.LEVEL_EVENTS.toBuilder() + .insert(LEVEL_EVENT_PARTICLE_TYPE, PARTICLE_TYPES) + .build(); + + protected static final TypeMap SOUND_EVENTS = Bedrock_v924.SOUND_EVENTS + .toBuilder() + .replace(597, SoundEvent.PAUSE_GROWTH) + .insert(598, SoundEvent.RESET_GROWTH) + .insert(599, SoundEvent.UNDEFINED) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v924.CODEC.toBuilder() + .protocolVersion(944) + .minecraftVersion("1.26.10") + .helper(() -> new BedrockCodecHelper_v944(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(CameraInstructionPacket.class, CameraInstructionSerializer_v944.INSTANCE) + .updateSerializer(CameraSplinePacket.class, CameraSplineSerializer_v944.INSTANCE) + .updateSerializer(ClientboundDataDrivenUICloseScreenPacket.class, ClientboundDataDrivenUICloseScreenSerializer_v944.INSTANCE) + .updateSerializer(ClientboundDataDrivenUIShowScreenPacket.class, ClientboundDataDrivenUIShowScreenSerializer_v944.INSTANCE) + .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) + .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v786(SOUND_EVENTS)) + .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v944.INSTANCE) + .updateSerializer(StartGamePacket.class, StartGameSerializer_v944.INSTANCE) + .updateSerializer(UpdateClientInputLocksPacket.class, UpdateClientInputLocksSerializer_v944.INSTANCE) + .updateSerializer(VoxelShapesPacket.class, VoxelShapesSerializer_v944.INSTANCE) + .registerPacket(ResourcePacksReadyForValidationPacket::new, ResourcePacksReadyForValidationSerializer_v944.INSTANCE, 340, PacketRecipient.SERVER) + .registerPacket(LocatorBarPacket::new, LocatorBarSerializer_v944.INSTANCE, 341, PacketRecipient.CLIENT) + .registerPacket(PartyChangedPacket::new, PartyChangedSerializer_v944.INSTANCE, 342, PacketRecipient.SERVER) + .registerPacket(ServerboundDataDrivenScreenClosedPacket::new, ServerboundDataDrivenScreenClosedSerializer_v944.INSTANCE, 343, PacketRecipient.SERVER) + .registerPacket(SyncWorldClocksPacket::new, SyncWorldClocksSerializer_v944.INSTANCE, 344, PacketRecipient.CLIENT) + .registerPacket(ClientboundAttributeLayerSyncPacket::new, ClientboundAttributeLayerSyncSerializer_v944.INSTANCE, 345, PacketRecipient.CLIENT) + .build(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraInstructionSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraInstructionSerializer_v944.java new file mode 100644 index 00000000..7cd31bb6 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraInstructionSerializer_v944.java @@ -0,0 +1,76 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.CameraInstructionSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.camera.*; + +import java.util.ArrayList; +import java.util.List; + +public class CameraInstructionSerializer_v944 extends CameraInstructionSerializer_v924 { + + public static final CameraInstructionSerializer_v944 INSTANCE = new CameraInstructionSerializer_v944(); + + @Override + protected void writeSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper, CameraSplineInstruction splineInstruction) { + buffer.writeFloatLE(splineInstruction.getTotalTime()); + buffer.writeByte(splineInstruction.getType().ordinal()); + helper.writeArray(buffer, splineInstruction.getCurve(), helper::writeVector3f); + helper.writeArray(buffer, splineInstruction.getProgressKeyFrames(), (buf2, frame) -> { + buf2.writeFloatLE(frame.getValue()); + buf2.writeFloatLE(frame.getTime()); + helper.writeString(buf2, frame.getEase().getSerializeName()); + }); + helper.writeArray(buffer, splineInstruction.getRotationOption(), (buf2, rotationOption) -> { + helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); + buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); + helper.writeString(buf2, rotationOption.getEase().getSerializeName()); + }); + helper.writeString(buffer, splineInstruction.getSplineIdentifier()); + buffer.writeBoolean(splineInstruction.isLoadFromJson()); + } + + @Override + protected CameraSplineInstruction readSplineInstruction(ByteBuf buffer, BedrockCodecHelper helper) { + float totalTime = buffer.readFloatLE(); + CameraSplineType type = CameraSplineType.values()[buffer.readUnsignedByte()]; + List curve = new ArrayList<>(); + helper.readArray(buffer, curve, helper::readVector3f); + List progressKeyFrames = new ArrayList<>(); + helper.readArray(buffer, progressKeyFrames, buf2 -> { + float value = buf2.readFloatLE(); + float time = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineProgressOption(value, time, ease); + }); + List rotationOption = new ArrayList<>(); + helper.readArray(buffer, rotationOption, buf2 -> { + Vector3f keyFrameValues = helper.readVector3f(buf2); + float keyFrameTimes = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes, ease); + }); + String splineIdentifier = helper.readString(buffer); + boolean loadFromJson = buffer.readBoolean(); + return new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption, splineIdentifier, loadFromJson); + } + + @Override + protected void writeFovInstruction(ByteBuf buffer, BedrockCodecHelper helper, CameraFovInstruction fovInstruction) { + buffer.writeFloatLE(fovInstruction.getFov()); + buffer.writeFloatLE(fovInstruction.getEaseTime()); + helper.writeString(buffer, fovInstruction.getEaseType().getSerializeName()); + buffer.writeBoolean(fovInstruction.isClear()); + } + + @Override + protected CameraFovInstruction readFovInstruction(ByteBuf buffer, BedrockCodecHelper helper) { + float fow = buffer.readFloatLE(); + float easeTime = buffer.readFloatLE(); + CameraEase easeType = CameraEase.fromName(helper.readString(buffer)); + boolean fovClear = buffer.readBoolean(); + return new CameraFovInstruction(fow, easeTime, easeType, fovClear); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraSplineSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraSplineSerializer_v944.java new file mode 100644 index 00000000..77e02d33 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/CameraSplineSerializer_v944.java @@ -0,0 +1,73 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.CameraSplineSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineDefinition; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineInstruction; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineType; +import org.cloudburstmc.protocol.bedrock.packet.CameraSplinePacket; + +import java.util.ArrayList; +import java.util.List; + +public class CameraSplineSerializer_v944 extends CameraSplineSerializer_v924 { + + public static final CameraSplineSerializer_v944 INSTANCE = new CameraSplineSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraSplinePacket packet) { + helper.writeArray(buffer, packet.getSplines(), (buf, spline) -> { + helper.writeString(buf, spline.getName()); + buf.writeFloatLE(spline.getInstruction().getTotalTime()); + helper.writeString(buf, spline.getInstruction().getType().getSerializeName()); + helper.writeArray(buf, spline.getInstruction().getCurve(), helper::writeVector3f); + helper.writeArray(buf, spline.getInstruction().getProgressKeyFrames(), (buf2, frame) -> { + buf2.writeFloatLE(frame.getValue()); + buf2.writeFloatLE(frame.getTime()); + helper.writeString(buf2, frame.getEase().getSerializeName()); + }); + helper.writeArray(buf, spline.getInstruction().getRotationOption(), (buf2, rotationOption) -> { + helper.writeVector3f(buf2, rotationOption.getKeyFrameValues()); + buf2.writeFloatLE(rotationOption.getKeyFrameTimes()); + helper.writeString(buf2, rotationOption.getEase().getSerializeName()); + }); + helper.writeString(buffer, spline.getInstruction().getSplineIdentifier()); + buffer.writeBoolean(spline.getInstruction().isLoadFromJson()); + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraSplinePacket packet) { + List splines = new ArrayList<>(); + + helper.readArray(buffer, splines, (buf, h) -> { + String name = helper.readString(buf); + float totalTime = buf.readFloatLE(); + CameraSplineType type = CameraSplineType.fromName(helper.readString(buf)); + List curve = new ArrayList<>(); + helper.readArray(buf, curve, helper::readVector3f); + List progressKeyFrames = new ArrayList<>(); + helper.readArray(buf, progressKeyFrames, buf2 -> { + float value = buf2.readFloatLE(); + float time = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineProgressOption(value, time, ease); + }); + List rotationOption = new ArrayList<>(); + helper.readArray(buf, rotationOption, buf2 -> { + Vector3f keyFrameValues = helper.readVector3f(buf2); + float keyFrameTimes = buf2.readFloatLE(); + CameraEase ease = CameraEase.fromName(helper.readString(buf2)); + return new CameraSplineInstruction.SplineRotationOption(keyFrameValues, keyFrameTimes, ease); + }); + String splineIdentifier = helper.readString(buffer); + boolean loadFromJson = buffer.readBoolean(); + return new CameraSplineDefinition(name, new CameraSplineInstruction(totalTime, type, curve, progressKeyFrames, rotationOption, splineIdentifier, loadFromJson)); + }); + + packet.setSplines(splines); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundAttributeLayerSyncSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundAttributeLayerSyncSerializer_v944.java new file mode 100644 index 00000000..068e038b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundAttributeLayerSyncSerializer_v944.java @@ -0,0 +1,276 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.attributelayer.*; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundAttributeLayerSyncPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundAttributeLayerSyncSerializer_v944 implements BedrockPacketSerializer { + + public static final ClientboundAttributeLayerSyncSerializer_v944 INSTANCE = new ClientboundAttributeLayerSyncSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundAttributeLayerSyncPacket packet) { + AttributeLayerSyncPayload data = packet.getData(); + + if (data instanceof UpdateAttributeLayersData) { + VarInts.writeUnsignedInt(buffer, 0); + writeUpdateAttributeLayers(buffer, helper, (UpdateAttributeLayersData) data); + } else if (data instanceof UpdateAttributeLayerSettingsData) { + VarInts.writeUnsignedInt(buffer, 1); + writeUpdateAttributeLayerSettings(buffer, helper, (UpdateAttributeLayerSettingsData) data); + } else if (data instanceof UpdateEnvironmentAttributesData) { + VarInts.writeUnsignedInt(buffer, 2); + writeUpdateEnvironmentAttributes(buffer, helper, (UpdateEnvironmentAttributesData) data); + } else if (data instanceof RemoveEnvironmentAttributesData) { + VarInts.writeUnsignedInt(buffer, 3); + writeRemoveEnvironmentAttributes(buffer, helper, (RemoveEnvironmentAttributesData) data); + } else { + throw new IllegalArgumentException("Not oneOf"); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundAttributeLayerSyncPacket packet) { + int type = VarInts.readUnsignedInt(buffer); + + switch (type) { + case 0: + packet.setData(readUpdateAttributeLayers(buffer, helper)); + return; + case 1: + packet.setData(readUpdateAttributeLayerSettings(buffer, helper)); + return; + case 2: + packet.setData(readUpdateEnvironmentAttributes(buffer, helper)); + return; + case 3: + packet.setData(readRemoveEnvironmentAttributes(buffer, helper)); + return; + } + + throw new IllegalArgumentException(type + " is not oneOf"); + } + + protected void writeUpdateAttributeLayers(ByteBuf buf, BedrockCodecHelper helper, UpdateAttributeLayersData data) { + List layers = data.getAttributeLayers(); + helper.writeArray(buf, layers, (b, layer) -> { + helper.writeString(b, layer.getLayerName()); + VarInts.writeInt(b, layer.getDimension()); + writeAttributeLayerSettings(b, helper, layer.getSettings()); + helper.writeArray(b, layer.getAttributes(), (bb, attr) -> + writeEnvironmentAttribute(bb, helper, attr)); + }); + } + + protected UpdateAttributeLayersData readUpdateAttributeLayers(ByteBuf buf, BedrockCodecHelper helper) { + List layers = new ArrayList<>(); + helper.readArray(buf, layers, b -> { + String name = helper.readStringMaxLen(buf, 128); + int dim = VarInts.readInt(b); + AttributeLayerSettings settings = readAttributeLayerSettings(b, helper); + + List attrs = new ArrayList<>(); + helper.readArray(b, attrs, bb -> readEnvironmentAttribute(bb, helper), 1024); + + return new AttributeLayerData(name, null, dim, settings, attrs); + }, 512); + return new UpdateAttributeLayersData(layers); + } + + private void writeUpdateAttributeLayerSettings(ByteBuf buf, BedrockCodecHelper helper, UpdateAttributeLayerSettingsData data) { + helper.writeString(buf, data.getLayerName()); + VarInts.writeInt(buf, data.getDimension()); + writeAttributeLayerSettings(buf, helper, data.getSettings()); + } + + private UpdateAttributeLayerSettingsData readUpdateAttributeLayerSettings(ByteBuf buf, BedrockCodecHelper helper) { + String name = helper.readStringMaxLen(buf, 128); + int dim = VarInts.readInt(buf); + AttributeLayerSettings settings = readAttributeLayerSettings(buf, helper); + return new UpdateAttributeLayerSettingsData(name, dim, settings); + } + + private void writeUpdateEnvironmentAttributes(ByteBuf buf, BedrockCodecHelper helper, UpdateEnvironmentAttributesData data) { + helper.writeString(buf, data.getLayerName()); + VarInts.writeInt(buf, data.getDimension()); + helper.writeArray(buf, data.getAttributes(), (b, attr) -> + writeEnvironmentAttribute(b, helper, attr)); + } + + private UpdateEnvironmentAttributesData readUpdateEnvironmentAttributes(ByteBuf buf, BedrockCodecHelper helper) { + String name = helper.readStringMaxLen(buf, 128); + int dim = VarInts.readInt(buf); + List attrs = new ArrayList<>(); + helper.readArray(buf, attrs, b -> readEnvironmentAttribute(b, helper), 1024); + return new UpdateEnvironmentAttributesData(name, dim, attrs); + } + + private void writeRemoveEnvironmentAttributes(ByteBuf buf, BedrockCodecHelper helper, RemoveEnvironmentAttributesData data) { + helper.writeString(buf, data.getLayerName()); + VarInts.writeInt(buf, data.getDimension()); + helper.writeArray(buf, data.getAttributes(), helper::writeString); + } + + private RemoveEnvironmentAttributesData readRemoveEnvironmentAttributes(ByteBuf buf, BedrockCodecHelper helper) { + String name = helper.readStringMaxLen(buf, 128); + int dim = VarInts.readInt(buf); + List attrs = new ArrayList<>(); + helper.readArray(buf, attrs, helper::readString, 1024); + return new RemoveEnvironmentAttributesData(name, dim, attrs); + } + + protected void writeAttributeLayerSettings(ByteBuf buf, BedrockCodecHelper helper, AttributeLayerSettings s) { + buf.writeIntLE(s.getPriority()); + writeWeight(buf, helper, s.getWeight()); + buf.writeBoolean(s.isEnabled()); + buf.writeBoolean(s.isTransitionsPaused()); + } + + protected AttributeLayerSettings readAttributeLayerSettings(ByteBuf buf, BedrockCodecHelper helper) { + int priority = buf.readIntLE(); + AttributeLayerSettings.Weight weight = readWeight(buf, helper); + boolean enabled = buf.readBoolean(); + boolean paused = buf.readBoolean(); + return new AttributeLayerSettings(priority, weight, enabled, paused); + } + + protected void writeWeight(ByteBuf buf, BedrockCodecHelper helper, AttributeLayerSettings.Weight w) { + if (w instanceof AttributeLayerSettings.FloatWeight) { + VarInts.writeUnsignedInt(buf, 0); + buf.writeFloatLE(((AttributeLayerSettings.FloatWeight) w).getValue()); + } else if (w instanceof AttributeLayerSettings.StringWeight) { + VarInts.writeUnsignedInt(buf, 1); + helper.writeString(buf, ((AttributeLayerSettings.StringWeight) w).getValue()); + } else { + throw new IllegalArgumentException("Unknown Weight: " + w); + } + } + + protected AttributeLayerSettings.Weight readWeight(ByteBuf buf, BedrockCodecHelper helper) { + int type = VarInts.readUnsignedInt(buf); + switch (type) { + case 0: + return new AttributeLayerSettings.FloatWeight(buf.readFloatLE()); + case 1: + return new AttributeLayerSettings.StringWeight(helper.readString(buf)); + } + throw new IllegalArgumentException("Unknown Weight type: " + type); + } + + protected void writeEnvironmentAttribute(ByteBuf buf, BedrockCodecHelper helper, EnvironmentAttributeData e) { + helper.writeString(buf, e.getAttributeName()); + helper.writeOptionalNull(buf, e.getFrom(), (b, attr) -> writeAttributeData(b, helper, attr)); + writeAttributeData(buf, helper, e.getAttribute()); + helper.writeOptionalNull(buf, e.getTo(), (b, attr) -> writeAttributeData(b, helper, attr)); + buf.writeIntLE(e.getCurrentTransitionTicks()); + buf.writeIntLE(e.getTotalTransitionTicks()); + helper.writeString(buf, e.getEasing().getSerializeName()); + } + + protected EnvironmentAttributeData readEnvironmentAttribute(ByteBuf buf, BedrockCodecHelper helper) { + String name = helper.readStringMaxLen(buf, 128); + + AttributeData from = helper.readOptional(buf, null, b -> readAttributeData(b, helper)); + AttributeData attribute = readAttributeData(buf, helper); + AttributeData to = helper.readOptional(buf, null, b -> readAttributeData(b, helper)); + + int currentTicks = (int) buf.readUnsignedIntLE(); + int totalTicks = (int) buf.readUnsignedIntLE(); + + CameraEase easing = CameraEase.fromName(helper.readString(buf)); + + return new EnvironmentAttributeData(name, from, attribute, to, currentTicks, totalTicks, easing, 0, false); + } + + private static final List BOOL_OPERATIONS = Arrays.asList("override", "alpha_blend", "and", "nand", "or", "nor", "xor", "xnor"); + private static final List FLOAT_OPERATIONS = Arrays.asList("override", "alpha_blend", "add", "subtract", "multiply", "minimum", "maximum"); + private static final List COLOR_OPERATIONS = Arrays.asList("override", "alpha_blend", "add", "subtract", "multiply"); + + private void writeAttributeData(ByteBuf buf, BedrockCodecHelper helper, AttributeData data) { + if (data instanceof BoolAttributeData) { + BoolAttributeData at = (BoolAttributeData) data; + VarInts.writeUnsignedInt(buf, 0); + buf.writeBoolean(at.isValue()); + helper.writeString(buf, BOOL_OPERATIONS.get(at.getOperation().ordinal())); + } else if (data instanceof FloatAttributeData) { + FloatAttributeData at = (FloatAttributeData) data; + VarInts.writeUnsignedInt(buf, 1); + buf.writeFloatLE(at.getValue()); + helper.writeString(buf, FLOAT_OPERATIONS.get(at.getOperation().ordinal())); + helper.writeOptionalNull(buf, at.getConstraintMin(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buf, at.getConstraintMax(), ByteBuf::writeFloatLE); + } else if (data instanceof ColorAttributeData) { + ColorAttributeData at = (ColorAttributeData) data; + VarInts.writeUnsignedInt(buf, 2); + writeColor255(buf, helper, at.getValue()); + helper.writeString(buf, COLOR_OPERATIONS.get(at.getOperation().ordinal())); + } else { + throw new IllegalArgumentException("Unknown AttributeData: " + data); + } + } + + protected AttributeData readAttributeData(ByteBuf buf, BedrockCodecHelper helper) { + int type = VarInts.readUnsignedInt(buf); + switch (type) { + case 0: + return new BoolAttributeData( + buf.readBoolean(), + BoolAttributeData.Operation.values()[BOOL_OPERATIONS.indexOf(helper.readString(buf))] + ); + case 1: + return new FloatAttributeData( + buf.readFloatLE(), + FloatAttributeData.Operation.values()[FLOAT_OPERATIONS.indexOf(helper.readString(buf))], + helper.readOptional(buf, null, ByteBuf::readFloatLE), + helper.readOptional(buf, null, ByteBuf::readFloatLE) + ); + case 2: + return new ColorAttributeData( + readColor255(buf, helper), + ColorAttributeData.Operation.values()[COLOR_OPERATIONS.indexOf(helper.readString(buf))] + ); + } + throw new IllegalArgumentException("Unknown AttributeData type: " + type); + } + + private void writeColor255(ByteBuf buf, BedrockCodecHelper helper, ColorAttributeData.Color255RGBA c) { + if (c instanceof ColorAttributeData.StringColor) { + VarInts.writeUnsignedInt(buf, 0); + helper.writeString(buf, ((ColorAttributeData.StringColor) c).getValue()); + } else if (c instanceof ColorAttributeData.ArrayColor) { + VarInts.writeUnsignedInt(buf, 1); + int[] v = ((ColorAttributeData.ArrayColor) c).getValue(); + for (int i = 0; i < 4; i++) { + buf.writeIntLE(v[i]); + } + } else { + throw new IllegalArgumentException("Unknown Color255RGBA: " + c); + } + } + + private ColorAttributeData.Color255RGBA readColor255(ByteBuf buf, BedrockCodecHelper helper) { + int type = VarInts.readUnsignedInt(buf); + switch (type) { + case 0: + return new ColorAttributeData.StringColor(helper.readString(buf)); + case 1: + int[] v = new int[4]; + for (int i = 0; i < 4; i++) { + v[i] = buf.readIntLE(); + } + return new ColorAttributeData.ArrayColor(v); + } + throw new IllegalArgumentException("Unknown Color255RGBA type: " + type); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUICloseScreenSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUICloseScreenSerializer_v944.java new file mode 100644 index 00000000..9680dfb5 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUICloseScreenSerializer_v944.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataDrivenUICloseScreenPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ClientboundDataDrivenUICloseScreenSerializer_v944 implements BedrockPacketSerializer { + + public static final ClientboundDataDrivenUICloseScreenSerializer_v944 INSTANCE = new ClientboundDataDrivenUICloseScreenSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUICloseScreenPacket packet) { + helper.writeOptionalNull(buffer, packet.getFormId(), ByteBuf::writeIntLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUICloseScreenPacket packet) { + packet.setFormId(helper.readOptional(buffer, null, (buf, h) -> buf.readIntLE())); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUIShowScreenSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUIShowScreenSerializer_v944.java new file mode 100644 index 00000000..44ce2072 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ClientboundDataDrivenUIShowScreenSerializer_v944.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.ClientboundDataDrivenUIShowScreenSerializer_v924; +import org.cloudburstmc.protocol.bedrock.packet.ClientboundDataDrivenUIShowScreenPacket; + +public class ClientboundDataDrivenUIShowScreenSerializer_v944 extends ClientboundDataDrivenUIShowScreenSerializer_v924 { + + public static final ClientboundDataDrivenUIShowScreenSerializer_v944 INSTANCE = new ClientboundDataDrivenUIShowScreenSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIShowScreenPacket packet) { + super.serialize(buffer, helper, packet); + + buffer.writeIntLE(packet.getFormId()); + helper.writeOptionalNull(buffer, packet.getDataInstanceId(), ByteBuf::writeIntLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDataDrivenUIShowScreenPacket packet) { + super.deserialize(buffer, helper, packet); + + packet.setFormId((int) buffer.readUnsignedIntLE()); + Long id = helper.readOptional(buffer, null, ByteBuf::readUnsignedIntLE); + packet.setDataInstanceId(id == null ? null : id.intValue()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/LocatorBarSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/LocatorBarSerializer_v944.java new file mode 100644 index 00000000..30a4cda6 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/LocatorBarSerializer_v944.java @@ -0,0 +1,70 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.LocatorBarWaypoint; +import org.cloudburstmc.protocol.bedrock.packet.LocatorBarPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.awt.Color; +import java.util.UUID; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class LocatorBarSerializer_v944 implements BedrockPacketSerializer { + + public static final LocatorBarSerializer_v944 INSTANCE = new LocatorBarSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, LocatorBarPacket packet) { + helper.writeArray(buffer, packet.getWaypoints(), (buf, payload) -> writePayload(buf, helper, payload)); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, LocatorBarPacket packet) { + helper.readArray(buffer, packet.getWaypoints(), buf -> readPayload(buf, helper), 40000); + } + + private void writePayload(ByteBuf buf, BedrockCodecHelper helper, LocatorBarPacket.Payload payload) { + helper.writeUuid(buf, payload.getGroupHandle()); + writeWaypoint(buf, helper, payload.getWaypoint()); + buf.writeByte(payload.getActionFlag().ordinal()); + } + + private LocatorBarPacket.Payload readPayload(ByteBuf buf, BedrockCodecHelper helper) { + UUID groupHandle = helper.readUuid(buf); + LocatorBarWaypoint waypoint = readWaypoint(buf, helper); + LocatorBarPacket.Action actionFlag = LocatorBarPacket.Action.values()[buf.readUnsignedByte()]; + return new LocatorBarPacket.Payload(actionFlag, groupHandle, waypoint); + } + + protected void writeWaypoint(ByteBuf buf, BedrockCodecHelper helper, LocatorBarWaypoint waypoint) { + buf.writeIntLE(waypoint.getUpdateFlag()); + helper.writeOptionalNull(buf, waypoint.getVisible(), ByteBuf::writeBoolean); + helper.writeOptionalNull(buf, waypoint.getWorldPosition(), (buf1, h, pos) -> { + h.writeVector3f(buf1, pos.getPosition()); + VarInts.writeInt(buf1, pos.getDimension()); + }); + helper.writeOptionalNull(buf, waypoint.getTextureId(), ByteBuf::writeIntLE); + helper.writeOptionalNull(buf, waypoint.getColor(), (buf1, h, c) -> buf1.writeIntLE(c.getRGB())); + helper.writeOptionalNull(buf, waypoint.getClientPositionAuthority(), ByteBuf::writeBoolean); + helper.writeOptionalNull(buf, waypoint.getEntityUniqueId(), VarInts::writeLong); + } + + protected LocatorBarWaypoint readWaypoint(ByteBuf buf, BedrockCodecHelper helper) { + LocatorBarWaypoint waypoint = new LocatorBarWaypoint(); + waypoint.setUpdateFlag((int) buf.readUnsignedIntLE()); + waypoint.setVisible(helper.readOptional(buf, null, ByteBuf::readBoolean)); + waypoint.setWorldPosition(helper.readOptional(buf, null, (buf1, h) -> + new LocatorBarWaypoint.WorldPosition(h.readVector3f(buf1), VarInts.readInt(buf1)))); + Long id = helper.readOptional(buf, null, ByteBuf::readUnsignedIntLE); + waypoint.setTextureId(id == null ? null : id.intValue()); + waypoint.setColor(helper.readOptional(buf, null, (buf1, h) -> + new Color(buf1.readIntLE(), true))); + waypoint.setClientPositionAuthority(helper.readOptional(buf, null, ByteBuf::readBoolean)); + waypoint.setEntityUniqueId(helper.readOptional(buf, null, VarInts::readLong)); + return waypoint; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PartyChangedSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PartyChangedSerializer_v944.java new file mode 100644 index 00000000..09395b37 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PartyChangedSerializer_v944.java @@ -0,0 +1,32 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.PartyChangedPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class PartyChangedSerializer_v944 implements BedrockPacketSerializer { + + public static final PartyChangedSerializer_v944 INSTANCE = new PartyChangedSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PartyChangedPacket packet) { + helper.writeOptionalNull(buffer, packet.getParty(), this::writeParty); + } + + protected void writeParty(ByteBuf buffer, BedrockCodecHelper helper, PartyChangedPacket.PartyInfo info) { + helper.writeString(buffer, info.getPartyId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PartyChangedPacket packet) { + packet.setParty(helper.readOptional(buffer, null, this::readParty)); + } + + protected PartyChangedPacket.PartyInfo readParty(ByteBuf buffer, BedrockCodecHelper helper) { + return new PartyChangedPacket.PartyInfo(helper.readString(buffer), false); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PlayerAuthInputSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PlayerAuthInputSerializer_v944.java new file mode 100644 index 00000000..1c196bbb --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/PlayerAuthInputSerializer_v944.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v766.serializer.PlayerAuthInputSerializer_v766; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class PlayerAuthInputSerializer_v944 extends PlayerAuthInputSerializer_v766 { + + public static final PlayerAuthInputSerializer_v944 INSTANCE = new PlayerAuthInputSerializer_v944(); + + @Override + protected void writeItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper, ItemUseTransaction transaction) { + super.writeItemUseTransaction(buffer, helper, transaction); + + buffer.writeByte(transaction.getClientCooldownState()); + } + + @Override + protected ItemUseTransaction readItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper) { + ItemUseTransaction itemTransaction = super.readItemUseTransaction(buffer, helper); + itemTransaction.setClientCooldownState(buffer.readByte()); + return itemTransaction; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ResourcePacksReadyForValidationSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ResourcePacksReadyForValidationSerializer_v944.java new file mode 100644 index 00000000..d271c3fc --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ResourcePacksReadyForValidationSerializer_v944.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksReadyForValidationPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ResourcePacksReadyForValidationSerializer_v944 implements BedrockPacketSerializer { + + public static final ResourcePacksReadyForValidationSerializer_v944 INSTANCE = new ResourcePacksReadyForValidationSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePacksReadyForValidationPacket packet) { + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePacksReadyForValidationPacket packet) { + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ServerboundDataDrivenScreenClosedSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ServerboundDataDrivenScreenClosedSerializer_v944.java new file mode 100644 index 00000000..6eac2c67 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/ServerboundDataDrivenScreenClosedSerializer_v944.java @@ -0,0 +1,34 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDataDrivenScreenClosedPacket; + +import java.util.Arrays; +import java.util.List; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ServerboundDataDrivenScreenClosedSerializer_v944 implements BedrockPacketSerializer { + + public static final ServerboundDataDrivenScreenClosedSerializer_v944 INSTANCE = new ServerboundDataDrivenScreenClosedSerializer_v944(); + + private static final List CLOSE_REASONS = Arrays.asList("programmaticclose", "programmaticcloseall", "clientcanceled", "userbusy", "invalidform"); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataDrivenScreenClosedPacket packet) { + buffer.writeIntLE(packet.getFormId()); + //helper.writeOptionalNull(buffer, packet.getFormId(), ByteBuf::writeIntLE); + helper.writeString(buffer, CLOSE_REASONS.get(packet.getCloseReason().ordinal())); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDataDrivenScreenClosedPacket packet) { + packet.setFormId((int) buffer.readUnsignedIntLE()); + //Long id = helper.readOptional(buffer, null, ByteBuf::readUnsignedIntLE); + //packet.setFormId(id == null ? null : id.intValue()); + packet.setCloseReason(ServerboundDataDrivenScreenClosedPacket.CloseReason.values()[CLOSE_REASONS.indexOf(helper.readString(buffer))]); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/StartGameSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/StartGameSerializer_v944.java new file mode 100644 index 00000000..c001b9eb --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/StartGameSerializer_v944.java @@ -0,0 +1,66 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.StartGameSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.ClientStoreEntrypointConfiguration; +import org.cloudburstmc.protocol.bedrock.data.GatheringsConfigurationJoinInfo; +import org.cloudburstmc.protocol.bedrock.data.PresenceConfiguration; +import org.cloudburstmc.protocol.bedrock.data.ServerConfigurationJoinInfo; + +public class StartGameSerializer_v944 extends StartGameSerializer_v924 { + + public static final StartGameSerializer_v944 INSTANCE = new StartGameSerializer_v944(); + + @Override + protected void writeServerJoinInfo(ByteBuf buffer, BedrockCodecHelper helper, ServerConfigurationJoinInfo info) { + helper.writeOptionalNull(buffer, info.getGatheringsConfigurationJoinInfo(), this::writeGatheringsConfiguration); + helper.writeOptionalNull(buffer, info.getClientStoreEntrypointConfiguration(), this::writeClientStoreEntrypointConfiguration); + helper.writeOptionalNull(buffer, info.getPresenceConfiguration(), helper::writePresenceConfiguration); + } + + private void writeClientStoreEntrypointConfiguration(ByteBuf buf, BedrockCodecHelper h, ClientStoreEntrypointConfiguration store) { + h.writeString(buf, store.getStoreId()); + h.writeString(buf, store.getStoreName()); + } + + protected void writeGatheringsConfiguration(ByteBuf buf, BedrockCodecHelper h, GatheringsConfigurationJoinInfo info) { + h.writeUuid(buf, info.getExperienceId()); + h.writeString(buf, info.getExperienceName()); + h.writeUuid(buf, info.getWorldId()); + h.writeString(buf, info.getWorldName()); + h.writeString(buf, info.getCreatorId()); + h.writeUuid(buf, info.getTargetId()); + h.writeString(buf, info.getScenarioId()); + h.writeString(buf, info.getServerId()); + } + + @Override + protected ServerConfigurationJoinInfo readServerJoinInfo(ByteBuf buffer, BedrockCodecHelper helper) { + GatheringsConfigurationJoinInfo gatheringsConfigurationJoinInfo = helper.readOptional(buffer, null, this::readGatheringsConfiguration); + ClientStoreEntrypointConfiguration clientStoreEntrypointConfiguration = helper.readOptional(buffer, null, this::readClientStoreEntrypointConfiguration); + PresenceConfiguration presenceConfiguration = helper.readOptional(buffer, null, helper::readPresenceConfiguration); + + return new ServerConfigurationJoinInfo(gatheringsConfigurationJoinInfo, clientStoreEntrypointConfiguration, presenceConfiguration); + } + + private ClientStoreEntrypointConfiguration readClientStoreEntrypointConfiguration(ByteBuf buf, BedrockCodecHelper h) { + return new ClientStoreEntrypointConfiguration( + h.readString(buf), + h.readString(buf) + ); + } + + protected GatheringsConfigurationJoinInfo readGatheringsConfiguration(ByteBuf buf, BedrockCodecHelper h) { + return new GatheringsConfigurationJoinInfo( + h.readUuid(buf), + h.readString(buf), + h.readUuid(buf), + h.readString(buf), + h.readString(buf), + h.readUuid(buf), + h.readString(buf), + h.readString(buf) + ); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/SyncWorldClocksSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/SyncWorldClocksSerializer_v944.java new file mode 100644 index 00000000..76f4e297 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/SyncWorldClocksSerializer_v944.java @@ -0,0 +1,149 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.clock.*; +import org.cloudburstmc.protocol.bedrock.packet.SyncWorldClocksPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.ArrayList; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class SyncWorldClocksSerializer_v944 implements BedrockPacketSerializer { + + public static final SyncWorldClocksSerializer_v944 INSTANCE = new SyncWorldClocksSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, SyncWorldClocksPacket packet) { + SyncWorldClocksPayload data = packet.getData(); + + if (data instanceof SyncStateData) { + VarInts.writeUnsignedInt(buffer, 0); + writeSyncState(buffer, helper, (SyncStateData) data); + } else if (data instanceof InitializeRegistryData) { + VarInts.writeUnsignedInt(buffer, 1); + writeInitializeRegistry(buffer, helper, (InitializeRegistryData) data); + } else if (data instanceof AddTimeMarkerData) { + VarInts.writeUnsignedInt(buffer, 2); + writeAddTimeMarker(buffer, helper, (AddTimeMarkerData) data); + } else if (data instanceof RemoveTimeMarkerData) { + VarInts.writeUnsignedInt(buffer, 3); + writeRemoveTimeMarker(buffer, helper, (RemoveTimeMarkerData) data); + } else { + throw new IllegalArgumentException("Not oneOf"); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SyncWorldClocksPacket packet) { + int type = VarInts.readUnsignedInt(buffer); + + switch (type) { + case 0: + packet.setData(readSyncState(buffer, helper)); + return; + case 1: + packet.setData(readInitializeRegistry(buffer, helper)); + return; + case 2: + packet.setData(readAddTimeMarker(buffer, helper)); + return; + case 3: + packet.setData(readRemoveTimeMarker(buffer, helper)); + return; + } + + throw new IllegalArgumentException(type + " is not oneOf"); + } + + private void writeSyncState(ByteBuf buf, BedrockCodecHelper helper, SyncStateData data) { + helper.writeArray(buf, data.getClockData(), (b, entry) -> { + VarInts.writeUnsignedLong(b, entry.getClockId()); + VarInts.writeInt(b, entry.getTime()); + b.writeBoolean(entry.isPaused()); + }); + } + + private SyncStateData readSyncState(ByteBuf buf, BedrockCodecHelper helper) { + SyncStateData data = new SyncStateData(new ArrayList<>()); + + helper.readArray(buf, data.getClockData(), b -> { + long id = VarInts.readUnsignedLong(b); + int time = VarInts.readInt(b); + boolean paused = b.readBoolean(); + return new SyncWorldClockStateData(id, time, paused); + }, 256); + + return data; + } + + private void writeInitializeRegistry(ByteBuf buf, BedrockCodecHelper helper, InitializeRegistryData data) { + helper.writeArray(buf, data.getClockData(), (b, entry) -> { + VarInts.writeUnsignedLong(b, entry.getId()); + helper.writeString(b, entry.getName()); + VarInts.writeInt(b, entry.getTime()); + b.writeBoolean(entry.isPaused()); + + helper.writeArray(b, entry.getTimeMarkers(), (bb, marker) -> writeTimeMarker(bb, helper, marker)); + }); + } + + private void writeTimeMarker(ByteBuf buf, BedrockCodecHelper helper, TimeMarkerData marker) { + VarInts.writeUnsignedLong(buf, marker.getId()); + helper.writeString(buf, marker.getName()); + VarInts.writeInt(buf, marker.getTime()); + helper.writeOptionalNull(buf, marker.getPeriod(), ByteBuf::writeIntLE); + } + + private TimeMarkerData readTimeMarker(ByteBuf buf, BedrockCodecHelper helper) { + long markerId = VarInts.readUnsignedLong(buf); + String markerName = helper.readStringMaxLen(buf, 128); + int markerTime = VarInts.readInt(buf); + Integer period = helper.readOptional(buf, null, ByteBuf::readIntLE); + return new TimeMarkerData(markerId, markerName, markerTime, period); + } + + private InitializeRegistryData readInitializeRegistry(ByteBuf buf, BedrockCodecHelper helper) { + InitializeRegistryData data = new InitializeRegistryData(new ArrayList<>()); + + helper.readArray(buf, data.getClockData(), b -> { + long id = VarInts.readUnsignedLong(b); + String name = helper.readStringMaxLen(b, 128); + int time = VarInts.readInt(b); + boolean paused = b.readBoolean(); + + WorldClockData clock = new WorldClockData(id, name, time, paused, new ArrayList<>()); + + helper.readArray(b, clock.getTimeMarkers(), bb -> readTimeMarker(bb, helper), 256); + + return clock; + }, 256); + + return data; + } + + private void writeAddTimeMarker(ByteBuf buf, BedrockCodecHelper helper, AddTimeMarkerData data) { + VarInts.writeUnsignedLong(buf, data.getClockId()); + helper.writeArray(buf, data.getTimeMarkers(), (b, marker) -> writeTimeMarker(b, helper, marker)); + } + + private AddTimeMarkerData readAddTimeMarker(ByteBuf buf, BedrockCodecHelper helper) { + AddTimeMarkerData data = new AddTimeMarkerData(VarInts.readUnsignedLong(buf), new ArrayList<>()); + helper.readArray(buf, data.getTimeMarkers(), b -> readTimeMarker(b, helper), 256); + return data; + } + + private void writeRemoveTimeMarker(ByteBuf buf, BedrockCodecHelper helper, RemoveTimeMarkerData data) { + VarInts.writeUnsignedLong(buf, data.getClockId()); + helper.writeArray(buf, data.getTimeMarkerIds(), VarInts::writeUnsignedLong); + } + + private RemoveTimeMarkerData readRemoveTimeMarker(ByteBuf buf, BedrockCodecHelper helper) { + RemoveTimeMarkerData data = new RemoveTimeMarkerData(VarInts.readUnsignedLong(buf)); + helper.readArray(buf, data.getTimeMarkerIds(), VarInts::readUnsignedLong, 256); + return data; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/UpdateClientInputLocksSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/UpdateClientInputLocksSerializer_v944.java new file mode 100644 index 00000000..9add3157 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/UpdateClientInputLocksSerializer_v944.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v560.serializer.UpdateClientInputLocksSerializer_v560; +import org.cloudburstmc.protocol.bedrock.packet.UpdateClientInputLocksPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class UpdateClientInputLocksSerializer_v944 extends UpdateClientInputLocksSerializer_v560 { + + public static final UpdateClientInputLocksSerializer_v944 INSTANCE = new UpdateClientInputLocksSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateClientInputLocksPacket packet) { + VarInts.writeUnsignedInt(buffer, packet.getLockComponentData()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateClientInputLocksPacket packet) { + packet.setLockComponentData(VarInts.readUnsignedInt(buffer)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/VoxelShapesSerializer_v944.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/VoxelShapesSerializer_v944.java new file mode 100644 index 00000000..79781652 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v944/serializer/VoxelShapesSerializer_v944.java @@ -0,0 +1,25 @@ +package org.cloudburstmc.protocol.bedrock.codec.v944.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.VoxelShapesSerializer_v924; +import org.cloudburstmc.protocol.bedrock.packet.VoxelShapesPacket; + +public class VoxelShapesSerializer_v944 extends VoxelShapesSerializer_v924 { + + public static final VoxelShapesSerializer_v944 INSTANCE = new VoxelShapesSerializer_v944(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, VoxelShapesPacket packet) { + super.serialize(buffer, helper, packet); + + buffer.writeShortLE(packet.getCustomShapeCount()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, VoxelShapesPacket packet) { + super.deserialize(buffer, helper, packet); + + packet.setCustomShapeCount(buffer.readUnsignedShortLE()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/BedrockCodecHelper_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/BedrockCodecHelper_v975.java new file mode 100644 index 00000000..6902e94a --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/BedrockCodecHelper_v975.java @@ -0,0 +1,185 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; +import org.cloudburstmc.nbt.NBTInputStream; +import org.cloudburstmc.nbt.NBTOutputStream; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v944.BedrockCodecHelper_v944; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; +import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.common.util.TypeMap; +import org.cloudburstmc.protocol.common.util.VarInts; +import org.cloudburstmc.protocol.common.util.stream.LittleEndianByteBufInputStream; +import org.cloudburstmc.protocol.common.util.stream.LittleEndianByteBufOutputStream; + +import java.io.IOException; + +import static java.util.Objects.requireNonNull; +import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; + +public class BedrockCodecHelper_v975 extends BedrockCodecHelper_v944 { + + public BedrockCodecHelper_v975(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, + TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { + super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); + } + + @Override + public ItemData readNetworkItemStackDescriptor(ByteBuf buffer) { + int runtimeId = buffer.readShortLE(); + + ItemDefinition definition = runtimeId == 0 ? ItemDefinition.AIR : this.itemDefinitions.getDefinition(runtimeId); + int count = buffer.readUnsignedShortLE(); + int aux = VarInts.readUnsignedInt(buffer); + + int netId = 0; + boolean hasNetId = buffer.readBoolean(); + + if (hasNetId) { + int netIdVariant = VarInts.readUnsignedInt(buffer); + + switch (netIdVariant) { + case 0: // ItemStackNetId + case 1: // ItemStackRequestId + case 2: // ItemStackLegacyRequestId + netId = VarInts.readInt(buffer); + break; + default: + throw new IllegalArgumentException("Not oneOf"); + } + } + + int blockRuntimeId = VarInts.readUnsignedInt(buffer); + + NbtMap compoundTag = null; + long blockingTicks = 0; + String[] canPlace = new String[0]; + String[] canBreak = new String[0]; + + ByteBuf buf = buffer.readSlice(VarInts.readUnsignedInt(buffer)); + + if (buf.isReadable()) { + try (LittleEndianByteBufInputStream stream = new LittleEndianByteBufInputStream(buf); + NBTInputStream nbtStream = new NBTInputStream(stream, this.encodingSettings.maxItemNBTSize())) { + int nbtSize = stream.readShort(); + + if (nbtSize > 0) { + compoundTag = (NbtMap) nbtStream.readTag(); + } else if (nbtSize == -1) { + int tagCount = stream.readUnsignedByte(); + if (tagCount != 1) throw new IllegalArgumentException("Expected 1 tag but got " + tagCount); + compoundTag = (NbtMap) nbtStream.readTag(); + } + + int maxLength = this.encodingSettings.maxListSize(); + int length = stream.readInt(); + checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s can place entries, but maximum is %s", length, maxLength); + canPlace = new String[length]; + for (int i = 0; i < canPlace.length; i++) { + canPlace[i] = stream.readUTFMaxLen(this.encodingSettings.maxItemStackTagLength()); + } + + length = stream.readInt(); + checkArgument(maxLength <= 0 || length <= maxLength, "Tried to read %s can break entries, but maximum is %s", length, maxLength); + canBreak = new String[length]; + for (int i = 0; i < canBreak.length; i++) { + canBreak[i] = stream.readUTFMaxLen(this.encodingSettings.maxItemStackTagLength()); + } + + if (definition != null && BLOCKING_ID.equals(definition.getIdentifier())) { + blockingTicks = stream.readLong(); + } + } catch (IOException e) { + throw new IllegalStateException("Unable to read item user data", e); + } + } + + if (buf.isReadable()) { + log.info("Item user data has {} readable bytes left", buf.readableBytes()); + + if (log.isDebugEnabled()) { + log.debug("Item data:\n{}", ByteBufUtil.prettyHexDump(buf.readerIndex(0))); + } + } + + return ItemData.builder() + .definition(definition) + .damage(aux) + .count(count) + .tag(compoundTag) + .canPlace(canPlace) + .canBreak(canBreak) + .blockingTicks(blockingTicks) + .blockDefinition(runtimeId == 0 ? ItemData.AIR.getBlockDefinition() : this.blockDefinitions.getDefinition(blockRuntimeId)) + .usingNetId(hasNetId) + .netId(netId) + .build(); + } + + @Override + public void writeNetworkItemStackDescriptor(ByteBuf buffer, ItemData item) { + requireNonNull(item, "item is null!"); + + ItemDefinition definition = item.getDefinition(); + boolean air = isAir(definition); + + buffer.writeShortLE(air ? 0 : definition.getRuntimeId()); + buffer.writeShortLE(item.getCount()); + VarInts.writeUnsignedInt(buffer, item.getDamage()); + + buffer.writeBoolean(item.isUsingNetId()); + if (item.isUsingNetId()) { + VarInts.writeUnsignedInt(buffer, 0); // TODO: variant: oneOf (all read the same but is there difference in behavior?) + VarInts.writeInt(buffer, item.getNetId()); + } + + VarInts.writeUnsignedInt(buffer, air || item.getBlockDefinition() == null ? 0 : item.getBlockDefinition().getRuntimeId()); + + if (air) { + VarInts.writeUnsignedInt(buffer, 0); + } else { + ByteBuf userDataBuf = ByteBufAllocator.DEFAULT.ioBuffer(); + try (LittleEndianByteBufOutputStream stream = new LittleEndianByteBufOutputStream(userDataBuf); + NBTOutputStream nbtStream = new NBTOutputStream(stream)) { + if (item.getTag() != null) { + stream.writeShort(-1); + stream.writeByte(1); // Hardcoded in current version + nbtStream.writeTag(item.getTag()); + } else { + userDataBuf.writeShortLE(0); + } + + String[] canPlace = item.getCanPlace(); + stream.writeInt(canPlace.length); + for (String aCanPlace : canPlace) { + stream.writeUTF(aCanPlace); + } + + String[] canBreak = item.getCanBreak(); + stream.writeInt(canBreak.length); + for (String aCanBreak : canBreak) { + stream.writeUTF(aCanBreak); + } + + if (BLOCKING_ID.equals(definition.getIdentifier())) { + stream.writeLong(item.getBlockingTicks()); + } + + VarInts.writeUnsignedInt(buffer, userDataBuf.readableBytes()); + buffer.writeBytes(userDataBuf); + } catch (IOException e) { + throw new IllegalStateException("Unable to write item user data", e); + } finally { + userDataBuf.release(); + } + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/Bedrock_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/Bedrock_v975.java new file mode 100644 index 00000000..c4b3003c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/Bedrock_v975.java @@ -0,0 +1,185 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelEventSerializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; +import org.cloudburstmc.protocol.bedrock.codec.v898.serializer.AvailableCommandsSerializer_v898; +import org.cloudburstmc.protocol.bedrock.codec.v944.Bedrock_v944; +import org.cloudburstmc.protocol.bedrock.codec.v975.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.LevelEventType; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.ParticleType; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataFormat; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.bedrock.transformer.FlagTransformer; +import org.cloudburstmc.protocol.bedrock.transformer.TypeMapTransformer; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v975 extends Bedrock_v944 { + + protected static final TypeMap COMMAND_PARAMS = TypeMap.builder(CommandParam.class) + .insert(0, CommandParam.UNKNOWN) + .insert(1, CommandParam.INT) + .insert(2, CommandParam.FLOAT) + .insert(3, CommandParam.VALUE) + .insert(4, CommandParam.R_VALUE) + .insert(5, CommandParam.WILDCARD_INT) + .insert(6, CommandParam.OPERATOR) + .insert(7, CommandParam.COMPARE_OPERATOR) + .insert(8, CommandParam.TARGET) + .insert(9, CommandParam.STANDALONE_TARGET) + .insert(10, CommandParam.WILDCARD_TARGET) + .insert(11, CommandParam.NON_ID_TARGET) + .insert(12, CommandParam.SCORE_ARG) + .insert(13, CommandParam.SCORE_ARGS) + .insert(14, CommandParam.SCORE_SELECT_PARAM) + .insert(15, CommandParam.SCORE_SELECTOR) + .insert(16, CommandParam.TAG_SELECTOR) + .insert(17, CommandParam.FILE_PATH) + .insert(18, CommandParam.FILE_PATH_VAL) + .insert(19, CommandParam.FILE_PATH_CONT) + .insert(20, CommandParam.INT_RANGE_VAL) + .insert(21, CommandParam.INT_RANGE_POST_VAL) + .insert(22, CommandParam.INT_RANGE) + .insert(23, CommandParam.INT_RANGE_FULL) + .insert(24, CommandParam.RATIONAL_RANGE_VAL) + .insert(25, CommandParam.RATIONAL_RANGE_POST_VAL) + .insert(26, CommandParam.RATIONAL_RANGE) + .insert(27, CommandParam.RATIONAL_RANGE_FULL) + .insert(28, CommandParam.SEL_ARGS) + .insert(29, CommandParam.ARGS) + .insert(30, CommandParam.ARG) + .insert(31, CommandParam.MARG) + .insert(32, CommandParam.MVALUE) + .insert(33, CommandParam.NAME) + .insert(34, CommandParam.TYPE) + .insert(35, CommandParam.FAMILY) + .insert(36, CommandParam.PERMISSION) + .insert(37, CommandParam.PERMISSIONS) + .insert(38, CommandParam.PERMISSION_SELECTOR) + .insert(39, CommandParam.PERMISSION_ELEMENT) + .insert(40, CommandParam.PERMISSION_ELEMENTS) + .insert(41, CommandParam.TAG) + .insert(42, CommandParam.HAS_ITEM_ELEMENT) + .insert(43, CommandParam.HAS_ITEM_ELEMENTS) + .insert(44, CommandParam.HAS_ITEM) + .insert(45, CommandParam.HAS_ITEMS) + .insert(46, CommandParam.HAS_ITEM_SELECTOR) + .insert(47, CommandParam.EQUIPMENT_SLOTS) + .insert(48, CommandParam.PROPERTY_VALUE) + .insert(49, CommandParam.HAS_PROPERTY_PARAM_VALUE) + .insert(50, CommandParam.HAS_PROPERTY_PARAM_ENUM_VALUE) + .insert(51, CommandParam.HAS_PROPERTY_ARG) + .insert(52, CommandParam.HAS_PROPERTY_ARGS) + .insert(53, CommandParam.HAS_PROPERTY_ELEMENT) + .insert(54, CommandParam.HAS_PROPERTY_ELEMENTS) + .insert(55, CommandParam.HAS_PROPERTY_SELECTOR) + .insert(56, CommandParam.STRING) + .insert(57, CommandParam.ID_CONT) + .insert(58, CommandParam.COORD_X_INT) + .insert(59, CommandParam.COORD_Y_INT) + .insert(60, CommandParam.COORD_Z_INT) + .insert(61, CommandParam.COORD_X_FLOAT) + .insert(62, CommandParam.COORD_Y_FLOAT) + .insert(63, CommandParam.COORD_Z_FLOAT) + .insert(64, CommandParam.BLOCK_POSITION) + .insert(65, CommandParam.POSITION) + .insert(66, CommandParam.MESSAGE_XP) + .insert(67, CommandParam.MESSAGE) + .insert(68, CommandParam.MESSAGE_ROOT) + .insert(69, CommandParam.POST_SELECTOR) + .insert(70, CommandParam.TEXT) + .insert(71, CommandParam.TEXT_CONT) + .insert(72, CommandParam.JSON_VALUE) + .insert(73, CommandParam.JSON_FIELD) + .insert(74, CommandParam.JSON) + .insert(75, CommandParam.JSON_OBJECT_FIELDS) + .insert(76, CommandParam.JSON_OBJECT_CONT) + .insert(77, CommandParam.JSON_ARRAY) + .insert(78, CommandParam.JSON_ARRAY_VALUES) + .insert(79, CommandParam.JSON_ARRAY_CONT) + .insert(80, CommandParam.BLOCK_STATE) + .insert(81, CommandParam.BLOCK_STATE_KEY) + .insert(82, CommandParam.BLOCK_STATE_VALUE) + .insert(83, CommandParam.BLOCK_STATE_VALUES) + .insert(84, CommandParam.BLOCK_STATES) + .insert(85, CommandParam.BLOCK_STATES_CONT) + .insert(86, CommandParam.CLOCK_TIME_MARKER_NAME) + .insert(87, CommandParam.COMMAND) + .insert(88, CommandParam.SLASH_COMMAND) + .insert(89, CommandParam.CODE_BUILDER_ARG) + .insert(90, CommandParam.CODE_BUILDER_ARGS) + .insert(91, CommandParam.CODE_BUILDER_SELECT_PARAM) + .insert(92, CommandParam.CODE_BUILDER_SELECTOR) + .insert(134217728, CommandParam.CHAINED_COMMAND) + .build(); + + protected static final TypeMap ENTITY_EVENTS = Bedrock_v944.ENTITY_EVENTS.toBuilder() + .insert(81, EntityEventType.HURT_WITHOUT_RECEIVING_DAMAGE) + .build(); + + protected static final TypeMap ENTITY_FLAGS = Bedrock_v944.ENTITY_FLAGS + .toBuilder() + .insert(127, EntityFlag.USES_LEGACY_FRICTION) + .insert(128, EntityFlag.USES_UNIFORM_AIR_DRAG) + .insert(129, EntityFlag.NAMEPLATE_DEPTH_TESTED) + .build(); + + protected static final TypeMap PARTICLE_TYPES = Bedrock_v944.PARTICLE_TYPES.toBuilder() + .insert(101, ParticleType.SULFUR_CUBE) + .build(); + + protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v944.ENTITY_DATA + .toBuilder() + .update(EntityDataTypes.AREA_EFFECT_CLOUD_PARTICLE, new TypeMapTransformer<>(PARTICLE_TYPES)) + .update(EntityDataTypes.FLAGS, new FlagTransformer(ENTITY_FLAGS, 0)) + .update(EntityDataTypes.FLAGS_2, new FlagTransformer(ENTITY_FLAGS, 1)) + .insert(EntityDataTypes.RESERVED_139, 139, EntityDataFormat.LONG) + .insert(EntityDataTypes.NAMEPLATE_RENDER_DISTANCE_MAX, 140, EntityDataFormat.FLOAT) + .build(); + + protected static final TypeMap LEVEL_EVENTS = Bedrock_v944.LEVEL_EVENTS.toBuilder() + .insert(LEVEL_EVENT_PARTICLE_TYPE, PARTICLE_TYPES) + .build(); + + protected static final TypeMap SOUND_EVENTS = Bedrock_v944.SOUND_EVENTS + .toBuilder() + .replace(599, SoundEvent.PUSHED_BY_PLAYER) + .insert(600, SoundEvent.BOUNCE) + .insert(601, SoundEvent.UNDEFINED) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v944.CODEC.toBuilder() + .protocolVersion(975) + .minecraftVersion("1.26.20") + .helper(() -> new BedrockCodecHelper_v975(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(AvailableCommandsPacket.class, new AvailableCommandsSerializer_v898(COMMAND_PARAMS)) + .updateSerializer(BiomeDefinitionListPacket.class, BiomeDefinitionListSerializer_v975.INSTANCE) + .updateSerializer(ClientboundAttributeLayerSyncPacket.class, ClientboundAttributeLayerSyncSerializer_v975.INSTANCE) + .updateSerializer(DebugDrawerPacket.class, DebugDrawerSerializer_v975.INSTANCE) + .updateSerializer(DimensionDataPacket.class, DimensionDataSerializer_v975.INSTANCE) + .updateSerializer(DisconnectPacket.class, DisconnectSerializer_v975.INSTANCE) + .updateSerializer(EntityEventPacket.class, new EntityEventSerializer_v975(ENTITY_EVENTS)) + .updateSerializer(InventorySlotPacket.class, InventorySlotSerializer_v975.INSTANCE) + .updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS)) + .updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v975(SOUND_EVENTS)) + .updateSerializer(LocatorBarPacket.class, LocatorBarSerializer_v975.INSTANCE) + .updateSerializer(MobEquipmentPacket.class, MobEquipmentSerializer_v975.INSTANCE) + .updateSerializer(MoveEntityAbsolutePacket.class, MoveEntityAbsoluteSerializer_v975.INSTANCE) + .updateSerializer(MovementPredictionSyncPacket.class, MovementPredictionSyncSerializer_v975.INSTANCE) + .updateSerializer(PartyChangedPacket.class, PartyChangedSerializer_v975.INSTANCE) + .updateSerializer(PlaySoundPacket.class, PlaySoundSerializer_v975.INSTANCE) + .updateSerializer(PlayerEnchantOptionsPacket.class, PlayerEnchantOptionsSerializer_v975.INSTANCE) + .updateSerializer(ServerboundDiagnosticsPacket.class, ServerboundDiagnosticsSerializer_v975.INSTANCE) + .updateSerializer(UpdateClientOptionsPacket.class, UpdateClientOptionsSerializer_v975.INSTANCE) + .registerPacket(ServerStoreInfoPacket::new, ServerStoreInfoSerializer_v975.INSTANCE, 346, PacketRecipient.CLIENT) + .registerPacket(ServerPresenceInfoPacket::new, ServerPresenceInfoSerializer_v975.INSTANCE, 347, PacketRecipient.CLIENT) + .build(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/BiomeDefinitionListSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/BiomeDefinitionListSerializer_v975.java new file mode 100644 index 00000000..51cca429 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/BiomeDefinitionListSerializer_v975.java @@ -0,0 +1,129 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.BiomeDefinitionListSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.VillageType; +import org.cloudburstmc.protocol.bedrock.data.biome.*; +import org.cloudburstmc.protocol.common.util.SequencedHashSet; + +import java.util.ArrayList; +import java.util.List; + +public class BiomeDefinitionListSerializer_v975 extends BiomeDefinitionListSerializer_v924 { + + public static final BiomeDefinitionListSerializer_v975 INSTANCE = new BiomeDefinitionListSerializer_v975(); + + @Override + protected void writeDefinitionChunkGen(ByteBuf buffer, BedrockCodecHelper helper, BiomeDefinitionChunkGenData definitionChunkGen, SequencedHashSet strings) { + helper.writeOptionalNull(buffer, definitionChunkGen.getClimate(), this::writeClimate); + + helper.writeOptionalNull(buffer, definitionChunkGen.getConsolidatedFeatures(), + (buf, aHelper, consolidatedFeatures) -> this.writeConsolidatedFeatures(buf, aHelper, consolidatedFeatures, strings)); + + helper.writeOptionalNull(buffer, definitionChunkGen.getMountainParams(), this::writeMountainParamsData); + + helper.writeOptionalNull(buffer, definitionChunkGen.getSurfaceMaterialAdjustment(), + (buf, aHelper, surfaceMaterialAdjustment) -> this.writeSurfaceMaterialAdjustment(buf, aHelper, surfaceMaterialAdjustment, strings)); + + helper.writeOptionalNull(buffer, definitionChunkGen.getOverworldGenRules(), + (buf, aHelper, overworldGenRules) -> this.writeOverworldGenRules(buf, aHelper, overworldGenRules, strings)); + + helper.writeOptionalNull(buffer, definitionChunkGen.getMultinoiseGenRules(), this::writeMultinoiseGenRules); + + helper.writeOptionalNull(buffer, definitionChunkGen.getLegacyWorldGenRules(), + (buf, aHelper, legacyWorldGenRules) -> this.writeLegacyWorldGenRules(buf, aHelper, legacyWorldGenRules, strings)); + + helper.writeOptionalNull(buffer, definitionChunkGen.getBiomeReplacements(), this::writeBiomeReplacementsData); + + helper.writeOptionalNull(buffer, definitionChunkGen.getVillageType(), (b, n) -> b.writeByte(n.ordinal())); + + writeBiomeSurfaceBuilderData(buffer, helper, definitionChunkGen.getSurfaceBuilderData()); + + writeBiomeSurfaceBuilderData(buffer, helper, definitionChunkGen.getSubsurfaceBuilderData()); + } + + protected void writeBiomeSurfaceBuilderData(ByteBuf buffer, BedrockCodecHelper helper, BiomeSurfaceBuilderData data) { + helper.writeOptionalNull(buffer, data.getSurfaceMaterials(), this::writeSurfaceMaterial); + buffer.writeBoolean(data.isHasDefaultOverworldSurface()); + buffer.writeBoolean(data.isHasSwampSurface()); + buffer.writeBoolean(data.isHasFrozenOceanSurface()); + buffer.writeBoolean(data.isHasTheEndSurface()); + helper.writeOptionalNull(buffer, data.getMesaSurface(), this::writeMesaSurface); + helper.writeOptionalNull(buffer, data.getCappedSurface(), this::writeCappedSurface); + helper.writeOptionalNull(buffer, data.getNoiseGradientSurface(), this::writeNoiseGradientSurface); + } + + protected void writeNoiseGradientSurface(ByteBuf buffer, BedrockCodecHelper helper, BiomeNoiseGradientSurfaceData data) { + helper.writeArray(buffer, data.getNonReplaceableBlocks(), ByteBuf::writeIntLE); + helper.writeArray(buffer, data.getGradientBlocks(), (buf, val) -> + buf.writeIntLE(val.getBlock())); + helper.writeString(buffer, data.getNoise()); + buffer.writeIntLE(data.getFirstOctave()); + helper.writeArray(buffer, data.getAmplitudes(), ByteBuf::writeFloatLE); + } + + @Override + protected BiomeDefinitionChunkGenData readDefinitionChunkGen(ByteBuf buffer, BedrockCodecHelper helper, List strings) { + BiomeClimateData climate = helper.readOptional(buffer, null, this::readClimate); + + List consolidatedFeatures = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readConsolidatedFeatures(buf, aHelper, strings)); + + BiomeMountainParamsData mountainParams = helper.readOptional(buffer, null, this::readMountainParamsData); + + BiomeSurfaceMaterialAdjustmentData surfaceMaterialAdjustment = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readSurfaceMaterialAdjustment(buf, aHelper, strings)); + + BiomeOverworldGenRulesData overworldGenRules = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readOverworldGenRules(buf, aHelper, strings)); + + BiomeMultinoiseGenRulesData multinoiseGenRules = helper.readOptional(buffer, null, this::readMultinoiseGenRules); + + BiomeLegacyWorldGenRulesData legacyWorldGenRules = helper.readOptional(buffer, null, + (buf, aHelper) -> this.readLegacyWorldGenRules(buf, aHelper, strings)); + + List replacementsData = helper.readOptional(buffer, null, this::readBiomeReplacementsData); + + VillageType villageType = helper.readOptional(buffer, null, buf -> VillageType.values()[buf.readUnsignedByte()]); + + BiomeSurfaceBuilderData surfaceBuilderData = helper.readOptional(buffer, null, this::readBiomeSurfaceBuilderData); + + BiomeSurfaceBuilderData subsurfaceBuilderData = helper.readOptional(buffer, null, this::readBiomeSurfaceBuilderData); + + return new BiomeDefinitionChunkGenData(climate, consolidatedFeatures, + mountainParams, surfaceMaterialAdjustment, + null, false, false, + false, false, + null, null, + overworldGenRules, multinoiseGenRules, + legacyWorldGenRules, replacementsData, villageType, surfaceBuilderData, subsurfaceBuilderData); + } + + protected BiomeSurfaceBuilderData readBiomeSurfaceBuilderData(ByteBuf buffer, BedrockCodecHelper helper) { + BiomeSurfaceMaterialData surfaceMaterials = helper.readOptional(buffer, null, this::readSurfaceMaterial); + boolean hasDefaultOverworldSurface = buffer.readBoolean(); + boolean hasSwampSurface = buffer.readBoolean(); + boolean hasFrozenOceanSurface = buffer.readBoolean(); + boolean hasTheEndSurface = buffer.readBoolean(); + BiomeMesaSurfaceData mesaSurface = helper.readOptional(buffer, null, this::readMesaSurface); + BiomeCappedSurfaceData cappedSurface = helper.readOptional(buffer, null, this::readCappedSurface); + BiomeNoiseGradientSurfaceData noiseGradientSurface = helper.readOptional(buffer, null, this::readNoiseGradientSurface); + + return new BiomeSurfaceBuilderData(surfaceMaterials, hasDefaultOverworldSurface,hasSwampSurface, + hasFrozenOceanSurface, hasTheEndSurface, mesaSurface, cappedSurface, noiseGradientSurface); + } + + protected BiomeNoiseGradientSurfaceData readNoiseGradientSurface(ByteBuf buffer, BedrockCodecHelper helper) { + List nonReplaceableBlocks = new ArrayList<>(); + helper.readArray(buffer, nonReplaceableBlocks, (buf, h) -> (int) buf.readUnsignedIntLE()); + List gradientBlocks = new ArrayList<>(); + helper.readArray(buffer, gradientBlocks, (buf, h) -> + new NoiseBlockSpecifier(null, 0, 0, 0, (int) buf.readUnsignedIntLE())); + String noiseSeedString = helper.readString(buffer); + int firstOctave = buffer.readIntLE(); + List amplitudes = new ArrayList<>(); + helper.readArray(buffer, amplitudes, (buf, h) -> buf.readFloatLE()); + return new BiomeNoiseGradientSurfaceData(nonReplaceableBlocks, gradientBlocks, noiseSeedString, firstOctave, amplitudes); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ClientboundAttributeLayerSyncSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ClientboundAttributeLayerSyncSerializer_v975.java new file mode 100644 index 00000000..e7ecf5ea --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ClientboundAttributeLayerSyncSerializer_v975.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v944.serializer.ClientboundAttributeLayerSyncSerializer_v944; +import org.cloudburstmc.protocol.bedrock.data.attributelayer.*; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class ClientboundAttributeLayerSyncSerializer_v975 extends ClientboundAttributeLayerSyncSerializer_v944 { + + public static final ClientboundAttributeLayerSyncSerializer_v975 INSTANCE = new ClientboundAttributeLayerSyncSerializer_v975(); + + @Override + protected void writeWeight(ByteBuf buf, BedrockCodecHelper helper, AttributeLayerSettings.Weight w) { + if (!(w instanceof AttributeLayerSettings.FloatWeight)) throw new IllegalArgumentException("Unknown Weight: " + w); + buf.writeFloatLE(((AttributeLayerSettings.FloatWeight) w).getValue()); + } + + @Override + protected AttributeLayerSettings.Weight readWeight(ByteBuf buf, BedrockCodecHelper helper) { + return new AttributeLayerSettings.FloatWeight(buf.readFloatLE()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DebugDrawerSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DebugDrawerSerializer_v975.java new file mode 100644 index 00000000..80b1889f --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DebugDrawerSerializer_v975.java @@ -0,0 +1,141 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.DebugDrawerSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.debugshape.*; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.awt.Color; + +public class DebugDrawerSerializer_v975 extends DebugDrawerSerializer_v924 { + + public static final DebugDrawerSerializer_v975 INSTANCE = new DebugDrawerSerializer_v975(); + + @Override + protected void writeCommonShapeData(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + VarInts.writeUnsignedLong(buffer, shape.getId()); + helper.writeOptionalNull(buffer, shape.getType(), (buf, type) -> buf.writeByte(type.ordinal())); + helper.writeOptionalNull(buffer, shape.getPosition(), WRITE_VECTOR3F); + helper.writeOptionalNull(buffer, shape.getScale(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, shape.getRotation(), WRITE_VECTOR3F); + helper.writeOptionalNull(buffer, shape.getTotalTimeLeft(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, shape.getMaximumRenderDistance(), ByteBuf::writeFloatLE); // new + helper.writeOptionalNull(buffer, shape.getColor(), WRITE_COLOR); + + helper.writeOptionalNull(buffer, shape.getDimension(), VarInts::writeInt); + helper.writeOptionalNull(buffer, shape.getAttachedToEntityId(), VarInts::writeUnsignedLong); + } + + @Override + protected void writeShape(ByteBuf buffer, BedrockCodecHelper helper, DebugShape shape) { + if (shape.getType() != DebugShape.Type.TEXT) { + super.writeShape(buffer, helper, shape); + return; + } + + writeCommonShapeData(buffer, helper, shape); + + VarInts.writeUnsignedInt(buffer, toPayloadType(DebugShape.Type.TEXT)); + + DebugText text = (DebugText) shape; + helper.writeString(buffer, text.getText()); + buffer.writeBoolean(text.isUseRotation()); + helper.writeOptionalNull(buffer, text.getBackgroundColor(), (buf, h, c) -> buf.writeIntLE(c.getRGB())); + buffer.writeBoolean(text.isDepthTest()); + buffer.writeBoolean(text.isShowBackface()); + buffer.writeBoolean(text.isShowTextBackface()); + } + + @Override + protected DebugShape readShape(ByteBuf buffer, BedrockCodecHelper helper) { + long id = VarInts.readUnsignedLong(buffer); + + DebugShape.Type type = helper.readOptional(buffer, null, (buf, aHelper) -> SHAPE_TYPES[buf.readUnsignedByte()]); + Vector3f position = helper.readOptional(buffer, null, READ_VECTOR3F); + Float scale = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Vector3f rotation = helper.readOptional(buffer, null, READ_VECTOR3F); + Float totalTimeLeft = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float maximumRenderDistance = helper.readOptional(buffer, null, ByteBuf::readFloatLE); // new + Color color = helper.readOptional(buffer, null, READ_COLOR); + Integer dimension = helper.readOptional(buffer, -1, VarInts::readInt); + Long attachedToEntityId = helper.readOptional(buffer, null, VarInts::readUnsignedLong); + VarInts.readUnsignedInt(buffer); // Unused payload type + + if (type == null) { + return new DebugShape(id, dimension); + } + + DebugShape shape; + switch (type) { + case ARROW: + shape = new DebugArrow(); + break; + case BOX: + shape = new DebugBox(); + break; + case CIRCLE: + shape = new DebugCircle(); + break; + case LINE: + shape = new DebugLine(); + break; + case SPHERE: + shape = new DebugSphere(); + break; + case TEXT: + shape = new DebugText(); + break; + default: + throw new IllegalStateException("Unknown debug shape type"); + } + + shape.setId(id); + shape.setDimension(dimension); + shape.setPosition(position); + shape.setScale(scale); + shape.setRotation(rotation); + shape.setTotalTimeLeft(totalTimeLeft); + shape.setColor(color); + shape.setAttachedToEntityId(attachedToEntityId); + shape.setMaximumRenderDistance(maximumRenderDistance); + + switch (type) { + case ARROW: + DebugArrow arrow = (DebugArrow) shape; + arrow.setArrowEndPosition(helper.readOptional(buffer, null, READ_VECTOR3F)); + arrow.setArrowHeadLength(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + arrow.setArrowHeadRadius(helper.readOptional(buffer, null, ByteBuf::readFloatLE)); + arrow.setArrowHeadSegments(helper.readOptional(buffer, null, buf -> (int) buf.readUnsignedByte())); + return arrow; + case BOX: + DebugBox box = (DebugBox) shape; + box.setBoxBounds(helper.readVector3f(buffer)); + return box; + case CIRCLE: + DebugCircle circle = (DebugCircle) shape; + circle.setSegments((int) buffer.readUnsignedByte()); + return circle; + case LINE: + DebugLine line = (DebugLine) shape; + line.setLineEndPosition(helper.readVector3f(buffer)); + return line; + case SPHERE: + DebugSphere sphere = (DebugSphere) shape; + sphere.setSegments((int) buffer.readUnsignedByte()); + return sphere; + case TEXT: + DebugText text = (DebugText) shape; + text.setText(helper.readString(buffer)); + text.setUseRotation(buffer.readBoolean()); + text.setBackgroundColor(helper.readOptional(buffer, null, (buf, h) -> new Color(buf.readIntLE(), true))); + text.setDepthTest(buffer.readBoolean()); + text.setShowBackface(buffer.readBoolean()); + text.setShowTextBackface(buffer.readBoolean()); + return text; + default: + throw new IllegalStateException("Unknown debug shape type"); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DimensionDataSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DimensionDataSerializer_v975.java new file mode 100644 index 00000000..8a7c7d2a --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DimensionDataSerializer_v975.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v503.serializer.DimensionDataSerializer_v503; +import org.cloudburstmc.protocol.bedrock.data.definitions.DimensionDefinition; +import org.cloudburstmc.protocol.bedrock.packet.DimensionDataPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class DimensionDataSerializer_v975 extends DimensionDataSerializer_v503 { + public static final DimensionDataSerializer_v975 INSTANCE = new DimensionDataSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DimensionDataPacket packet) { + helper.writeArray(buffer, packet.getDefinitions(), this::writeDefinition); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DimensionDataPacket packet) { + helper.readArray(buffer, packet.getDefinitions(), this::readDefinition); + } + + protected void writeDefinition(ByteBuf buffer, BedrockCodecHelper helper, DimensionDefinition definition) { + super.writeDefinition(buffer, helper, definition); + VarInts.writeInt(buffer, definition.getDimensionType()); + } + + protected DimensionDefinition readDefinition(ByteBuf buffer, BedrockCodecHelper helper) { + String id = helper.readString(buffer); + int maximumHeight = VarInts.readInt(buffer); + int minimumHeight = VarInts.readInt(buffer); + int generatorType = VarInts.readInt(buffer); + int dimensionType = VarInts.readInt(buffer); + return new DimensionDefinition(id, maximumHeight, minimumHeight, generatorType, dimensionType); + } +} \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DisconnectSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DisconnectSerializer_v975.java new file mode 100644 index 00000000..109f6acf --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/DisconnectSerializer_v975.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.DisconnectSerializer_v712; +import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason; +import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket; +import org.cloudburstmc.protocol.common.util.TextConverter; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class DisconnectSerializer_v975 extends DisconnectSerializer_v712 { + + public static final DisconnectSerializer_v975 INSTANCE = new DisconnectSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) { + VarInts.writeInt(buffer, packet.getReason().ordinal()); + VarInts.writeUnsignedInt(buffer, packet.isMessageSkipped() ? 1 : 0); //oneOf + if (!packet.isMessageSkipped()) { + TextConverter converter = helper.getTextConverter(); + helper.writeString(buffer, converter.serialize(packet.getKickMessage(CharSequence.class))); + helper.writeString(buffer, converter.serialize(packet.getFilteredMessage(CharSequence.class))); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) { + packet.setReason(DisconnectFailReason.values()[VarInts.readInt(buffer)]); + packet.setMessageSkipped(VarInts.readUnsignedInt(buffer) != 0); + if (!packet.isMessageSkipped()) { + TextConverter converter = helper.getTextConverter(); + packet.setKickMessage(converter.deserialize(helper.readString(buffer))); + packet.setFilteredMessage(converter.deserialize(helper.readString(buffer))); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/EntityEventSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/EntityEventSerializer_v975.java new file mode 100644 index 00000000..24392beb --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/EntityEventSerializer_v975.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.EntityEventSerializer_v291; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; +import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class EntityEventSerializer_v975 extends EntityEventSerializer_v291 { + + public EntityEventSerializer_v975(TypeMap typeMap) { + super(typeMap); + } + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EntityEventPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getFireAtPosition(), helper::writeVector3f); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, EntityEventPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setFireAtPosition(helper.readOptional(buffer, null, helper::readVector3f)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/InventorySlotSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/InventorySlotSerializer_v975.java new file mode 100644 index 00000000..a6d5697b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/InventorySlotSerializer_v975.java @@ -0,0 +1,33 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class InventorySlotSerializer_v975 implements BedrockPacketSerializer { + + public static final InventorySlotSerializer_v975 INSTANCE = new InventorySlotSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { + VarInts.writeUnsignedInt(buffer, packet.getContainerId()); + VarInts.writeUnsignedInt(buffer, packet.getSlot()); + helper.writeOptionalNull(buffer, packet.getContainerNameData(), helper::writeFullContainerName); + helper.writeOptionalNull(buffer, packet.getStorageItem(), helper::writeNetworkItemStackDescriptor); + helper.writeNetworkItemStackDescriptor(buffer, packet.getItem()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { + packet.setContainerId(VarInts.readUnsignedInt(buffer)); + packet.setSlot(VarInts.readUnsignedInt(buffer)); + packet.setContainerNameData(helper.readOptional(buffer, null, helper::readFullContainerName)); + packet.setStorageItem(helper.readOptional(buffer, null, helper::readNetworkItemStackDescriptor)); + packet.setItem(helper.readNetworkItemStackDescriptor(buffer)); + } +} \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LevelSoundEventSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LevelSoundEventSerializer_v975.java new file mode 100644 index 00000000..8986b17f --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LevelSoundEventSerializer_v975.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v786.serializer.LevelSoundEventSerializer_v786; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class LevelSoundEventSerializer_v975 extends LevelSoundEventSerializer_v786 { + + public LevelSoundEventSerializer_v975(TypeMap typeMap) { + super(typeMap); + } + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, LevelSoundEventPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getFireAtPosition(), helper::writeVector3f); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, LevelSoundEventPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setFireAtPosition(helper.readOptional(buffer, null, helper::readVector3f)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LocatorBarSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LocatorBarSerializer_v975.java new file mode 100644 index 00000000..4ee23610 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/LocatorBarSerializer_v975.java @@ -0,0 +1,45 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v944.serializer.LocatorBarSerializer_v944; +import org.cloudburstmc.protocol.bedrock.data.LocatorBarWaypoint; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.awt.Color; + +public class LocatorBarSerializer_v975 extends LocatorBarSerializer_v944 { + + public static final LocatorBarSerializer_v975 INSTANCE = new LocatorBarSerializer_v975(); + + @Override + protected void writeWaypoint(ByteBuf buf, BedrockCodecHelper helper, LocatorBarWaypoint waypoint) { + buf.writeIntLE(waypoint.getUpdateFlag()); + helper.writeOptionalNull(buf, waypoint.getVisible(), ByteBuf::writeBoolean); + helper.writeOptionalNull(buf, waypoint.getWorldPosition(), (buf1, h, pos) -> { + h.writeVector3f(buf1, pos.getPosition()); + VarInts.writeInt(buf1, pos.getDimension()); + }); + helper.writeOptionalNull(buf, waypoint.getTexturePath(), helper::writeString); + helper.writeOptionalNull(buf, waypoint.getIconSize(), helper::writeVector2f); + helper.writeOptionalNull(buf, waypoint.getColor(), (buf1, h, c) -> buf1.writeIntLE(c.getRGB())); + helper.writeOptionalNull(buf, waypoint.getClientPositionAuthority(), ByteBuf::writeBoolean); + helper.writeOptionalNull(buf, waypoint.getEntityUniqueId(), VarInts::writeLong); + } + + @Override + protected LocatorBarWaypoint readWaypoint(ByteBuf buf, BedrockCodecHelper helper) { + LocatorBarWaypoint waypoint = new LocatorBarWaypoint(); + waypoint.setUpdateFlag((int) buf.readUnsignedIntLE()); + waypoint.setVisible(helper.readOptional(buf, null, ByteBuf::readBoolean)); + waypoint.setWorldPosition(helper.readOptional(buf, null, (buf1, h) -> + new LocatorBarWaypoint.WorldPosition(h.readVector3f(buf1), VarInts.readInt(buf1)))); + waypoint.setTexturePath(helper.readOptional(buf, null, helper::readString)); + waypoint.setIconSize(helper.readOptional(buf, null, helper::readVector2f)); + waypoint.setColor(helper.readOptional(buf, null, (buf1, h) -> + new Color(buf1.readIntLE(), true))); + waypoint.setClientPositionAuthority(helper.readOptional(buf, null, ByteBuf::readBoolean)); + waypoint.setEntityUniqueId(helper.readOptional(buf, null, VarInts::readLong)); + return waypoint; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MobEquipmentSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MobEquipmentSerializer_v975.java new file mode 100644 index 00000000..190d2a1c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MobEquipmentSerializer_v975.java @@ -0,0 +1,33 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class MobEquipmentSerializer_v975 implements BedrockPacketSerializer { + + public static final MobEquipmentSerializer_v975 INSTANCE = new MobEquipmentSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, MobEquipmentPacket packet) { + VarInts.writeUnsignedLong(buffer, packet.getRuntimeEntityId()); + helper.writeNetworkItemStackDescriptor(buffer, packet.getItem()); + buffer.writeByte(packet.getInventorySlot()); + buffer.writeByte(packet.getHotbarSlot()); + buffer.writeByte(packet.getContainerId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MobEquipmentPacket packet) { + packet.setRuntimeEntityId(VarInts.readUnsignedLong(buffer)); + packet.setItem(helper.readNetworkItemStackDescriptor(buffer)); + packet.setInventorySlot(buffer.readUnsignedByte()); + packet.setHotbarSlot(buffer.readUnsignedByte()); + packet.setContainerId(buffer.readByte()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MoveEntityAbsoluteSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MoveEntityAbsoluteSerializer_v975.java new file mode 100644 index 00000000..fb0c8f73 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MoveEntityAbsoluteSerializer_v975.java @@ -0,0 +1,53 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MoveEntityAbsoluteSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class MoveEntityAbsoluteSerializer_v975 extends MoveEntityAbsoluteSerializer_v291 { + + public static final MoveEntityAbsoluteSerializer_v975 INSTANCE = new MoveEntityAbsoluteSerializer_v975(); + + private static final int FLAG_ON_GROUND = 0x1; + private static final int FLAG_TELEPORTED = 0x2; + private static final int FLAG_FORCE_MOVE = 0x4; + /** + * @since v975 + */ + private static final int FLAG_FORCE_COMPLETION = 0x8; + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, MoveEntityAbsolutePacket packet) { + VarInts.writeUnsignedLong(buffer, packet.getRuntimeEntityId()); + int flags = 0; + if (packet.isOnGround()) { + flags |= FLAG_ON_GROUND; + } + if (packet.isTeleported()) { + flags |= FLAG_TELEPORTED; + } + if (packet.isForceMove()) { + flags |= FLAG_FORCE_MOVE; + } + if (packet.isForceCompletion()) { + flags |= FLAG_FORCE_COMPLETION; + } + buffer.writeByte(flags); + helper.writeVector3f(buffer, packet.getPosition()); + this.writeByteRotation(buffer, helper, packet.getRotation()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MoveEntityAbsolutePacket packet) { + packet.setRuntimeEntityId(VarInts.readUnsignedLong(buffer)); + int flags = buffer.readUnsignedByte(); + packet.setOnGround((flags & FLAG_ON_GROUND) != 0); + packet.setTeleported((flags & FLAG_TELEPORTED) != 0); + packet.setForceMove((flags & FLAG_FORCE_MOVE) != 0); + packet.setForceCompletion((flags & FLAG_FORCE_COMPLETION) != 0); + packet.setPosition(helper.readVector3f(buffer)); + packet.setRotation(this.readByteRotation(buffer, helper)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MovementPredictionSyncSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MovementPredictionSyncSerializer_v975.java new file mode 100644 index 00000000..d72354b8 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/MovementPredictionSyncSerializer_v975.java @@ -0,0 +1,50 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v776.serializer.MovementPredictionSyncSerializer_v776; +import org.cloudburstmc.protocol.bedrock.codec.v786.serializer.MovementPredictionSyncSerializer_v786; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.packet.MovementPredictionSyncPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class MovementPredictionSyncSerializer_v975 extends MovementPredictionSyncSerializer_v786 { + public static final MovementPredictionSyncSerializer_v975 INSTANCE = new MovementPredictionSyncSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, MovementPredictionSyncPacket packet) { + helper.writeLargeVarIntFlags(buffer, packet.getFlags(), EntityFlag.class); + helper.writeVector3f(buffer, packet.getBoundingBox()); + buffer.writeFloatLE(packet.getSpeed()); + buffer.writeFloatLE(packet.getUnderwaterSpeed()); + buffer.writeFloatLE(packet.getLavaSpeed()); + buffer.writeFloatLE(packet.getJumpStrength()); + buffer.writeFloatLE(packet.getHealth()); + buffer.writeFloatLE(packet.getHunger()); + buffer.writeFloatLE(packet.getUnknown1()); + buffer.writeFloatLE(packet.getUnknown2()); + buffer.writeFloatLE(packet.getUnknown3()); + VarInts.writeUnsignedLong(buffer, packet.getRuntimeEntityId()); + buffer.writeBoolean(packet.isFlying()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MovementPredictionSyncPacket packet) { + helper.readLargeVarIntFlags(buffer, packet.getFlags(), EntityFlag.class); + packet.setBoundingBox(helper.readVector3f(buffer)); + packet.setSpeed(buffer.readFloatLE()); + packet.setUnderwaterSpeed(buffer.readFloatLE()); + packet.setLavaSpeed(buffer.readFloatLE()); + packet.setJumpStrength(buffer.readFloatLE()); + packet.setHealth(buffer.readFloatLE()); + packet.setHunger(buffer.readFloatLE()); + packet.setUnknown1(buffer.readFloatLE()); + packet.setUnknown2(buffer.readFloatLE()); + packet.setUnknown3(buffer.readFloatLE()); + packet.setRuntimeEntityId(VarInts.readUnsignedLong(buffer)); + packet.setFlying(buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PartyChangedSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PartyChangedSerializer_v975.java new file mode 100644 index 00000000..bc18e705 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PartyChangedSerializer_v975.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v944.serializer.PartyChangedSerializer_v944; +import org.cloudburstmc.protocol.bedrock.packet.PartyChangedPacket; + +public class PartyChangedSerializer_v975 extends PartyChangedSerializer_v944 { + + public static final PartyChangedSerializer_v975 INSTANCE = new PartyChangedSerializer_v975(); + + @Override + protected void writeParty(ByteBuf buffer, BedrockCodecHelper helper, PartyChangedPacket.PartyInfo info) { + helper.writeString(buffer, info.getPartyId()); + buffer.writeBoolean(info.isPartyLeader()); + } + + @Override + protected PartyChangedPacket.PartyInfo readParty(ByteBuf buffer, BedrockCodecHelper helper) { + return new PartyChangedPacket.PartyInfo(helper.readString(buffer), buffer.readBoolean()); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlaySoundSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlaySoundSerializer_v975.java new file mode 100644 index 00000000..7d4160ef --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlaySoundSerializer_v975.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlaySoundSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket; + +public class PlaySoundSerializer_v975 extends PlaySoundSerializer_v291 { + + public static final PlaySoundSerializer_v975 INSTANCE = new PlaySoundSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlaySoundPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getServerSoundHandle(), ByteBuf::writeLongLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlaySoundPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setServerSoundHandle(helper.readOptional(buffer, null, ByteBuf::readLongLE)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlayerEnchantOptionsSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlayerEnchantOptionsSerializer_v975.java new file mode 100644 index 00000000..d018b1f9 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/PlayerEnchantOptionsSerializer_v975.java @@ -0,0 +1,55 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.PlayerEnchantOptionsSerializer_v407; +import org.cloudburstmc.protocol.bedrock.data.inventory.EnchantData; +import org.cloudburstmc.protocol.bedrock.data.inventory.EnchantOptionData; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.List; + +public class PlayerEnchantOptionsSerializer_v975 extends PlayerEnchantOptionsSerializer_v407 { + + public static final PlayerEnchantOptionsSerializer_v975 INSTANCE = new PlayerEnchantOptionsSerializer_v975(); + + @Override + protected void writeOption(ByteBuf buffer, BedrockCodecHelper helper, EnchantOptionData option) { + buffer.writeByte(option.getCost()); + buffer.writeIntLE(option.getPrimarySlot()); + helper.writeArray(buffer, option.getEnchants0(), this::serializeEnchant); + helper.writeArray(buffer, option.getEnchants1(), this::serializeEnchant); + helper.writeArray(buffer, option.getEnchants2(), this::serializeEnchant); + helper.writeString(buffer, option.getEnchantName()); + VarInts.writeUnsignedInt(buffer, option.getEnchantNetId()); + } + + @Override + protected EnchantOptionData readOption(ByteBuf buffer, BedrockCodecHelper helper) { + int cost = buffer.readUnsignedByte(); + int primarySlot = buffer.readIntLE(); + List enchants1 = new ObjectArrayList<>(); + helper.readArray(buffer, enchants1, this::deserializeEnchant); + List enchants2 = new ObjectArrayList<>(); + helper.readArray(buffer, enchants2, this::deserializeEnchant); + List enchants3 = new ObjectArrayList<>(); + helper.readArray(buffer, enchants3, this::deserializeEnchant); + String enchantName = helper.readString(buffer); + int enchantNetId = VarInts.readUnsignedInt(buffer); + return new EnchantOptionData(cost, primarySlot, enchants1, enchants2, enchants3, enchantName, enchantNetId); + } + + @Override + protected void serializeEnchant(ByteBuf buffer, EnchantData enchant) { + VarInts.writeUnsignedInt(buffer, enchant.getType()); + buffer.writeByte(enchant.getLevel()); + } + + @Override + protected EnchantData deserializeEnchant(ByteBuf buffer) { + int type = VarInts.readUnsignedInt(buffer); + int level = buffer.readUnsignedByte(); + return new EnchantData(type, level); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerPresenceInfoSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerPresenceInfoSerializer_v975.java new file mode 100644 index 00000000..87a9d9ed --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerPresenceInfoSerializer_v975.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ServerPresenceInfoPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ServerPresenceInfoSerializer_v975 implements BedrockPacketSerializer { + + public static final ServerPresenceInfoSerializer_v975 INSTANCE = new ServerPresenceInfoSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerPresenceInfoPacket packet) { + helper.writeOptionalNull(buffer, packet.getPresenceConfiguration(), helper::writePresenceConfiguration); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerPresenceInfoPacket packet) { + packet.setPresenceConfiguration(helper.readOptional(buffer, null, helper::readPresenceConfiguration)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerStoreInfoSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerStoreInfoSerializer_v975.java new file mode 100644 index 00000000..543f3a16 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerStoreInfoSerializer_v975.java @@ -0,0 +1,29 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.ClientStoreEntrypointConfiguration; +import org.cloudburstmc.protocol.bedrock.packet.ServerStoreInfoPacket; + +@RequiredArgsConstructor(access = AccessLevel.PROTECTED) +public class ServerStoreInfoSerializer_v975 implements BedrockPacketSerializer { + + public static final ServerStoreInfoSerializer_v975 INSTANCE = new ServerStoreInfoSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerStoreInfoPacket packet) { + helper.writeOptionalNull(buffer, packet.getStore(), (buf, h, store) -> { + h.writeString(buf, store.getStoreId()); + h.writeString(buf, store.getStoreName()); + }); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerStoreInfoPacket packet) { + packet.setStore(helper.readOptional(buffer, null, (buf, h) -> + new ClientStoreEntrypointConfiguration(h.readString(buf), h.readString(buf)))); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerboundDiagnosticsSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerboundDiagnosticsSerializer_v975.java new file mode 100644 index 00000000..ae3953dc --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/ServerboundDiagnosticsSerializer_v975.java @@ -0,0 +1,51 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v924.serializer.ServerboundDiagnosticsSerializer_v924; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.EntityDiagnosticTimingInfo; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.SystemDiagnosticTimingInfo; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; + +public class ServerboundDiagnosticsSerializer_v975 extends ServerboundDiagnosticsSerializer_v924 { + + public static final ServerboundDiagnosticsSerializer_v975 INSTANCE = new ServerboundDiagnosticsSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.serialize(buffer, helper, packet); + + helper.writeArray(buffer, packet.getEntityDiagnostics(), ((buf, h, info) -> { + helper.writeString(buf, info.getDisplayName()); + helper.writeString(buf, info.getEntity()); + buf.writeLongLE(info.getTimeInNs()); + buf.writeByte(info.getPercentOfTotal()); + })); + + helper.writeArray(buffer, packet.getSystemDiagnostics(), ((buf, h, info) -> { + helper.writeString(buf, info.getDisplayName()); + buf.writeLongLE(info.getSystemIndex()); + buf.writeLongLE(info.getTimeInNs()); + buf.writeByte(info.getPercentOfTotal()); + })); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + super.deserialize(buffer, helper, packet); + + helper.readArray(buffer, packet.getEntityDiagnostics(), (buf, h) -> + new EntityDiagnosticTimingInfo( + helper.readString(buf), + helper.readString(buf), + buf.readLongLE(), + (byte) buf.readUnsignedByte())); + + helper.readArray(buffer, packet.getSystemDiagnostics(), (buf, h) -> + new SystemDiagnosticTimingInfo( + helper.readString(buf), + buf.readLongLE(), + buf.readLongLE(), + (byte) buf.readUnsignedByte())); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/UpdateClientOptionsSerializer_v975.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/UpdateClientOptionsSerializer_v975.java new file mode 100644 index 00000000..6efc64ad --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v975/serializer/UpdateClientOptionsSerializer_v975.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v975.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v786.serializer.UpdateClientOptionsSerializer_v786; +import org.cloudburstmc.protocol.bedrock.packet.UpdateClientOptionsPacket; + +public class UpdateClientOptionsSerializer_v975 extends UpdateClientOptionsSerializer_v786 { + + public static final UpdateClientOptionsSerializer_v975 INSTANCE = new UpdateClientOptionsSerializer_v975(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateClientOptionsPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getFilterProfanityChange(), ByteBuf::writeBoolean); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, UpdateClientOptionsPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setFilterProfanityChange(helper.readOptional(buffer, null, ByteBuf::readBoolean)); + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/BuildPlatform.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/BuildPlatform.java index 9fa59582..2f18b2bc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/BuildPlatform.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/BuildPlatform.java @@ -1,15 +1,14 @@ package org.cloudburstmc.protocol.bedrock.data; public enum BuildPlatform { - - UNDEFINED, + UNKNOWN, /** * Android */ GOOGLE, IOS, /** - * Mac OS + * macOS */ OSX, /** @@ -23,16 +22,16 @@ public enum BuildPlatform { */ UWP, /** - * Educational edition + * Education Edition */ - WIN_32, + WIN32, DEDICATED, /** * Apple TV */ TV_OS, /** - * Playstation + * PlayStation */ SONY, /** diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ClientStoreEntrypointConfiguration.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ClientStoreEntrypointConfiguration.java new file mode 100644 index 00000000..8115c909 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ClientStoreEntrypointConfiguration.java @@ -0,0 +1,9 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Value; + +@Value +public class ClientStoreEntrypointConfiguration { + String storeId; + String storeName; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java index 9b06c2a0..336c4c54 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java @@ -152,5 +152,73 @@ public enum DisconnectFailReason { /** * @since v859 */ - HOST_WITHOUT_KEYS + HOST_WITHOUT_KEYS, + /** + * @since v924 + */ + HOST_SIGNED_OUT, + /** + * @since v924 + */ + SCRIPT_WATCHDOG_EXCEPTION, + /** + * @since v924 + */ + SCRIPT_MEMORY_LIMIT_EXCEEDED, + /** + * @since v924 + */ + STORAGE_LOW_DURING_GAMEPLAY, + /** + * @since v924 + */ + STORAGE_FULL_DURING_GAMEPLAY, + /** + * @since v924 + */ + LEVEL_STORAGE_CORRUPTION, + /** + * @since v924 + */ + EDITION_MISMATCH_VANILLA_TO_EDU, + /** + * @since v924 + */ + EDITION_MISMATCH_EDU_TO_VANILLA, + /** + * @since v924 + */ + EDITOR_MISMATCH_EDITOR_TO_VANILLA, + /** + * @since v924 + */ + EDITOR_MISMATCH_VANILLA_TO_EDITOR, + /** + * @since v924 + */ + DENY_LISTED, + /** + * @since v975 + */ + NONCE_MISSING, + /** + * @since v975 + */ + NONCE_NOT_FOUND, + /** + * @since v975 + */ + NONCE_EXPIRED, + /** + * @since v975 + */ + NONCE_NOT_VALID, + /** + * @since v1001 + */ + HOST_DISCONNECTED, + /** + * @since v1001 + */ + EDITOR_JOIN_INTENT_POLICY_FAILURE, } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GatheringsConfigurationJoinInfo.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GatheringsConfigurationJoinInfo.java new file mode 100644 index 00000000..754edead --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GatheringsConfigurationJoinInfo.java @@ -0,0 +1,18 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Value; + +import java.util.UUID; + +@Value +public class GatheringsConfigurationJoinInfo { + + UUID experienceId; + String experienceName; + UUID worldId; + String worldName; + String creatorId; + UUID targetId; + String scenarioId; + String serverId; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GraphicsOverrideParameterType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GraphicsOverrideParameterType.java index 573b7046..2f571505 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GraphicsOverrideParameterType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/GraphicsOverrideParameterType.java @@ -2,5 +2,134 @@ public enum GraphicsOverrideParameterType { - SKY_ZENITH_COLOR + SKY_ZENITH_COLOR, + SKY_HORIZON_COLOR, + HORIZON_BLEND_MIN, + HORIZON_BLEND_MAX, + HORIZON_BLEND_START, + HORIZON_BLEND_MIE_START, + RAYLEIGH_STRENGTH, + SUN_MIE_STRENGTH, + MOON_MIE_STRENGTH, + SUN_GLARE_SHAPE, + CHLOROPHYLL, + CDOM, + SUSPENDED_SEDIMENT, + WAVES_DEPTH, + WAVES_FREQUENCY, + WAVES_FREQUENCY_SCALING, + WAVES_SPEED, + WAVES_SPEED_SCALING, + WAVES_SHAPE, + WAVES_OCTAVES, + WAVES_MIX, + WAVES_PULL, + WAVES_DIRECTION_INCREMENT, + MIDTONES_CONTRAST, + HIGHLIGHTS_CONTRAST, + SHADOWS_CONTRAST, + /** + * @since v944 + */ + HIGHLIGHTS_GAIN, + /** + * @since v944 + */ + HIGHLIGHTS_GAMMA, + /** + * @since v944 + */ + HIGHLIGHTS_OFFSET, + /** + * @since v944 + */ + HIGHLIGHTS_SATURATION, + /** + * @since v944 + */ + MIDTONES_GAIN, + /** + * @since v944 + */ + MIDTONES_GAMMA, + /** + * @since v944 + */ + MIDTONES_OFFSET, + /** + * @since v944 + */ + MIDTONES_SATURATION, + /** + * @since v944 + */ + SHADOWS_GAIN, + /** + * @since v944 + */ + SHADOWS_GAMMA, + /** + * @since v944 + */ + SHADOWS_OFFSET, + /** + * @since v944 + */ + SHADOWS_SATURATION, + /** + * @since v944 + */ + HIGHLIGHTS_MIN, + /** + * @since v944 + */ + SHADOWS_MAX, + /** + * @since v944 + */ + TEMPERATURE, + /** + * @since v944 + */ + SUN_COLOR, + /** + * @since v944 + */ + SUN_ILLUMINANCE, + /** + * @since v944 + */ + MOON_COLOR, + /** + * @since v944 + */ + MOON_ILLUMINANCE, + /** + * @since v944 + */ + FLASH_COLOR, + /** + * @since v944 + */ + FLASH_ILLUMINANCE, + /** + * @since v944 + */ + AMBIENT_COLOR, + /** + * @since v944 + */ + AMBIENT_ILLUMINANCE, + /** + * @since v975 + */ + EMISSIVE_DESATURATION, + /** + * @since v975 + */ + SKY_INTENSITY, + /** + * @since v975 + */ + ORBITAL_OFFSET_DEGREES, } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LocatorBarWaypoint.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LocatorBarWaypoint.java new file mode 100644 index 00000000..621ad68c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/LocatorBarWaypoint.java @@ -0,0 +1,34 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Data; +import lombok.Value; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3f; + +import java.awt.Color; + +@Data +public class LocatorBarWaypoint { + + private int updateFlag; + private Boolean visible; + private WorldPosition worldPosition; + /** + * @deprecated since v975 + */ + private Integer textureId; + private String texturePath; + /** + * @since v975 + */ + private Vector2f iconSize; + private Color color; + private Boolean clientPositionAuthority; + private Long entityUniqueId; + + @Value + public static class WorldPosition { + Vector3f position; + int dimension; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/MovementEffectType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/MovementEffectType.java index 8b979b93..c3becc22 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/MovementEffectType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/MovementEffectType.java @@ -8,7 +8,12 @@ public enum MovementEffectType { INVALID(-1), - GLIDE_BOOST(0); + GLIDE_BOOST(0), + DOLPHIN_BOOST(1), + /** + * @since v1001 + */ + GEYSER_BOOST(2); private final int id; @@ -22,4 +27,4 @@ public static MovementEffectType byId(int id) { } return null; } -} \ No newline at end of file +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java index 23d578d2..362d54c3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ParticleType.java @@ -141,5 +141,17 @@ public enum ParticleType implements LevelEventType { /** * @since v843 */ - GREEN_FLAME + GREEN_FLAME, + /** + * @since v944 + */ + PAUSE_MOB_GROWTH, + /** + * @since v944 + */ + RESET_MOB_GROWTH, + /** + * @since v975 + */ + SULFUR_CUBE, } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PresenceConfiguration.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PresenceConfiguration.java new file mode 100644 index 00000000..4ce9ed05 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PresenceConfiguration.java @@ -0,0 +1,17 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; + +@Value +public class PresenceConfiguration { + + @Nullable // since v1001 + String experienceName; + @Nullable // since v1001 + String worldName; + /** + * @since v1001 + */ + String richPresenceId; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SerializableVoxelShape.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SerializableVoxelShape.java new file mode 100644 index 00000000..15bfbb7b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SerializableVoxelShape.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Value; + +import java.util.List; + +@Value +public class SerializableVoxelShape { + + SerializableCells cells; + List xCoordinates; + List yCoordinates; + List zCoordinates; + + @Value + public static class SerializableCells { + + short xSize; + short ySize; + short zSize; + List storage; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerConfigurationJoinInfo.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerConfigurationJoinInfo.java new file mode 100644 index 00000000..5bf136de --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerConfigurationJoinInfo.java @@ -0,0 +1,15 @@ +package org.cloudburstmc.protocol.bedrock.data; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; + +@Value +public class ServerConfigurationJoinInfo { + + @Nullable + GatheringsConfigurationJoinInfo gatheringsConfigurationJoinInfo; + @Nullable + ClientStoreEntrypointConfiguration clientStoreEntrypointConfiguration; + @Nullable + PresenceConfiguration presenceConfiguration; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java index 86aa05a8..4e1232fb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java @@ -1,930 +1,1194 @@ package org.cloudburstmc.protocol.bedrock.data; +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("DeprecatedIsStillUsed") public enum SoundEvent { - ITEM_USE_ON, - HIT, - STEP, - FLY, - JUMP, - BREAK, - PLACE, - HEAVY_STEP, - GALLOP, - FALL, - AMBIENT, - AMBIENT_BABY, - AMBIENT_IN_WATER, - BREATHE, - DEATH, - DEATH_IN_WATER, - DEATH_TO_ZOMBIE, - HURT, - HURT_IN_WATER, - MAD, - BOOST, - BOW, - SQUISH_BIG, - SQUISH_SMALL, - FALL_BIG, - FALL_SMALL, - SPLASH, - FIZZ, - FLAP, - SWIM, - DRINK, - EAT, - TAKEOFF, - SHAKE, - PLOP, - LAND, - SADDLE, - ARMOR, - MOB_ARMOR_STAND_PLACE, - ADD_CHEST, - THROW, - ATTACK, - ATTACK_NODAMAGE, - ATTACK_STRONG, - WARN, - SHEAR, - MILK, - THUNDER, - EXPLODE, - FIRE, - IGNITE, - FUSE, - STARE, - SPAWN, - SHOOT, - BREAK_BLOCK, - LAUNCH, - BLAST, - LARGE_BLAST, - TWINKLE, - REMEDY, - UNFECT, - LEVELUP, - BOW_HIT, - BULLET_HIT, - EXTINGUISH_FIRE, - ITEM_FIZZ, - CHEST_OPEN, - CHEST_CLOSED, - SHULKERBOX_OPEN, - SHULKERBOX_CLOSED, - ENDERCHEST_OPEN, - ENDERCHEST_CLOSED, - POWER_ON, - POWER_OFF, - ATTACH, - DETACH, - DENY, - TRIPOD, - POP, - DROP_SLOT, - NOTE, - THORNS, - PISTON_IN, - PISTON_OUT, - PORTAL, - WATER, - LAVA_POP, - LAVA, - BURP, - BUCKET_FILL_WATER, - BUCKET_FILL_LAVA, - BUCKET_EMPTY_WATER, - BUCKET_EMPTY_LAVA, - ARMOR_EQUIP_CHAIN, - ARMOR_EQUIP_DIAMOND, - ARMOR_EQUIP_GENERIC, - ARMOR_EQUIP_GOLD, - ARMOR_EQUIP_IRON, - ARMOR_EQUIP_LEATHER, - ARMOR_EQUIP_ELYTRA, - RECORD_13, - RECORD_CAT, - RECORD_BLOCKS, - RECORD_CHIRP, - RECORD_FAR, - RECORD_MALL, - RECORD_MELLOHI, - RECORD_STAL, - RECORD_STRAD, - RECORD_WARD, - RECORD_11, - RECORD_WAIT, - STOP_RECORD, //Not really a sound - FLOP, - ELDERGUARDIAN_CURSE, - MOB_WARNING, - MOB_WARNING_BABY, - TELEPORT, - SHULKER_OPEN, - SHULKER_CLOSE, - HAGGLE, - HAGGLE_YES, - HAGGLE_NO, - HAGGLE_IDLE, - CHORUS_GROW, - CHORUS_DEATH, - GLASS, - POTION_BREWED, - CAST_SPELL, - PREPARE_ATTACK, - PREPARE_SUMMON, - PREPARE_WOLOLO, - FANG, - CHARGE, - CAMERA_TAKE_PICTURE, - LEASHKNOT_PLACE, - LEASHKNOT_BREAK, - GROWL, - WHINE, - PANT, - PURR, - PURREOW, - DEATH_MIN_VOLUME, - DEATH_MID_VOLUME, - IMITATE_BLAZE, - IMITATE_CAVE_SPIDER, - IMITATE_CREEPER, - IMITATE_ELDER_GUARDIAN, - IMITATE_ENDER_DRAGON, - IMITATE_ENDERMAN, - IMITATE_ENDERMITE, - IMITATE_EVOCATION_ILLAGER, - IMITATE_GHAST, - IMITATE_HUSK, - IMITATE_ILLUSION_ILLAGER, - IMITATE_MAGMA_CUBE, - IMITATE_POLAR_BEAR, - IMITATE_SHULKER, - IMITATE_SILVERFISH, - IMITATE_SKELETON, - IMITATE_SLIME, - IMITATE_SPIDER, - IMITATE_STRAY, - IMITATE_VEX, - IMITATE_VINDICATION_ILLAGER, - IMITATE_WITCH, - IMITATE_WITHER, - IMITATE_WITHER_SKELETON, - IMITATE_WOLF, - IMITATE_ZOMBIE, - IMITATE_ZOMBIE_PIGMAN, - IMITATE_ZOMBIE_VILLAGER, - BLOCK_END_PORTAL_FRAME_FILL, - BLOCK_END_PORTAL_SPAWN, - RANDOM_ANVIL_USE, - BOTTLE_DRAGONBREATH, - PORTAL_TRAVEL, - ITEM_TRIDENT_HIT, - ITEM_TRIDENT_RETURN, - ITEM_TRIDENT_RIPTIDE_1, - ITEM_TRIDENT_RIPTIDE_2, - ITEM_TRIDENT_RIPTIDE_3, - ITEM_TRIDENT_THROW, - ITEM_TRIDENT_THUNDER, - ITEM_TRIDENT_HIT_GROUND, - DEFAULT, - ELEMENT_CONSTRUCTOR_OPEN, - FLETCHING_TABLE_USE, - ICE_BOMB_HIT, - BALLOON_POP, - LT_REACTION_ICE_BOMB, - LT_REACTION_BLEACH, - LT_REACTION_E_PASTE, - LT_REACTION_E_PASTE2, - LT_REACTION_FERTILIZER, - LT_REACTION_FIREBALL, - LT_REACTION_MG_SALT, - LT_REACTION_MISC_FIRE, - LT_REACTION_FIRE, - LT_REACTION_MISC_EXPLOSION, - LT_REACTION_MISC_MYSTICAL, - LT_REACTION_MISC_MYSTICAL2, - LT_REACTION_PRODUCT, - SPARKLER_USE, - GLOWSTICK_USE, - SPARKLER_ACTIVE, - CONVERT_TO_DROWNED, - BUCKET_FILL_FISH, - BUCKET_EMPTY_FISH, - BUBBLE_UP, - BUBBLE_DOWN, - BUBBLE_POP, - BUBBLE_UP_INSIDE, - BUBBLE_DOWN_INSIDE, - BABY_HURT, - BABY_DEATH, - BABY_STEP, - BABY_SPAWN, - BORN, - BLOCK_TURTLE_EGG_BREAK, - BLOCK_TURTLE_EGG_CRACK, - BLOCK_TURTLE_EGG_HATCH, - TURTLE_LAY_EGG, - BLOCK_TURTLE_EGG_ATTACK, - BEACON_ACTIVATE, - BEACON_AMBIENT, - BEACON_DEACTIVATE, - BEACON_POWER, - CONDUIT_ACTIVATE, - CONDUIT_AMBIENT, - CONDUIT_ATTACK, - CONDUIT_DEACTIVATE, - CONDUIT_SHORT, - SWOOP, - BLOCK_BAMBOO_SAPLING_PLACE, - PRE_SNEEZE, - SNEEZE, - AMBIENT_TAME, - SCARED, - BLOCK_SCAFFOLDING_CLIMB, - CROSSBOW_LOADING_START, - CROSSBOW_LOADING_MIDDLE, - CROSSBOW_LOADING_END, - CROSSBOW_SHOOT, - CROSSBOW_QUICK_CHARGE_START, - CROSSBOW_QUICK_CHARGE_MIDDLE, - CROSSBOW_QUICK_CHARGE_END, - AMBIENT_AGGRESSIVE, - AMBIENT_WORRIED, - CANT_BREED, - SHIELD_BLOCK, - LECTERN_BOOK_PLACE, - GRINDSTONE_USE, - BELL, - CAMPFIRE_CRACKLE, - SWEET_BERRY_BUSH_HURT, - SWEET_BERRY_BUSH_PICK, - ROAR, - STUN, - CARTOGRAPHY_TABLE_USE, - TABLE_USE, - STONECUTTER_USE, - COMPOSTER_EMPTY, - COMPOSTER_FILL, - COMPOSTER_FILL_LAYER, - COMPOSTER_READY, - BARREL_OPEN, - BARREL_CLOSE, - RAID_HORN, - LOOM_USE, - AMBIENT_IN_RAID, - UI_CARTOGRAPHY_TABLE_USE, - UI_STONECUTTER_USE, - UI_LOOM_USE, - SMOKER_USE, - BLAST_FURNACE_USE, - SMITHING_TABLE_USE, - SCREECH, - SLEEP, - FURNACE_USE, - MOOSHROOM_CONVERT, - MILK_SUSPICIOUSLY, - CELEBRATE, - JUMP_PREVENT, - AMBIENT_POLLINATE, - BEEHIVE_DRIP, - BEEHIVE_ENTER, - BEEHIVE_EXIT, - BEEHIVE_WORK, - BEEHIVE_SHEAR, - HONEYBOTTLE_DRINK, - AMBIENT_CAVE, - RETREAT, - CONVERT_TO_ZOMBIFIED, - ADMIRE, - STEP_LAVA, - TEMPT, - PANIC, - ANGRY, - AMBIENT_WARPED_FOREST, - AMBIENT_SOULSAND_VALLEY, - AMBIENT_NETHER_WASTES, - AMBIENT_BASALT_DELTAS, - AMBIENT_CRIMSON_FOREST, - RESPAWN_ANCHOR_CHARGE, - RESPAWN_ANCHOR_DEPLETE, - RESPAWN_ANCHOR_SET_SPAWN, - RESPAWN_ANCHOR_AMBIENT, - SOUL_ESCAPE_QUIET, - SOUL_ESCAPE_LOUD, - RECORD_PIGSTEP, - LINK_COMPASS_TO_LODESTONE, - USE_SMITHING_TABLE, - EQUIP_NETHERITE, - AMBIENT_LOOP_WARPED_FOREST, - AMBIENT_LOOP_SOULSAND_VALLEY, - AMBIENT_LOOP_NETHER_WASTES, - AMBIENT_LOOP_BASALT_DELTAS, - AMBIENT_LOOP_CRIMSON_FOREST, - AMBIENT_ADDITION_WARPED_FOREST, - AMBIENT_ADDITION_SOULSAND_VALLEY, - AMBIENT_ADDITION_NETHER_WASTES, - AMBIENT_ADDITION_BASALT_DELTAS, - AMBIENT_ADDITION_CRIMSON_FOREST, - SCULK_SENSOR_POWER_ON, - SCULK_SENSOR_POWER_OFF, - BUCKET_FILL_POWDER_SNOW, - BUCKET_EMPTY_POWDER_SNOW, - POINTED_DRIPSTONE_CAULDRON_DRIP_WATER, - POINTED_DRIPSTONE_CAULDRON_DRIP_LAVA, - POINTED_DRIPSTONE_DRIP_WATER, - POINTED_DRIPSTONE_DRIP_LAVA, - CAVE_VINES_PICK_BERRIES, - BIG_DRIPLEAF_TILT_DOWN, - BIG_DRIPLEAF_TILT_UP, - COPPER_WAX_ON, - COPPER_WAX_OFF, - SCRAPE, - PLAYER_HURT_DROWN, - PLAYER_HURT_ON_FIRE, - PLAYER_HURT_FREEZE, - USE_SPYGLASS, - STOP_USING_SPYGLASS, - AMETHYST_BLOCK_CHIME, - AMBIENT_SCREAMER, - HURT_SCREAMER, - DEATH_SCREAMER, - MILK_SCREAMER, - JUMP_TO_BLOCK, - PRE_RAM, - PRE_RAM_SCREAMER, - RAM_IMPACT, - RAM_IMPACT_SCREAMER, - SQUID_INK_SQUIRT, - GLOW_SQUID_INK_SQUIRT, - CONVERT_TO_STRAY, - CAKE_ADD_CANDLE, - EXTINGUISH_CANDLE, - AMBIENT_CANDLE, - BLOCK_CLICK, - BLOCK_CLICK_FAIL, - SCULK_CATALYST_BLOOM, - SCULK_SHRIEKER_SHRIEK, - WARDEN_NEARBY_CLOSE, - WARDEN_NEARBY_CLOSER, - WARDEN_NEARBY_CLOSEST, - WARDEN_SLIGHTLY_ANGRY, - RECORD_OTHERSIDE, - TONGUE, - CRACK_IRON_GOLEM, - REPAIR_IRON_GOLEM, - LISTENING, - HEARTBEAT, - HORN_BREAK, - SCULK_PLACE, - SCULK_SPREAD, - SCULK_CHARGE, - SCULK_SENSOR_PLACE, - SCULK_SHRIEKER_PLACE, - GOAT_CALL_0, - GOAT_CALL_1, - GOAT_CALL_2, - GOAT_CALL_3, - GOAT_CALL_4, - GOAT_CALL_5, - GOAT_CALL_6, - GOAT_CALL_7, - GOAT_CALL_8, - GOAT_CALL_9, - GOAT_HARMONY_0, - GOAT_HARMONY_1, - GOAT_HARMONY_2, - GOAT_HARMONY_3, - GOAT_HARMONY_4, - GOAT_HARMONY_5, - GOAT_HARMONY_6, - GOAT_HARMONY_7, - GOAT_HARMONY_8, - GOAT_HARMONY_9, - GOAT_MELODY_0, - GOAT_MELODY_1, - GOAT_MELODY_2, - GOAT_MELODY_3, - GOAT_MELODY_4, - GOAT_MELODY_5, - GOAT_MELODY_6, - GOAT_MELODY_7, - GOAT_MELODY_8, - GOAT_MELODY_9, - GOAT_BASS_0, - GOAT_BASS_1, - GOAT_BASS_2, - GOAT_BASS_3, - GOAT_BASS_4, - GOAT_BASS_5, - GOAT_BASS_6, - GOAT_BASS_7, - GOAT_BASS_8, - GOAT_BASS_9, - IMITATE_WARDEN, - LISTENING_ANGRY, - ITEM_GIVEN, - ITEM_TAKEN, - DISAPPEARED, - REAPPEARED, - FROGSPAWN_HATCHED, - LAY_SPAWN, - FROGSPAWN_BREAK, - SONIC_BOOM, - SONIC_CHARGE, - ITEM_THROWN, - RECORD_5, - CONVERT_TO_FROG, - MILK_DRINK, - RECORD_PLAYING, - ENCHANTING_TABLE_USE, - BUNDLE_DROP_CONTENTS, - BUNDLE_INSERT, - BUNDLE_REMOVE_ONE, + ITEM_USE_ON("item.use.on"), + HIT("hit"), + STEP("step"), + FLY("fly"), + JUMP("jump"), + BREAK("break"), + PLACE("place"), + HEAVY_STEP("heavy.step"), + GALLOP("gallop"), + FALL("fall"), + AMBIENT("ambient"), + AMBIENT_BABY("ambient.baby"), + AMBIENT_IN_WATER("ambient.in.water"), + BREATHE("breathe"), + DEATH("death"), + DEATH_IN_WATER("death.in.water"), + DEATH_TO_ZOMBIE("death.to.zombie"), + HURT("hurt"), + HURT_IN_WATER("hurt.in.water"), + MAD("mad"), + BOOST("boost"), + BOW("bow"), + SQUISH_BIG("squish.big"), + SQUISH_SMALL("squish.small"), + FALL_BIG("fall.big"), + FALL_SMALL("fall.small"), + SPLASH("splash"), + FIZZ("fizz"), + FLAP("flap"), + SWIM("swim"), + DRINK("drink"), + EAT("eat"), + TAKEOFF("takeoff"), + SHAKE("shake"), + PLOP("plop"), + LAND("land"), + SADDLE("saddle"), + ARMOR("armor"), + MOB_ARMOR_STAND_PLACE("mob.armor_stand.place"), + ADD_CHEST("add.chest"), + THROW("throw"), + ATTACK("attack"), + ATTACK_NODAMAGE("attack.nodamage"), + ATTACK_STRONG("attack.strong"), + WARN("warn"), + SHEAR("shear"), + MILK("milk"), + THUNDER("thunder"), + EXPLODE("explode"), + FIRE("fire"), + IGNITE("ignite"), + FUSE("fuse"), + STARE("stare"), + SPAWN("spawn"), + SHOOT("shoot"), + BREAK_BLOCK("break.block"), + LAUNCH("launch"), + BLAST("blast"), + LARGE_BLAST("large.blast"), + TWINKLE("twinkle"), + REMEDY("remedy"), + UNFECT("unfect"), + LEVELUP("levelup"), + BOW_HIT("bow.hit"), + BULLET_HIT("bullet.hit"), + EXTINGUISH_FIRE("extinguish.fire"), + ITEM_FIZZ("item.fizz"), + CHEST_OPEN("chest.open"), + CHEST_CLOSED("chest.closed"), + SHULKERBOX_OPEN("shulkerbox.open"), + SHULKERBOX_CLOSED("shulkerbox.closed"), + ENDERCHEST_OPEN("enderchest.open"), + ENDERCHEST_CLOSED("enderchest.closed"), + POWER_ON("power.on"), + POWER_OFF("power.off"), + ATTACH("attach"), + DETACH("detach"), + DENY("deny"), + TRIPOD("tripod"), + POP("pop"), + DROP_SLOT("drop.slot"), + NOTE("note"), + THORNS("thorns"), + PISTON_IN("piston.in"), + PISTON_OUT("piston.out"), + PORTAL("portal"), + WATER("water"), + LAVA_POP("lava.pop"), + LAVA("lava"), + BURP("burp"), + BUCKET_FILL_WATER("bucket.fill.water"), + BUCKET_FILL_LAVA("bucket.fill.lava"), + BUCKET_EMPTY_WATER("bucket.empty.water"), + BUCKET_EMPTY_LAVA("bucket.empty.lava"), + ARMOR_EQUIP_CHAIN("armor.equip_chain"), + ARMOR_EQUIP_DIAMOND("armor.equip_diamond"), + ARMOR_EQUIP_GENERIC("armor.equip_generic"), + ARMOR_EQUIP_GOLD("armor.equip_gold"), + ARMOR_EQUIP_IRON("armor.equip_iron"), + ARMOR_EQUIP_LEATHER("armor.equip_leather"), + ARMOR_EQUIP_ELYTRA("armor.equip_elytra"), + RECORD_13("record.13"), + RECORD_CAT("record.cat"), + RECORD_BLOCKS("record.blocks"), + RECORD_CHIRP("record.chirp"), + RECORD_FAR("record.far"), + RECORD_MALL("record.mall"), + RECORD_MELLOHI("record.mellohi"), + RECORD_STAL("record.stal"), + RECORD_STRAD("record.strad"), + RECORD_WARD("record.ward"), + RECORD_11("record.11"), + RECORD_WAIT("record.wait"), + STOP_RECORD("record.null"), + FLOP("flop"), + ELDERGUARDIAN_CURSE("elderguardian.curse"), + MOB_WARNING("mob.warning"), + MOB_WARNING_BABY("mob.warning.baby"), + TELEPORT("teleport"), + SHULKER_OPEN("shulker.open"), + SHULKER_CLOSE("shulker.close"), + HAGGLE("haggle"), + HAGGLE_YES("haggle.yes"), + HAGGLE_NO("haggle.no"), + HAGGLE_IDLE("haggle.idle"), + CHORUS_GROW("chorusgrow"), + CHORUS_DEATH("chorusdeath"), + GLASS("glass"), + POTION_BREWED("potion.brewed"), + CAST_SPELL("cast.spell"), + PREPARE_ATTACK("prepare.attack"), + PREPARE_SUMMON("prepare.summon"), + PREPARE_WOLOLO("prepare.wololo"), + FANG("fang"), + CHARGE("charge"), + CAMERA_TAKE_PICTURE("camera.take_picture"), + LEASHKNOT_PLACE("leashknot.place"), + LEASHKNOT_BREAK("leashknot.break"), + GROWL("growl"), + WHINE("whine"), + PANT("pant"), + PURR("purr"), + PURREOW("purreow"), + DEATH_MIN_VOLUME("death.min.volume"), + DEATH_MID_VOLUME("death.mid.volume"), + IMITATE_BLAZE("imitate.blaze"), + IMITATE_CAVE_SPIDER("imitate.cave_spider"), + IMITATE_CREEPER("imitate.creeper"), + IMITATE_ELDER_GUARDIAN("imitate.elder_guardian"), + IMITATE_ENDER_DRAGON("imitate.ender_dragon"), + IMITATE_ENDERMAN("imitate.enderman"), + IMITATE_ENDERMITE("imitate.endermite"), + IMITATE_EVOCATION_ILLAGER("imitate.evocation_illager"), + IMITATE_GHAST("imitate.ghast"), + IMITATE_HUSK("imitate.husk"), + /** + * @deprecated since v1001 + */ + IMITATE_ILLUSION_ILLAGER("undefined"), + IMITATE_MAGMA_CUBE("imitate.magma_cube"), + IMITATE_POLAR_BEAR("imitate.polar_bear"), + IMITATE_SHULKER("imitate.shulker"), + IMITATE_SILVERFISH("imitate.silverfish"), + IMITATE_SKELETON("imitate.skeleton"), + IMITATE_SLIME("imitate.slime"), + IMITATE_SPIDER("imitate.spider"), + IMITATE_STRAY("imitate.stray"), + IMITATE_VEX("imitate.vex"), + IMITATE_VINDICATION_ILLAGER("imitate.vindication_illager"), + IMITATE_WITCH("imitate.witch"), + IMITATE_WITHER("imitate.wither"), + IMITATE_WITHER_SKELETON("imitate.wither_skeleton"), + IMITATE_WOLF("imitate.wolf"), + IMITATE_ZOMBIE("imitate.zombie"), + IMITATE_ZOMBIE_PIGMAN("imitate.zombie_pigman"), + IMITATE_ZOMBIE_VILLAGER("imitate.zombie_villager"), + BLOCK_END_PORTAL_FRAME_FILL("block.end_portal_frame.fill"), + BLOCK_END_PORTAL_SPAWN("block.end_portal.spawn"), + RANDOM_ANVIL_USE("random.anvil_use"), + BOTTLE_DRAGONBREATH("bottle.dragonbreath"), + PORTAL_TRAVEL("portal.travel"), + ITEM_TRIDENT_HIT("item.trident.hit"), + ITEM_TRIDENT_RETURN("item.trident.return"), + ITEM_TRIDENT_RIPTIDE_1("item.trident.riptide_1"), + ITEM_TRIDENT_RIPTIDE_2("item.trident.riptide_2"), + ITEM_TRIDENT_RIPTIDE_3("item.trident.riptide_3"), + ITEM_TRIDENT_THROW("item.trident.throw"), + ITEM_TRIDENT_THUNDER("item.trident.thunder"), + ITEM_TRIDENT_HIT_GROUND("item.trident.hit_ground"), + DEFAULT("default"), + ELEMENT_CONSTRUCTOR_OPEN("elemconstruct.open"), + FLETCHING_TABLE_USE("block.fletching_table.use"), + ICE_BOMB_HIT("icebomb.hit"), + BALLOON_POP("balloonpop"), + LT_REACTION_ICE_BOMB("lt.reaction.icebomb"), + LT_REACTION_BLEACH("lt.reaction.bleach"), + LT_REACTION_E_PASTE("lt.reaction.epaste"), + LT_REACTION_E_PASTE2("lt.reaction.epaste2"), + LT_REACTION_FERTILIZER("lt.reaction.fertilizer"), + LT_REACTION_FIREBALL("lt.reaction.fireball"), + LT_REACTION_MG_SALT("lt.reaction.mgsalt"), + LT_REACTION_MISC_FIRE("lt.reaction.miscfire"), + LT_REACTION_FIRE("lt.reaction.fire"), + LT_REACTION_MISC_EXPLOSION("lt.reaction.miscexplosion"), + LT_REACTION_MISC_MYSTICAL("lt.reaction.miscmystical"), + LT_REACTION_MISC_MYSTICAL2("lt.reaction.miscmystical2"), + LT_REACTION_PRODUCT("lt.reaction.product"), + SPARKLER_USE("sparkler.use"), + GLOWSTICK_USE("glowstick.use"), + SPARKLER_ACTIVE("sparkler.active"), + CONVERT_TO_DROWNED("convert_to_drowned"), + BUCKET_FILL_FISH("bucket.fill.fish"), + BUCKET_EMPTY_FISH("bucket.empty.fish"), + BUBBLE_UP("bubble.up"), + BUBBLE_DOWN("bubble.down"), + BUBBLE_POP("bubble.pop"), + BUBBLE_UP_INSIDE("bubble.upinside"), + BUBBLE_DOWN_INSIDE("bubble.downinside"), + BABY_HURT("hurt.baby"), + BABY_DEATH("death.baby"), + BABY_STEP("step.baby"), + /** + * @deprecated since v1001 + */ + BABY_SPAWN("undefined"), + BORN("born"), + BLOCK_TURTLE_EGG_BREAK("block.turtle_egg.break"), + BLOCK_TURTLE_EGG_CRACK("block.turtle_egg.crack"), + BLOCK_TURTLE_EGG_HATCH("block.turtle_egg.hatch"), + TURTLE_LAY_EGG("lay_egg"), + BLOCK_TURTLE_EGG_ATTACK("block.turtle_egg.attack"), + BEACON_ACTIVATE("beacon.activate"), + BEACON_AMBIENT("beacon.ambient"), + BEACON_DEACTIVATE("beacon.deactivate"), + BEACON_POWER("beacon.power"), + CONDUIT_ACTIVATE("conduit.activate"), + CONDUIT_AMBIENT("conduit.ambient"), + CONDUIT_ATTACK("conduit.attack"), + CONDUIT_DEACTIVATE("conduit.deactivate"), + CONDUIT_SHORT("conduit.short"), + SWOOP("swoop"), + BLOCK_BAMBOO_SAPLING_PLACE("block.bamboo_sapling.place"), + PRE_SNEEZE("presneeze"), + SNEEZE("sneeze"), + AMBIENT_TAME("ambient.tame"), + SCARED("scared"), + BLOCK_SCAFFOLDING_CLIMB("block.scaffolding.climb"), + CROSSBOW_LOADING_START("crossbow.loading.start"), + CROSSBOW_LOADING_MIDDLE("crossbow.loading.middle"), + CROSSBOW_LOADING_END("crossbow.loading.end"), + CROSSBOW_SHOOT("crossbow.shoot"), + CROSSBOW_QUICK_CHARGE_START("crossbow.quick_charge.start"), + CROSSBOW_QUICK_CHARGE_MIDDLE("crossbow.quick_charge.middle"), + CROSSBOW_QUICK_CHARGE_END("crossbow.quick_charge.end"), + AMBIENT_AGGRESSIVE("ambient.aggressive"), + AMBIENT_WORRIED("ambient.worried"), + CANT_BREED("cant_breed"), + SHIELD_BLOCK("item.shield.block"), + LECTERN_BOOK_PLACE("item.book.put"), + GRINDSTONE_USE("block.grindstone.use"), + BELL("block.bell.hit"), + CAMPFIRE_CRACKLE("block.campfire.crackle"), + SWEET_BERRY_BUSH_HURT("block.sweet_berry_bush.hurt"), + SWEET_BERRY_BUSH_PICK("block.sweet_berry_bush.pick"), + ROAR("roar"), + STUN("stun"), + CARTOGRAPHY_TABLE_USE("block.cartography_table.use"), + STONECUTTER_USE("block.stonecutter.use"), + COMPOSTER_EMPTY("block.composter.empty"), + COMPOSTER_FILL("block.composter.fill"), + COMPOSTER_FILL_LAYER("block.composter.fill_success"), + COMPOSTER_READY("block.composter.ready"), + BARREL_OPEN("block.barrel.open"), + BARREL_CLOSE("block.barrel.close"), + RAID_HORN("raid.horn"), + LOOM_USE("block.loom.use"), + AMBIENT_IN_RAID("ambient.in.raid"), + UI_CARTOGRAPHY_TABLE_USE("ui.cartography_table.take_result"), + UI_STONECUTTER_USE("ui.stonecutter.take_result"), + UI_LOOM_USE("ui.loom.take_result"), + SMOKER_USE("block.smoker.smoke"), + BLAST_FURNACE_USE("block.blastfurnace.fire_crackle"), + SMITHING_TABLE_USE("block.smithing_table.use"), + SCREECH("screech"), + SLEEP("sleep"), + FURNACE_USE("block.furnace.lit"), + MOOSHROOM_CONVERT("convert_mooshroom"), + MILK_SUSPICIOUSLY("milk_suspiciously"), + CELEBRATE("celebrate"), + JUMP_PREVENT("jump.prevent"), + AMBIENT_POLLINATE("ambient.pollinate"), + BEEHIVE_DRIP("block.beehive.drip"), + BEEHIVE_ENTER("block.beehive.enter"), + BEEHIVE_EXIT("block.beehive.exit"), + BEEHIVE_WORK("block.beehive.work"), + BEEHIVE_SHEAR("block.beehive.shear"), + HONEYBOTTLE_DRINK("drink.honey"), + AMBIENT_CAVE("ambient.cave"), + RETREAT("retreat"), + CONVERT_TO_ZOMBIFIED("converted_to_zombified"), + ADMIRE("admire"), + STEP_LAVA("step_lava"), + TEMPT("tempt"), + PANIC("panic"), + ANGRY("angry"), + AMBIENT_WARPED_FOREST("ambient.warped_forest.mood"), + AMBIENT_SOULSAND_VALLEY("ambient.soulsand_valley.mood"), + AMBIENT_NETHER_WASTES("ambient.nether_wastes.mood"), + AMBIENT_BASALT_DELTAS("ambient.basalt_deltas.mood"), + AMBIENT_CRIMSON_FOREST("ambient.crimson_forest.mood"), + RESPAWN_ANCHOR_CHARGE("respawn_anchor.charge"), + RESPAWN_ANCHOR_DEPLETE("respawn_anchor.deplete"), + RESPAWN_ANCHOR_SET_SPAWN("respawn_anchor.set_spawn"), + RESPAWN_ANCHOR_AMBIENT("respawn_anchor.ambient"), + SOUL_ESCAPE_QUIET("particle.soul_escape.quiet"), + SOUL_ESCAPE_LOUD("particle.soul_escape.loud"), + RECORD_PIGSTEP("record.pigstep"), + LINK_COMPASS_TO_LODESTONE("lodestone_compass.link_compass_to_lodestone"), + USE_SMITHING_TABLE("smithing_table.use"), + EQUIP_NETHERITE("armor.equip_netherite"), + AMBIENT_LOOP_WARPED_FOREST("ambient.warped_forest.loop"), + AMBIENT_LOOP_SOULSAND_VALLEY("ambient.soulsand_valley.loop"), + AMBIENT_LOOP_NETHER_WASTES("ambient.nether_wastes.loop"), + AMBIENT_LOOP_BASALT_DELTAS("ambient.basalt_deltas.loop"), + AMBIENT_LOOP_CRIMSON_FOREST("ambient.crimson_forest.loop"), + AMBIENT_ADDITION_WARPED_FOREST("ambient.warped_forest.additions"), + AMBIENT_ADDITION_SOULSAND_VALLEY("ambient.soulsand_valley.additions"), + AMBIENT_ADDITION_NETHER_WASTES("ambient.nether_wastes.additions"), + AMBIENT_ADDITION_BASALT_DELTAS("ambient.basalt_deltas.additions"), + AMBIENT_ADDITION_CRIMSON_FOREST("ambient.crimson_forest.additions"), + SCULK_SENSOR_POWER_ON("power.on.sculk_sensor"), + SCULK_SENSOR_POWER_OFF("power.off.sculk_sensor"), + BUCKET_FILL_POWDER_SNOW("bucket.fill.powder_snow"), + BUCKET_EMPTY_POWDER_SNOW("bucket.empty.powder_snow"), + POINTED_DRIPSTONE_CAULDRON_DRIP_WATER("cauldron_drip.lava.pointed_dripstone"), + POINTED_DRIPSTONE_CAULDRON_DRIP_LAVA("cauldron_drip.water.pointed_dripstone"), + POINTED_DRIPSTONE_DRIP_WATER("drip.lava.pointed_dripstone"), + POINTED_DRIPSTONE_DRIP_LAVA("drip.water.pointed_dripstone"), + CAVE_VINES_PICK_BERRIES("pick_berries.cave_vines"), + BIG_DRIPLEAF_TILT_DOWN("tilt_down.big_dripleaf"), + BIG_DRIPLEAF_TILT_UP("tilt_up.big_dripleaf"), + COPPER_WAX_ON("copper.wax.on"), + COPPER_WAX_OFF("copper.wax.off"), + SCRAPE("scrape"), + PLAYER_HURT_DROWN("mob.player.hurt_drown"), + PLAYER_HURT_ON_FIRE("mob.player.hurt_on_fire"), + PLAYER_HURT_FREEZE("mob.player.hurt_freeze"), + USE_SPYGLASS("item.spyglass.use"), + STOP_USING_SPYGLASS("item.spyglass.stop_using"), + AMETHYST_BLOCK_CHIME("chime.amethyst_block"), + AMBIENT_SCREAMER("ambient.screamer"), + HURT_SCREAMER("hurt.screamer"), + DEATH_SCREAMER("death.screamer"), + MILK_SCREAMER("milk.screamer"), + JUMP_TO_BLOCK("jump_to_block"), + PRE_RAM("pre_ram"), + PRE_RAM_SCREAMER("pre_ram.screamer"), + RAM_IMPACT("ram_impact"), + RAM_IMPACT_SCREAMER("ram_impact.screamer"), + SQUID_INK_SQUIRT("squid.ink_squirt"), + GLOW_SQUID_INK_SQUIRT("glow_squid.ink_squirt"), + CONVERT_TO_STRAY("convert_to_stray"), + CAKE_ADD_CANDLE("cake.add_candle"), + EXTINGUISH_CANDLE("extinguish.candle"), + AMBIENT_CANDLE("ambient.candle"), + BLOCK_CLICK("block.click"), + BLOCK_CLICK_FAIL("block.click.fail"), + SCULK_CATALYST_BLOOM("block.sculk_catalyst.bloom"), + SCULK_SHRIEKER_SHRIEK("block.sculk_shrieker.shriek"), + WARDEN_NEARBY_CLOSE("nearby_close"), + WARDEN_NEARBY_CLOSER("nearby_closer"), + WARDEN_NEARBY_CLOSEST("nearby_closest"), + WARDEN_SLIGHTLY_ANGRY("agitated"), + RECORD_OTHERSIDE("record.otherside"), + TONGUE("tongue"), + CRACK_IRON_GOLEM("irongolem.crack"), + REPAIR_IRON_GOLEM("irongolem.repair"), + LISTENING("listening"), + HEARTBEAT("heartbeat"), + HORN_BREAK("horn_break"), + /** + * @deprecated since v1001 + */ + SCULK_PLACE("undefined"), + SCULK_SPREAD("block.sculk.spread"), + SCULK_CHARGE("charge.sculk"), + SCULK_SENSOR_PLACE("block.sculk_sensor.place"), + SCULK_SHRIEKER_PLACE("block.sculk_shrieker.place"), + GOAT_CALL_0("horn_call0"), + GOAT_CALL_1("horn_call1"), + GOAT_CALL_2("horn_call2"), + GOAT_CALL_3("horn_call3"), + GOAT_CALL_4("horn_call4"), + GOAT_CALL_5("horn_call5"), + GOAT_CALL_6("horn_call6"), + GOAT_CALL_7("horn_call7"), + /** + * @deprecated since v1001 + */ + GOAT_CALL_8("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_CALL_9("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_0("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_1("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_2("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_3("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_4("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_5("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_6("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_7("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_8("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_HARMONY_9("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_0("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_1("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_2("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_3("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_4("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_5("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_6("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_7("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_8("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_MELODY_9("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_0("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_1("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_2("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_3("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_4("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_5("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_6("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_7("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_8("undefined"), + /** + * @deprecated since v1001 + */ + GOAT_BASS_9("undefined"), + IMITATE_WARDEN("imitate.warden"), + LISTENING_ANGRY("listening_angry"), + ITEM_GIVEN("item_given"), + ITEM_TAKEN("item_taken"), + DISAPPEARED("disappeared"), + REAPPEARED("reappeared"), + FROGSPAWN_HATCHED("block.frog_spawn.hatch"), + LAY_SPAWN("lay_spawn"), + FROGSPAWN_BREAK("block.frog_spawn.break"), + SONIC_BOOM("sonic_boom"), + SONIC_CHARGE("sonic_charge"), + ITEM_THROWN("item_thrown"), + RECORD_5("record.5"), + CONVERT_TO_FROG("convert_to_frog"), + MILK_DRINK("drink.milk"), + /** + * @deprecated since v1001 + */ + RECORD_PLAYING("undefined"), + ENCHANTING_TABLE_USE("block.enchanting_table.use"), + BUNDLE_DROP_CONTENTS("bundle.drop_contents"), + BUNDLE_INSERT("bundle.insert"), + BUNDLE_REMOVE_ONE("bundle.remove_one"), /** * @since v560 */ - PRESSURE_PLATE_CLICK_OFF, - PRESSURE_PLATE_CLICK_ON, - BUTTON_CLICK_OFF, - BUTTON_CLICK_ON, - DOOR_OPEN, - DOOR_CLOSE, - TRAPDOOR_OPEN, - TRAPDOOR_CLOSE, - FENCE_GATE_OPEN, - FENCE_GATE_CLOSE, + PRESSURE_PLATE_CLICK_OFF("pressure_plate.click_off"), + PRESSURE_PLATE_CLICK_ON("pressure_plate.click_on"), + BUTTON_CLICK_OFF("button.click_off"), + BUTTON_CLICK_ON("button.click_on"), + DOOR_OPEN("door.open"), + DOOR_CLOSE("door.close"), + TRAPDOOR_OPEN("trapdoor.open"), + TRAPDOOR_CLOSE("trapdoor.close"), + FENCE_GATE_OPEN("fence_gate.open"), + FENCE_GATE_CLOSE("fence_gate.close"), /** * @since v567 */ - INSERT, + INSERT("insert"), /** * @since v567 */ - PICKUP, + PICKUP("pickup"), /** * @since v567 */ - INSERT_ENCHANTED, + INSERT_ENCHANTED("insert_enchanted"), /** * @since v567 */ - PICKUP_ENCHANTED, + PICKUP_ENCHANTED("pickup_enchanted"), /** * @since v575 */ - BRUSH, + BRUSH("brush"), /** * @since v575 */ - BRUSH_COMPLETED, + BRUSH_COMPLETED("brush_completed"), /** * @since v575 */ - SHATTER_DECORATED_POT, + SHATTER_DECORATED_POT("shatter_pot"), /** * @since v575 */ - BREAK_DECORATED_POD, + BREAK_DECORATED_POD("break_pot"), /** * @since v589 */ - SNIFFER_EGG_CRACK, + SNIFFER_EGG_CRACK("block.sniffer_egg.crack"), /** * @since v589 */ - SNIFFER_EGG_HATCHED, + SNIFFER_EGG_HATCHED("block.sniffer_egg.hatch"), /** * @since v589 */ - WAXED_SIGN_INTERACT_FAIL, + WAXED_SIGN_INTERACT_FAIL("block.sign.waxed_interact_fail"), /** * @since v589 */ - RECORD_RELIC, + RECORD_RELIC("record.relic"), /** * @since v618 */ - BUMP, + BUMP("note.bass"), /** * @since v618 */ - PUMPKIN_CARVE, + PUMPKIN_CARVE("pumpkin.carve"), /** * @since v618 */ - CONVERT_HUSK_TO_ZOMBIE, + CONVERT_HUSK_TO_ZOMBIE("mob.husk.convert_to_zombie"), /** * @since v618 */ - PIG_DEATH, + PIG_DEATH("mob.pig.death"), /** * @since v618 */ - HOGLIN_CONVERT_TO_ZOMBIE, + HOGLIN_CONVERT_TO_ZOMBIE("mob.hoglin.converted_to_zombified"), /** * @since v618 */ - AMBIENT_UNDERWATER_ENTER, + AMBIENT_UNDERWATER_ENTER("ambient.underwater.enter"), /** * @since v618 */ - AMBIENT_UNDERWATER_EXIT, + AMBIENT_UNDERWATER_EXIT("ambient.underwater.exit"), /** * @since v622 */ - BOTTLE_FILL, + BOTTLE_FILL("bottle.fill"), /** * @since v622 */ - BOTTLE_EMPTY, + BOTTLE_EMPTY("bottle.empty"), /** * @since v630 */ - CRAFTER_CRAFT, + CRAFTER_CRAFT("crafter.craft"), /** * @since v630 */ - CRAFTER_FAILED, + CRAFTER_FAILED("crafter.fail"), /** * @since v630 */ - CRAFTER_DISABLE_SLOT, + CRAFTER_DISABLE_SLOT("crafter.disable_slot"), /** * @since v630 */ - DECORATED_POT_INSERT, + DECORATED_POT_INSERT("block.decorated_pot.insert"), /** * @since v630 */ - DECORATED_POT_INSERT_FAILED, + DECORATED_POT_INSERT_FAILED("block.decorated_pot.insert_fail"), /** * @since v630 */ - COPPER_BULB_ON, + COPPER_BULB_ON("block.copper_bulb.turn_on"), /** * @since v630 */ - COPPER_BULB_OFF, + COPPER_BULB_OFF("block.copper_bulb.turn_off"), /** * @since v630 */ - TRIAL_SPAWNER_OPEN_SHUTTER, + TRIAL_SPAWNER_OPEN_SHUTTER("trial_spawner.open_shutter"), /** * @since v630 */ - TRIAL_SPAWNER_EJECT_ITEM, + TRIAL_SPAWNER_EJECT_ITEM("trial_spawner.eject_item"), /** * @since v630 */ - TRIAL_SPAWNER_DETECT_PLAYER, + TRIAL_SPAWNER_DETECT_PLAYER("trial_spawner.detect_player"), /** * @since v630 */ - TRIAL_SPAWNER_SPAWN_MOB, + TRIAL_SPAWNER_SPAWN_MOB("trial_spawner.spawn_mob"), /** * @since v630 */ - TRIAL_SPAWNER_CLOSE_SHUTTER, + TRIAL_SPAWNER_CLOSE_SHUTTER("trial_spawner.close_shutter"), /** * @since v630 */ - TRIAL_SPAWNER_AMBIENT, + TRIAL_SPAWNER_AMBIENT("trial_spawner.ambient"), /** * @since v649 */ - AMBIENT_IN_AIR, + AMBIENT_IN_AIR("ambient.in.air"), /** * @since v649 */ - WIND_BURST, + WIND_BURST("breeze_wind_charge.burst"), /** * @since v649 */ - IMITATE_BREEZE, + IMITATE_BREEZE("imitate.breeze"), /** * @since v649 */ - ARMADILLO_BRUSH, + ARMADILLO_BRUSH("mob.armadillo.brush"), /** * @since v649 */ - ARMADILLO_SCUTE_DROP, + ARMADILLO_SCUTE_DROP("mob.armadillo.scute_drop"), /** * @since v649 */ - EQUIP_WOLF, + EQUIP_WOLF("armor.equip_wolf"), /** * @since v649 */ - UNEQUIP_WOLF, + UNEQUIP_WOLF("armor.unequip_wolf"), /** * @since v649 */ - REFLECT, + REFLECT("reflect"), /** * @since v662 */ - VAULT_OPEN_SHUTTER, + VAULT_OPEN_SHUTTER("vault.open_shutter"), /** * @since v662 */ - VAULT_CLOSE_SHUTTER, + VAULT_CLOSE_SHUTTER("vault.close_shutter"), /** * @since v662 */ - VAULT_EJECT_ITEM, + VAULT_EJECT_ITEM("vault.eject_item"), /** * @since v662 */ - VAULT_INSERT_ITEM, + VAULT_INSERT_ITEM("vault.insert_item"), /** * @since v662 */ - VAULT_INSERT_ITEM_FAIL, + VAULT_INSERT_ITEM_FAIL("vault.insert_item_fail"), /** * @since v662 */ - VAULT_AMBIENT, + VAULT_AMBIENT("vault.ambient"), /** * @since v662 */ - VAULT_ACTIVATE, + VAULT_ACTIVATE("vault.activate"), /** * @since v662 */ - VAULT_DEACTIVATE, + VAULT_DEACTIVATE("vault.deactivate"), /** * @since v662 */ - HURT_REDUCED, + HURT_REDUCED("hurt.reduced"), /** * @since v662 */ - WIND_CHARGE_BURST, + WIND_CHARGE_BURST("wind_charge.burst"), /** * @since v671 */ - ARMOR_CRACK_WOLF, + ARMOR_CRACK_WOLF("armor.crack_wolf"), /** * @since v671 */ - ARMOR_BREAK_WOLF, + ARMOR_BREAK_WOLF("armor.break_wolf"), /** * @since v671 */ - ARMOR_REPAIR_WOLF, + ARMOR_REPAIR_WOLF("armor.repair_wolf"), /** * @since v671 */ - MACE_SMASH_AIR, + MACE_SMASH_AIR("mace.smash_air"), /** * @since v671 */ - MACE_SMASH_GROUND, + MACE_SMASH_GROUND("mace.smash_ground"), /** * @since v671 */ - MACE_SMASH_HEAVY_GROUND, + MACE_SMASH_HEAVY_GROUND("mace.heavy_smash_ground"), /** * @since v685 */ - TRIAL_SPAWNER_CHARGE_ACTIVATE, + TRIAL_SPAWNER_CHARGE_ACTIVATE("trial_spawner.charge_activate"), /** * @since v685 */ - TRIAL_SPAWNER_AMBIENT_OMINOUS, + TRIAL_SPAWNER_AMBIENT_OMINOUS("trial_spawner.ambient_ominous"), /** * @since v685 */ - OMINOUS_ITEM_SPAWNER_SPAWN_ITEM, + OMINOUS_ITEM_SPAWNER_SPAWN_ITEM("ominous_item_spawner.spawn_item"), /** * @since v685 */ - OMINOUS_BOTTLE_END_USE, + OMINOUS_BOTTLE_END_USE("ominous_bottle.end_use"), /** * @since v685 */ - OMINOUS_ITEM_SPAWNER_SPAWN_ITEM_BEGIN, + OMINOUS_ITEM_SPAWNER_SPAWN_ITEM_BEGIN("ominous_item_spawner.spawn_item_begin"), /** * @since v685 */ - APPLY_EFFECT_BAD_OMEN, + APPLY_EFFECT_BAD_OMEN("apply_effect.bad_omen"), /** * @since v685 */ - APPLY_EFFECT_RAID_OMEN, + APPLY_EFFECT_RAID_OMEN("apply_effect.raid_omen"), /** * @since v685 */ - APPLY_EFFECT_TRIAL_OMEN, + APPLY_EFFECT_TRIAL_OMEN("apply_effect.trial_omen"), /** * @since v685 */ - OMINOUS_ITEM_SPAWNER_ABOUT_TO_SPAWN_ITEM, + OMINOUS_ITEM_SPAWNER_ABOUT_TO_SPAWN_ITEM("ominous_item_spawner.about_to_spawn_item"), /** * @since v685 */ - RECORD_CREATOR, + RECORD_CREATOR("record.creator"), /** * @since v685 */ - RECORD_CREATOR_MUSIC_BOX, + RECORD_CREATOR_MUSIC_BOX("record.creator_music_box"), /** * @since v685 */ - RECORD_PRECIPICE, + RECORD_PRECIPICE("record.precipice"), /** * @since v712 */ - IMITATE_BOGGED, + IMITATE_BOGGED("imitate.bogged"), /** * @since v712 */ - VAULT_REJECT_REWARDED_PLAYER, + VAULT_REJECT_REWARDED_PLAYER("vault.reject_rewarded_player"), /** * @since v729 */ - IMITATE_DROWNED, + IMITATE_DROWNED("imitate.drowned"), /** * @since v729 */ - BUNDLE_INSERT_FAILED, + BUNDLE_INSERT_FAILED("bundle.insert_fail"), /** * @since v766 */ - IMITATE_CREAKING, + IMITATE_CREAKING("imitate.creaking"), /** * @since v766 */ - SPONGE_ABSORB, + SPONGE_ABSORB("sponge.absorb"), /** * @since v766 */ - BLOCK_CREAKING_HEART_TRAIL, + BLOCK_CREAKING_HEART_TRAIL("block.creaking_heart.trail"), /** * @since v766 */ - CREAKING_HEART_SPAWN, + CREAKING_HEART_SPAWN("creaking_heart_spawn"), /** * @since v766 */ - ACTIVATE, + ACTIVATE("activate"), /** * @since v766 */ - DEACTIVATE, + DEACTIVATE("deactivate"), /** * @since v766 */ - FREEZE, + FREEZE("freeze"), /** * @since v766 */ - UNFREEZE, + UNFREEZE("unfreeze"), /** * @since v766 */ - OPEN, + OPEN("open"), /** * @since v766 */ - OPEN_LONG, + OPEN_LONG("open_long"), /** * @since v766 */ - CLOSE, + CLOSE("close"), /** * @since v766 */ - CLOSE_LONG, + CLOSE_LONG("close_long"), /** * @since v800 */ - IMITATE_PHANTOM, + IMITATE_PHANTOM("imitate.phantom"), /** * @since v800 */ - IMITATE_ZOGLIN, + IMITATE_ZOGLIN("imitate.zoglin"), /** * @since v800 */ - IMITATE_GUARDIAN, + IMITATE_GUARDIAN("imitate.guardian"), /** * @since v800 */ - IMITATE_RAVAGER, + IMITATE_RAVAGER("imitate.ravager"), /** * @since v800 */ - IMITATE_PILLAGER, + IMITATE_PILLAGER("imitate.pillager"), /** * @since v800 */ - PLACE_IN_WATER, + PLACE_IN_WATER("place_in_water"), /** * @since v800 */ - STATE_CHANGE, + STATE_CHANGE("state_change"), /** * @since v800 */ - IMITATE_HAPPY_GHAST, + IMITATE_HAPPY_GHAST("imitate.happy_ghast"), /** * @since v800 */ - UNEQUIP_GENERIC, + UNEQUIP_GENERIC("armor.unequip_generic"), /** * @since v818 */ - RECORD_TEARS, + RECORD_TEARS("record.tears"), /** * @since v818 */ - THE_END_LIGHT_FLASH, + THE_END_LIGHT_FLASH("ambient.weather.the_end_light_flash"), /** * @since v818 */ - LEAD_LEASH, + LEAD_LEASH("lead.leash"), /** * @since v818 */ - LEAD_UNLEASH, + LEAD_UNLEASH("lead.unleash"), /** * @since v818 */ - LEAD_BREAK, + LEAD_BREAK("lead.break"), /** * @since v818 */ - UNSADDLE, + UNSADDLE("unsaddle"), /** * @since v819 */ - RECORD_LAVA_CHICKEN, + RECORD_LAVA_CHICKEN("record.lava_chicken"), /** * @since v827 */ - EQUIP_COPPER, + EQUIP_COPPER("armor.equip_copper"), /** * @since v843 */ - PLACE_ITEM, + PLACE_ITEM("place_item"), /** * @since v843 */ - SINGLE_ITEM_SWAP, + SINGLE_ITEM_SWAP("single_swap"), /** * @since v843 */ - MULTI_ITEM_SWAP, + MULTI_ITEM_SWAP("multi_swap"), + /** + * @since v897 + */ + LUNGE_1("item.enchant.lunge1"), /** - * @since v898 + * @since v897 */ - LUNGE_1, + LUNGE_2("item.enchant.lunge2"), /** - * @since v898 + * @since v897 */ - LUNGE_2, + LUNGE_3("item.enchant.lunge3"), /** - * @since v898 + * @since v897 */ - LUNGE_3, + ATTACK_CRITICAL("attack.critical"), /** - * @since v898 + * @since v897 */ - ATTACK_CRITICAL, + SPEAR_ATTACK_HIT("item.spear.attack_hit"), /** - * @since v898 + * @since v897 */ - SPEAR_ATTACK_HIT, + SPEAR_ATTACK_MISS("item.spear.attack_miss"), /** - * @since v898 + * @since v897 */ - SPEAR_ATTACK_MISS, + WOODEN_SPEAR_ATTACK_HIT("item.wooden_spear.attack_hit"), /** - * @since v898 + * @since v897 */ - WOODEN_SPEAR_ATTACK_HIT, + WOODEN_SPEAR_ATTACK_MISS("item.wooden_spear.attack_miss"), /** - * @since v898 + * @since v897 */ - WOODEN_SPEAR_ATTACK_MISS, + IMITATE_PARCHED("imitate.parched"), /** - * @since v898 + * @since v897 */ - IMITATE_PARCHED, + IMITATE_CAMEL_HUSK("imitate.camel_husk"), /** - * @since v898 + * @since v897 */ - IMITATE_CAMEL_HUSK, + SPEAR_USE("item.spear.use"), /** - * @since v898 + * @since v897 */ - SPEAR_USE, + WOODEN_SPEAR_USE("item.wooden_spear.use"), /** - * @since v898 + * @since v924 */ - WOODEN_SPEAR_USE, - UNDEFINED + SADDLE_IN_WATER("saddle_in_water"), + /** + * @since v924 + */ + STONE_SPEAR_ATTACK_HIT("item.stone_spear.attack_hit"), + /** + * @since v924 + */ + IRON_SPEAR_ATTACK_HIT("item.iron_spear.attack_hit"), + /** + * @since v924 + */ + COPPER_SPEAR_ATTACK_HIT("item.copper_spear.attack_hit"), + /** + * @since v924 + */ + GOLDEN_SPEAR_ATTACK_HIT("item.golden_spear.attack_hit"), + /** + * @since v924 + */ + DIAMOND_SPEAR_ATTACK_HIT("item.diamond_spear.attack_hit"), + /** + * @since v924 + */ + NETHERITE_SPEAR_ATTACK_HIT("item.netherite_spear.attack_hit"), + /** + * @since v924 + */ + STONE_SPEAR_ATTACK_MISS("item.stone_spear.attack_miss"), + /** + * @since v924 + */ + IRON_SPEAR_ATTACK_MISS("item.iron_spear.attack_miss"), + /** + * @since v924 + */ + COPPER_SPEAR_ATTACK_MISS("item.copper_spear.attack_miss"), + /** + * @since v924 + */ + GOLDEN_SPEAR_ATTACK_MISS("item.golden_spear.attack_miss"), + /** + * @since v924 + */ + DIAMOND_SPEAR_ATTACK_MISS("item.diamond_spear.attack_miss"), + /** + * @since v924 + */ + NETHERITE_SPEAR_ATTACK_MISS("item.netherite_spear.attack_miss"), + /** + * @since v924 + */ + STONE_SPEAR_USE("item.stone_spear.use"), + /** + * @since v924 + */ + IRON_SPEAR_USE("item.iron_spear.use"), + /** + * @since v924 + */ + COPPER_SPEAR_USE("item.copper_spear.use"), + /** + * @since v924 + */ + GOLDEN_SPEAR_USE("item.golden_spear.use"), + /** + * @since v924 + */ + DIAMOND_SPEAR_USE("item.diamond_spear.use"), + /** + * @since v924 + */ + NETHERITE_SPEAR_USE("item.netherite_spear.use"), + /** + * @since v944 + */ + PAUSE_GROWTH("pause_growth"), + /** + * @since v944 + */ + RESET_GROWTH("reset_growth"), + /** + * @since v975 + */ + PUSHED_BY_PLAYER("pushed_by_player"), + /** + * @since v975 + */ + BOUNCE("bounce"), + /** + * @since v1001 + */ + SLIME_LANDING("slime_landing"), + /** + * @since v1001 + */ + ABSORB_BLOCK("absorb_block"), + /** + * @since v1001 + */ + EJECT_BLOCK("eject_block"), + /** + * @since v1001 + */ + GEYSER_ERUPTION_START("geyser_eruption_start"), + /** + * @since v1001 + */ + GEYSER_ERUPTION_ACTIVE("geyser_eruption_active"), + /** + * @since v1001 + */ + RECORD_BOUNCE("record.bounce"), + /** + * @since v1001 + */ + BUCKET_FILL_LAND_ANIMAL("bucket.fill.land_animal"), + /** + * @since v1001 + */ + BUCKET_EMPTY_LAND_ANIMAL("bucket.empty.land_animal"), + /** + * @since v1001 + */ + GEYSER_CONTINUOUS_ERUPTION_START("geyser_continuous_eruption_start"), + /** + * @since v1001 + */ + GEYSER_CONTINUOUS_ERUPTION_ACTIVE("geyser_continuous_eruption_active"), + UNDEFINED("undefined"); + + private static final Map serializeNames = new HashMap<>(values().length); + static { + for (SoundEvent value : values()) { + serializeNames.put(value.getSerializeName(), value); + } + } + + private final String serializeName; + + SoundEvent(String serializeName) { + this.serializeName = serializeName; + } + + public String getSerializeName() { + return this.serializeName; + } + + public static SoundEvent fromName(String serializeName) { + return serializeNames.get(serializeName); + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SubChunkData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SubChunkData.java index fab005f2..e691a584 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SubChunkData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SubChunkData.java @@ -20,12 +20,15 @@ public class SubChunkData extends AbstractReferenceCounted { private long blobId; @Override - public SubChunkData touch(Object o) { + public SubChunkData touch(Object hint) { if (this.data != null) { - this.data.touch(o); + this.data.touch(hint); } if (this.heightMapData != null) { - this.heightMapData.touch(o); + this.heightMapData.touch(hint); + } + if (this.renderHeightMapData != null) { + this.renderHeightMapData.touch(hint); } return this; } @@ -38,5 +41,8 @@ protected void deallocate() { if (this.heightMapData != null) { this.heightMapData.release(); } + if (this.renderHeightMapData != null) { + this.renderHeightMapData.release(); + } } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/VillageType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/VillageType.java new file mode 100644 index 00000000..ed28e4da --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/VillageType.java @@ -0,0 +1,9 @@ +package org.cloudburstmc.protocol.bedrock.data; + +public enum VillageType { + DESERT, + ICE, + SAVANNA, + TAIGA, + DEFAULT, +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeData.java new file mode 100644 index 00000000..08ba79fc --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeData.java @@ -0,0 +1,4 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +public interface AttributeData { +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerData.java new file mode 100644 index 00000000..495893f0 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerData.java @@ -0,0 +1,20 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.List; + +@Value +public class AttributeLayerData { + + String layerName; + /** + * @since v1001 + */ + @Nullable + String noiseName; + int dimension; + AttributeLayerSettings settings; + List attributes; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSettings.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSettings.java new file mode 100644 index 00000000..9e672ed8 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSettings.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +@Value +public class AttributeLayerSettings { + + int priority; + Weight weight; + boolean enabled; + boolean transitionsPaused; + + public interface Weight { + } + + @Value + public static class FloatWeight implements Weight { + float value; + } + + /** + * @deprecated since v975 + */ + @Value + public static class StringWeight implements Weight { + String value; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSyncPayload.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSyncPayload.java new file mode 100644 index 00000000..15479ee6 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/AttributeLayerSyncPayload.java @@ -0,0 +1,4 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +public interface AttributeLayerSyncPayload { +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/BoolAttributeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/BoolAttributeData.java new file mode 100644 index 00000000..53002939 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/BoolAttributeData.java @@ -0,0 +1,14 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +@Value +public class BoolAttributeData implements AttributeData { + + boolean value; + Operation operation; + + public enum Operation { + OVERRIDE, ALPHA_BLEND, AND, NAND, OR, NOR, XOR, XNOR + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/ColorAttributeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/ColorAttributeData.java new file mode 100644 index 00000000..71d01787 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/ColorAttributeData.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +@Value +public class ColorAttributeData implements AttributeData { + + Color255RGBA value; + Operation operation; + + public interface Color255RGBA { + } + + @Value + public static class StringColor implements Color255RGBA { + String value; + } + + @Value + public static class ArrayColor implements Color255RGBA { + int[] value; + } + + public enum Operation { + OVERRIDE, ALPHA_BLEND, ADD, SUBTRACT, MULTIPLY + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/EnvironmentAttributeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/EnvironmentAttributeData.java new file mode 100644 index 00000000..ea56665d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/EnvironmentAttributeData.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; + +@Value +public class EnvironmentAttributeData { + + String attributeName; + @Nullable + AttributeData from; + AttributeData attribute; + @Nullable + AttributeData to; + int currentTransitionTicks; + int totalTransitionTicks; + CameraEase easing; + /** + * @since v1001 + */ + int localTransitionTicks; + /** + * @since v1001 + */ + boolean noiseTransition; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/FloatAttributeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/FloatAttributeData.java new file mode 100644 index 00000000..dc375f2d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/FloatAttributeData.java @@ -0,0 +1,19 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; + +@Value +public class FloatAttributeData implements AttributeData { + + float value; + Operation operation; + @Nullable + Float constraintMin; + @Nullable + Float constraintMax; + + public enum Operation { + OVERRIDE, ALPHA_BLEND, ADD, SUBTRACT, MULTIPLY, MINIMUM, MAXIMUM + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/RemoveEnvironmentAttributesData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/RemoveEnvironmentAttributesData.java new file mode 100644 index 00000000..d286ae3b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/RemoveEnvironmentAttributesData.java @@ -0,0 +1,13 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +import java.util.List; + +@Value +public class RemoveEnvironmentAttributesData implements AttributeLayerSyncPayload { + + String layerName; + int dimension; + List attributes; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayerSettingsData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayerSettingsData.java new file mode 100644 index 00000000..f5964368 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayerSettingsData.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +@Value +public class UpdateAttributeLayerSettingsData implements AttributeLayerSyncPayload { + + String layerName; + int dimension; + AttributeLayerSettings settings; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayersData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayersData.java new file mode 100644 index 00000000..da804fcf --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateAttributeLayersData.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +import java.util.List; + +@Value +public class UpdateAttributeLayersData implements AttributeLayerSyncPayload { + + List attributeLayers; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateEnvironmentAttributesData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateEnvironmentAttributesData.java new file mode 100644 index 00000000..b2da143e --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/attributelayer/UpdateEnvironmentAttributesData.java @@ -0,0 +1,13 @@ +package org.cloudburstmc.protocol.bedrock.data.attributelayer; + +import lombok.Value; + +import java.util.List; + +@Value +public class UpdateEnvironmentAttributesData implements AttributeLayerSyncPayload { + + String layerName; + int dimension; + List attributes; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/auth/AuthType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/auth/AuthType.java index 79a52c8c..f9b36e67 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/auth/AuthType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/auth/AuthType.java @@ -11,6 +11,7 @@ public enum AuthType { FULL, /** * Split screen player using the host's authentication token. + * If accepting guests, you should limit the maximum number of guests per host. */ GUEST, /** diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeClimateData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeClimateData.java index b823aaba..b41c26d7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeClimateData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeClimateData.java @@ -6,9 +6,13 @@ public class BiomeClimateData { float temperature; float downfall; + @Deprecated float redSporeDensity; + @Deprecated float blueSporeDensity; + @Deprecated float ashDensity; + @Deprecated float whiteAshDensity; float snowAccumulationMin; float snowAccumulationMax; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionChunkGenData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionChunkGenData.java index 0960604b..1fc3118b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionChunkGenData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionChunkGenData.java @@ -2,6 +2,7 @@ import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.data.VillageType; import java.util.List; @@ -38,5 +39,20 @@ public class BiomeDefinitionChunkGenData { * @since v859 */ @Nullable - BiomeReplacementData biomeReplacementData; + List biomeReplacements; + /** + * @since v924 + */ + @Nullable + VillageType villageType; + /** + * @since v975 + */ + @Nullable + BiomeSurfaceBuilderData surfaceBuilderData; + /** + * @since v975 + */ + @Nullable + BiomeSurfaceBuilderData subsurfaceBuilderData; } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionData.java index 44644fcd..c6e812b1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeDefinitionData.java @@ -14,9 +14,11 @@ @Value public class BiomeDefinitionData { + /** + * The numeric id of this biome. This field is always {@code null} for vanilla biome, and is only set for custom biome (start at 30000). + */ @Nullable - @Getter(AccessLevel.NONE) - transient Indexable id; + Integer id; float temperature; float downfall; float redSporeDensity; @@ -35,23 +37,23 @@ public class BiomeDefinitionData { BiomeDefinitionChunkGenData chunkGenData; @JsonCreator - public BiomeDefinitionData(@Nullable String id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable List tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { - this(id == null ? null : new Unindexed<>(id), temperature, downfall, redSporeDensity, blueSporeDensity, ashDensity, whiteAshDensity, foliageSnow, depth, scale, mapWaterColor, rain, tags == null ? null : new Unindexed<>(tags), chunkGenData); + public BiomeDefinitionData(@Nullable Integer id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable List tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { + this(id, temperature, downfall, redSporeDensity, blueSporeDensity, ashDensity, whiteAshDensity, foliageSnow, depth, scale, mapWaterColor, rain, tags == null ? null : new Unindexed<>(tags), chunkGenData); } - public BiomeDefinitionData(@Nullable String id, float temperature, float downfall, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable List tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { - this(id == null ? null : new Unindexed<>(id), temperature, downfall, 0, 0, 0, 0, foliageSnow, depth, scale, mapWaterColor, rain, tags == null ? null : new Unindexed<>(tags), chunkGenData); + public BiomeDefinitionData(@Nullable Integer id, float temperature, float downfall, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable List tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { + this(id, temperature, downfall, 0, 0, 0, 0, foliageSnow, depth, scale, mapWaterColor, rain, tags == null ? null : new Unindexed<>(tags), chunkGenData); } - public BiomeDefinitionData(@Nullable Indexable id, float temperature, float downfall, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { + public BiomeDefinitionData(@Nullable Integer id, float temperature, float downfall, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { this(id, temperature, downfall, 0, 0, 0, 0, foliageSnow, depth, scale, mapWaterColor, rain, tags, chunkGenData); } - public BiomeDefinitionData(@Nullable Indexable id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { + public BiomeDefinitionData(@Nullable Integer id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { this(id, temperature, downfall, redSporeDensity, blueSporeDensity, ashDensity, whiteAshDensity, 0, depth, scale, mapWaterColor, rain, tags, chunkGenData); } - private BiomeDefinitionData(@Nullable Indexable id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { + private BiomeDefinitionData(@Nullable Integer id, float temperature, float downfall, float redSporeDensity, float blueSporeDensity, float ashDensity, float whiteAshDensity, float foliageSnow, float depth, float scale, Color mapWaterColor, boolean rain, @Nullable Indexable> tags, @Nullable BiomeDefinitionChunkGenData chunkGenData) { this.id = id; this.temperature = temperature; this.downfall = downfall; @@ -68,13 +70,6 @@ private BiomeDefinitionData(@Nullable Indexable id, float temperature, f this.chunkGenData = chunkGenData; } - public @Nullable String getId() { - if (id == null) { - return null; - } - return id.get(); - } - public @Nullable List getTags() { if (tags == null) { return null; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeNoiseGradientSurfaceData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeNoiseGradientSurfaceData.java new file mode 100644 index 00000000..684c09f2 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeNoiseGradientSurfaceData.java @@ -0,0 +1,16 @@ +package org.cloudburstmc.protocol.bedrock.data.biome; + +import lombok.Value; + +import java.util.List; + +@Value +public class BiomeNoiseGradientSurfaceData { + + List nonReplaceableBlocks; + List gradientBlocks; + // NoiseDescriptor + String noise; // "name" in v1001 or "seed" in v975 + int firstOctave; + List amplitudes; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeSurfaceBuilderData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeSurfaceBuilderData.java new file mode 100644 index 00000000..fcd7a385 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/BiomeSurfaceBuilderData.java @@ -0,0 +1,21 @@ +package org.cloudburstmc.protocol.bedrock.data.biome; + +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; + +@Value +public class BiomeSurfaceBuilderData { + + @Nullable + BiomeSurfaceMaterialData surfaceMaterials; + boolean hasDefaultOverworldSurface; + boolean hasSwampSurface; + boolean hasFrozenOceanSurface; + boolean hasTheEndSurface; + @Nullable + BiomeMesaSurfaceData mesaSurface; + @Nullable + BiomeCappedSurfaceData cappedSurface; + @Nullable + BiomeNoiseGradientSurfaceData noiseGradientSurface; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/NoiseBlockSpecifier.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/NoiseBlockSpecifier.java new file mode 100644 index 00000000..00387921 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/biome/NoiseBlockSpecifier.java @@ -0,0 +1,13 @@ +package org.cloudburstmc.protocol.bedrock.data.biome; + +import lombok.Value; + +@Value +public class NoiseBlockSpecifier { + + String noise; + float threshold; + float rangeMin; + float rangeMax; + int block; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/AimAssistActorPriorityData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/AimAssistActorPriorityData.java new file mode 100644 index 00000000..3d21fd71 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/AimAssistActorPriorityData.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.data.camera; + +import lombok.Value; + +@Value +public class AimAssistActorPriorityData { + + int presetIndex; + int categoryIndex; + int actorIndex; + int priorityValue; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistCategory.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistCategory.java index 874ddae5..daf5e756 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistCategory.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistCategory.java @@ -2,6 +2,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.Data; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.ArrayList; import java.util.List; @@ -12,6 +13,12 @@ public class CameraAimAssistCategory { private List entityPriorities = new ObjectArrayList<>(); private List blockPriorities = new ArrayList<>(); private List blockTagPriorities = new ArrayList<>(); + /** + * @since v897 + */ + private List entityTypeFamiliesPriorities = new ArrayList<>(); + @Nullable private Integer entityDefaultPriorities; + @Nullable private Integer blockDefaultPriorities; } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistPresetDefinition.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistPresetDefinition.java index 5a7dbe52..e43f7498 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistPresetDefinition.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraAimAssistPresetDefinition.java @@ -2,6 +2,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.Data; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.List; @@ -13,23 +14,29 @@ public class CameraAimAssistPresetDefinition { */ private String categories; /** - * @deprecated since v898 + * @deprecated since v897 */ private final List exclusionList = new ObjectArrayList<>(); /** - * @since v898 + * @since v897 */ private final List blockExclusionList = new ObjectArrayList<>(); /** - * @since v898 + * @since v897 */ private final List blockTagExclusionList = new ObjectArrayList<>(); /** - * @since v898 + * @since v897 */ private final List entityExclusionList = new ObjectArrayList<>(); + /** + * @since v897 + */ + private final List entityTypeFamiliesExclusionList = new ObjectArrayList<>(); private final List liquidTargetingList = new ObjectArrayList<>(); private final List itemSettings = new ObjectArrayList<>(); + @Nullable private String defaultItemSettings; + @Nullable private String handSettings; } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraEase.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraEase.java index 67d942c4..3549b7bc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraEase.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraEase.java @@ -37,7 +37,7 @@ public enum CameraEase { EASE_OUT_BOUNCE("out_bounce"), EASE_IN_OUT_BOUNCE("in_out_bounce"); - private static final Map serializeNames = new HashMap<>(); + private static final Map serializeNames = new HashMap<>(values().length); static { for (CameraEase value : values()) { serializeNames.put(value.getSerializeName(), value); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineDefinition.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineDefinition.java new file mode 100644 index 00000000..5ed37bff --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineDefinition.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.data.camera; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class CameraSplineDefinition { + + private String name; + private CameraSplineInstruction instruction; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineInstruction.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineInstruction.java index d8a26a42..faf5baa5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineInstruction.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineInstruction.java @@ -2,7 +2,6 @@ import lombok.AllArgsConstructor; import lombok.Data; -import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import java.util.List; @@ -14,8 +13,29 @@ public class CameraSplineInstruction { private float totalTime; private CameraSplineType type; private List curve; - private List progressKeyFrames; + private List progressKeyFrames; private List rotationOption; + private String splineIdentifier; + private boolean loadFromJson; + + public CameraSplineInstruction(float totalTime, CameraSplineType type, List curve, List progressKeyFrames, List rotationOption) { + this.totalTime = totalTime; + this.type = type; + this.curve = curve; + this.progressKeyFrames = progressKeyFrames; + this.rotationOption = rotationOption; + this.splineIdentifier = ""; + this.loadFromJson = false; + } + + @Data + @AllArgsConstructor + public static class SplineProgressOption { + + private float value; + private float time; + private CameraEase ease; + } @Data @AllArgsConstructor @@ -23,5 +43,6 @@ public static class SplineRotationOption { private Vector3f keyFrameValues; private float keyFrameTimes; + private CameraEase ease; } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineType.java index ead885f3..efb125a8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraSplineType.java @@ -1,7 +1,31 @@ package org.cloudburstmc.protocol.bedrock.data.camera; +import java.util.HashMap; +import java.util.Map; + public enum CameraSplineType { - CATMULL_ROM, - LINEAR + CATMULL_ROM("catmullrom"), + LINEAR("linear"); + + private static final Map serializeNames = new HashMap<>(values().length); + static { + for (CameraSplineType value : values()) { + serializeNames.put(value.getSerializeName(), value); + } + } + + private final String serializeName; + + CameraSplineType(String serializeName) { + this.serializeName = serializeName; + } + + public String getSerializeName() { + return this.serializeName; + } + + public static CameraSplineType fromName(String serializeName) { + return serializeNames.get(serializeName); + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/AddTimeMarkerData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/AddTimeMarkerData.java new file mode 100644 index 00000000..c160df04 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/AddTimeMarkerData.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +import lombok.Value; + +import java.util.List; + +@Value +public class AddTimeMarkerData implements SyncWorldClocksPayload { + + long clockId; + List timeMarkers; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/InitializeRegistryData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/InitializeRegistryData.java new file mode 100644 index 00000000..73a21f42 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/InitializeRegistryData.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +import lombok.Value; + +import java.util.List; + +@Value +public class InitializeRegistryData implements SyncWorldClocksPayload { + + List clockData; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/RemoveTimeMarkerData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/RemoveTimeMarkerData.java new file mode 100644 index 00000000..d9079063 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/RemoveTimeMarkerData.java @@ -0,0 +1,13 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +import lombok.Value; + +import java.util.ArrayList; +import java.util.List; + +@Value +public class RemoveTimeMarkerData implements SyncWorldClocksPayload { + + long clockId; + List timeMarkerIds = new ArrayList<>(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncStateData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncStateData.java new file mode 100644 index 00000000..3e856461 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncStateData.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +import lombok.Value; + +import java.util.List; + +@Value +public class SyncStateData implements SyncWorldClocksPayload { + + List clockData; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClockStateData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClockStateData.java new file mode 100644 index 00000000..f47e2ea3 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClockStateData.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + + +import lombok.Value; + +@Value +public class SyncWorldClockStateData { + + long clockId; + int time; + boolean paused; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClocksPayload.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClocksPayload.java new file mode 100644 index 00000000..8e492d47 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/SyncWorldClocksPayload.java @@ -0,0 +1,5 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +public interface SyncWorldClocksPayload { + +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/TimeMarkerData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/TimeMarkerData.java new file mode 100644 index 00000000..7b0aa193 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/TimeMarkerData.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + +import lombok.Value; + +@Value +public class TimeMarkerData { + + long id; + String name; + int time; + Integer period; // changelog says required but whatever +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/WorldClockData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/WorldClockData.java new file mode 100644 index 00000000..eab65f9a --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/clock/WorldClockData.java @@ -0,0 +1,15 @@ +package org.cloudburstmc.protocol.bedrock.data.clock; + + +import lombok.Value; + +import java.util.List; + +@Value +public class WorldClockData { + long id; + String name; + int time; + boolean paused; + List timeMarkers; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java index 26b0452b..0849debb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParam.java @@ -17,9 +17,9 @@ public class CommandParam { public static final CommandParam OPERATOR = new CommandParam(CommandParamType.OPERATOR); public static final CommandParam COMPARE_OPERATOR = new CommandParam(CommandParamType.COMPARE_OPERATOR); public static final CommandParam TARGET = new CommandParam(CommandParamType.TARGET); - public static final CommandParam UNKNOWN_STANDALONE = new CommandParam(CommandParamType.UNKNOWN_STANDALONE); + public static final CommandParam STANDALONE_TARGET = new CommandParam(CommandParamType.STANDALONE_TARGET); public static final CommandParam WILDCARD_TARGET = new CommandParam(CommandParamType.WILDCARD_TARGET); - public static final CommandParam UNKNOWN_NON_ID = new CommandParam(CommandParamType.UNKNOWN_NON_ID); + public static final CommandParam NON_ID_TARGET = new CommandParam(CommandParamType.NON_ID_TARGET); public static final CommandParam SCORE_ARG = new CommandParam(CommandParamType.SCORE_ARG); public static final CommandParam SCORE_ARGS = new CommandParam(CommandParamType.SCORE_ARGS); public static final CommandParam SCORE_SELECT_PARAM = new CommandParam(CommandParamType.SCORE_SELECT_PARAM); @@ -32,6 +32,10 @@ public class CommandParam { public static final CommandParam INT_RANGE_POST_VAL = new CommandParam(CommandParamType.INT_RANGE_POST_VAL); public static final CommandParam INT_RANGE = new CommandParam(CommandParamType.INT_RANGE); public static final CommandParam INT_RANGE_FULL = new CommandParam(CommandParamType.INT_RANGE_FULL); + public static final CommandParam RATIONAL_RANGE_VAL = new CommandParam(CommandParamType.RATIONAL_RANGE_VAL); + public static final CommandParam RATIONAL_RANGE_POST_VAL = new CommandParam(CommandParamType.RATIONAL_RANGE_POST_VAL); + public static final CommandParam RATIONAL_RANGE = new CommandParam(CommandParamType.RATIONAL_RANGE); + public static final CommandParam RATIONAL_RANGE_FULL = new CommandParam(CommandParamType.RATIONAL_RANGE_FULL); public static final CommandParam SEL_ARGS = new CommandParam(CommandParamType.SEL_ARGS); public static final CommandParam ARGS = new CommandParam(CommandParamType.ARGS); public static final CommandParam ARG = new CommandParam(CommandParamType.ARG); @@ -52,6 +56,14 @@ public class CommandParam { public static final CommandParam HAS_ITEMS = new CommandParam(CommandParamType.HAS_ITEMS); public static final CommandParam HAS_ITEM_SELECTOR = new CommandParam(CommandParamType.HAS_ITEM_SELECTOR); public static final CommandParam EQUIPMENT_SLOTS = new CommandParam(CommandParamType.EQUIPMENT_SLOTS); + public static final CommandParam PROPERTY_VALUE = new CommandParam(CommandParamType.PROPERTY_VALUE); + public static final CommandParam HAS_PROPERTY_PARAM_VALUE = new CommandParam(CommandParamType.HAS_PROPERTY_PARAM_VALUE); + public static final CommandParam HAS_PROPERTY_PARAM_ENUM_VALUE = new CommandParam(CommandParamType.HAS_PROPERTY_PARAM_ENUM_VALUE); + public static final CommandParam HAS_PROPERTY_ARG = new CommandParam(CommandParamType.HAS_PROPERTY_ARG); + public static final CommandParam HAS_PROPERTY_ARGS = new CommandParam(CommandParamType.HAS_PROPERTY_ARGS); + public static final CommandParam HAS_PROPERTY_ELEMENT = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENT); + public static final CommandParam HAS_PROPERTY_ELEMENTS = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENTS); + public static final CommandParam HAS_PROPERTY_SELECTOR = new CommandParam(CommandParamType.HAS_PROPERTY_SELECTOR); public static final CommandParam STRING = new CommandParam(CommandParamType.STRING); public static final CommandParam ID_CONT = new CommandParam(CommandParamType.ID_CONT); public static final CommandParam COORD_X_INT = new CommandParam(CommandParamType.COORD_X_INT); @@ -82,21 +94,10 @@ public class CommandParam { public static final CommandParam BLOCK_STATE_VALUES = new CommandParam(CommandParamType.BLOCK_STATE_VALUES); public static final CommandParam BLOCK_STATES = new CommandParam(CommandParamType.BLOCK_STATES); public static final CommandParam BLOCK_STATES_CONT = new CommandParam(CommandParamType.BLOCK_STATES_CONT); + public static final CommandParam CLOCK_TIME_MARKER_NAME = new CommandParam(CommandParamType.CLOCK_TIME_MARKER_NAME); public static final CommandParam COMMAND = new CommandParam(CommandParamType.COMMAND); public static final CommandParam SLASH_COMMAND = new CommandParam(CommandParamType.SLASH_COMMAND); public static final CommandParam CHAINED_COMMAND = new CommandParam(CommandParamType.CHAINED_COMMAND); - public static final CommandParam RATIONAL_RANGE_VAL = new CommandParam(CommandParamType.RATIONAL_RANGE_VAL); - public static final CommandParam RATIONAL_RANGE_POST_VAL = new CommandParam(CommandParamType.RATIONAL_RANGE_POST_VAL); - public static final CommandParam RATIONAL_RANGE = new CommandParam(CommandParamType.RATIONAL_RANGE); - public static final CommandParam RATIONAL_RANGE_FULL = new CommandParam(CommandParamType.RATIONAL_RANGE_FULL); - public static final CommandParam PROPERTY_VALUE = new CommandParam(CommandParamType.PROPERTY_VALUE); - public static final CommandParam HAS_PROPERTY_PARAM_VALUE = new CommandParam(CommandParamType.HAS_PROPERTY_PARAM_VALUE); - public static final CommandParam HAS_PROPERTY_PARAM_ENUM_VALUE = new CommandParam(CommandParamType.HAS_PROPERTY_PARAM_ENUM_VALUE); - public static final CommandParam HAS_PROPERTY_ARG = new CommandParam(CommandParamType.HAS_PROPERTY_ARG); - public static final CommandParam HAS_PROPERTY_ARGS = new CommandParam(CommandParamType.HAS_PROPERTY_ARGS); - public static final CommandParam HAS_PROPERTY_ELEMENT = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENT); - public static final CommandParam HAS_PROPERTY_ELEMENTS = new CommandParam(CommandParamType.HAS_PROPERTY_ELEMENTS); - public static final CommandParam HAS_PROPERTY_SELECTOR = new CommandParam(CommandParamType.HAS_PROPERTY_SELECTOR); public static final CommandParam CODE_BUILDER_ARG = new CommandParam(CommandParamType.CODE_BUILDER_ARG); public static final CommandParam CODE_BUILDER_ARGS = new CommandParam(CommandParamType.CODE_BUILDER_ARGS); public static final CommandParam CODE_BUILDER_SELECT_PARAM = new CommandParam(CommandParamType.CODE_BUILDER_SELECT_PARAM); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java index a8728054..5c52f494 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/command/CommandParamType.java @@ -5,91 +5,96 @@ public enum CommandParamType { INT, FLOAT, VALUE, - R_VALUE, // TODO: unknown + R_VALUE, WILDCARD_INT, OPERATOR, COMPARE_OPERATOR, - TARGET, - UNKNOWN_STANDALONE,// TODO: unknown - STANDALONESELECTION + TARGET, // selection + STANDALONE_TARGET, WILDCARD_TARGET, - UNKNOWN_NON_ID,// TODO: unknown - NONIDSELECTION + NON_ID_TARGET, SCORE_ARG, SCORE_ARGS, SCORE_SELECT_PARAM, SCORE_SELECTOR, TAG_SELECTOR, FILE_PATH, - FILE_PATH_VAL, // TODO: unknown - FILE_PATH_CONT, // TODO: unknown - INT_RANGE_VAL, // TODO: unknown - INT_RANGE_POST_VAL, // TODO: unknown + FILE_PATH_VAL, + FILE_PATH_CONT, + INT_RANGE_VAL, + INT_RANGE_POST_VAL, INT_RANGE, INT_RANGE_FULL, - SEL_ARGS, // TODO: unknown + RATIONAL_RANGE_VAL, + RATIONAL_RANGE_POST_VAL, + RATIONAL_RANGE, + RATIONAL_RANGE_FULL, + SEL_ARGS, ARGS, ARG, - MARG, // TODO: unknown - MVALUE, // TODO: unknown - NAME, // TODO: unknown - TYPE, // TODO: unknown - FAMILY, // TODO: unknown + MARG, + MVALUE, + NAME, + TYPE, + FAMILY, PERMISSION, PERMISSIONS, PERMISSION_SELECTOR, PERMISSION_ELEMENT, PERMISSION_ELEMENTS, TAG, - HAS_ITEM_ELEMENT, // TODO: unknown - HAS_ITEM_ELEMENTS, // TODO: unknown - HAS_ITEM, // TODO: unknown - HAS_ITEMS, // TODO: unknown - HAS_ITEM_SELECTOR, // TODO: unknown + HAS_ITEM_ELEMENT, + HAS_ITEM_ELEMENTS, + HAS_ITEM, + HAS_ITEMS, + HAS_ITEM_SELECTOR, EQUIPMENT_SLOTS, - STRING, - ID_CONT, // TODO: unknown + PROPERTY_VALUE, + HAS_PROPERTY_PARAM_VALUE, + HAS_PROPERTY_PARAM_ENUM_VALUE, + HAS_PROPERTY_ARG, + HAS_PROPERTY_ARGS, + HAS_PROPERTY_ELEMENT, + HAS_PROPERTY_ELEMENTS, + HAS_PROPERTY_SELECTOR, + STRING, // id + ID, + ID_CONT, COORD_X_INT, COORD_Y_INT, COORD_Z_INT, COORD_X_FLOAT, COORD_Y_FLOAT, COORD_Z_FLOAT, - BLOCK_POSITION, // POSITION_INT - POSITION, // POSITION_FLOAT - MESSAGE_XP, // TODO: unknown + BLOCK_POSITION, // int position + POSITION, // float position + MESSAGE_XP, MESSAGE, - MESSAGE_ROOT, // TODO: unknown + MESSAGE_ROOT, POST_SELECTOR, - TEXT, - TEXT_CONT, // TODO: unknown + TEXT, // raw text + TEXT_CONT, JSON_VALUE, JSON_FIELD, - JSON, + JSON, // json object JSON_OBJECT_FIELDS, - JSON_OBJECT_CONT, // TODO: unknown - maybe count? + JSON_OBJECT_CONT, JSON_ARRAY, JSON_ARRAY_VALUES, - JSON_ARRAY_CONT, // TODO: unknown - maybe count? + JSON_ARRAY_CONT, BLOCK_STATE, BLOCK_STATE_KEY, BLOCK_STATE_VALUE, BLOCK_STATE_VALUES, BLOCK_STATES, - BLOCK_STATES_CONT, // TODO: unknown - maybe count? + BLOCK_STATES_CONT, + /** + * @since v975 + */ + CLOCK_TIME_MARKER_NAME, COMMAND, SLASH_COMMAND, CHAINED_COMMAND, - RATIONAL_RANGE_VAL, - RATIONAL_RANGE_POST_VAL, - RATIONAL_RANGE, - RATIONAL_RANGE_FULL, - PROPERTY_VALUE, - HAS_PROPERTY_PARAM_VALUE, - HAS_PROPERTY_PARAM_ENUM_VALUE, - HAS_PROPERTY_ARG, - HAS_PROPERTY_ARGS, - HAS_PROPERTY_ELEMENT, - HAS_PROPERTY_ELEMENTS, - HAS_PROPERTY_SELECTOR, CODE_BUILDER_ARG, CODE_BUILDER_ARGS, CODE_BUILDER_SELECT_PARAM, diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreAction.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreAction.java new file mode 100644 index 00000000..fd474e48 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreAction.java @@ -0,0 +1,6 @@ +package org.cloudburstmc.protocol.bedrock.data.datastore; + +public interface DataStoreAction { + + int getType(); +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreChange.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreChange.java new file mode 100644 index 00000000..43512dc4 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreChange.java @@ -0,0 +1,17 @@ +package org.cloudburstmc.protocol.bedrock.data.datastore; + +import lombok.Data; + +@Data +public class DataStoreChange implements DataStoreAction { + + private String dataStoreName; + private String property; + private Object newValue; + private int updateCount; + + @Override + public int getType() { + return 1; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreRemoval.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreRemoval.java new file mode 100644 index 00000000..2c26e68e --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreRemoval.java @@ -0,0 +1,14 @@ +package org.cloudburstmc.protocol.bedrock.data.datastore; + +import lombok.Data; + +@Data +public class DataStoreRemoval implements DataStoreAction { + + private String dataStoreName; + + @Override + public int getType() { + return 2; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreUpdate.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreUpdate.java new file mode 100644 index 00000000..cdb32252 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/datastore/DataStoreUpdate.java @@ -0,0 +1,19 @@ +package org.cloudburstmc.protocol.bedrock.data.datastore; + +import lombok.Data; + +@Data +public class DataStoreUpdate implements DataStoreAction { + + private String dataStoreName; + private String property; + private String path; + private Object data; + private int updateCount; + private int pathUpdateCount; + + @Override + public int getType() { + return 0; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugArrow.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugArrow.java index 660f3d7a..35fd1dde 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugArrow.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugArrow.java @@ -1,31 +1,46 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data +@AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class DebugArrow extends DebugShape { - @Nullable Vector3f arrowEndPosition; - @Nullable Float arrowHeadLength; - @Nullable Float arrowHeadRadius; - @Nullable Integer arrowHeadSegments; - public DebugArrow(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, @Nullable Vector3f arrowEndPosition, @Nullable Float arrowHeadLength, @Nullable Float arrowHeadRadius, @Nullable Integer arrowHeadSegments) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.arrowEndPosition = arrowEndPosition; - this.arrowHeadLength = arrowHeadLength; - this.arrowHeadRadius = arrowHeadRadius; - this.arrowHeadSegments = arrowHeadSegments; + public DebugArrow() { + } + + @Deprecated + public DebugArrow(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f arrowEndPosition, Float arrowHeadLength, Float arrowHeadRadius, Integer arrowHeadSegments) { + this(id, dimension, position, scale, rotation, totalTimeLeft, color, arrowEndPosition, arrowHeadLength, arrowHeadRadius, arrowHeadSegments, null); + } + + @Deprecated + public DebugArrow(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f arrowEndPosition, Float arrowHeadLength, Float arrowHeadRadius, Integer arrowHeadSegments, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setArrowEndPosition(arrowEndPosition); + setArrowHeadLength(arrowHeadLength); + setArrowHeadRadius(arrowHeadRadius); + setArrowHeadSegments(arrowHeadSegments); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugBox.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugBox.java index 8ad467c5..95f9657e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugBox.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugBox.java @@ -1,21 +1,40 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data +@AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class DebugBox extends DebugShape { Vector3f boxBounds; + public DebugBox() { + } + + @Deprecated public DebugBox(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f boxBounds) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.boxBounds = boxBounds; + this(id, dimension, position, scale, rotation, totalTimeLeft, color, boxBounds, null); + } + + @Deprecated + public DebugBox(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f boxBounds, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setBoxBounds(boxBounds); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCircle.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCircle.java index 2c664cd4..060f667b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCircle.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCircle.java @@ -1,21 +1,40 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data +@AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class DebugCircle extends DebugShape { Integer segments; + public DebugCircle() { + } + + @Deprecated public DebugCircle(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Integer segments) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.segments = segments; + this(id, dimension, position, scale, rotation, totalTimeLeft, color, segments, null); + } + + @Deprecated + public DebugCircle(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Integer segments, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setSegments(segments); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCone.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCone.java new file mode 100644 index 00000000..9d5e1528 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCone.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.data.debugshape; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.cloudburstmc.math.vector.Vector2f; + +/** + * @since v1001 + */ +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DebugCone extends DebugShape { + + float height; + int segments; + Vector2f radii; + + public DebugCone() { + } + + @Override + public Type getType() { + return Type.CONE; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCylinder.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCylinder.java new file mode 100644 index 00000000..3eecfb90 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugCylinder.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.data.debugshape; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.cloudburstmc.math.vector.Vector2f; + +/** + * @since v1001 + */ +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DebugCylinder extends DebugShape { + + float height; + int segments; + Vector2f radiusX; + Vector2f radiusZ; + + public DebugCylinder() { + } + + @Override + public Type getType() { + return Type.CYLINDER; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugEllipsoid.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugEllipsoid.java new file mode 100644 index 00000000..fe369c7b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugEllipsoid.java @@ -0,0 +1,26 @@ +package org.cloudburstmc.protocol.bedrock.data.debugshape; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.cloudburstmc.math.vector.Vector3f; + +/** + * @since v1001 + */ +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DebugEllipsoid extends DebugShape { + + int segments; + Vector3f radii; + + public DebugEllipsoid() { + } + + @Override + public Type getType() { + return Type.ELLIPSOID; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugLine.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugLine.java index 70d9f72c..5fef4376 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugLine.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugLine.java @@ -1,21 +1,40 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data +@AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class DebugLine extends DebugShape { Vector3f lineEndPosition; + public DebugLine() { + } + + @Deprecated public DebugLine(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f lineEndPosition) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.lineEndPosition = lineEndPosition; + this(id, dimension, position, scale, rotation, totalTimeLeft, color, lineEndPosition, null); + } + + @Deprecated + public DebugLine(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Vector3f lineEndPosition, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setLineEndPosition(lineEndPosition); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugPyramid.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugPyramid.java new file mode 100644 index 00000000..ea47fee0 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugPyramid.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.data.debugshape; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.checkerframework.checker.nullness.qual.Nullable; + +/** + * @since v1001 + */ +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DebugPyramid extends DebugShape { + + float height; + float width; + @Nullable + Float depth; + + public DebugPyramid() { + } + + @Override + public Type getType() { + return Type.PYRAMID; + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugShape.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugShape.java index f659e2bf..761864a5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugShape.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugShape.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.Getter; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; @@ -8,32 +9,41 @@ import java.awt.*; @Getter +@Data @AllArgsConstructor public class DebugShape { - private final long id; + private long id; /** * @since v859 */ - private final int dimension; + private int dimension; @Nullable - private final Vector3f position; + private Vector3f position; @Nullable - private final Float scale; + private Float scale; @Nullable - private final Vector3f rotation; + private Vector3f rotation; @Nullable - private final Float totalTimeLeft; + private Float totalTimeLeft; @Nullable - private final Color color; + private Color color; + @Nullable + private Long attachedToEntityId; + @Nullable + private Float maximumRenderDistance; + + public DebugShape() { + } public DebugShape(long id) { - this(id, 0, null, null, null, null, null); + this(id, 0); } public DebugShape(long id, int dimension) { - this(id, dimension, null, null, null, null, null); + this.id = id; + this.dimension = dimension; } public Type getType() { @@ -46,6 +56,22 @@ public enum Type { SPHERE, CIRCLE, TEXT, - ARROW + ARROW, + /** + * @since v1001 + */ + CYLINDER, + /** + * @since v1001 + */ + PYRAMID, + /** + * @since v1001 + */ + ELLIPSOID, + /** + * @since v1001 + */ + CONE } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugSphere.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugSphere.java index 786ce934..7b1e523a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugSphere.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugSphere.java @@ -1,21 +1,40 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data +@AllArgsConstructor @EqualsAndHashCode(callSuper = true) public class DebugSphere extends DebugShape { Integer segments; + public DebugSphere() { + } + + @Deprecated public DebugSphere(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Integer segments) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.segments = segments; + this(id, dimension, position, scale, rotation, totalTimeLeft, color, segments, null); + } + + @Deprecated + public DebugSphere(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, Integer segments, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setSegments(segments); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugText.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugText.java index 874a0384..83539ddc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugText.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/debugshape/DebugText.java @@ -1,21 +1,59 @@ package org.cloudburstmc.protocol.bedrock.data.debugshape; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import java.awt.*; -@Value +@Data @EqualsAndHashCode(callSuper = true) public class DebugText extends DebugShape { String text; + /** + * @since v975 + */ + boolean useRotation; + /** + * @since v975 + */ + @Nullable + Color backgroundColor; + /** + * @since v975 + */ + boolean depthTest; + /** + * @since v975 + */ + boolean showBackface; + /** + * @since v975 + */ + boolean showTextBackface; + public DebugText() { + } + + @Deprecated public DebugText(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, String text) { - super(id, dimension, position, scale, rotation, totalTimeLeft, color); - this.text = text; + this(id, dimension, position, scale, rotation, totalTimeLeft, color, text, null); + } + + @Deprecated + public DebugText(long id, int dimension, @Nullable Vector3f position, @Nullable Float scale, @Nullable Vector3f rotation, @Nullable Float totalTimeLeft, @Nullable Color color, String text, @Nullable Long attachedToEntityId) { + setId(id); + setDimension(dimension); + setPosition(position); + setScale(scale); + setRotation(rotation); + setTotalTimeLeft(totalTimeLeft); + setColor(color); + setAttachedToEntityId(attachedToEntityId); + + setText(text); } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/definitions/DimensionDefinition.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/definitions/DimensionDefinition.java index 50d4762a..56004e22 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/definitions/DimensionDefinition.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/definitions/DimensionDefinition.java @@ -8,4 +8,8 @@ public class DimensionDefinition { int maximumHeight; int minimumHeight; int generatorType; + /** + * @since v975 + */ + int dimensionType; } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/EntityDiagnosticTimingInfo.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/EntityDiagnosticTimingInfo.java new file mode 100644 index 00000000..df605145 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/EntityDiagnosticTimingInfo.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.diagnostics; + +import lombok.Value; + +@Value +public class EntityDiagnosticTimingInfo { + String displayName; + String entity; + long timeInNs; + byte percentOfTotal; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/MemoryCategoryCounter.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/MemoryCategoryCounter.java new file mode 100644 index 00000000..8ee3f478 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/MemoryCategoryCounter.java @@ -0,0 +1,139 @@ +package org.cloudburstmc.protocol.bedrock.data.diagnostics; + +import lombok.Data; + +@Data +public class MemoryCategoryCounter { + + private final Category category; + private final long currentBytes; + + public enum Category { + + UNKNOWN, + INVALID_SIZE_UNKNOWN, + ACTOR, + ACTOR_ANIMATION, + ACTOR_RENDERING, + BALANCER, + BLOCK_TICKING_QUEUES, + BIOME_STORAGE, + CEREAL, + CIRCUIT_SYSTEM, + CLIENT, + COMMANDS, + DB_STORAGE, + DEBUG, + DOCUMENTATION, + ECS_SYSTEMS, + FMOD, + FONTS, + IM_GUI, + INPUT, + JSON_UI, + JSON_UI_CONTROL_FACTORY_JSON, + JSON_UI_CONTROL_TREE, + JSON_UI_CONTROL_TREE_CONTROL_ELEMENT, + JSON_UI_CONTROL_TREE_POPULATE_DATA_BINDING, + JSON_UI_CONTROL_TREE_POPULATE_FOCUS, + JSON_UI_CONTROL_TREE_POPULATE_LAYOUT, + JSON_UI_CONTROL_TREE_POPULATE_OTHER, + JSON_UI_CONTROL_TREE_POPULATE_SPRITE, + JSON_UI_CONTROL_TREE_POPULATE_TEXT, + JSON_UI_CONTROL_TREE_POPULATE_TTS, + JSON_UI_CONTROL_TREE_VISIBILITY, + JSON_UI_CREATE_UI, + JSON_UI_DEFS, + JSON_UI_LAYOUT_MANAGER, + JSON_UI_LAYOUT_MANAGER_REMOVE_DEPENDENCIES, + JSON_UI_LAYOUT_MANAGER_INIT_VARIABLE, + LANGUAGES, + LEVEL, + LEVEL_STRUCTURES, + LEVEL_CHUNK, + LEVEL_CHUNK_GEN, + LEVEL_CHUNK_GEN_THREAD_LOCAL, + NETWORK, + MARKETPLACE, + MATERIAL_DRAGON_COMPILED_DEFINITION, + MATERIAL_DRAGON_MATERIAL, + MATERIAL_DRAGON_RESOURCE, + MATERIAL_DRAGON_UNIFORM_MAP, + MATERIAL_RENDER_MATERIAL, + MATERIAL_RENDER_MATERIAL_GROUP, + MATERIAL_VARIATION_MANAGER, + MOLANG, + ORE_UI, + PERSONA, + PLAYER, + RENDER_CHUNK, + RENDER_CHUNK_INDEX_BUFFER, + RENDER_CHUNK_VERTEX_BUFFER, + RENDERING, + RENDERING_LIBRARY, + REQUEST_LOG, + RESOURCE_PACKS, + SOUND, + SUB_CHUNK_BIOME_DATA, + SUB_CHUNK_BLOCK_DATA, + SUB_CHUNK_LIGHT_DATA, + TEXTURES, + VR, + WEATHER_RENDERER, + WORLD_GENERATOR, + TASKS, + TEST, + SCRIPTING, + SCRIPTING_RUNTIME, + SCRIPTING_CONTEXT, + SCRIPTING_CONTEXT_BINDINGS_MC, + SCRIPTING_CONTEXT_BINDINGS_GT, + SCRIPTING_CONTEXT_RUN, + DATA_DRIVEN_UI, + DATA_DRIVEN_UI_DEFS, + /** + * @since v944 + */ + GAMEFACE, + /** + * @since v944 + */ + GAMEFACE_SYSTEM, + /** + * @since v944 + */ + GAMEFACE_DOM, + /** + * @since v944 + */ + GAMEFACE_CSS, + /** + * @since v944 + */ + GAMEFACE_DISPLAY, + /** + * @since v944 + */ + GAMEFACE_TEMP_ALLOCATOR, + /** + * @since v944 + */ + GAMEFACE_POOL_ALLOCATOR, + /** + * @since v944 + */ + GAMEFACE_DUMP, + /** + * @since v944 + */ + GAMEFACE_MEDIA, + /** + * @since v944 + */ + GAMEFACE_JSON, + /** + * @since v944 + */ + GAMEFACE_SCRIPT_ENGINE, + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/SystemDiagnosticTimingInfo.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/SystemDiagnosticTimingInfo.java new file mode 100644 index 00000000..01d2ef22 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/SystemDiagnosticTimingInfo.java @@ -0,0 +1,11 @@ +package org.cloudburstmc.protocol.bedrock.data.diagnostics; + +import lombok.Value; + +@Value +public class SystemDiagnosticTimingInfo { + String displayName; + long systemIndex; + long timeInNs; + byte percentOfTotal; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/WhiskerScopeDataSummary.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/WhiskerScopeDataSummary.java new file mode 100644 index 00000000..26cd4199 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/diagnostics/WhiskerScopeDataSummary.java @@ -0,0 +1,13 @@ +package org.cloudburstmc.protocol.bedrock.data.diagnostics; + +import lombok.Value; + +@Value +public class WhiskerScopeDataSummary { + + String label; + String indentation; + long totalHighCostNS; + long totalMidCostNS; + long totalLowCostNS; +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDamageCause.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDamageCause.java index 4d203a2c..435e4e98 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDamageCause.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDamageCause.java @@ -1,6 +1,7 @@ package org.cloudburstmc.protocol.bedrock.data.entity; public enum EntityDamageCause { + NONE, OVERRIDE, CONTACT, ENTITY_ATTACK, @@ -31,6 +32,8 @@ public enum EntityDamageCause { FREEZING, STALACTITE, STALAGMITE, + RAM_ATTACK, + SONIC_BOOM, CAMPFIRE, SOUL_CAMPFIRE, /** diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java index e6174181..a3513bb5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityDataTypes.java @@ -8,9 +8,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import java.util.EnumMap; -import java.util.EnumSet; import java.util.Map; -import java.util.Set; @UtilityClass public class EntityDataTypes { @@ -303,4 +301,27 @@ public boolean isInstance(Object value) { * @since v800 */ public static final EntityDataType SEAT_CAMERA_RELAX_DISTANCE_SMOOTHING = new EntityDataType<>(Float.class, "SEAT_CAMERA_RELAX_DISTANCE_SMOOTHING"); + /** + * @since v924 + */ + public static final EntityDataType AIM_ASSIST_PRIORITY_PRESET_ID = new EntityDataType<>(Integer.class, "AIM_ASSIST_PRIORITY_PRESET_ID"); + /** + * @since v924 + */ + public static final EntityDataType AIM_ASSIST_PRIORITY_CATEGORY_ID = new EntityDataType<>(Integer.class, "AIM_ASSIST_PRIORITY_CATEGORY_ID"); + /** + * @since v924 + */ + public static final EntityDataType AIM_ASSIST_PRIORITY_ACTOR_ID = new EntityDataType<>(Integer.class, "AIM_ASSIST_PRIORITY_ACTOR_ID"); + public static final EntityDataType ARROW_SHOOTER_ID = new EntityDataType<>(Long.class, "ARROW_SHOOTER_ID"); + public static final EntityDataType FIREWORK_SHOOTER_ID = new EntityDataType<>(Long.class, "FIREWORK_SHOOTER_ID"); + public static final EntityDataType FIREWORK_DIRECTION = new EntityDataType<>(Vector3f.class, "FIREWORK_DIRECTION"); + /** + * @since v975 + */ + public static final EntityDataType RESERVED_139 = new EntityDataType<>(Long.class, "RESERVED_139"); + /** + * @since v975 + */ + public static final EntityDataType NAMEPLATE_RENDER_DISTANCE_MAX = new EntityDataType<>(Float.class, "NAMEPLATE_RENDER_DISTANCE_MAX"); } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityEventType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityEventType.java index ca44b781..cdc0dec0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityEventType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityEventType.java @@ -77,7 +77,11 @@ public enum EntityEventType { */ SHAKE_WETNESS_STOP, /** - * @since v898 + * @since v897 */ - KINETIC_DAMAGE_DEALT + KINETIC_DAMAGE_DEALT, + /** + * @since v975 + */ + HURT_WITHOUT_RECEIVING_DAMAGE } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityFlag.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityFlag.java index 9def36d9..746a101b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityFlag.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityFlag.java @@ -182,5 +182,17 @@ public enum EntityFlag { /** * @since v859 */ - BODY_ROTATION_LOCKED_TO_VEHICLE + BODY_ROTATION_LOCKED_TO_VEHICLE, + /** + * @since v975 + */ + USES_LEGACY_FRICTION, + /** + * @since v975 + */ + USES_UNIFORM_AIR_DRAG, + /** + * @since v975 + */ + NAMEPLATE_DEPTH_TESTED, } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AchievementAwardedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AchievementAwardedEventData.java index 029b5842..e493d619 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AchievementAwardedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AchievementAwardedEventData.java @@ -10,4 +10,9 @@ public class AchievementAwardedEventData implements EventData { public EventDataType getType() { return EventDataType.ACHIEVEMENT_AWARDED; } + + @Override + public int getPayloadType() { + return 0; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCommandEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCommandEventData.java index f22b9473..cd894648 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCommandEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCommandEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class AgentCommandEventData implements EventData { private final AgentResult result; private final String command; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCreatedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCreatedEventData.java index 02d50f68..14c37420 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCreatedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/AgentCreatedEventData.java @@ -4,6 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Deprecated public class AgentCreatedEventData implements EventData { public static final AgentCreatedEventData INSTANCE = new AgentCreatedEventData(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BellUsedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BellUsedEventData.java index 2786e0e2..e2f05ce1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BellUsedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BellUsedEventData.java @@ -10,4 +10,9 @@ public class BellUsedEventData implements EventData { public EventDataType getType() { return EventDataType.BELL_USED; } + + @Override + public int getPayloadType() { + return 12; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BossKilledEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BossKilledEventData.java index 02e69ef1..9d79d49c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BossKilledEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/BossKilledEventData.java @@ -12,4 +12,9 @@ public class BossKilledEventData implements EventData { public EventDataType getType() { return EventDataType.BOSS_KILLED; } + + @Override + public int getPayloadType() { + return 7; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CarefulRestorationEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CarefulRestorationEventData.java index 6f2e9951..c068ea1a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CarefulRestorationEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CarefulRestorationEventData.java @@ -4,6 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Deprecated public class CarefulRestorationEventData implements EventData { public static final CarefulRestorationEventData INSTANCE = new CarefulRestorationEventData(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronInteractEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronInteractEventData.java index 8deff4f6..68bfdb78 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronInteractEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronInteractEventData.java @@ -12,4 +12,9 @@ public class CauldronInteractEventData implements EventData { public EventDataType getType() { return EventDataType.CAULDRON_INTERACT; } + + @Override + public int getPayloadType() { + return 10; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronUsedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronUsedEventData.java index 914d70d0..89a4952d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronUsedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CauldronUsedEventData.java @@ -12,4 +12,9 @@ public class CauldronUsedEventData implements EventData { public EventDataType getType() { return EventDataType.CAULDRON_USED; } + + @Override + public int getPayloadType() { + return 5; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderActionEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderActionEventData.java index 7de31df1..dcd7c200 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderActionEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderActionEventData.java @@ -10,4 +10,9 @@ public class CodeBuilderActionEventData implements EventData { public EventDataType getType() { return EventDataType.CODE_BUILDER_ACTION; } + + @Override + public int getPayloadType() { + return 18; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderScoreboardEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderScoreboardEventData.java index f7cf0cc2..278acc92 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderScoreboardEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CodeBuilderScoreboardEventData.java @@ -11,4 +11,9 @@ public class CodeBuilderScoreboardEventData implements EventData { public EventDataType getType() { return EventDataType.CODE_BUILDER_SCOREBOARD; } + + @Override + public int getPayloadType() { + return 19; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ComposterInteractEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ComposterInteractEventData.java index cb9fd170..e2e0c992 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ComposterInteractEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ComposterInteractEventData.java @@ -12,4 +12,9 @@ public class ComposterInteractEventData implements EventData { public EventDataType getType() { return EventDataType.COMPOSTER_INTERACT; } + + @Override + public int getPayloadType() { + return 11; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CopperWaxedOrUnwaxedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CopperWaxedOrUnwaxedEventData.java index 352b04bc..4ab974ef 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CopperWaxedOrUnwaxedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/CopperWaxedOrUnwaxedEventData.java @@ -11,4 +11,9 @@ public class CopperWaxedOrUnwaxedEventData implements EventData { public EventDataType getType() { return EventDataType.COPPER_WAXED_OR_UNWAXED; } + + @Override + public int getPayloadType() { + return 17; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityDefinitionTriggerEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityDefinitionTriggerEventData.java index 1eaacbb1..e0bbb3c5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityDefinitionTriggerEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityDefinitionTriggerEventData.java @@ -10,4 +10,9 @@ public class EntityDefinitionTriggerEventData implements EventData { public EventDataType getType() { return EventDataType.ENTITY_DEFINITION_TRIGGER; } + + @Override + public int getPayloadType() { + return 13; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityInteractEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityInteractEventData.java index 4ac7c984..6547dbcc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityInteractEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EntityInteractEventData.java @@ -17,4 +17,9 @@ public class EntityInteractEventData implements EventData { public EventDataType getType() { return EventDataType.ENTITY_INTERACT; } + + @Override + public int getPayloadType() { + return 1; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventData.java index 53807f4f..a3582741 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/EventData.java @@ -3,4 +3,8 @@ public interface EventData { EventDataType getType(); + + default int getPayloadType() { + return -1; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ExtractHoneyEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ExtractHoneyEventData.java index 2e1d2d30..52dedd83 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ExtractHoneyEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ExtractHoneyEventData.java @@ -4,6 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Deprecated public class ExtractHoneyEventData implements EventData { public static final ExtractHoneyEventData INSTANCE = new ExtractHoneyEventData(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/FishBucketedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/FishBucketedEventData.java index 82cbb2c1..e6a397e0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/FishBucketedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/FishBucketedEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class FishBucketedEventData implements EventData { private final int pattern; private final int preset; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java index 2414064a..0159b58f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/ItemUsedEventData.java @@ -13,4 +13,9 @@ public class ItemUsedEventData implements EventData { public EventDataType getType() { return EventDataType.ITEM_USED_EVENT; } + + @Override + public int getPayloadType() { + return 20; + } } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobBornEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobBornEventData.java index e3aed149..a9d09851 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobBornEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobBornEventData.java @@ -12,4 +12,9 @@ public class MobBornEventData implements EventData { public EventDataType getType() { return EventDataType.MOB_BORN; } + + @Override + public int getPayloadType() { + return 9; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobKilledEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobKilledEventData.java index 3181d799..ccb5f23f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobKilledEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MobKilledEventData.java @@ -22,4 +22,9 @@ public class MobKilledEventData implements EventData { public EventDataType getType() { return EventDataType.MOB_KILLED; } + + @Override + public int getPayloadType() { + return 4; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementAnomalyEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementAnomalyEventData.java index 58d28910..f423e520 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementAnomalyEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementAnomalyEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class MovementAnomalyEventData implements EventData { private final int eventType; private final float cheatingScore; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementCorrectedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementCorrectedEventData.java index efeeddea..e72808cf 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementCorrectedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/MovementCorrectedEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class MovementCorrectedEventData implements EventData { private final float positionDelta; private final float cheatingScore; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PatternRemovedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PatternRemovedEventData.java index 85d642c7..ec4d6bf5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PatternRemovedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PatternRemovedEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class PatternRemovedEventData implements EventData { private final int itemId; private final int auxValue; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PetDiedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PetDiedEventData.java index dd47ced9..c26a0862 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PetDiedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PetDiedEventData.java @@ -3,6 +3,7 @@ import lombok.Value; @Value +@Deprecated public class PetDiedEventData implements EventData { private final boolean ownerKilled; private final long killerUniqueEntityId; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PiglinBarterEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PiglinBarterEventData.java index bb2b9fc9..22f402a4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PiglinBarterEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PiglinBarterEventData.java @@ -12,4 +12,9 @@ public class PiglinBarterEventData implements EventData { public EventDataType getType() { return EventDataType.PIGLIN_BARTER; } + + @Override + public int getPayloadType() { + return 16; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PlayerDiedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PlayerDiedEventData.java index 5e69f0fa..2d29b140 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PlayerDiedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PlayerDiedEventData.java @@ -13,4 +13,9 @@ public class PlayerDiedEventData implements EventData { public EventDataType getType() { return EventDataType.PLAYER_DIED; } + + @Override + public int getPayloadType() { + return 6; + } } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalBuiltEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalBuiltEventData.java index 33df81ac..1b7c961c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalBuiltEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalBuiltEventData.java @@ -10,4 +10,9 @@ public class PortalBuiltEventData implements EventData { public EventDataType getType() { return EventDataType.PORTAL_BUILT; } + + @Override + public int getPayloadType() { + return 2; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalUsedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalUsedEventData.java index 1a7b2c7c..c9a44690 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalUsedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/PortalUsedEventData.java @@ -11,4 +11,9 @@ public class PortalUsedEventData implements EventData { public EventDataType getType() { return EventDataType.PORTAL_USED; } + + @Override + public int getPayloadType() { + return 3; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/RaidUpdateEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/RaidUpdateEventData.java index 1c38433f..b88a51e7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/RaidUpdateEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/RaidUpdateEventData.java @@ -12,4 +12,9 @@ public class RaidUpdateEventData implements EventData { public EventDataType getType() { return EventDataType.RAID_UPDATE; } + + @Override + public int getPayloadType() { + return 14; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SlashCommandExecutedEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SlashCommandExecutedEventData.java index 59bf4244..b75b3cc6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SlashCommandExecutedEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SlashCommandExecutedEventData.java @@ -8,10 +8,16 @@ public class SlashCommandExecutedEventData implements EventData { private final String commandName; private final int successCount; + private final int errorCount; private final List outputMessages; @Override public EventDataType getType() { return EventDataType.SLASH_COMMAND_EXECUTED; } + + @Override + public int getPayloadType() { + return 8; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SneakCloseToSculkSensorEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SneakCloseToSculkSensorEventData.java index ea9b62b0..fd521867 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SneakCloseToSculkSensorEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/SneakCloseToSculkSensorEventData.java @@ -4,6 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Deprecated public class SneakCloseToSculkSensorEventData implements EventData { public static final SneakCloseToSculkSensorEventData INSTANCE = new SneakCloseToSculkSensorEventData(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/StriderRiddenInLavaInOverworldEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/StriderRiddenInLavaInOverworldEventData.java index bf82253a..341ea4e5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/StriderRiddenInLavaInOverworldEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/StriderRiddenInLavaInOverworldEventData.java @@ -4,6 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) +@Deprecated public class StriderRiddenInLavaInOverworldEventData implements EventData { public static final StriderRiddenInLavaInOverworldEventData INSTANCE = new StriderRiddenInLavaInOverworldEventData(); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/TargetBlockHitEventData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/TargetBlockHitEventData.java index 8f0ab2e4..984210e1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/TargetBlockHitEventData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/event/TargetBlockHitEventData.java @@ -10,4 +10,9 @@ public class TargetBlockHitEventData implements EventData { public EventDataType getType() { return EventDataType.TARGET_BLOCK_HIT; } + + @Override + public int getPayloadType() { + return 15; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java index fa8d2ae8..25934f60 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java @@ -72,5 +72,17 @@ public enum ContainerSlotType { /** * @since v712 */ - DYNAMIC_CONTAINER + DYNAMIC_CONTAINER, + /** + * @since v944 + */ + RECIPE_FOOD_CONTAINER, + /** + * @since v944 + */ + RECIPE_BLOCKS_CONTAINER, + /** + * @since v944 + */ + RECIPE_FURNACE_ITEMS_CONTAINER, } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/InventoryLayout.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/InventoryLayout.java index 939a21e0..1c50c762 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/InventoryLayout.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/InventoryLayout.java @@ -2,9 +2,18 @@ public enum InventoryLayout { NONE, - SURVIVAL, - RECIPE_BOOK, - CREATIVE; + /** + * SURVIVAL before v924 + */ + INVENTORY_ONLY, + /** + * RECIPE_BOOK before v924 + */ + DEFAULT, + /** + * CREATIVE before v924 + */ + RECIPE_BOOK_ONLY; public static final InventoryLayout[] VALUES = values(); } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/CraftingDataType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/CraftingDataType.java index 78875e5a..e773cb6a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/CraftingDataType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/CraftingDataType.java @@ -3,7 +3,13 @@ public enum CraftingDataType { SHAPELESS, SHAPED, + /** + * @deprecated since v975 + */ FURNACE, + /** + * @deprecated since v975 + */ FURNACE_DATA, MULTI, SHULKER_BOX, // USER_DATA_SHAPELESS diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/FurnaceRecipeData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/FurnaceRecipeData.java index f53fea77..968c8ea9 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/FurnaceRecipeData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/crafting/recipe/FurnaceRecipeData.java @@ -6,6 +6,9 @@ import static org.cloudburstmc.protocol.common.util.Preconditions.checkArgument; +/** + * @deprecated since v975 + */ @Getter @ToString @EqualsAndHashCode diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/TextProcessingEventOrigin.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/TextProcessingEventOrigin.java index f6365062..54af80a7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/TextProcessingEventOrigin.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/TextProcessingEventOrigin.java @@ -47,5 +47,9 @@ public enum TextProcessingEventOrigin { /** * @since v662 */ - SERVER_FORM + SERVER_FORM, + /** + * @since v975 + */ + DATA_DRIVEN_UI } \ No newline at end of file diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseStatus.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseStatus.java index a5271357..343cadaf 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseStatus.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseStatus.java @@ -4,13 +4,72 @@ * Represents the status of a {@link ItemStackResponse}. */ public enum ItemStackResponseStatus { - /** - * The transaction request was valid. - */ OK, - - /** - * The transaction request was invalid. - */ - ERROR + ERROR, + INVALID_REQUEST_ACTION_TYPE, + ACTION_REQUEST_NOT_ALLOWED, + SCREEN_HANDLER_END_REQUEST_FAILED, + ITEM_REQUEST_ACTION_HANDLER_COMMIT_FAILED, + INVALID_REQUEST_CRAFT_ACTION_TYPE, + INVALID_CRAFT_REQUEST, + INVALID_CRAFT_REQUEST_SCREEN, + INVALID_CRAFT_RESULT, + INVALID_CRAFT_RESULT_INDEX, + INVALID_CRAFT_RESULT_ITEM, + INVALID_ITEM_NET_ID, + MISSING_CREATED_OUTPUT_CONTAINER, + FAILED_TO_SET_CREATED_ITEM_OUTPUT_SLOT, + REQUEST_ALREADY_IN_PROGRESS, + FAILED_TO_INIT_SPARSE_CONTAINER, + RESULT_TRANSFER_FAILED, + EXPECTED_ITEM_SLOT_NOT_FULLY_CONSUMED, + EXPECTED_ANYWHERE_ITEM_NOT_FULLY_CONSUMED, + ITEM_ALREADY_CONSUMED_FROM_SLOT, + CONSUMED_TOO_MUCH_FROM_SLOT, + MISMATCH_SLOT_EXPECTED_CONSUMED_ITEM, + MISMATCH_SLOT_EXPECTED_CONSUMED_ITEM_NET_ID_VARIANT, + FAILED_TO_MATCH_EXPECTED_SLOT_CONSUMED_ITEM, + FAILED_TO_MATCH_EXPECTED_ALLOWED_ANYWHERE_CONSUMED_ITEM, + CONSUMED_ITEM_OUT_OF_ALLOWED_SLOT_RANGE, + CONSUMED_ITEM_NOT_ALLOWED, + PLAYER_NOT_IN_CREATIVE_MODE, + INVALID_EXPERIMENTAL_RECIPE_REQUEST, + FAILED_TO_CRAFT_CREATIVE, + FAILED_TO_GET_LEVEL_RECIPE, + FAILED_TO_FIND_RECIPE_BY_NET_ID, + MISMATCHED_CRAFTING_SIZE, + MISSING_INPUT_SPARSE_CONTAINER, + MISMATCHED_RECIPE_FOR_INPUT_GRID_ITEMS, + EMPTY_CRAFT_RESULTS, + FAILED_TO_ENCHANT, + MISSING_INPUT_ITEM, + INSUFFICIENT_PLAYER_LEVEL_TO_ENCHANT, + MISSING_MATERIAL_ITEM, + MISSING_ACTOR, + UNKNOWN_PRIMARY_EFFECT, + PRIMARY_EFFECT_OUT_OF_RANGE, + PRIMARY_EFFECT_UNAVAILABLE, + SECONDARY_EFFECT_OUT_OF_RANGE, + SECONDARY_EFFECT_UNAVAILABLE, + DST_CONTAINER_EQUAL_TO_CREATED_OUTPUT_CONTAINER, + DST_CONTAINER_AND_SLOT_EQUAL_TO_SRC_CONTAINER_AND_SLOT, + FAILED_TO_VALIDATE_SRC_SLOT, + FAILED_TO_VALIDATE_DST_SLOT, + INVALID_ADJUSTED_AMOUNT, + INVALID_ITEM_SET_TYPE, + INVALID_TRANSFER_AMOUNT, + CANNOT_SWAP_ITEM, + CANNOT_PLACE_ITEM, + UNHANDLED_ITEM_SET_TYPE, + INVALID_REMOVED_AMOUNT, + INVALID_REGION, + CANNOT_DROP_ITEM, + CANNOT_DESTROY_ITEM, + INVALID_SOURCE_CONTAINER, + ITEM_NOT_CONSUMED, + INVALID_NUM_CRAFTS, + INVALID_CRAFT_RESULT_STACK_SIZE, + CANNOT_REMOVE_ITEM, + CANNOT_CONSUME_ITEM, + SCREEN_STACK_ERROR } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/InventorySource.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/InventorySource.java index b58f78ba..2220952c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/InventorySource.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/InventorySource.java @@ -61,7 +61,7 @@ public enum Type { UNTRACKED_INTERACTION_UI(100), NON_IMPLEMENTED_TODO(99999); - private static final Int2ObjectMap BY_ID = new Int2ObjectOpenHashMap<>(6); + private static final Int2ObjectMap BY_ID = new Int2ObjectOpenHashMap<>(values().length); static { for (Type type : values()) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java index 244af1ad..6fe6beba 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java @@ -15,7 +15,7 @@ public class ItemUseTransaction { private final List legacySlots = new ObjectArrayList<>(); private boolean usingNetIds; private final List actions = new ObjectArrayList<>(); - private int actionType; + private int actionType; // Interact|Attack|ItemInteract private Vector3i blockPosition; private int blockFace; private int hotbarSlot; @@ -31,6 +31,10 @@ public class ItemUseTransaction { * @since v712 */ private TriggerType triggerType; + /** + * @since v944 + */ + private int clientCooldownState; public enum PredictedResult { FAILURE, diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java index 1836fd4f..f9b3c561 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/skin/ImageData.java @@ -21,7 +21,7 @@ public class ImageData { public static final int SKIN_128_64_SIZE = 128 * 64 * PIXEL_SIZE; public static final int SKIN_128_128_SIZE = 128 * 128 * PIXEL_SIZE; public static final int SKIN_PERSONA_SIZE = 256 * 256 * PIXEL_SIZE; - public static final int ANIMATION_SIZE = 1024 * 1024; // 1 MB + public static final int ANIMATION_SIZE = 1024 * 1024 * PIXEL_SIZE; // 4 MB private final int width; private final int height; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddBehaviorTreePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddBehaviorTreePacket.java index 510c4b0a..2a11aee6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddBehaviorTreePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddBehaviorTreePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AddBehaviorTreePacket implements BedrockPacket { - public String behaviorTreeJson; + private String behaviorTreeJson; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddEntityPacket.java index 407d6989..5c9007cd 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddEntityPacket.java @@ -18,28 +18,28 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AddEntityPacket implements BedrockPacket { - public List attributes = new ObjectArrayList<>(); - public EntityDataMap metadata = new EntityDataMap(); - public List entityLinks = new ObjectArrayList<>(); - public long uniqueEntityId; - public long runtimeEntityId; - public String identifier; - public int entityType; - public Vector3f position; - public Vector3f motion; - public Vector2f rotation; + private List attributes = new ObjectArrayList<>(); + private EntityDataMap metadata = new EntityDataMap(); + private List entityLinks = new ObjectArrayList<>(); + private long uniqueEntityId; + private long runtimeEntityId; + private String identifier; + private int entityType; + private Vector3f position; + private Vector3f motion; + private Vector2f rotation; /** * @since v534 */ - public float headRotation; + private float headRotation; /** * @since v534 */ - public float bodyRotation; + private float bodyRotation; /** * @since v557 */ - public final EntityProperties properties = new EntityProperties(); + private final EntityProperties properties = new EntityProperties(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddHangingEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddHangingEntityPacket.java index 1e0fbf0a..be168ac1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddHangingEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddHangingEntityPacket.java @@ -10,10 +10,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AddHangingEntityPacket implements BedrockPacket { - public long uniqueEntityId; - public long runtimeEntityId; - public Vector3f position; - public int direction; + private long uniqueEntityId; + private long runtimeEntityId; + private Vector3f position; + private int direction; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddItemEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddItemEntityPacket.java index 34d57947..ea5f4721 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddItemEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddItemEntityPacket.java @@ -12,13 +12,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AddItemEntityPacket implements BedrockPacket { - public EntityDataMap metadata = new EntityDataMap(); - public long uniqueEntityId; - public long runtimeEntityId; - public ItemData itemInHand; - public Vector3f position; - public Vector3f motion; - public boolean fromFishing; + private EntityDataMap metadata = new EntityDataMap(); + private long uniqueEntityId; + private long runtimeEntityId; + private ItemData itemInHand; + private Vector3f position; + private Vector3f motion; + private boolean fromFishing; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPaintingPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPaintingPacket.java index 9bf19b79..22b4821c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPaintingPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPaintingPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = true) @ToString(doNotUseGetters = true) public class AddPaintingPacket extends AddHangingEntityPacket { - public String motive; + private String motive; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPlayerPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPlayerPacket.java index d5ba0f97..1dfa1867 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPlayerPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddPlayerPacket.java @@ -6,6 +6,7 @@ import lombok.ToString; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.AbilityLayer; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.data.GameType; import org.cloudburstmc.protocol.bedrock.data.PlayerAbilityHolder; import org.cloudburstmc.protocol.bedrock.data.PlayerPermission; @@ -23,30 +24,30 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AddPlayerPacket implements BedrockPacket, PlayerAbilityHolder { - public EntityDataMap metadata = new EntityDataMap(); - public List entityLinks = new ObjectArrayList<>(); - public UUID uuid; - public String username; - public long uniqueEntityId; - public long runtimeEntityId; - public String platformChatId; - public Vector3f position; - public Vector3f motion; - public Vector3f rotation; - public ItemData hand; - public AdventureSettingsPacket adventureSettings = new AdventureSettingsPacket(); - public String deviceId; - public int buildPlatform; - public GameType gameType; + private EntityDataMap metadata = new EntityDataMap(); + private List entityLinks = new ObjectArrayList<>(); + private UUID uuid; + private String username; + private long uniqueEntityId; + private long runtimeEntityId; + private String platformChatId; + private Vector3f position; + private Vector3f motion; + private Vector3f rotation; + private ItemData hand; + private AdventureSettingsPacket adventureSettings = new AdventureSettingsPacket(); + private String deviceId; + private BuildPlatform buildPlatform = BuildPlatform.UNKNOWN; + private GameType gameType; /** * @since v534 */ - public List abilityLayers = new ObjectArrayList<>(); + private List abilityLayers = new ObjectArrayList<>(); /** * @since v557 */ - public final EntityProperties properties = new EntityProperties(); + private final EntityProperties properties = new EntityProperties(); public void setUniqueEntityId(long uniqueEntityId) { this.uniqueEntityId = uniqueEntityId; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddVolumeEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddVolumeEntityPacket.java index 288f48b0..48796782 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddVolumeEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AddVolumeEntityPacket.java @@ -9,33 +9,33 @@ @Data @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class AddVolumeEntityPacket implements BedrockPacket { - public int id; - public NbtMap data; + private int id; + private NbtMap data; /** * @since v465 */ - public String engineVersion; + private String engineVersion; /** * @since v485 */ - public String identifier; + private String identifier; /** * @since v485 */ - public String instanceName; + private String instanceName; /** * @since v503 */ - public Vector3i minBounds; + private Vector3i minBounds; /** * @since v503 */ - public Vector3i maxBounds; + private Vector3i maxBounds; /** * @since v503 */ - public int dimension; + private int dimension; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AdventureSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AdventureSettingsPacket.java index e3bda043..2bf340f3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AdventureSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AdventureSettingsPacket.java @@ -19,10 +19,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AdventureSettingsPacket implements BedrockPacket { - public final Set settings = EnumSet.noneOf(AdventureSetting.class); - public CommandPermission commandPermission = CommandPermission.ANY; - public PlayerPermission playerPermission = PlayerPermission.VISITOR; - public long uniqueEntityId; + private final Set settings = EnumSet.noneOf(AdventureSetting.class); + private CommandPermission commandPermission = CommandPermission.ANY; + private PlayerPermission playerPermission = PlayerPermission.VISITOR; + private long uniqueEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentActionEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentActionEventPacket.java index ee7a6d9f..48fb0176 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentActionEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentActionEventPacket.java @@ -13,12 +13,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AgentActionEventPacket implements BedrockPacket { - public String requestId; - public AgentActionType actionType; + private String requestId; + private AgentActionType actionType; /** * @see AgentActionType for type specific JSON */ - public String responseJson; + private String responseJson; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentAnimationPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentAnimationPacket.java index cefe82d4..b15a8f03 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentAnimationPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AgentAnimationPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AgentAnimationPacket implements BedrockPacket { - public byte animation; - public long runtimeEntityId; + private byte animation; + private long runtimeEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimateEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimateEntityPacket.java index 8e15fdd8..0c19bd91 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimateEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimateEntityPacket.java @@ -21,7 +21,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param animation entity animation * @return entity animation */ - public String animation; + private String animation; /** * The entity state to move to when the animation has finished playing. @@ -29,7 +29,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param nextState state after animation has finished * @return state after animation has finished */ - public String nextState; + private String nextState; /** * Expression to check if the animation needs to stop. @@ -37,7 +37,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param stopExpression molang expression (???) * @return molang expression (???) */ - public String stopExpression; + private String stopExpression; /** * The molang stop expression version @@ -47,7 +47,7 @@ public class AnimateEntityPacket implements BedrockPacket { * * @since v465 */ - public int stopExpressionVersion; + private int stopExpressionVersion; /** @@ -56,7 +56,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param controller controller name * @return controller name */ - public String controller; + private String controller; /** * Time taken to blend out of the specified animation. @@ -64,7 +64,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param blendOutTime time * @return time */ - public float blendOutTime; + private float blendOutTime; /** * Entity runtime IDs to run the animation on when sent to the client. @@ -72,7 +72,7 @@ public class AnimateEntityPacket implements BedrockPacket { * @param runtimeEntityIds runtime entity IDs list * @return runtime entity IDs list */ - public final LongList runtimeEntityIds = new LongArrayList(); + private final LongList runtimeEntityIds = new LongArrayList(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimatePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimatePacket.java index 58f25999..fd1153f2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimatePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnimatePacket.java @@ -13,19 +13,19 @@ @ToString(doNotUseGetters = true) public class AnimatePacket implements BedrockPacket { /** - * @deprecated since v898 + * @deprecated since v897 */ - public float rowingTime; - public Action action; - public long runtimeEntityId; + private float rowingTime; + private Action action; + private long runtimeEntityId; /** * @since v859 */ - public float data; + private float data; /** - * @since v898 + * @since v897 */ - public SwingSource swingSource = SwingSource.NONE; + private SwingSource swingSource = SwingSource.NONE; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -63,7 +63,7 @@ public enum SwingSource { DROP_ITEM("dropitem"), EVENT("event"); - public static final HashMap BY_NAME = new HashMap<>(); + private static final HashMap BY_NAME = new HashMap<>(values().length); static { for (SwingSource value : values()) { @@ -72,7 +72,7 @@ public enum SwingSource { } @Getter - public final String name; + private final String name; SwingSource(String name) { this.name = name; diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnvilDamagePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnvilDamagePacket.java index 1490b279..93255464 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnvilDamagePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AnvilDamagePacket.java @@ -10,8 +10,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AnvilDamagePacket implements BedrockPacket { - public int damage; - public Vector3i position; + private int damage; + private Vector3i position; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AutomationClientConnectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AutomationClientConnectPacket.java index 727b42b9..d06a7703 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AutomationClientConnectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AutomationClientConnectPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AutomationClientConnectPacket implements BedrockPacket { - public String address; + private String address; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableCommandsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableCommandsPacket.java index be467d75..1f1e00ec 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableCommandsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableCommandsPacket.java @@ -13,7 +13,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AvailableCommandsPacket implements BedrockPacket { - public final List commands = new ObjectArrayList<>(); + private final List commands = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableEntityIdentifiersPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableEntityIdentifiersPacket.java index 59ca7bd9..49d50bf5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableEntityIdentifiersPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AvailableEntityIdentifiersPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AvailableEntityIdentifiersPacket implements BedrockPacket { - public NbtMap identifiers; + private NbtMap identifiers; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java index 192d1539..376f63d6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/AwardAchievementPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class AwardAchievementPacket implements BedrockPacket { - public int achievementId; + private int achievementId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java index c8807792..1bbad9b7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java @@ -927,4 +927,80 @@ default PacketSignal handle(ServerPlayerPostMovePositionPacket packet) { default PacketSignal handle(ServerboundDataStorePacket packet) { return PacketSignal.UNHANDLED; } + + default PacketSignal handle(ClientboundDataStorePacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(CameraAimAssistActorPriorityPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(CameraSplinePacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundDataDrivenUICloseScreenPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundDataDrivenUIReloadPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundDataDrivenUIShowScreenPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundTextureShiftPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(VoxelShapesPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ResourcePacksReadyForValidationPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(LocatorBarPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(PartyChangedPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ServerboundDataDrivenScreenClosedPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(SyncWorldClocksPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundAttributeLayerSyncPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ServerStoreInfoPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ServerPresenceInfoPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ClientboundUpdateSoundDataPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(SendPartyDestinationCookiePacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(PartyDestinationCookieResponsePacket packet) { + return PacketSignal.UNHANDLED; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java index 06a2f38d..c7cd22be 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java @@ -1,234 +1,267 @@ package org.cloudburstmc.protocol.bedrock.packet; -public enum BedrockPacketType { - ADD_BEHAVIOR_TREE, - ADD_ENTITY, - ADD_HANGING_ENTITY, - ADD_ITEM_ENTITY, - ADD_PAINTING, - ADD_PLAYER, - ADD_VOLUME_ENTITY, - ADVENTURE_SETTINGS, - AGENT_ACTION_EVENT, - ANIMATE, - ANIMATE_ENTITY, - ANVIL_DAMAGE, - AUTOMATION_CLIENT_CONNECT, - AVAILABLE_COMMANDS, - AVAILABLE_ENTITY_IDENTIFIERS, - BIOME_DEFINITIONS_LIST, - BLOCK_ENTITY_DATA, - BLOCK_EVENT, - BLOCK_PICK_REQUEST, - BOOK_EDIT, - BOSS_EVENT, - CAMERA, - CAMERA_SHAKE, - CHANGE_DIMENSION, - CHANGE_MOB_PROPERTY, - CHUNK_RADIUS_UPDATED, - CLIENTBOUND_DEBUG_RENDERER, - CLIENTBOUND_MAP_ITEM_DATA, - CLIENT_CACHE_BLOB_STATUS, - CLIENT_CACHE_MISS_RESPONSE, - CLIENT_CACHE_STATUS, - CLIENT_CHEAT_ABILITY, - CLIENT_TO_SERVER_HANDSHAKE, - CODE_BUILDER, - CODE_BUILDER_SOURCE, - COMMAND_BLOCK_UPDATE, - COMMAND_OUTPUT, - COMMAND_REQUEST, - COMPLETED_USING_ITEM, - CONTAINER_CLOSE, - CONTAINER_OPEN, - CONTAINER_SET_DATA, - CORRECT_PLAYER_MOVE_PREDICTION, - CRAFTING_DATA, - CRAFTING_EVENT, - CREATE_PHOTO, - CREATIVE_CONTENT, - DEATH_INFO, - DEBUG_INFO, - DIMENSION_DATA, - DISCONNECT, - EDITOR_NETWORK, - EDUCATION_SETTINGS, - EDU_URI_RESOURCE, - EMOTE, - EMOTE_LIST, - ENTITY_EVENT, - ENTITY_FALL, - ENTITY_PICK_REQUEST, - EVENT, - EXPLODE, - FEATURE_REGISTRY, - FILTER_TEXT, - GAME_RULES_CHANGED, - GAME_TEST_REQUEST, - GAME_TEST_RESULTS, - GUI_DATA_PICK_ITEM, - HURT_ARMOR, - INTERACT, - INVENTORY_CONTENT, - INVENTORY_SLOT, - INVENTORY_TRANSACTION, - ITEM_COMPONENT, - ITEM_FRAME_DROP_ITEM, - ITEM_STACK_REQUEST, - ITEM_STACK_RESPONSE, - LAB_TABLE, - LECTERN_UPDATE, - LESSON_PROGRESS, - LEVEL_CHUNK, - LEVEL_EVENT_GENERIC, - LEVEL_EVENT, - LEVEL_SOUND_EVENT, - LEVEL_SOUND_EVENT_1, - LEVEL_SOUND_EVENT_2, - LOGIN, - MAP_CREATE_LOCKED_COPY, - MAP_INFO_REQUEST, - MOB_ARMOR_EQUIPMENT, - MOB_EFFECT, - MOB_EQUIPMENT, - MODAL_FORM_REQUEST, - MODAL_FORM_RESPONSE, - MOVE_ENTITY_ABSOLUTE, - MOVE_ENTITY_DELTA, - MOVE_PLAYER, - MULTIPLAYER_SETTINGS, - NETWORK_CHUNK_PUBLISHER_UPDATE, - NETWORK_SETTINGS, - NETWORK_STACK_LATENCY, - NPC_DIALOGUE, - NPC_REQUEST, - ON_SCREEN_TEXTURE_ANIMATION, - PACKET_VIOLATION_WARNING, - PHOTO_INFO_REQUEST, - PHOTO_TRANSFER, - PLAYER_ACTION, - PLAYER_ARMOR_DAMAGE, - PLAYER_AUTH_INPUT, - PLAYER_ENCHANT_OPTIONS, - PLAYER_FOG, - PLAYER_HOTBAR, - PLAYER_INPUT, - PLAYER_LIST, - PLAYER_SKIN, - PLAYER_START_ITEM_COOLDOWN, - PLAY_SOUND, - PLAY_STATUS, - PURCHASE_RECEIPT, - POSITION_TRACKING_DB_SERVER_BROADCAST, - POSITION_TRACKING_DB_CLIENT_REQUEST, - REMOVE_ENTITY, - REMOVE_OBJECTIVE, - REMOVE_VOLUME_ENTITY, - REQUEST_ABILITY, - REQUEST_CHUNK_RADIUS, - REQUEST_NETWORK_SETTINGS, - REQUEST_PERMISSIONS, - RESOURCE_PACK_CHUNK_DATA, - RESOURCE_PACK_CHUNK_REQUEST, - RESOURCE_PACK_CLIENT_RESPONSE, - RESOURCE_PACK_DATA_INFO, - RESOURCE_PACKS_INFO, - RESOURCE_PACK_STACK, - RESPAWN, - RIDER_JUMP, - SCRIPT_CUSTOM_EVENT, - SCRIPT_MESSAGE, - SERVER_SETTINGS_REQUEST, - SERVER_SETTINGS_RESPONSE, - SERVER_STATS, - SERVER_TO_CLIENT_HANDSHAKE, - SET_COMMANDS_ENABLED, - SET_DEFAULT_GAME_TYPE, - SET_DIFFICULTY, - SET_DISPLAY_OBJECTIVE, - SET_ENTITY_DATA, - SET_ENTITY_LINK, - SET_ENTITY_MOTION, - SET_ENTITY_MOTION_PLUS, - SET_HEALTH, - SET_LAST_HURT_BY, - SET_LOCAL_PLAYER_AS_INITIALIZED, - SET_PLAYER_GAME_TYPE, - SET_SCOREBOARD_IDENTITY, - SET_SCORE, - SET_SPAWN_POSITION, - SET_TIME, - SETTINGS_COMMAND, - SET_TITLE, - SHOW_CREDITS, - SHOW_PROFILE, - SHOW_STORE_OFFER, - SIMPLE_EVENT, - SIMULATION_TYPE, - SPAWN_EXPERIENCE_ORB, - SPAWN_PARTICLE_EFFECT, - START_GAME, - STOP_SOUND, - STRUCTURE_BLOCK_UPDATE, - STRUCTURE_TEMPLATE_DATA_EXPORT_REQUEST, - STRUCTURE_TEMPLATE_DATA_EXPORT_RESPONSE, - SUB_CHUNK, - SUB_CHUNK_REQUEST, - SUB_CLIENT_LOGIN, - SYNC_ENTITY_PROPERTY, - TAKE_ITEM_ENTITY, - TEXT, - TICK_SYNC, - TICKING_AREAS_LOAD_STATUS, - TOAST_REQUEST, - TRANSFER, - UNKNOWN, - UPDATE_ABILITIES, - UPDATE_ADVENTURE_SETTINGS, - UPDATE_ATTRIBUTES, - UPDATE_BLOCK, - UPDATE_BLOCK_PROPERTIES, - UPDATE_BLOCK_SYNCED, - UPDATE_EQUIP, - UPDATE_PLAYER_GAME_TYPE, - UPDATE_SOFT_ENUM, - UPDATE_SUB_CHUNK_BLOCKS, - UPDATE_TRADE, - VIDEO_STREAM_CONNECT, - UPDATE_CLIENT_INPUT_LOCKS, - CAMERA_PRESETS, - UNLOCKED_RECIPES, - CAMERA_INSTRUCTION, - COMPRESSED_BIOME_DEFINITIONS_LIST, - TRIM_DATA, - OPEN_SIGN, - AGENT_ANIMATION, - REFRESH_ENTITLEMENTS, - TOGGLE_CRAFTER_SLOT_REQUEST, - SET_PLAYER_INVENTORY_OPTIONS, - SET_HUD, - AWARD_ACHIEVEMENT, - CLIENTBOUND_CLOSE_FORM, - SERVERBOUND_LOADING_SCREEN, - JIGSAW_STRUCTURE_DATA, - CURRENT_STRUCTURE_FEATURE, - SERVERBOUND_DIAGNOSTICS, - CAMERA_AIM_ASSIST, - CONTAINER_REGISTRY_CLEANUP, - MOVEMENT_EFFECT, - SET_MOVEMENT_AUTHORITY, - CAMERA_AIM_ASSIST_PRESETS, - CAMERA_AIM_ASSIST_INSTRUCTION, - MOVEMENT_PREDICTION_SYNC, - UPDATE_CLIENT_OPTIONS, - PLAYER_VIDEO_CAPTURE, - PLAYER_UPDATE_ENTITY_OVERRIDES, - PLAYER_LOCATION, - CLIENTBOUND_CONTROL_SCHEME_SET, - DEBUG_DRAWER, - SERVERBOUND_PACK_SETTING_CHANGE, - GRAPHICS_PARAMETER_OVERRIDE_PACKET, - SERVER_PLAYER_POST_MOVE_POSITION, - SERVERBOUND_DATA_STORE +import lombok.Getter; + +public class BedrockPacketType { + public static final BedrockPacketType ADD_BEHAVIOR_TREE = new BedrockPacketType("ADD_BEHAVIOR_TREE"); + public static final BedrockPacketType ADD_ENTITY = new BedrockPacketType("ADD_ENTITY"); + public static final BedrockPacketType ADD_HANGING_ENTITY = new BedrockPacketType("ADD_HANGING_ENTITY"); + public static final BedrockPacketType ADD_ITEM_ENTITY = new BedrockPacketType("ADD_ITEM_ENTITY"); + public static final BedrockPacketType ADD_PAINTING = new BedrockPacketType("ADD_PAINTING"); + public static final BedrockPacketType ADD_PLAYER = new BedrockPacketType("ADD_PLAYER"); + public static final BedrockPacketType ADD_VOLUME_ENTITY = new BedrockPacketType("ADD_VOLUME_ENTITY"); + public static final BedrockPacketType ADVENTURE_SETTINGS = new BedrockPacketType("ADVENTURE_SETTINGS"); + public static final BedrockPacketType AGENT_ACTION_EVENT = new BedrockPacketType("AGENT_ACTION_EVENT"); + public static final BedrockPacketType ANIMATE = new BedrockPacketType("ANIMATE"); + public static final BedrockPacketType ANIMATE_ENTITY = new BedrockPacketType("ANIMATE_ENTITY"); + public static final BedrockPacketType ANVIL_DAMAGE = new BedrockPacketType("ANVIL_DAMAGE"); + public static final BedrockPacketType AUTOMATION_CLIENT_CONNECT = new BedrockPacketType("AUTOMATION_CLIENT_CONNECT"); + public static final BedrockPacketType AVAILABLE_COMMANDS = new BedrockPacketType("AVAILABLE_COMMANDS"); + public static final BedrockPacketType AVAILABLE_ENTITY_IDENTIFIERS = new BedrockPacketType("AVAILABLE_ENTITY_IDENTIFIERS"); + public static final BedrockPacketType BIOME_DEFINITIONS_LIST = new BedrockPacketType("BIOME_DEFINITIONS_LIST"); + public static final BedrockPacketType BLOCK_ENTITY_DATA = new BedrockPacketType("BLOCK_ENTITY_DATA"); + public static final BedrockPacketType BLOCK_EVENT = new BedrockPacketType("BLOCK_EVENT"); + public static final BedrockPacketType BLOCK_PICK_REQUEST = new BedrockPacketType("BLOCK_PICK_REQUEST"); + public static final BedrockPacketType BOOK_EDIT = new BedrockPacketType("BOOK_EDIT"); + public static final BedrockPacketType BOSS_EVENT = new BedrockPacketType("BOSS_EVENT"); + public static final BedrockPacketType CAMERA = new BedrockPacketType("CAMERA"); + public static final BedrockPacketType CAMERA_SHAKE = new BedrockPacketType("CAMERA_SHAKE"); + public static final BedrockPacketType CHANGE_DIMENSION = new BedrockPacketType("CHANGE_DIMENSION"); + public static final BedrockPacketType CHANGE_MOB_PROPERTY = new BedrockPacketType("CHANGE_MOB_PROPERTY"); + public static final BedrockPacketType CHUNK_RADIUS_UPDATED = new BedrockPacketType("CHUNK_RADIUS_UPDATED"); + public static final BedrockPacketType CLIENTBOUND_DEBUG_RENDERER = new BedrockPacketType("CLIENTBOUND_DEBUG_RENDERER"); + public static final BedrockPacketType CLIENTBOUND_MAP_ITEM_DATA = new BedrockPacketType("CLIENTBOUND_MAP_ITEM_DATA"); + public static final BedrockPacketType CLIENT_CACHE_BLOB_STATUS = new BedrockPacketType("CLIENT_CACHE_BLOB_STATUS"); + public static final BedrockPacketType CLIENT_CACHE_MISS_RESPONSE = new BedrockPacketType("CLIENT_CACHE_MISS_RESPONSE"); + public static final BedrockPacketType CLIENT_CACHE_STATUS = new BedrockPacketType("CLIENT_CACHE_STATUS"); + public static final BedrockPacketType CLIENT_CHEAT_ABILITY = new BedrockPacketType("CLIENT_CHEAT_ABILITY"); + public static final BedrockPacketType CLIENT_TO_SERVER_HANDSHAKE = new BedrockPacketType("CLIENT_TO_SERVER_HANDSHAKE"); + public static final BedrockPacketType CODE_BUILDER = new BedrockPacketType("CODE_BUILDER"); + public static final BedrockPacketType CODE_BUILDER_SOURCE = new BedrockPacketType("CODE_BUILDER_SOURCE"); + public static final BedrockPacketType COMMAND_BLOCK_UPDATE = new BedrockPacketType("COMMAND_BLOCK_UPDATE"); + public static final BedrockPacketType COMMAND_OUTPUT = new BedrockPacketType("COMMAND_OUTPUT"); + public static final BedrockPacketType COMMAND_REQUEST = new BedrockPacketType("COMMAND_REQUEST"); + public static final BedrockPacketType COMPLETED_USING_ITEM = new BedrockPacketType("COMPLETED_USING_ITEM"); + public static final BedrockPacketType CONTAINER_CLOSE = new BedrockPacketType("CONTAINER_CLOSE"); + public static final BedrockPacketType CONTAINER_OPEN = new BedrockPacketType("CONTAINER_OPEN"); + public static final BedrockPacketType CONTAINER_SET_DATA = new BedrockPacketType("CONTAINER_SET_DATA"); + public static final BedrockPacketType CORRECT_PLAYER_MOVE_PREDICTION = new BedrockPacketType("CORRECT_PLAYER_MOVE_PREDICTION"); + public static final BedrockPacketType CRAFTING_DATA = new BedrockPacketType("CRAFTING_DATA"); + public static final BedrockPacketType CRAFTING_EVENT = new BedrockPacketType("CRAFTING_EVENT"); + public static final BedrockPacketType CREATE_PHOTO = new BedrockPacketType("CREATE_PHOTO"); + public static final BedrockPacketType CREATIVE_CONTENT = new BedrockPacketType("CREATIVE_CONTENT"); + public static final BedrockPacketType DEATH_INFO = new BedrockPacketType("DEATH_INFO"); + public static final BedrockPacketType DEBUG_INFO = new BedrockPacketType("DEBUG_INFO"); + public static final BedrockPacketType DIMENSION_DATA = new BedrockPacketType("DIMENSION_DATA"); + public static final BedrockPacketType DISCONNECT = new BedrockPacketType("DISCONNECT"); + public static final BedrockPacketType EDITOR_NETWORK = new BedrockPacketType("EDITOR_NETWORK"); + public static final BedrockPacketType EDUCATION_SETTINGS = new BedrockPacketType("EDUCATION_SETTINGS"); + public static final BedrockPacketType EDU_URI_RESOURCE = new BedrockPacketType("EDU_URI_RESOURCE"); + public static final BedrockPacketType EMOTE = new BedrockPacketType("EMOTE"); + public static final BedrockPacketType EMOTE_LIST = new BedrockPacketType("EMOTE_LIST"); + public static final BedrockPacketType ENTITY_EVENT = new BedrockPacketType("ENTITY_EVENT"); + public static final BedrockPacketType ENTITY_FALL = new BedrockPacketType("ENTITY_FALL"); + public static final BedrockPacketType ENTITY_PICK_REQUEST = new BedrockPacketType("ENTITY_PICK_REQUEST"); + public static final BedrockPacketType EVENT = new BedrockPacketType("EVENT"); + public static final BedrockPacketType EXPLODE = new BedrockPacketType("EXPLODE"); + public static final BedrockPacketType FEATURE_REGISTRY = new BedrockPacketType("FEATURE_REGISTRY"); + public static final BedrockPacketType FILTER_TEXT = new BedrockPacketType("FILTER_TEXT"); + public static final BedrockPacketType GAME_RULES_CHANGED = new BedrockPacketType("GAME_RULES_CHANGED"); + public static final BedrockPacketType GAME_TEST_REQUEST = new BedrockPacketType("GAME_TEST_REQUEST"); + public static final BedrockPacketType GAME_TEST_RESULTS = new BedrockPacketType("GAME_TEST_RESULTS"); + public static final BedrockPacketType GUI_DATA_PICK_ITEM = new BedrockPacketType("GUI_DATA_PICK_ITEM"); + public static final BedrockPacketType HURT_ARMOR = new BedrockPacketType("HURT_ARMOR"); + public static final BedrockPacketType INTERACT = new BedrockPacketType("INTERACT"); + public static final BedrockPacketType INVENTORY_CONTENT = new BedrockPacketType("INVENTORY_CONTENT"); + public static final BedrockPacketType INVENTORY_SLOT = new BedrockPacketType("INVENTORY_SLOT"); + public static final BedrockPacketType INVENTORY_TRANSACTION = new BedrockPacketType("INVENTORY_TRANSACTION"); + public static final BedrockPacketType ITEM_COMPONENT = new BedrockPacketType("ITEM_COMPONENT"); + public static final BedrockPacketType ITEM_FRAME_DROP_ITEM = new BedrockPacketType("ITEM_FRAME_DROP_ITEM"); + public static final BedrockPacketType ITEM_STACK_REQUEST = new BedrockPacketType("ITEM_STACK_REQUEST"); + public static final BedrockPacketType ITEM_STACK_RESPONSE = new BedrockPacketType("ITEM_STACK_RESPONSE"); + public static final BedrockPacketType LAB_TABLE = new BedrockPacketType("LAB_TABLE"); + public static final BedrockPacketType LECTERN_UPDATE = new BedrockPacketType("LECTERN_UPDATE"); + public static final BedrockPacketType LESSON_PROGRESS = new BedrockPacketType("LESSON_PROGRESS"); + public static final BedrockPacketType LEVEL_CHUNK = new BedrockPacketType("LEVEL_CHUNK"); + public static final BedrockPacketType LEVEL_EVENT_GENERIC = new BedrockPacketType("LEVEL_EVENT_GENERIC"); + public static final BedrockPacketType LEVEL_EVENT = new BedrockPacketType("LEVEL_EVENT"); + public static final BedrockPacketType LEVEL_SOUND_EVENT = new BedrockPacketType("LEVEL_SOUND_EVENT"); + public static final BedrockPacketType LEVEL_SOUND_EVENT_1 = new BedrockPacketType("LEVEL_SOUND_EVENT_1"); + public static final BedrockPacketType LEVEL_SOUND_EVENT_2 = new BedrockPacketType("LEVEL_SOUND_EVENT_2"); + public static final BedrockPacketType LOGIN = new BedrockPacketType("LOGIN"); + public static final BedrockPacketType MAP_CREATE_LOCKED_COPY = new BedrockPacketType("MAP_CREATE_LOCKED_COPY"); + public static final BedrockPacketType MAP_INFO_REQUEST = new BedrockPacketType("MAP_INFO_REQUEST"); + public static final BedrockPacketType MOB_ARMOR_EQUIPMENT = new BedrockPacketType("MOB_ARMOR_EQUIPMENT"); + public static final BedrockPacketType MOB_EFFECT = new BedrockPacketType("MOB_EFFECT"); + public static final BedrockPacketType MOB_EQUIPMENT = new BedrockPacketType("MOB_EQUIPMENT"); + public static final BedrockPacketType MODAL_FORM_REQUEST = new BedrockPacketType("MODAL_FORM_REQUEST"); + public static final BedrockPacketType MODAL_FORM_RESPONSE = new BedrockPacketType("MODAL_FORM_RESPONSE"); + public static final BedrockPacketType MOVE_ENTITY_ABSOLUTE = new BedrockPacketType("MOVE_ENTITY_ABSOLUTE"); + public static final BedrockPacketType MOVE_ENTITY_DELTA = new BedrockPacketType("MOVE_ENTITY_DELTA"); + public static final BedrockPacketType MOVE_PLAYER = new BedrockPacketType("MOVE_PLAYER"); + public static final BedrockPacketType MULTIPLAYER_SETTINGS = new BedrockPacketType("MULTIPLAYER_SETTINGS"); + public static final BedrockPacketType NETWORK_CHUNK_PUBLISHER_UPDATE = new BedrockPacketType("NETWORK_CHUNK_PUBLISHER_UPDATE"); + public static final BedrockPacketType NETWORK_SETTINGS = new BedrockPacketType("NETWORK_SETTINGS"); + public static final BedrockPacketType NETWORK_STACK_LATENCY = new BedrockPacketType("NETWORK_STACK_LATENCY"); + public static final BedrockPacketType NPC_DIALOGUE = new BedrockPacketType("NPC_DIALOGUE"); + public static final BedrockPacketType NPC_REQUEST = new BedrockPacketType("NPC_REQUEST"); + public static final BedrockPacketType ON_SCREEN_TEXTURE_ANIMATION = new BedrockPacketType("ON_SCREEN_TEXTURE_ANIMATION"); + public static final BedrockPacketType PACKET_VIOLATION_WARNING = new BedrockPacketType("PACKET_VIOLATION_WARNING"); + public static final BedrockPacketType PHOTO_INFO_REQUEST = new BedrockPacketType("PHOTO_INFO_REQUEST"); + public static final BedrockPacketType PHOTO_TRANSFER = new BedrockPacketType("PHOTO_TRANSFER"); + public static final BedrockPacketType PLAYER_ACTION = new BedrockPacketType("PLAYER_ACTION"); + public static final BedrockPacketType PLAYER_ARMOR_DAMAGE = new BedrockPacketType("PLAYER_ARMOR_DAMAGE"); + public static final BedrockPacketType PLAYER_AUTH_INPUT = new BedrockPacketType("PLAYER_AUTH_INPUT"); + public static final BedrockPacketType PLAYER_ENCHANT_OPTIONS = new BedrockPacketType("PLAYER_ENCHANT_OPTIONS"); + public static final BedrockPacketType PLAYER_FOG = new BedrockPacketType("PLAYER_FOG"); + public static final BedrockPacketType PLAYER_HOTBAR = new BedrockPacketType("PLAYER_HOTBAR"); + public static final BedrockPacketType PLAYER_INPUT = new BedrockPacketType("PLAYER_INPUT"); + public static final BedrockPacketType PLAYER_LIST = new BedrockPacketType("PLAYER_LIST"); + public static final BedrockPacketType PLAYER_SKIN = new BedrockPacketType("PLAYER_SKIN"); + public static final BedrockPacketType PLAYER_START_ITEM_COOLDOWN = new BedrockPacketType("PLAYER_START_ITEM_COOLDOWN"); + public static final BedrockPacketType PLAY_SOUND = new BedrockPacketType("PLAY_SOUND"); + public static final BedrockPacketType PLAY_STATUS = new BedrockPacketType("PLAY_STATUS"); + public static final BedrockPacketType PURCHASE_RECEIPT = new BedrockPacketType("PURCHASE_RECEIPT"); + public static final BedrockPacketType POSITION_TRACKING_DB_SERVER_BROADCAST = new BedrockPacketType("POSITION_TRACKING_DB_SERVER_BROADCAST"); + public static final BedrockPacketType POSITION_TRACKING_DB_CLIENT_REQUEST = new BedrockPacketType("POSITION_TRACKING_DB_CLIENT_REQUEST"); + public static final BedrockPacketType REMOVE_ENTITY = new BedrockPacketType("REMOVE_ENTITY"); + public static final BedrockPacketType REMOVE_OBJECTIVE = new BedrockPacketType("REMOVE_OBJECTIVE"); + public static final BedrockPacketType REMOVE_VOLUME_ENTITY = new BedrockPacketType("REMOVE_VOLUME_ENTITY"); + public static final BedrockPacketType REQUEST_ABILITY = new BedrockPacketType("REQUEST_ABILITY"); + public static final BedrockPacketType REQUEST_CHUNK_RADIUS = new BedrockPacketType("REQUEST_CHUNK_RADIUS"); + public static final BedrockPacketType REQUEST_NETWORK_SETTINGS = new BedrockPacketType("REQUEST_NETWORK_SETTINGS"); + public static final BedrockPacketType REQUEST_PERMISSIONS = new BedrockPacketType("REQUEST_PERMISSIONS"); + public static final BedrockPacketType RESOURCE_PACK_CHUNK_DATA = new BedrockPacketType("RESOURCE_PACK_CHUNK_DATA"); + public static final BedrockPacketType RESOURCE_PACK_CHUNK_REQUEST = new BedrockPacketType("RESOURCE_PACK_CHUNK_REQUEST"); + public static final BedrockPacketType RESOURCE_PACK_CLIENT_RESPONSE = new BedrockPacketType("RESOURCE_PACK_CLIENT_RESPONSE"); + public static final BedrockPacketType RESOURCE_PACK_DATA_INFO = new BedrockPacketType("RESOURCE_PACK_DATA_INFO"); + public static final BedrockPacketType RESOURCE_PACKS_INFO = new BedrockPacketType("RESOURCE_PACKS_INFO"); + public static final BedrockPacketType RESOURCE_PACK_STACK = new BedrockPacketType("RESOURCE_PACK_STACK"); + public static final BedrockPacketType RESPAWN = new BedrockPacketType("RESPAWN"); + public static final BedrockPacketType RIDER_JUMP = new BedrockPacketType("RIDER_JUMP"); + public static final BedrockPacketType SCRIPT_CUSTOM_EVENT = new BedrockPacketType("SCRIPT_CUSTOM_EVENT"); + public static final BedrockPacketType SCRIPT_MESSAGE = new BedrockPacketType("SCRIPT_MESSAGE"); + public static final BedrockPacketType SERVER_SETTINGS_REQUEST = new BedrockPacketType("SERVER_SETTINGS_REQUEST"); + public static final BedrockPacketType SERVER_SETTINGS_RESPONSE = new BedrockPacketType("SERVER_SETTINGS_RESPONSE"); + public static final BedrockPacketType SERVER_STATS = new BedrockPacketType("SERVER_STATS"); + public static final BedrockPacketType SERVER_TO_CLIENT_HANDSHAKE = new BedrockPacketType("SERVER_TO_CLIENT_HANDSHAKE"); + public static final BedrockPacketType SET_COMMANDS_ENABLED = new BedrockPacketType("SET_COMMANDS_ENABLED"); + public static final BedrockPacketType SET_DEFAULT_GAME_TYPE = new BedrockPacketType("SET_DEFAULT_GAME_TYPE"); + public static final BedrockPacketType SET_DIFFICULTY = new BedrockPacketType("SET_DIFFICULTY"); + public static final BedrockPacketType SET_DISPLAY_OBJECTIVE = new BedrockPacketType("SET_DISPLAY_OBJECTIVE"); + public static final BedrockPacketType SET_ENTITY_DATA = new BedrockPacketType("SET_ENTITY_DATA"); + public static final BedrockPacketType SET_ENTITY_LINK = new BedrockPacketType("SET_ENTITY_LINK"); + public static final BedrockPacketType SET_ENTITY_MOTION = new BedrockPacketType("SET_ENTITY_MOTION"); + public static final BedrockPacketType SET_ENTITY_MOTION_PLUS = new BedrockPacketType("SET_ENTITY_MOTION_PLUS"); + public static final BedrockPacketType SET_HEALTH = new BedrockPacketType("SET_HEALTH"); + public static final BedrockPacketType SET_LAST_HURT_BY = new BedrockPacketType("SET_LAST_HURT_BY"); + public static final BedrockPacketType SET_LOCAL_PLAYER_AS_INITIALIZED = new BedrockPacketType("SET_LOCAL_PLAYER_AS_INITIALIZED"); + public static final BedrockPacketType SET_PLAYER_GAME_TYPE = new BedrockPacketType("SET_PLAYER_GAME_TYPE"); + public static final BedrockPacketType SET_SCOREBOARD_IDENTITY = new BedrockPacketType("SET_SCOREBOARD_IDENTITY"); + public static final BedrockPacketType SET_SCORE = new BedrockPacketType("SET_SCORE"); + public static final BedrockPacketType SET_SPAWN_POSITION = new BedrockPacketType("SET_SPAWN_POSITION"); + public static final BedrockPacketType SET_TIME = new BedrockPacketType("SET_TIME"); + public static final BedrockPacketType SETTINGS_COMMAND = new BedrockPacketType("SETTINGS_COMMAND"); + public static final BedrockPacketType SET_TITLE = new BedrockPacketType("SET_TITLE"); + public static final BedrockPacketType SHOW_CREDITS = new BedrockPacketType("SHOW_CREDITS"); + public static final BedrockPacketType SHOW_PROFILE = new BedrockPacketType("SHOW_PROFILE"); + public static final BedrockPacketType SHOW_STORE_OFFER = new BedrockPacketType("SHOW_STORE_OFFER"); + public static final BedrockPacketType SIMPLE_EVENT = new BedrockPacketType("SIMPLE_EVENT"); + public static final BedrockPacketType SIMULATION_TYPE = new BedrockPacketType("SIMULATION_TYPE"); + public static final BedrockPacketType SPAWN_EXPERIENCE_ORB = new BedrockPacketType("SPAWN_EXPERIENCE_ORB"); + public static final BedrockPacketType SPAWN_PARTICLE_EFFECT = new BedrockPacketType("SPAWN_PARTICLE_EFFECT"); + public static final BedrockPacketType START_GAME = new BedrockPacketType("START_GAME"); + public static final BedrockPacketType STOP_SOUND = new BedrockPacketType("STOP_SOUND"); + public static final BedrockPacketType STRUCTURE_BLOCK_UPDATE = new BedrockPacketType("STRUCTURE_BLOCK_UPDATE"); + public static final BedrockPacketType STRUCTURE_TEMPLATE_DATA_EXPORT_REQUEST = new BedrockPacketType("STRUCTURE_TEMPLATE_DATA_EXPORT_REQUEST"); + public static final BedrockPacketType STRUCTURE_TEMPLATE_DATA_EXPORT_RESPONSE = new BedrockPacketType("STRUCTURE_TEMPLATE_DATA_EXPORT_RESPONSE"); + public static final BedrockPacketType SUB_CHUNK = new BedrockPacketType("SUB_CHUNK"); + public static final BedrockPacketType SUB_CHUNK_REQUEST = new BedrockPacketType("SUB_CHUNK_REQUEST"); + public static final BedrockPacketType SUB_CLIENT_LOGIN = new BedrockPacketType("SUB_CLIENT_LOGIN"); + public static final BedrockPacketType SYNC_ENTITY_PROPERTY = new BedrockPacketType("SYNC_ENTITY_PROPERTY"); + public static final BedrockPacketType TAKE_ITEM_ENTITY = new BedrockPacketType("TAKE_ITEM_ENTITY"); + public static final BedrockPacketType TEXT = new BedrockPacketType("TEXT"); + public static final BedrockPacketType TICK_SYNC = new BedrockPacketType("TICK_SYNC"); + public static final BedrockPacketType TICKING_AREAS_LOAD_STATUS = new BedrockPacketType("TICKING_AREAS_LOAD_STATUS"); + public static final BedrockPacketType TOAST_REQUEST = new BedrockPacketType("TOAST_REQUEST"); + public static final BedrockPacketType TRANSFER = new BedrockPacketType("TRANSFER"); + public static final BedrockPacketType UNKNOWN = new BedrockPacketType("UNKNOWN"); + public static final BedrockPacketType UPDATE_ABILITIES = new BedrockPacketType("UPDATE_ABILITIES"); + public static final BedrockPacketType UPDATE_ADVENTURE_SETTINGS = new BedrockPacketType("UPDATE_ADVENTURE_SETTINGS"); + public static final BedrockPacketType UPDATE_ATTRIBUTES = new BedrockPacketType("UPDATE_ATTRIBUTES"); + public static final BedrockPacketType UPDATE_BLOCK = new BedrockPacketType("UPDATE_BLOCK"); + public static final BedrockPacketType UPDATE_BLOCK_PROPERTIES = new BedrockPacketType("UPDATE_BLOCK_PROPERTIES"); + public static final BedrockPacketType UPDATE_BLOCK_SYNCED = new BedrockPacketType("UPDATE_BLOCK_SYNCED"); + public static final BedrockPacketType UPDATE_EQUIP = new BedrockPacketType("UPDATE_EQUIP"); + public static final BedrockPacketType UPDATE_PLAYER_GAME_TYPE = new BedrockPacketType("UPDATE_PLAYER_GAME_TYPE"); + public static final BedrockPacketType UPDATE_SOFT_ENUM = new BedrockPacketType("UPDATE_SOFT_ENUM"); + public static final BedrockPacketType UPDATE_SUB_CHUNK_BLOCKS = new BedrockPacketType("UPDATE_SUB_CHUNK_BLOCKS"); + public static final BedrockPacketType UPDATE_TRADE = new BedrockPacketType("UPDATE_TRADE"); + public static final BedrockPacketType VIDEO_STREAM_CONNECT = new BedrockPacketType("VIDEO_STREAM_CONNECT"); + public static final BedrockPacketType UPDATE_CLIENT_INPUT_LOCKS = new BedrockPacketType("UPDATE_CLIENT_INPUT_LOCKS"); + public static final BedrockPacketType CAMERA_PRESETS = new BedrockPacketType("CAMERA_PRESETS"); + public static final BedrockPacketType UNLOCKED_RECIPES = new BedrockPacketType("UNLOCKED_RECIPES"); + public static final BedrockPacketType CAMERA_INSTRUCTION = new BedrockPacketType("CAMERA_INSTRUCTION"); + public static final BedrockPacketType COMPRESSED_BIOME_DEFINITIONS_LIST = new BedrockPacketType("COMPRESSED_BIOME_DEFINITIONS_LIST"); + public static final BedrockPacketType TRIM_DATA = new BedrockPacketType("TRIM_DATA"); + public static final BedrockPacketType OPEN_SIGN = new BedrockPacketType("OPEN_SIGN"); + public static final BedrockPacketType AGENT_ANIMATION = new BedrockPacketType("AGENT_ANIMATION"); + public static final BedrockPacketType REFRESH_ENTITLEMENTS = new BedrockPacketType("REFRESH_ENTITLEMENTS"); + public static final BedrockPacketType TOGGLE_CRAFTER_SLOT_REQUEST = new BedrockPacketType("TOGGLE_CRAFTER_SLOT_REQUEST"); + public static final BedrockPacketType SET_PLAYER_INVENTORY_OPTIONS = new BedrockPacketType("SET_PLAYER_INVENTORY_OPTIONS"); + public static final BedrockPacketType SET_HUD = new BedrockPacketType("SET_HUD"); + public static final BedrockPacketType AWARD_ACHIEVEMENT = new BedrockPacketType("AWARD_ACHIEVEMENT"); + public static final BedrockPacketType CLIENTBOUND_CLOSE_FORM = new BedrockPacketType("CLIENTBOUND_CLOSE_FORM"); + public static final BedrockPacketType SERVERBOUND_LOADING_SCREEN = new BedrockPacketType("SERVERBOUND_LOADING_SCREEN"); + public static final BedrockPacketType JIGSAW_STRUCTURE_DATA = new BedrockPacketType("JIGSAW_STRUCTURE_DATA"); + public static final BedrockPacketType CURRENT_STRUCTURE_FEATURE = new BedrockPacketType("CURRENT_STRUCTURE_FEATURE"); + public static final BedrockPacketType SERVERBOUND_DIAGNOSTICS = new BedrockPacketType("SERVERBOUND_DIAGNOSTICS"); + public static final BedrockPacketType CAMERA_AIM_ASSIST = new BedrockPacketType("CAMERA_AIM_ASSIST"); + public static final BedrockPacketType CONTAINER_REGISTRY_CLEANUP = new BedrockPacketType("CONTAINER_REGISTRY_CLEANUP"); + public static final BedrockPacketType MOVEMENT_EFFECT = new BedrockPacketType("MOVEMENT_EFFECT"); + public static final BedrockPacketType SET_MOVEMENT_AUTHORITY = new BedrockPacketType("SET_MOVEMENT_AUTHORITY"); + public static final BedrockPacketType CAMERA_AIM_ASSIST_PRESETS = new BedrockPacketType("CAMERA_AIM_ASSIST_PRESETS"); + public static final BedrockPacketType CAMERA_AIM_ASSIST_INSTRUCTION = new BedrockPacketType("CAMERA_AIM_ASSIST_INSTRUCTION"); + public static final BedrockPacketType MOVEMENT_PREDICTION_SYNC = new BedrockPacketType("MOVEMENT_PREDICTION_SYNC"); + public static final BedrockPacketType UPDATE_CLIENT_OPTIONS = new BedrockPacketType("UPDATE_CLIENT_OPTIONS"); + public static final BedrockPacketType PLAYER_VIDEO_CAPTURE = new BedrockPacketType("PLAYER_VIDEO_CAPTURE"); + public static final BedrockPacketType PLAYER_UPDATE_ENTITY_OVERRIDES = new BedrockPacketType("PLAYER_UPDATE_ENTITY_OVERRIDES"); + public static final BedrockPacketType PLAYER_LOCATION = new BedrockPacketType("PLAYER_LOCATION"); + public static final BedrockPacketType CLIENTBOUND_CONTROL_SCHEME_SET = new BedrockPacketType("CLIENTBOUND_CONTROL_SCHEME_SET"); + public static final BedrockPacketType DEBUG_DRAWER = new BedrockPacketType("DEBUG_DRAWER"); + public static final BedrockPacketType SERVERBOUND_PACK_SETTING_CHANGE = new BedrockPacketType("SERVERBOUND_PACK_SETTING_CHANGE"); + public static final BedrockPacketType GRAPHICS_PARAMETER_OVERRIDE_PACKET = new BedrockPacketType("GRAPHICS_PARAMETER_OVERRIDE_PACKET"); + public static final BedrockPacketType SERVER_PLAYER_POST_MOVE_POSITION = new BedrockPacketType("SERVER_PLAYER_POST_MOVE_POSITION"); + public static final BedrockPacketType SERVERBOUND_DATA_STORE = new BedrockPacketType("SERVERBOUND_DATA_STORE"); + public static final BedrockPacketType CLIENTBOUND_DATA_STORE = new BedrockPacketType("CLIENTBOUND_DATA_STORE"); + public static final BedrockPacketType CLIENTBOUND_DATA_DRIVEN_UI_SHOW_SCREEN = new BedrockPacketType("CLIENTBOUND_DATA_DRIVEN_UI_SHOW_SCREEN"); + public static final BedrockPacketType CLIENTBOUND_DATA_DRIVEN_UI_CLOSE_SCREEN = new BedrockPacketType("CLIENTBOUND_DATA_DRIVEN_UI_CLOSE_SCREEN"); + public static final BedrockPacketType CLIENTBOUND_DATA_DRIVEN_UI_RELOAD = new BedrockPacketType("CLIENTBOUND_DATA_DRIVEN_UI_RELOAD"); + public static final BedrockPacketType CLIENTBOUND_TEXTURE_SHIFT = new BedrockPacketType("CLIENTBOUND_TEXTURE_SHIFT"); + public static final BedrockPacketType VOXEL_SHAPES = new BedrockPacketType("VOXEL_SHAPES"); + public static final BedrockPacketType CAMERA_SPLINE = new BedrockPacketType("CAMERA_SPLINE"); + public static final BedrockPacketType CAMERA_AIM_ASSIST_ACTOR_PRIORITY = new BedrockPacketType("CAMERA_AIM_ASSIST_ACTOR_PRIORITY"); + public static final BedrockPacketType RESOURCE_PACKS_READY_FOR_VALIDATION = new BedrockPacketType("RESOURCE_PACKS_READY_FOR_VALIDATION"); + public static final BedrockPacketType LOCATOR_BAR = new BedrockPacketType("LOCATOR_BAR"); + public static final BedrockPacketType PARTY_CHANGED = new BedrockPacketType("PARTY_CHANGED"); + public static final BedrockPacketType SERVERBOUND_DATA_DRIVEN_SCREEN_CLOSED = new BedrockPacketType("SERVERBOUND_DATA_DRIVEN_SCREEN_CLOSED"); + public static final BedrockPacketType SYNC_WORLD_CLOCKS = new BedrockPacketType("SYNC_WORLD_CLOCKS"); + public static final BedrockPacketType CLIENTBOUND_ATTRIBUTE_LAYER_SYNC = new BedrockPacketType("CLIENTBOUND_ATTRIBUTE_LAYER_SYNC"); + public static final BedrockPacketType SERVER_STORE_INFO = new BedrockPacketType("SERVER_STORE_INFO"); + public static final BedrockPacketType SERVER_PRESENCE_INFO = new BedrockPacketType("SERVER_PRESENCE_INFO"); + public static final BedrockPacketType CLIENTBOUND_UPDATE_SOUND_DATA = new BedrockPacketType("CLIENTBOUND_UPDATE_SOUND_DATA"); + public static final BedrockPacketType SEND_PARTY_DESTINATION_COOKIE = new BedrockPacketType("SEND_PARTY_DESTINATION_COOKIE"); + public static final BedrockPacketType PARTY_DESTINATION_COOKIE_RESPONSE = new BedrockPacketType("PARTY_DESTINATION_COOKIE_RESPONSE"); + + @Getter + private final String name; + + public BedrockPacketType(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } } diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BiomeDefinitionListPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BiomeDefinitionListPacket.java index 53620ad4..b4b1f7db 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BiomeDefinitionListPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BiomeDefinitionListPacket.java @@ -18,11 +18,11 @@ public class BiomeDefinitionListPacket implements BedrockPacket { /** * @deprecated As of v800 (1.21.80) the biomes are no longer sent as NBT. Use {@link #biomes} instead. */ - public NbtMap definitions; + private NbtMap definitions; /** * @since v800 (1.21.80) */ - public BiomeDefinitions biomes; + private BiomeDefinitions biomes; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEntityDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEntityDataPacket.java index 58ee7e2d..b209402f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEntityDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEntityDataPacket.java @@ -11,8 +11,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class BlockEntityDataPacket implements BedrockPacket { - public Vector3i blockPosition; - public NbtMap data; + private Vector3i blockPosition; + private NbtMap data; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEventPacket.java index 7e3e2374..27ea39d5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockEventPacket.java @@ -48,7 +48,7 @@ public class BlockEventPacket implements BedrockPacket { * @param blockPosition block event position * @return block event position */ - public Vector3i blockPosition; + private Vector3i blockPosition; /** * Block event type to execute @@ -56,7 +56,7 @@ public class BlockEventPacket implements BedrockPacket { * @param eventType block event type * @return block event type */ - public int eventType; + private int eventType; /** * Data used by event (if applicable) @@ -64,7 +64,7 @@ public class BlockEventPacket implements BedrockPacket { * @param eventData data for event * @return data for event */ - public int eventData; + private int eventData; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockPickRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockPickRequestPacket.java index 25c49414..3e9ef71e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockPickRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BlockPickRequestPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class BlockPickRequestPacket implements BedrockPacket { - public Vector3i blockPosition; - public boolean addUserData; - public int hotbarSlot; + private Vector3i blockPosition; + private boolean addUserData; + private int hotbarSlot; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BookEditPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BookEditPacket.java index 522a5012..0ada5f0f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BookEditPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BookEditPacket.java @@ -9,15 +9,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class BookEditPacket implements BedrockPacket { - public Action action; - public int inventorySlot; - public int pageNumber; - public int secondaryPageNumber; - public CharSequence text; - public String photoName; - public CharSequence title; - public CharSequence author; - public String xuid; + private Action action; + private int inventorySlot; + private int pageNumber; + private int secondaryPageNumber; + private CharSequence text; + private String photoName; + private CharSequence title; + private CharSequence author; + private String xuid; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BossEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BossEventPacket.java index 3f756be0..0236f75a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BossEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BossEventPacket.java @@ -9,15 +9,18 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class BossEventPacket implements BedrockPacket { - public long bossUniqueEntityId; - public Action action; - public long playerUniqueEntityId; - public CharSequence title; - public CharSequence filteredTitle = ""; - public float healthPercentage; - public int darkenSky; - public int color; - public int overlay; + private long bossUniqueEntityId; + private Action action; + private long playerUniqueEntityId; + private CharSequence title = ""; + private CharSequence filteredTitle = ""; + private float healthPercentage; + /** + * @deprecated since v1001 + */ + private int darkenSky; + private int color; // PINK|BLUE|RED|GREEN|YELLOW|PURPLE|REBECCA_PURPLE|WHITE + private int overlay; // PROGRESS|NOTCHED_6|NOTCHED_10|NOTCHED_12|NOTCHED_20 @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistActorPriorityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistActorPriorityPacket.java new file mode 100644 index 00000000..c4236345 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistActorPriorityPacket.java @@ -0,0 +1,41 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.camera.AimAssistActorPriorityData; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.List; + +/** + * Camera aim-assist actor priority data sent from the server to clients. + * Sent by the server to clients for updating the actor priority for client aim-assist systems. + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class CameraAimAssistActorPriorityPacket implements BedrockPacket { + + private List priorityData; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CAMERA_AIM_ASSIST_ACTOR_PRIORITY; + } + + @Override + public CameraAimAssistActorPriorityPacket clone() { + try { + return (CameraAimAssistActorPriorityPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistInstructionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistInstructionPacket.java index d75ad9bd..802906b3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistInstructionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistInstructionPacket.java @@ -11,9 +11,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CameraAimAssistInstructionPacket implements BedrockPacket { - public String presetId; - public AimAssistAction action; - public boolean allowAimAssist; + private String presetId; + private AimAssistAction action; + private boolean allowAimAssist; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPacket.java index a68e7c44..7bfda933 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPacket.java @@ -11,18 +11,18 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CameraAimAssistPacket implements BedrockPacket { - public Vector2f viewAngle; - public float distance; - public TargetMode targetMode; - public AimAssistAction action; + private Vector2f viewAngle; + private float distance; + private TargetMode targetMode; + private AimAssistAction action; /** * @since v766 */ - public String presetId; + private String presetId; /** * @since v827 */ - public boolean showDebugRender; + private boolean showDebugRender; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPresetsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPresetsPacket.java index ddcbe2c3..1a8989da 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPresetsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraAimAssistPresetsPacket.java @@ -19,16 +19,16 @@ public class CameraAimAssistPresetsPacket implements BedrockPacket { /** * @deprecated since v800 (1.21.80). Use {@link #categoryDefinitions} instead. */ - public final List categories = new ObjectArrayList<>(); + private final List categories = new ObjectArrayList<>(); /** * @since v800 (1.21.80) */ - public final List categoryDefinitions = new ObjectArrayList<>(); - public final List presets = new ObjectArrayList<>(); + private final List categoryDefinitions = new ObjectArrayList<>(); + private final List presets = new ObjectArrayList<>(); /** * @since v776 */ - public CameraAimAssistOperation operation; + private CameraAimAssistOperation operation; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java index 0b0e73b7..0d68a760 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java @@ -11,33 +11,33 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CameraInstructionPacket implements BedrockPacket { - public CameraSetInstruction setInstruction; - public CameraFadeInstruction fadeInstruction; - public OptionalBoolean clear = OptionalBoolean.empty(); + private CameraSetInstruction setInstruction; + private CameraFadeInstruction fadeInstruction; + private OptionalBoolean clear = OptionalBoolean.empty(); /** * @since v712 */ - public CameraTargetInstruction targetInstruction; + private CameraTargetInstruction targetInstruction; /** * @since v712 */ - public OptionalBoolean removeTarget = OptionalBoolean.empty(); + private OptionalBoolean removeTarget = OptionalBoolean.empty(); /** * @since v827 */ - public CameraFovInstruction fovInstruction; + private CameraFovInstruction fovInstruction; /** * @since v859 */ - public CameraSplineInstruction splineInstruction; + private CameraSplineInstruction splineInstruction; /** * @since v859 */ - public CameraAttachToEntityInstruction attachInstruction; + private CameraAttachToEntityInstruction attachInstruction; /** * @since v859 */ - public OptionalBoolean detachFromEntity = OptionalBoolean.empty(); + private OptionalBoolean detachFromEntity = OptionalBoolean.empty(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPacket.java index 2f197c64..40c6aee2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CameraPacket implements BedrockPacket { - public long cameraUniqueEntityId; - public long playerUniqueEntityId; + private long cameraUniqueEntityId; + private long playerUniqueEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPresetsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPresetsPacket.java index 8aa09b47..7565e85a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPresetsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraPresetsPacket.java @@ -14,7 +14,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CameraPresetsPacket implements BedrockPacket { - public final List presets = new ObjectArrayList<>(); + private final List presets = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraShakePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraShakePacket.java index fa754cd2..f1cbe920 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraShakePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraShakePacket.java @@ -23,7 +23,7 @@ public class CameraShakePacket implements BedrockPacket { * @param intensity shake intensity * @return shake intensity */ - public float intensity; + private float intensity; /** * Amount of time to shake the player's camera. @@ -31,14 +31,14 @@ public class CameraShakePacket implements BedrockPacket { * @param duration seconds to shake * @return seconds to shake */ - public float duration; + private float duration; - public CameraShakeType shakeType; + private CameraShakeType shakeType; /** * @since v428 */ - public CameraShakeAction shakeAction; + private CameraShakeAction shakeAction; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraSplinePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraSplinePacket.java new file mode 100644 index 00000000..89b16618 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraSplinePacket.java @@ -0,0 +1,41 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineDefinition; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.List; + +/** + * Camera custom spline data sent from server to client. + * Sent by the server to clients for initializing custom spline data that can be played later through the camera command. + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class CameraSplinePacket implements BedrockPacket { + + private List splines; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CAMERA_SPLINE; + } + + @Override + public CameraSplinePacket clone() { + try { + return (CameraSplinePacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java index 82df7887..efb86b30 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java @@ -10,14 +10,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ChangeDimensionPacket implements BedrockPacket { - public int dimension; - public Vector3f position; - public boolean respawn; + private int dimension; + private Vector3f position; + private boolean respawn; /** * Will be serialized as optional not present if null * @since v712 */ - public Integer loadingScreenId; + private Integer loadingScreenId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeMobPropertyPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeMobPropertyPacket.java index 27726a0c..a039f61e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeMobPropertyPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeMobPropertyPacket.java @@ -14,12 +14,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ChangeMobPropertyPacket implements BedrockPacket { - public long uniqueEntityId; - public String property; - public boolean boolValue; - public String stringValue; - public int intValue; - public float floatValue; + private long uniqueEntityId; + private String property; + private boolean boolValue; + private String stringValue; + private int intValue; + private float floatValue; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChunkRadiusUpdatedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChunkRadiusUpdatedPacket.java index ed063bc6..becf3904 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChunkRadiusUpdatedPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChunkRadiusUpdatedPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ChunkRadiusUpdatedPacket implements BedrockPacket { - public int radius; + private int radius; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheBlobStatusPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheBlobStatusPacket.java index fed68d7c..0f666d66 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheBlobStatusPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheBlobStatusPacket.java @@ -11,8 +11,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ClientCacheBlobStatusPacket implements BedrockPacket { - public final LongList acks = new LongArrayList(); - public final LongList naks = new LongArrayList(); + private final LongList acks = new LongArrayList(); + private final LongList naks = new LongArrayList(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheMissResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheMissResponsePacket.java index abf7732e..36af0e90 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheMissResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheMissResponsePacket.java @@ -14,7 +14,7 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class ClientCacheMissResponsePacket extends AbstractReferenceCounted implements BedrockPacket { - public final Long2ObjectMap blobs = new Long2ObjectLinkedOpenHashMap<>(); + private final Long2ObjectMap blobs = new Long2ObjectLinkedOpenHashMap<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheStatusPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheStatusPacket.java index 7b96c790..eb881382 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheStatusPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCacheStatusPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ClientCacheStatusPacket implements BedrockPacket { - public boolean supported; + private boolean supported; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCheatAbilityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCheatAbilityPacket.java index 58c027cf..58dbe092 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCheatAbilityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientCheatAbilityPacket.java @@ -25,10 +25,10 @@ @ToString(doNotUseGetters = true) public class ClientCheatAbilityPacket implements BedrockPacket, PlayerAbilityHolder { - public long uniqueEntityId; - public PlayerPermission playerPermission; - public CommandPermission commandPermission; - public List abilityLayers = new ObjectArrayList<>(); + private long uniqueEntityId; + private PlayerPermission playerPermission; + private CommandPermission commandPermission; + private List abilityLayers = new ObjectArrayList<>(); @Override public BedrockPacketType getPacketType() { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundAttributeLayerSyncPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundAttributeLayerSyncPacket.java new file mode 100644 index 00000000..f8bb60c9 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundAttributeLayerSyncPacket.java @@ -0,0 +1,38 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.attributelayer.AttributeLayerSyncPayload; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Syncs Attribute Layers to the Client (Currently disabled) + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundAttributeLayerSyncPacket implements BedrockPacket { + + private AttributeLayerSyncPayload data; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_ATTRIBUTE_LAYER_SYNC; + } + + @Override + public ClientboundAttributeLayerSyncPacket clone() { + try { + return (ClientboundAttributeLayerSyncPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundControlSchemeSetPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundControlSchemeSetPacket.java index 35c0a773..43920d61 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundControlSchemeSetPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundControlSchemeSetPacket.java @@ -11,7 +11,7 @@ @ToString(doNotUseGetters = true) public class ClientboundControlSchemeSetPacket implements BedrockPacket { - public ControlScheme scheme; + private ControlScheme scheme; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUICloseScreenPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUICloseScreenPacket.java new file mode 100644 index 00000000..6ac76e31 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUICloseScreenPacket.java @@ -0,0 +1,44 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Allows the server to tell the client to close all the Data Driven UI screens. + * Previously ClientboundDataDrivenUICloseAllScreensPacket + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundDataDrivenUICloseScreenPacket implements BedrockPacket { + + /** + * The unique id of th form to close. If not supplied, this will close all forms + * @since v944 + */ + @Nullable + private Integer formId; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_DATA_DRIVEN_UI_CLOSE_SCREEN; + } + + @Override + public ClientboundDataDrivenUICloseScreenPacket clone() { + try { + return (ClientboundDataDrivenUICloseScreenPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIReloadPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIReloadPacket.java new file mode 100644 index 00000000..bb662fc0 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIReloadPacket.java @@ -0,0 +1,35 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Allows the server to tell the client to reload the Data Driven UI. + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundDataDrivenUIReloadPacket implements BedrockPacket { + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_DATA_DRIVEN_UI_RELOAD; + } + + @Override + public ClientboundDataDrivenUIReloadPacket clone() { + try { + return (ClientboundDataDrivenUIReloadPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIShowScreenPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIShowScreenPacket.java new file mode 100644 index 00000000..7ad42180 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataDrivenUIShowScreenPacket.java @@ -0,0 +1,51 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Allows the server to tell the client to show a Data Driven UI screen. + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundDataDrivenUIShowScreenPacket implements BedrockPacket { + + private String screenId; + + /** + * The unique id of this instance of the form for tracking in scripting + * @since v944 + */ + private int formId; + + /** + * The optional id of the data associated with this screen + * @since v944 + */ + @Nullable + private Integer dataInstanceId; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_DATA_DRIVEN_UI_SHOW_SCREEN; + } + + @Override + public ClientboundDataDrivenUIShowScreenPacket clone() { + try { + return (ClientboundDataDrivenUIShowScreenPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataStorePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataStorePacket.java new file mode 100644 index 00000000..86dedfd3 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDataStorePacket.java @@ -0,0 +1,42 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreAction; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.ArrayList; +import java.util.List; + +/** + * Sends a list of data store properties from the server to the client + * + * @since v897 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundDataStorePacket implements BedrockPacket { + + private List updates = new ArrayList<>(); + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_DATA_STORE; + } + + @Override + public ClientboundDataStorePacket clone() { + try { + return (ClientboundDataStorePacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDebugRendererPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDebugRendererPacket.java index fcf3c8d8..c508135a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDebugRendererPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundDebugRendererPacket.java @@ -12,37 +12,37 @@ @ToString(doNotUseGetters = true) public class ClientboundDebugRendererPacket implements BedrockPacket { - public ClientboundDebugRendererType debugMarkerType; + private ClientboundDebugRendererType debugMarkerType; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public String markerText; + private String markerText; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public Vector3f markerPosition; + private Vector3f markerPosition; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public float markerColorRed; + private float markerColorRed; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public float markerColorGreen; + private float markerColorGreen; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public float markerColorBlue; + private float markerColorBlue; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. */ - public float markerColorAlpha; + private float markerColorAlpha; /** * Only used if {@link #debugMarkerType} is set to {@link ClientboundDebugRendererType#ADD_DEBUG_MARKER_CUBE}. * In milliseconds. */ - public long markerDuration; + private long markerDuration; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundMapItemDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundMapItemDataPacket.java index e605bcb1..db0a33a1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundMapItemDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundMapItemDataPacket.java @@ -17,24 +17,24 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ClientboundMapItemDataPacket implements BedrockPacket { - public final LongList trackedEntityIds = new LongArrayList(); - public final List trackedObjects = new ObjectArrayList<>(); - public final List decorations = new ObjectArrayList<>(); - public long uniqueMapId; - public int dimensionId; - public boolean locked; + private final LongList trackedEntityIds = new LongArrayList(); + private final List trackedObjects = new ObjectArrayList<>(); + private final List decorations = new ObjectArrayList<>(); + private long uniqueMapId; + private int dimensionId; + private boolean locked; /** * The world-relative position of the map's origin. * * @since 1.19.20 */ - public Vector3i origin; - public int scale; - public int height; - public int width; - public int xOffset; - public int yOffset; - public int[] colors; + private Vector3i origin; + private int scale; + private int height; + private int width; + private int xOffset; + private int yOffset; + private int[] colors; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundTextureShiftPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundTextureShiftPacket.java new file mode 100644 index 00000000..8b1005d5 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundTextureShiftPacket.java @@ -0,0 +1,54 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.List; + +/** + * Sends a set of update properties for the texture shift system from the server to the client. + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundTextureShiftPacket implements BedrockPacket { + + private Action action; + private String collectionName; + private String fromStep; + private String toStep; + private List allSteps; + private long currentLengthTicks; + private long totalLengthTicks; + private boolean enabled; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_TEXTURE_SHIFT; + } + + @Override + public ClientboundTextureShiftPacket clone() { + try { + return (ClientboundTextureShiftPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } + + public enum Action { + INVALID, + INITIALIZE, + START, + SET_ENABLED, + SYNC + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundUpdateSoundDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundUpdateSoundDataPacket.java new file mode 100644 index 00000000..f31222ca --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ClientboundUpdateSoundDataPacket.java @@ -0,0 +1,39 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent to update sound data. + * + * @since v1001 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ClientboundUpdateSoundDataPacket implements BedrockPacket { + + private long serverSoundHandle; + private String type; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.CLIENTBOUND_UPDATE_SOUND_DATA; + } + + @Override + public BedrockPacket clone() { + try { + return (ClientboundUpdateSoundDataPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderPacket.java index 9841f427..4a298eb1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CodeBuilderPacket implements BedrockPacket { - public String url; - public boolean opening; + private String url; + private boolean opening; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java index fc147f0d..ff4218a3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CodeBuilderSourcePacket.java @@ -13,16 +13,16 @@ @ToString(doNotUseGetters = true) public class CodeBuilderSourcePacket implements BedrockPacket { - public CodeBuilderOperationType operation; - public CodeBuilderCategoryType category; + private CodeBuilderOperationType operation; + private CodeBuilderCategoryType category; /** * @deprecated since v685 */ - public String value; + private String value; /** * @since v685 */ - public CodeBuilderCodeStatus codeStatus; + private CodeBuilderCodeStatus codeStatus; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandBlockUpdatePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandBlockUpdatePacket.java index 3ef8dcfb..17f4f7c7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandBlockUpdatePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandBlockUpdatePacket.java @@ -11,19 +11,19 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CommandBlockUpdatePacket implements BedrockPacket { - public boolean block; - public Vector3i blockPosition; - public CommandBlockMode mode; - public boolean redstoneMode; - public boolean conditional; - public long minecartRuntimeEntityId; - public String command; - public String lastOutput; - public String name; - public String filteredName; - public boolean outputTracked; - public long tickDelay; - public boolean executingOnFirstTick; + private boolean block; + private Vector3i blockPosition; + private CommandBlockMode mode; + private boolean redstoneMode; + private boolean conditional; + private long minecartRuntimeEntityId; + private String command; + private String lastOutput; + private String name; + private String filteredName; + private boolean outputTracked; + private long tickDelay; + private boolean executingOnFirstTick; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandOutputPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandOutputPacket.java index ce2f8102..838dd5e8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandOutputPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandOutputPacket.java @@ -17,12 +17,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CommandOutputPacket implements BedrockPacket { - public final List messages = new ObjectArrayList<>(); - public CommandOriginData commandOriginData; - public CommandOutputType type; - public int successCount; + private final List messages = new ObjectArrayList<>(); + private CommandOriginData commandOriginData; + private CommandOutputType type; + private int successCount; @Nullable - public String data; + private String data; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandRequestPacket.java index 927fc7ce..ccea9dbc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CommandRequestPacket.java @@ -10,13 +10,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CommandRequestPacket implements BedrockPacket { - public String command; - public CommandOriginData commandOriginData; - public boolean internal; + private String command; + private CommandOriginData commandOriginData; + private boolean internal; /** * @since v567 */ - public int version; + private int version; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompletedUsingItemPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompletedUsingItemPacket.java index d0032a74..cbbc33a3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompletedUsingItemPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompletedUsingItemPacket.java @@ -10,8 +10,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CompletedUsingItemPacket implements BedrockPacket { - public int itemId; - public ItemUseType type; + private int itemId; + private ItemUseType type; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompressedBiomeDefinitionListPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompressedBiomeDefinitionListPacket.java index 1674944d..fe6a8d77 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompressedBiomeDefinitionListPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CompressedBiomeDefinitionListPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true, exclude = "definitions") public class CompressedBiomeDefinitionListPacket implements BedrockPacket { - public NbtMap definitions; + private NbtMap definitions; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java index 159a7729..4839f3be 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerClosePacket.java @@ -10,12 +10,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ContainerClosePacket implements BedrockPacket { - public byte id; - public boolean serverInitiated; + private byte id; + private boolean serverInitiated; /** * @since v685 */ - public ContainerType type; + private ContainerType type; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerOpenPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerOpenPacket.java index 82df41b9..557e7d58 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerOpenPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerOpenPacket.java @@ -11,10 +11,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ContainerOpenPacket implements BedrockPacket { - public byte id; - public ContainerType type; - public Vector3i blockPosition; - public long uniqueEntityId = -1; + private byte id; + private ContainerType type; + private Vector3i blockPosition; + private long uniqueEntityId = -1; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerRegistryCleanupPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerRegistryCleanupPacket.java index d0f3d725..705015c2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerRegistryCleanupPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerRegistryCleanupPacket.java @@ -16,7 +16,7 @@ public class ContainerRegistryCleanupPacket implements BedrockPacket { /** * A list of full containers to cleanup. */ - public final List containers = new ObjectArrayList<>(); + private final List containers = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerSetDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerSetDataPacket.java index 97e71901..584e2df4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerSetDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ContainerSetDataPacket.java @@ -20,9 +20,9 @@ public class ContainerSetDataPacket implements BedrockPacket { public static final int BREWING_STAND_FUEL_AMOUNT = 1; public static final int BREWING_STAND_FUEL_TOTAL = 2; - public byte windowId; - public int property; - public int value; + private byte windowId; + private int property; + private int value; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CorrectPlayerMovePredictionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CorrectPlayerMovePredictionPacket.java index 3c829403..7c866d4e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CorrectPlayerMovePredictionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CorrectPlayerMovePredictionPacket.java @@ -22,7 +22,7 @@ public class CorrectPlayerMovePredictionPacket implements BedrockPacket { * @param position reported position * @return reported position */ - public Vector3f position; + private Vector3f position; /** * Difference in client and server prediction @@ -30,7 +30,7 @@ public class CorrectPlayerMovePredictionPacket implements BedrockPacket { * @param delta position difference * @return position difference */ - public Vector3f delta; + private Vector3f delta; /** * If the client is on the ground. (Not falling or jumping) @@ -38,7 +38,7 @@ public class CorrectPlayerMovePredictionPacket implements BedrockPacket { * @param onGround is client on the ground * @return is client on the ground */ - public boolean onGround; + private boolean onGround; /** * The tick which is being corrected by the server. @@ -46,26 +46,26 @@ public class CorrectPlayerMovePredictionPacket implements BedrockPacket { * @param tick to be corrected * @return to be corrected */ - public long tick; + private long tick; /** * @since 649 * * The type of prediction player sends. */ - public PredictionType predictionType = PredictionType.PLAYER; + private PredictionType predictionType = PredictionType.PLAYER; /** * @since 671 * * The rotation of the vehicle. */ - public Vector2f vehicleRotation; + private Vector2f vehicleRotation; /** * @since v712 */ - public Float vehicleAngularVelocity; + private Float vehicleAngularVelocity; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingDataPacket.java index 440fb8eb..42831ff5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingDataPacket.java @@ -16,14 +16,14 @@ @ToString(doNotUseGetters = true) @EqualsAndHashCode(doNotUseGetters = true) public class CraftingDataPacket implements BedrockPacket { - public final List craftingData = new ObjectArrayList<>(); - public final List potionMixData = new ObjectArrayList<>(); - public final List containerMixData = new ObjectArrayList<>(); + private final List craftingData = new ObjectArrayList<>(); + private final List potionMixData = new ObjectArrayList<>(); + private final List containerMixData = new ObjectArrayList<>(); /** * @since v465 */ - public final List materialReducers = new ObjectArrayList<>(); - public boolean cleanRecipes; + private final List materialReducers = new ObjectArrayList<>(); + private boolean cleanRecipes; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingEventPacket.java index 50000905..635c9859 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CraftingEventPacket.java @@ -19,11 +19,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CraftingEventPacket implements BedrockPacket { - public final List inputs = new ObjectArrayList<>(); - public final List outputs = new ObjectArrayList<>(); - public byte containerId; - public CraftingType type; - public UUID uuid; + private final List inputs = new ObjectArrayList<>(); + private final List outputs = new ObjectArrayList<>(); + private byte containerId; + private CraftingType type; + private UUID uuid; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreatePhotoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreatePhotoPacket.java index 861d211d..0d85d2ec 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreatePhotoPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreatePhotoPacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CreatePhotoPacket implements BedrockPacket { - public long id; - public String photoName; - public String photoItemName; + private long id; + private String photoName; + private String photoItemName; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreativeContentPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreativeContentPacket.java index bcf7f548..485643c6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreativeContentPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CreativeContentPacket.java @@ -21,8 +21,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CreativeContentPacket implements BedrockPacket { - public final List groups = new ObjectArrayList<>(); - public final List contents = new ObjectArrayList<>(); + private final List groups = new ObjectArrayList<>(); + private final List contents = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java index 820e3b06..93944715 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class CurrentStructureFeaturePacket implements BedrockPacket { - public String currentStructureFeature; + private String currentStructureFeature; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DeathInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DeathInfoPacket.java index 63a63185..f70ae081 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DeathInfoPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DeathInfoPacket.java @@ -12,8 +12,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class DeathInfoPacket implements BedrockPacket { - public String causeAttackName; - public final List messageList = new ObjectArrayList<>(); + private String causeAttackName; + private final List messageList = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugDrawerPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugDrawerPacket.java index 44d3f893..5988e2dc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugDrawerPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugDrawerPacket.java @@ -17,7 +17,7 @@ @ToString(doNotUseGetters = true) public class DebugDrawerPacket implements BedrockPacket { - public final List shapes = new ObjectArrayList<>(); + private final List shapes = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugInfoPacket.java index 7b9bf7e6..b89649ad 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugInfoPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DebugInfoPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class DebugInfoPacket implements BedrockPacket { - public long uniqueEntityId; - public String data; + private long uniqueEntityId; + private String data; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DimensionDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DimensionDataPacket.java index 3d787754..77ee9e51 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DimensionDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DimensionDataPacket.java @@ -21,7 +21,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class DimensionDataPacket implements BedrockPacket { - public final List definitions = new ObjectArrayList<>(); + private final List definitions = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java index 46a0bf77..1830ee95 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java @@ -10,13 +10,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class DisconnectPacket implements BedrockPacket { - public DisconnectFailReason reason = DisconnectFailReason.UNKNOWN; - public boolean messageSkipped; - public CharSequence kickMessage; + private DisconnectFailReason reason = DisconnectFailReason.UNKNOWN; + private boolean messageSkipped; + private CharSequence kickMessage; /** * @since v712 */ - public CharSequence filteredMessage = ""; + private CharSequence filteredMessage = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java index 5d043ba4..8f707160 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EditorNetworkPacket implements BedrockPacket { - public Object payload; // NBT like + private Object payload; // NBT like /** * @since v712 */ - public boolean routeToManager; + private boolean routeToManager; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EduUriResourcePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EduUriResourcePacket.java index fff698c4..8349612b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EduUriResourcePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EduUriResourcePacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EduUriResourcePacket implements BedrockPacket { - public EduSharedUriResource eduSharedUriResource; + private EduSharedUriResource eduSharedUriResource; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EducationSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EducationSettingsPacket.java index 203dea3c..2728010c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EducationSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EducationSettingsPacket.java @@ -13,25 +13,25 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EducationSettingsPacket implements BedrockPacket { - public String codeBuilderUri; - public String codeBuilderTitle; - public boolean canResizeCodeBuilder; + private String codeBuilderUri; + private String codeBuilderTitle; + private boolean canResizeCodeBuilder; /** * @since v465 */ - public boolean disableLegacyTitle; + private boolean disableLegacyTitle; /** * @since v465 */ - public String postProcessFilter; + private String postProcessFilter; /** * @since v465 */ - public String screenshotBorderPath; - public OptionalBoolean entityCapabilities; - public Optional overrideUri; - public boolean quizAttached; - public OptionalBoolean externalLinkSettings; + private String screenshotBorderPath; + private OptionalBoolean entityCapabilities; + private Optional overrideUri; + private boolean quizAttached; + private OptionalBoolean externalLinkSettings; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmoteListPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmoteListPacket.java index c64ce2ad..f4893344 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmoteListPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmoteListPacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EmoteListPacket implements BedrockPacket { - public long runtimeEntityId; - public final List pieceIds = new ObjectArrayList<>(); + private long runtimeEntityId; + private final List pieceIds = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmotePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmotePacket.java index f45a2c7e..34654e2e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmotePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EmotePacket.java @@ -13,21 +13,21 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EmotePacket implements BedrockPacket { - public long runtimeEntityId; + private long runtimeEntityId; /** * @since v589 */ - public String xuid; + private String xuid; /** * @since 589 */ - public String platformId; - public String emoteId; - public final Set flags = EnumSet.noneOf(EmoteFlag.class); + private String platformId; + private String emoteId; + private final Set flags = EnumSet.noneOf(EmoteFlag.class); /** * @since v729 */ - public int emoteDuration; + private int emoteDuration; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityEventPacket.java index a0b09194..df63508f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityEventPacket.java @@ -3,6 +3,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.common.PacketSignal; @@ -10,9 +12,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EntityEventPacket implements BedrockPacket { - public long runtimeEntityId; - public EntityEventType type; - public int data; + private long runtimeEntityId; + private EntityEventType type; + private int data; + /** + * @since v975 + */ + @Nullable + private Vector3f fireAtPosition; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityFallPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityFallPacket.java index e583362f..41182092 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityFallPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityFallPacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EntityFallPacket implements BedrockPacket { - public long runtimeEntityId; - public float fallDistance; - public boolean inVoid; + private long runtimeEntityId; + private float fallDistance; + private boolean inVoid; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityPickRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityPickRequestPacket.java index d94f22d4..0cc5c67f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityPickRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EntityPickRequestPacket.java @@ -9,12 +9,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EntityPickRequestPacket implements BedrockPacket { - public long runtimeEntityId; - public int hotbarSlot; + private long runtimeEntityId; + private int hotbarSlot; /** * @since v465 */ - public boolean withData; + private boolean withData; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EventPacket.java index 566d0c0f..8b28cacb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EventPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class EventPacket implements BedrockPacket { - public long uniqueEntityId; - public boolean usePlayerId; - public EventData eventData; + private long uniqueEntityId; + private boolean usePlayerId; + private EventData eventData; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -23,31 +23,6 @@ public BedrockPacketType getPacketType() { return BedrockPacketType.EVENT; } - public enum Event { - ACHIEVEMENT_AWARDED, - ENTITY_INTERACT, - PORTAL_BUILT, - PORTAL_USED, - MOB_KILLED, - CAULDRON_USED, - PLAYER_DEATH, - BOSS_KILLED, - /** - * @deprecated use {@link AgentActionEventPacket} - */ - @Deprecated - AGENT_COMMAND, - AGENT_CREATED, - PATTERN_REMOVED, - SLASH_COMMAND_EXECUTED, - FISH_BUCKETED, - MOB_BORN, - PET_DIED, - CAULDRON_BLOCK_USED, - COMPOSTER_BLOCK_USED, - BELL_BLOCK_USED - } - @Override public EventPacket clone() { try { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ExplodePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ExplodePacket.java index cac535af..74304b5d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ExplodePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ExplodePacket.java @@ -14,9 +14,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ExplodePacket implements BedrockPacket { - public final List records = new ObjectArrayList<>(); - public Vector3f position; - public float radius; + private final List records = new ObjectArrayList<>(); + private Vector3f position; + private float radius; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FeatureRegistryPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FeatureRegistryPacket.java index ba148504..dad8fcd8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FeatureRegistryPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FeatureRegistryPacket.java @@ -18,7 +18,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class FeatureRegistryPacket implements BedrockPacket { - public final List features = new ObjectArrayList<>(); + private final List features = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FilterTextPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FilterTextPacket.java index 0e85bf1e..3a88af6f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FilterTextPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/FilterTextPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class FilterTextPacket implements BedrockPacket { - public String text; - public boolean fromServer; + private String text; + private boolean fromServer; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameRulesChangedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameRulesChangedPacket.java index bae72835..17867df8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameRulesChangedPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameRulesChangedPacket.java @@ -13,7 +13,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class GameRulesChangedPacket implements BedrockPacket { - public final List> gameRules = new ObjectArrayList<>(); + private final List> gameRules = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestRequestPacket.java index 31c0be72..54b18980 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestRequestPacket.java @@ -10,13 +10,13 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class GameTestRequestPacket implements BedrockPacket { - public int maxTestsPerBatch; - public int repeatCount; - public int rotation; - public boolean stoppingOnFailure; - public Vector3i testPos; - public int testsPerRow; - public String testName; + private int maxTestsPerBatch; + private int repeatCount; + private int rotation; + private boolean stoppingOnFailure; + private Vector3i testPos; + private int testsPerRow; + private String testName; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestResultsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestResultsPacket.java index dd9aaa23..56f2806b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestResultsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GameTestResultsPacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class GameTestResultsPacket implements BedrockPacket { - public boolean successful; - public String error; - public String testName; + private boolean successful; + private String error; + private String testName; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GraphicsParameterOverridePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GraphicsParameterOverridePacket.java index 62c8bb19..9a2b5a93 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GraphicsParameterOverridePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GraphicsParameterOverridePacket.java @@ -3,6 +3,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.GraphicsOverrideParameterType; import org.cloudburstmc.protocol.common.PacketSignal; @@ -19,10 +20,25 @@ @ToString(doNotUseGetters = true) public class GraphicsParameterOverridePacket implements BedrockPacket { - public String biomeIdentifier; - public GraphicsOverrideParameterType parameterType; - public Map values; - public boolean reset; + private String biomeIdentifier; + private GraphicsOverrideParameterType parameterType; + private Map values; + private boolean reset; + /** + * @since v924 + */ + @Nullable + private Float floatValue; + /** + * @since v924 + */ + @Nullable + private Vector3f vec3Value; + /** + * @since v1001 + */ + @Nullable + private String playerIdentifier; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GuiDataPickItemPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GuiDataPickItemPacket.java index 887c7177..3ef0150e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GuiDataPickItemPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/GuiDataPickItemPacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class GuiDataPickItemPacket implements BedrockPacket { - public String description; - public String itemEffects; - public int hotbarSlot; + private String description; + private String itemEffects; + private int hotbarSlot; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/HurtArmorPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/HurtArmorPacket.java index 981eb6d9..f89bc3c2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/HurtArmorPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/HurtArmorPacket.java @@ -9,12 +9,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class HurtArmorPacket implements BedrockPacket { - public int cause; - public int damage; + private int cause; + private int damage; /** * @since v465 */ - public long armorSlots; + private long armorSlots; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InteractPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InteractPacket.java index 7d88a565..99f3ceb8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InteractPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InteractPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class InteractPacket implements BedrockPacket { - public Action action; - public long runtimeEntityId; - public Vector3f mousePosition; + private Action action; + private long runtimeEntityId; + private Vector3f mousePosition; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java index 4ee59248..14f55dab 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java @@ -15,21 +15,21 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class InventoryContentPacket implements BedrockPacket { - public List contents = new ObjectArrayList<>(); - public int containerId; + private List contents = new ObjectArrayList<>(); + private int containerId; /** * @since v712 */ - public FullContainerName containerNameData = new FullContainerName(ContainerSlotType.ANVIL_INPUT, null); + private FullContainerName containerNameData = new FullContainerName(ContainerSlotType.ANVIL_INPUT, null); /** * @since v729 * @deprecated since v748. Use storageItem ItemData size instead. */ - public int dynamicContainerSize; + private int dynamicContainerSize; /** * @since v748 */ - public ItemData storageItem = ItemData.AIR; + private ItemData storageItem = ItemData.AIR; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java index 58a7f7e6..6a518b89 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java @@ -12,22 +12,22 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class InventorySlotPacket implements BedrockPacket { - public int containerId; - public int slot; - public ItemData item; + private int containerId; + private int slot; + private ItemData item; /** * @since v712 */ - public FullContainerName containerNameData = new FullContainerName(ContainerSlotType.ANVIL_INPUT, null); + private FullContainerName containerNameData = new FullContainerName(ContainerSlotType.ANVIL_INPUT, null); /** * @since v729 * @deprecated since v748. Use storageItem ItemData size instead. */ - public int dynamicContainerSize; + private int dynamicContainerSize; /** * @since v748 */ - public ItemData storageItem = ItemData.AIR; + private ItemData storageItem = ItemData.AIR; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java index 4f4ecef8..29a788c0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java @@ -20,25 +20,25 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class InventoryTransactionPacket implements BedrockPacket { - public int legacyRequestId; - public final List legacySlots = new ObjectArrayList<>(); - public final List actions = new ObjectArrayList<>(); - public InventoryTransactionType transactionType; - public int actionType; - public long runtimeEntityId; - public Vector3i blockPosition; - public int blockFace; - public int hotbarSlot; - public ItemData itemInHand; - public Vector3f playerPosition; - public Vector3f clickPosition; - public Vector3f headPosition; + private int legacyRequestId; + private final List legacySlots = new ObjectArrayList<>(); + private final List actions = new ObjectArrayList<>(); + private InventoryTransactionType transactionType; + private int actionType; + private long runtimeEntityId; + private Vector3i blockPosition; + private int blockFace; + private int hotbarSlot; + private ItemData itemInHand; + private Vector3f playerPosition; + private Vector3f clickPosition; + private Vector3f headPosition; /** * @since v407 * @deprecated v431 */ @Deprecated - public boolean usingNetIds; + private boolean usingNetIds; /** * Block definition of block being picked. * ItemUseInventoryTransaction only @@ -46,16 +46,20 @@ public class InventoryTransactionPacket implements BedrockPacket { * @param blockDefinition block definition of block * @return block definition of block */ - public BlockDefinition blockDefinition; + private BlockDefinition blockDefinition; /** * @since v712 */ - public ItemUseTransaction.TriggerType triggerType; + private ItemUseTransaction.TriggerType triggerType; /** * @since v712 */ - public ItemUseTransaction.PredictedResult clientInteractPrediction; + private ItemUseTransaction.PredictedResult clientInteractPrediction; + /** + * @since v944 + */ + private int clientCooldownState; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemComponentPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemComponentPacket.java index 5b56e129..c763e89c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemComponentPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemComponentPacket.java @@ -18,7 +18,7 @@ @ToString(doNotUseGetters = true) public class ItemComponentPacket implements BedrockPacket { - public final List items = new ObjectArrayList<>(); + private final List items = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemFrameDropItemPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemFrameDropItemPacket.java index 324e0e3f..77cebdc6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemFrameDropItemPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemFrameDropItemPacket.java @@ -14,7 +14,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ItemFrameDropItemPacket implements BedrockPacket { - public Vector3i blockPosition; + private Vector3i blockPosition; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackRequestPacket.java index 511f9b2e..e29a71b7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackRequestPacket.java @@ -13,7 +13,7 @@ @EqualsAndHashCode(callSuper = false) @ToString(doNotUseGetters = true) public class ItemStackRequestPacket implements BedrockPacket { - public final List requests = new ArrayList<>(); + private final List requests = new ArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackResponsePacket.java index c2a6edaf..58f78936 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemStackResponsePacket.java @@ -19,7 +19,7 @@ @EqualsAndHashCode(callSuper = false) @ToString(doNotUseGetters = true) public class ItemStackResponsePacket implements BedrockPacket { - public final List entries = new ArrayList<>(); + private final List entries = new ArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java index beeb7505..1e363914 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class JigsawStructureDataPacket implements BedrockPacket { - public NbtMap jigsawStructureDataTag; + private NbtMap jigsawStructureDataTag; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LabTablePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LabTablePacket.java index b924837e..b604b5cf 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LabTablePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LabTablePacket.java @@ -12,9 +12,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LabTablePacket implements BedrockPacket { - public LabTableType type; - public Vector3i position; - public LabTableReactionType reactionType; + private LabTableType type; + private Vector3i position; + private LabTableReactionType reactionType; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LecternUpdatePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LecternUpdatePacket.java index 1f53b48d..9708f0d0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LecternUpdatePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LecternUpdatePacket.java @@ -10,14 +10,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LecternUpdatePacket implements BedrockPacket { - public int page; - public int totalPages; - public Vector3i blockPosition; + private int page; + private int totalPages; + private Vector3i blockPosition; /** * @deprecated since v662 */ @Deprecated - public boolean droppingBook; + private boolean droppingBook; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LessonProgressPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LessonProgressPacket.java index 332dd33a..ff8d7dc5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LessonProgressPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LessonProgressPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LessonProgressPacket implements BedrockPacket { - public LessonAction action; - public int score; - public String activityId; + private LessonAction action; + private int score; + private String activityId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelChunkPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelChunkPacket.java index d895c960..369740e1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelChunkPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelChunkPacket.java @@ -13,27 +13,27 @@ @ToString(doNotUseGetters = true, exclude = {"data"}) @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class LevelChunkPacket extends AbstractReferenceCounted implements BedrockPacket { - public int chunkX; - public int chunkZ; - public int subChunksLength; - public boolean cachingEnabled; + private int chunkX; + private int chunkZ; + private int subChunksLength; + private boolean cachingEnabled; /** * @since v471 */ - public boolean requestSubChunks; + private boolean requestSubChunks; /** * @since v485 */ - public int subChunkLimit; + private int subChunkLimit; - public final LongList blobIds = new LongArrayList(); + private final LongList blobIds = new LongArrayList(); - public ByteBuf data; + private ByteBuf data; /** * @since v649 */ - public int dimension; + private int dimension; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventGenericPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventGenericPacket.java index 0c789a37..5a40b71c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventGenericPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventGenericPacket.java @@ -11,8 +11,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LevelEventGenericPacket implements BedrockPacket { - public LevelEventType type; - public Object tag; + private LevelEventType type; + private Object tag; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventPacket.java index af306d8c..05a67f3e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelEventPacket.java @@ -11,9 +11,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LevelEventPacket implements BedrockPacket { - public LevelEventType type; - public Vector3f position; - public int data; + private LevelEventType type; + private Vector3f position; + private int data; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent1Packet.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent1Packet.java index 09c9244c..2573fd3b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent1Packet.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent1Packet.java @@ -15,12 +15,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LevelSoundEvent1Packet implements BedrockPacket { - public SoundEvent sound; - public Vector3f position; - public int extraData; - public int pitch; - public boolean babySound; - public boolean relativeVolumeDisabled; + private SoundEvent sound; + private Vector3f position; + private int extraData; + private int pitch; + private boolean babySound; + private boolean relativeVolumeDisabled; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent2Packet.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent2Packet.java index 29ed8594..ea74c183 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent2Packet.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEvent2Packet.java @@ -15,12 +15,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LevelSoundEvent2Packet implements BedrockPacket { - public SoundEvent sound; - public Vector3f position; - public int extraData; - public String identifier; - public boolean babySound; - public boolean relativeVolumeDisabled; + private SoundEvent sound; + private Vector3f position; + private int extraData; + private String identifier; + private boolean babySound; + private boolean relativeVolumeDisabled; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEventPacket.java index 00ed1ead..992f62b7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LevelSoundEventPacket.java @@ -3,6 +3,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.common.PacketSignal; @@ -11,13 +12,18 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class LevelSoundEventPacket implements BedrockPacket { - public SoundEvent sound; - public Vector3f position; - public int extraData; - public String identifier; - public boolean babySound; - public boolean relativeVolumeDisabled; - public long entityUniqueId; + private SoundEvent sound; + private Vector3f position; + private int extraData; + private String identifier; + private boolean babySound; + private boolean relativeVolumeDisabled; + private long entityUniqueId; + /** + * @since v975 + */ + @Nullable + private Vector3f fireAtPosition; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LocatorBarPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LocatorBarPacket.java new file mode 100644 index 00000000..fe901d1d --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LocatorBarPacket.java @@ -0,0 +1,57 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; +import org.cloudburstmc.protocol.bedrock.data.LocatorBarWaypoint; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Syncs LocatorBar changes on the server with the client. + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class LocatorBarPacket implements BedrockPacket { + + private List waypoints = new ArrayList<>(); + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.LOCATOR_BAR; + } + + @Override + public LocatorBarPacket clone() { + try { + return (LocatorBarPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } + + @Value + public static class Payload { + Action actionFlag; + UUID groupHandle; + LocatorBarWaypoint waypoint; + } + + public enum Action { + NONE, + ADD, + REMOVE, + UPDATE + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LoginPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LoginPacket.java index 7cc81b90..328152de 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LoginPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/LoginPacket.java @@ -13,17 +13,17 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class LoginPacket implements BedrockPacket { - public int protocolVersion; + private int protocolVersion; /** * The JWT payload signed by Minecraft's authentication server. * Assuming this is a valid signature, it can be trusted to contain the player's identity and other information. */ - public AuthPayload authPayload; + private AuthPayload authPayload; /** * The JWT payload signed by the client. * The client can modify this, so it should not be trusted. */ - public String clientJwt; + private String clientJwt; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapCreateLockedCopyPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapCreateLockedCopyPacket.java index 63b863e3..1104cae3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapCreateLockedCopyPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapCreateLockedCopyPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MapCreateLockedCopyPacket implements BedrockPacket { - public long originalMapId; - public long newMapId; + private long originalMapId; + private long newMapId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapInfoRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapInfoRequestPacket.java index a00027ef..41057b5e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapInfoRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MapInfoRequestPacket.java @@ -13,13 +13,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MapInfoRequestPacket implements BedrockPacket { - public long uniqueMapId; + private long uniqueMapId; /** * Sends pixels that are generated by the client to the server. * * @since 1.19.20 */ - public final List pixels = new ObjectArrayList<>(); + private final List pixels = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java index 09f1b53b..c76dd990 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java @@ -10,15 +10,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MobArmorEquipmentPacket implements BedrockPacket { - public long runtimeEntityId; - public ItemData helmet; - public ItemData chestplate; - public ItemData leggings; - public ItemData boots; + private long runtimeEntityId; + private ItemData helmet; + private ItemData chestplate; + private ItemData leggings; + private ItemData boots; /** * @since v712 */ - public ItemData body; + private ItemData body; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEffectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEffectPacket.java index e3c69bdb..a45554ff 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEffectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEffectPacket.java @@ -9,20 +9,20 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MobEffectPacket implements BedrockPacket { - public long runtimeEntityId; - public Event event; - public int effectId; - public int amplifier; - public boolean particles; - public int duration; + private long runtimeEntityId; + private Event event; + private int effectId; + private int amplifier; + private boolean particles; + private int duration; /** * @since v662 */ - public long tick; + private long tick; /** - * @since v898 + * @since v897 */ - public boolean ambient; + private boolean ambient; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEquipmentPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEquipmentPacket.java index fbd303b3..757e0707 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEquipmentPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobEquipmentPacket.java @@ -10,11 +10,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MobEquipmentPacket implements BedrockPacket { - public long runtimeEntityId; - public ItemData item; - public int inventorySlot; - public int hotbarSlot; - public int containerId; + private long runtimeEntityId; + private ItemData item; + private int inventorySlot; + private int hotbarSlot; + private int containerId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormRequestPacket.java index d93fe23d..e72acbcc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormRequestPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ModalFormRequestPacket implements BedrockPacket { - public int formId; - public String formData; + private int formId; + private String formData; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormResponsePacket.java index c72262de..54ae1e65 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ModalFormResponsePacket.java @@ -12,15 +12,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ModalFormResponsePacket implements BedrockPacket { - public int formId; - public String formData; + private int formId; + private String formData; /** * The reason for why the form response was cancelled. * * @since 1.19.20 */ @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - public Optional cancelReason; + private Optional cancelReason; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MotionPredictionHintsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MotionPredictionHintsPacket.java index 5cc2d099..ad9c8d31 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MotionPredictionHintsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MotionPredictionHintsPacket.java @@ -21,7 +21,7 @@ public class MotionPredictionHintsPacket implements BedrockPacket { * @param runtimeEntityId runtime ID * @return runtime ID */ - public long runtimeEntityId; + private long runtimeEntityId; /** * Motion to set onto the specified entity @@ -29,7 +29,7 @@ public class MotionPredictionHintsPacket implements BedrockPacket { * @param motion motion of entity * @return motion of entity */ - public Vector3f motion; + private Vector3f motion; /** * If the entity is on the ground. (Not falling or jumping) @@ -37,7 +37,7 @@ public class MotionPredictionHintsPacket implements BedrockPacket { * @param onGround is entity on the ground * @return is entity on the ground */ - public boolean onGround; + private boolean onGround; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityAbsolutePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityAbsolutePacket.java index b0a71009..cf8f70ee 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityAbsolutePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityAbsolutePacket.java @@ -10,12 +10,16 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MoveEntityAbsolutePacket implements BedrockPacket { - public long runtimeEntityId; - public Vector3f position; - public Vector3f rotation; - public boolean onGround; - public boolean teleported; - public boolean forceMove; + private long runtimeEntityId; + private Vector3f position; + private Vector3f rotation; + private boolean onGround; + private boolean teleported; + private boolean forceMove; + /** + * @since v975 + */ + private boolean forceCompletion; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityDeltaPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityDeltaPacket.java index fde7deca..e54a6e14 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityDeltaPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MoveEntityDeltaPacket.java @@ -10,21 +10,21 @@ @Data @EqualsAndHashCode(doNotUseGetters = true) public class MoveEntityDeltaPacket implements BedrockPacket { - public long runtimeEntityId; + private long runtimeEntityId; - public final Set flags = EnumSet.noneOf(Flag.class); + private final Set flags = EnumSet.noneOf(Flag.class); - public int deltaX; - public int deltaY; - public int deltaZ; + private int deltaX; + private int deltaY; + private int deltaZ; - public float x; - public float y; - public float z; + private float x; + private float y; + private float z; - public float pitch; - public float yaw; - public float headYaw; + private float pitch; + private float yaw; + private float headYaw; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -51,7 +51,8 @@ public enum Flag { HAS_HEAD_YAW, ON_GROUND, TELEPORTING, - FORCE_MOVE_LOCAL_ENTITY + FORCE_MOVE_LOCAL_ENTITY, + FORCE_COMPLETION } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovePlayerPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovePlayerPacket.java index 5350795a..b3d2439f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovePlayerPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovePlayerPacket.java @@ -12,15 +12,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MovePlayerPacket implements BedrockPacket { - public long runtimeEntityId; - public Vector3f position; - public Vector3f rotation; - public Mode mode; - public boolean onGround; - public long ridingRuntimeEntityId; - public TeleportationCause teleportationCause; - public int entityType; - public long tick; + private long runtimeEntityId; + private Vector3f position; + private Vector3f rotation; + private Mode mode; + private boolean onGround; + private long ridingRuntimeEntityId; + private TeleportationCause teleportationCause; + private int entityType; + private long tick; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -45,9 +45,9 @@ public enum TeleportationCause { COMMAND, BEHAVIOR; - public static final InternalLogger log = InternalLoggerFactory.getInstance(TeleportationCause.class); + private static final InternalLogger log = InternalLoggerFactory.getInstance(TeleportationCause.class); - public static final TeleportationCause[] VALUES = values(); + private static final TeleportationCause[] VALUES = values(); public static TeleportationCause byId(int id) { if (id >= 0 && id < VALUES.length) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementEffectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementEffectPacket.java index bb5f9130..20480a60 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementEffectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementEffectPacket.java @@ -10,10 +10,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MovementEffectPacket implements BedrockPacket { - public long entityRuntimeId; - public MovementEffectType effectType; - public int duration; - public long tick; + private long entityRuntimeId; + private MovementEffectType effectType; + private int duration; + private long tick; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementPredictionSyncPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementPredictionSyncPacket.java index 8176b8ca..e353d0a7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementPredictionSyncPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MovementPredictionSyncPacket.java @@ -13,19 +13,37 @@ @Data @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) +/* + * ClientMovementPredictionSyncPacket + */ public class MovementPredictionSyncPacket implements BedrockPacket { - public long runtimeEntityId; - - public final Set flags = new ObjectOpenHashSet<>(); - public Vector3f boundingBox; - - public float speed; - public float underwaterSpeed; - public float lavaSpeed; - public float jumpStrength; - public float health; - public float hunger; - public boolean flying; + private long runtimeEntityId; + + private final Set flags = new ObjectOpenHashSet<>(); + private Vector3f boundingBox; + + private float speed; + private float underwaterSpeed; + private float lavaSpeed; + private float jumpStrength; + private float health; + private float hunger; + /** + * @since v975 + */ + @Deprecated + private float unknown1; + /** + * @since v975 + */ + @Deprecated + private float unknown2; + /** + * @since v975 + */ + @Deprecated + private float unknown3; + private boolean flying; @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MultiplayerSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MultiplayerSettingsPacket.java index c2f5cc06..bae36f82 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MultiplayerSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MultiplayerSettingsPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class MultiplayerSettingsPacket implements BedrockPacket { - public MultiplayerMode mode; + private MultiplayerMode mode; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkChunkPublisherUpdatePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkChunkPublisherUpdatePacket.java index 0b405dcc..ecab104d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkChunkPublisherUpdatePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkChunkPublisherUpdatePacket.java @@ -14,15 +14,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class NetworkChunkPublisherUpdatePacket implements BedrockPacket { - public Vector3i position; - public int radius; + private Vector3i position; + private int radius; /** * Lets the client know which chunks have been saved, and need * requesting whilst client chunk generation is enabled. * * @since 1.19.20 */ - public final List savedChunks = new ObjectArrayList<>(); + private final List savedChunks = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkSettingsPacket.java index ea4438db..75ea8a30 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkSettingsPacket.java @@ -15,28 +15,28 @@ public class NetworkSettingsPacket implements BedrockPacket { /** * The smallest amount of bytes that should be compressed by the client. 0-65535 */ - public int compressionThreshold; + private int compressionThreshold; /** * Set the compression type to be used on the connection. * * @since v551 */ - public PacketCompressionAlgorithm compressionAlgorithm; + private PacketCompressionAlgorithm compressionAlgorithm; /** * Enable client throttling of players out of the threshold. Players out of the threshold will not be ticked on the * client, reducing the performance hit on lower end devices when in densely populated areas. * * @since v554 */ - public boolean clientThrottleEnabled; + private boolean clientThrottleEnabled; /** * @since v554 */ - public int clientThrottleThreshold; + private int clientThrottleThreshold; /** * @since v554 */ - public float clientThrottleScalar; + private float clientThrottleScalar; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkStackLatencyPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkStackLatencyPacket.java index 703ce0e0..84ab6bdf 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkStackLatencyPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NetworkStackLatencyPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class NetworkStackLatencyPacket implements BedrockPacket { - public long timestamp; - public boolean fromServer; + private long timestamp; + private boolean fromServer; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcDialoguePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcDialoguePacket.java index 9d2bf57b..b21ef26b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcDialoguePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcDialoguePacket.java @@ -8,12 +8,12 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class NpcDialoguePacket implements BedrockPacket { - public long uniqueEntityId; - public Action action; - public String dialogue; - public String sceneName; - public String npcName; - public String actionJson; + private long uniqueEntityId; + private Action action; + private String dialogue; + private String sceneName; + private String npcName; + private String actionJson; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcRequestPacket.java index 68cccaa3..4e57d28d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/NpcRequestPacket.java @@ -10,14 +10,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class NpcRequestPacket implements BedrockPacket { - public long runtimeEntityId; - public NpcRequestType requestType; - public String command; - public int actionType; + private long runtimeEntityId; + private NpcRequestType requestType; + private String command; + private int actionType; /** * @since v448 */ - public String sceneName; + private String sceneName; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OnScreenTextureAnimationPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OnScreenTextureAnimationPacket.java index 0b4fe0f0..d706f247 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OnScreenTextureAnimationPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OnScreenTextureAnimationPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class OnScreenTextureAnimationPacket implements BedrockPacket { - public long effectId; + private long effectId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OpenSignPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OpenSignPacket.java index a7bb1cbe..33f2a594 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OpenSignPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/OpenSignPacket.java @@ -15,8 +15,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class OpenSignPacket implements BedrockPacket { - public Vector3i position; - public boolean frontSide; + private Vector3i position; + private boolean frontSide; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PacketViolationWarningPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PacketViolationWarningPacket.java index ebe757a5..dc4d8b8a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PacketViolationWarningPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PacketViolationWarningPacket.java @@ -11,10 +11,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PacketViolationWarningPacket implements BedrockPacket { - public PacketViolationType type; - public PacketViolationSeverity severity; - public int packetCauseId; - public String context; + private PacketViolationType type; + private PacketViolationSeverity severity; + private int packetCauseId; + private String context; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyChangedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyChangedPacket.java new file mode 100644 index 00000000..c110dcc1 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyChangedPacket.java @@ -0,0 +1,49 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent by the client to provide additional client metadata. + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class PartyChangedPacket implements BedrockPacket { + + @Nullable + private PartyInfo party; + + @Value + public static class PartyInfo { + String partyId; + /** + * @since v975 + */ + boolean isPartyLeader; + } + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.PARTY_CHANGED; + } + + @Override + public PartyChangedPacket clone() { + try { + return (PartyChangedPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyDestinationCookieResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyDestinationCookieResponsePacket.java new file mode 100644 index 00000000..5442b295 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PartyDestinationCookieResponsePacket.java @@ -0,0 +1,39 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent by the client to the server with a party destination cookie response. + * + * @since v1001 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class PartyDestinationCookieResponsePacket implements BedrockPacket { + + private String cookie; + private boolean accepted; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.PARTY_DESTINATION_COOKIE_RESPONSE; + } + + @Override + public BedrockPacket clone() { + try { + return (PartyDestinationCookieResponsePacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoInfoRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoInfoRequestPacket.java index 588426d7..2bd578a1 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoInfoRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoInfoRequestPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PhotoInfoRequestPacket implements BedrockPacket { - public long photoId; + private long photoId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoTransferPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoTransferPacket.java index d2a31dba..4f7d0f48 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoTransferPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PhotoTransferPacket.java @@ -10,25 +10,25 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PhotoTransferPacket implements BedrockPacket { - public String name; - public byte[] data; - public String bookId; + private String name; + private byte[] data; + private String bookId; /** * @since v465 */ - public PhotoType photoType; + private PhotoType photoType; /** * @since v465 */ - public PhotoType sourceType; + private PhotoType sourceType; /** * @since v465 */ - public long ownerId; + private long ownerId; /** * @since v465 */ - public String newPhotoName; + private String newPhotoName; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlaySoundPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlaySoundPacket.java index 52a6c501..70a57390 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlaySoundPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlaySoundPacket.java @@ -3,6 +3,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.common.PacketSignal; @@ -10,10 +11,15 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlaySoundPacket implements BedrockPacket { - public String sound; - public Vector3f position; - public float volume; - public float pitch; + private String sound; + private Vector3f position; + private float volume; + private float pitch; + /** + * @since v975 + */ + @Nullable + private Long serverSoundHandle; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayStatusPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayStatusPacket.java index aea51930..b14f6baf 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayStatusPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayStatusPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayStatusPacket implements BedrockPacket { - public Status status; + private Status status; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerActionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerActionPacket.java index 9a0b8e9e..ec8072d6 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerActionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerActionPacket.java @@ -11,14 +11,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerActionPacket implements BedrockPacket { - public long runtimeEntityId; - public PlayerActionType action; - public Vector3i blockPosition; + private long runtimeEntityId; + private PlayerActionType action; + private Vector3i blockPosition; /** * @since v526 */ - public Vector3i resultPosition; - public int face; + private Vector3i resultPosition; + private int face; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java index 097dd882..b11e31ff 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerArmorDamagePacket implements BedrockPacket { - public final Set flags = EnumSet.noneOf(PlayerArmorDamageFlag.class); - public final int[] damage = new int[5]; + private final Set flags = EnumSet.noneOf(PlayerArmorDamageFlag.class); + private final int[] damage = new int[5]; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerAuthInputPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerAuthInputPacket.java index 41749504..cbd2580c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerAuthInputPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerAuthInputPacket.java @@ -19,64 +19,64 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerAuthInputPacket implements BedrockPacket { - public Vector3f rotation; // head rot after motion - public Vector3f position; - public Vector2f motion; - public final Set inputData = EnumSet.noneOf(PlayerAuthInputData.class); - public InputMode inputMode; - public ClientPlayMode playMode; + private Vector3f rotation; // head rot after motion + private Vector3f position; + private Vector2f motion; + private final Set inputData = EnumSet.noneOf(PlayerAuthInputData.class); + private InputMode inputMode; + private ClientPlayMode playMode; /** * @deprecated since v748 */ - public Vector3f vrGazeDirection; - public long tick; - public Vector3f delta; + private Vector3f vrGazeDirection; + private long tick; + private Vector3f delta; /** * {@link #inputData} must contain {@link PlayerAuthInputData#PERFORM_ITEM_INTERACTION} in order for this to not be null. * * @since v428 */ - public ItemUseTransaction itemUseTransaction; + private ItemUseTransaction itemUseTransaction; /** * {@link #inputData} must contain {@link PlayerAuthInputData#PERFORM_ITEM_STACK_REQUEST} in order for this to not be null. * * @since v428 */ - public ItemStackRequest itemStackRequest; + private ItemStackRequest itemStackRequest; /** * {@link #inputData} must contain {@link PlayerAuthInputData#PERFORM_BLOCK_ACTIONS} in order for this to not be empty. * * @since v428 */ - public final List playerActions = new ObjectArrayList<>(); + private final List playerActions = new ObjectArrayList<>(); /** * @since v527 */ - public InputInteractionModel inputInteractionModel; + private InputInteractionModel inputInteractionModel; /** * @since v748 */ - public Vector2f interactRotation; + private Vector2f interactRotation; /** * @since 575 */ - public Vector2f analogMoveVector; + private Vector2f analogMoveVector; /** * @since 649 */ - public long predictedVehicle; + private long predictedVehicle; /** * @since 662 */ - public Vector2f vehicleRotation; + private Vector2f vehicleRotation; /** * @since v748 */ - public Vector3f cameraOrientation; + private Vector3f cameraOrientation; /** * @since v766 */ - public Vector2f rawMoveVector; + private Vector2f rawMoveVector; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerEnchantOptionsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerEnchantOptionsPacket.java index b95ac20c..474abef4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerEnchantOptionsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerEnchantOptionsPacket.java @@ -13,7 +13,7 @@ @EqualsAndHashCode(callSuper = false) @ToString(doNotUseGetters = true) public class PlayerEnchantOptionsPacket implements BedrockPacket { - public final List options = new ArrayList<>(); + private final List options = new ArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerFogPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerFogPacket.java index 34e191a9..9e18e023 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerFogPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerFogPacket.java @@ -22,7 +22,7 @@ public class PlayerFogPacket implements BedrockPacket { * @param fogStack list of fog effects * @return list of fog effects */ - public final List fogStack = new ObjectArrayList<>(); + private final List fogStack = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerHotbarPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerHotbarPacket.java index 671bc5a8..ce38167c 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerHotbarPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerHotbarPacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerHotbarPacket implements BedrockPacket { - public int selectedHotbarSlot; - public int containerId; - public boolean selectHotbarSlot; + private int selectedHotbarSlot; + private int containerId; + private boolean selectHotbarSlot; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerInputPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerInputPacket.java index d87d022d..3449df10 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerInputPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerInputPacket.java @@ -13,9 +13,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerInputPacket implements BedrockPacket { - public Vector2f inputMotion; - public boolean jumping; - public boolean sneaking; + private Vector2f inputMotion; + private boolean jumping; + private boolean sneaking; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerListPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerListPacket.java index 199741ff..52e99fe0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerListPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerListPacket.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.BuildPlatform; import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.cloudburstmc.protocol.common.PacketSignal; @@ -15,8 +16,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerListPacket implements BedrockPacket { - public final List entries = new ObjectArrayList<>(); - public Action action; + private final List entries = new ObjectArrayList<>(); + private Action action; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -37,18 +38,18 @@ public enum Action { @ToString(doNotUseGetters = true) @EqualsAndHashCode(doNotUseGetters = true) public final static class Entry { - public final UUID uuid; - public long entityId; - public CharSequence name; - public String xuid; - public String platformChatId; - public int buildPlatform; - public SerializedSkin skin; - public boolean teacher; - public boolean host; - public boolean trustedSkin; - public boolean subClient; - public int color; + private final UUID uuid; + private long entityId; + private CharSequence name; + private String xuid; + private String platformChatId; + private BuildPlatform buildPlatform = BuildPlatform.UNKNOWN; + private SerializedSkin skin; + private boolean teacher; + private boolean host; + private boolean trustedSkin; + private boolean subClient; + private Color color; public String getName() { return getName(String.class); diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerLocationPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerLocationPacket.java index c69d6867..0ca805dd 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerLocationPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerLocationPacket.java @@ -11,9 +11,9 @@ @ToString(doNotUseGetters = true) public class PlayerLocationPacket implements BedrockPacket { - public Type type; - public long targetEntityId; - public Vector3f position; + private Type type; + private long targetEntityId; + private Vector3f position; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerSkinPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerSkinPacket.java index 6d12428e..08a2107b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerSkinPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerSkinPacket.java @@ -12,11 +12,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerSkinPacket implements BedrockPacket { - public UUID uuid; - public SerializedSkin skin; - public String newSkinName; - public String oldSkinName; - public boolean trustedSkin; + private UUID uuid; + private SerializedSkin skin; + private String newSkinName; + private String oldSkinName; + private boolean trustedSkin; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerStartItemCooldownPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerStartItemCooldownPacket.java index 13d6cdbe..4c71a202 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerStartItemCooldownPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerStartItemCooldownPacket.java @@ -10,8 +10,8 @@ @ToString(doNotUseGetters = true) public class PlayerStartItemCooldownPacket implements BedrockPacket { - public String itemCategory; - public int cooldownDuration; + private String itemCategory; + private int cooldownDuration; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerUpdateEntityOverridesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerUpdateEntityOverridesPacket.java index 6d2db41a..df2ccdf5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerUpdateEntityOverridesPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerUpdateEntityOverridesPacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerUpdateEntityOverridesPacket implements BedrockPacket { - public long entityUniqueId; - public int propertyIndex; - public UpdateType updateType; - public int intValue; - public float floatValue; + private long entityUniqueId; + private int propertyIndex; + private UpdateType updateType; + private int intValue; + private float floatValue; @Override public PacketSignal handle(BedrockPacketHandler handler) { @@ -34,7 +34,7 @@ public BedrockPacket clone() { } } - public enum UpdateType { + public enum UpdateType { // TODO: changelog says it's now None|Neighbors|Connections CLEAR_OVERRIDES, REMOVE_OVERRIDE, SET_INT_OVERRIDE, diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerVideoCapturePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerVideoCapturePacket.java index ff60c561..98761f49 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerVideoCapturePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerVideoCapturePacket.java @@ -9,9 +9,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PlayerVideoCapturePacket implements BedrockPacket { - public Action action; - public int frameRate; - public String filePrefix; + private Action action; + private int frameRate; + private String filePrefix; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBClientRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBClientRequestPacket.java index 2b142e28..85554dd9 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBClientRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBClientRequestPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PositionTrackingDBClientRequestPacket implements BedrockPacket { - public Action action; - public int trackingId; + private Action action; + private int trackingId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBServerBroadcastPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBServerBroadcastPacket.java index b15b8d81..d21e3e71 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBServerBroadcastPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PositionTrackingDBServerBroadcastPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PositionTrackingDBServerBroadcastPacket implements BedrockPacket { - public Action action; - public int trackingId; - public NbtMap tag; + private Action action; + private int trackingId; + private NbtMap tag; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PurchaseReceiptPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PurchaseReceiptPacket.java index 35516514..669549a3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PurchaseReceiptPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PurchaseReceiptPacket.java @@ -12,7 +12,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class PurchaseReceiptPacket implements BedrockPacket { - public final List receipts = new ObjectArrayList<>(); + private final List receipts = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveEntityPacket.java index d471fc98..7d796098 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveEntityPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RemoveEntityPacket implements BedrockPacket { - public long uniqueEntityId; + private long uniqueEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveObjectivePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveObjectivePacket.java index 2cd5ab19..79b9426a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveObjectivePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveObjectivePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RemoveObjectivePacket implements BedrockPacket { - public String objectiveId; + private String objectiveId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveVolumeEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveVolumeEntityPacket.java index 905a132e..96c485e7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveVolumeEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RemoveVolumeEntityPacket.java @@ -7,11 +7,11 @@ @Data @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class RemoveVolumeEntityPacket implements BedrockPacket { - public int id; + private int id; /** * @since v503 */ - public int dimension; + private int dimension; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestAbilityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestAbilityPacket.java index 835c4ce4..f42f8374 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestAbilityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestAbilityPacket.java @@ -10,10 +10,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RequestAbilityPacket implements BedrockPacket { - public Ability ability; - public Ability.Type type; - public boolean boolValue; - public float floatValue; + private Ability ability; + private Ability.Type type; + private boolean boolValue; + private float floatValue; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestChunkRadiusPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestChunkRadiusPacket.java index 80d8f12f..f26d535b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestChunkRadiusPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestChunkRadiusPacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RequestChunkRadiusPacket implements BedrockPacket { - public int radius; + private int radius; /** * @since v582 */ - public int maxRadius; + private int maxRadius; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestNetworkSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestNetworkSettingsPacket.java index 0027e657..1b4f34ac 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestNetworkSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestNetworkSettingsPacket.java @@ -14,7 +14,7 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class RequestNetworkSettingsPacket implements BedrockPacket { - public int protocolVersion; + private int protocolVersion; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestPermissionsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestPermissionsPacket.java index 19d59849..bb99f426 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestPermissionsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RequestPermissionsPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RequestPermissionsPacket implements BedrockPacket { - public long uniqueEntityId; - public PlayerPermission permissions; - public int customPermissions; + private long uniqueEntityId; + private PlayerPermission permissions; + private int customPermissions; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkDataPacket.java index 28f52251..9c6993f7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkDataPacket.java @@ -13,11 +13,11 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true, exclude = {"data"}) public class ResourcePackChunkDataPacket extends AbstractReferenceCounted implements BedrockPacket { - public UUID packId; - public String packVersion; - public int chunkIndex; - public long progress; - public ByteBuf data; + private UUID packId; + private String packVersion; + private int chunkIndex; + private long progress; + private ByteBuf data; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkRequestPacket.java index 415ab2d4..58b8c931 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackChunkRequestPacket.java @@ -11,9 +11,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ResourcePackChunkRequestPacket implements BedrockPacket { - public UUID packId; - public String packVersion; - public int chunkIndex; + private UUID packId; + private String packVersion; + private int chunkIndex; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackClientResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackClientResponsePacket.java index 1b69e60c..8c8a15d0 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackClientResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackClientResponsePacket.java @@ -12,8 +12,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ResourcePackClientResponsePacket implements BedrockPacket { - public final List packIds = new ObjectArrayList<>(); - public Status status; + private final List packIds = new ObjectArrayList<>(); + private Status status; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackDataInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackDataInfoPacket.java index 7ce74e13..fbea2a7b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackDataInfoPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackDataInfoPacket.java @@ -12,14 +12,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ResourcePackDataInfoPacket implements BedrockPacket { - public UUID packId; - public String packVersion; - public long maxChunkSize; - public long chunkCount; - public long compressedPackSize; - public byte[] hash; - public boolean premium; - public ResourcePackType type; + private UUID packId; + private String packVersion; + private long maxChunkSize; + private long chunkCount; + private long compressedPackSize; + private byte[] hash; + private boolean premium; + private ResourcePackType type; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackStackPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackStackPacket.java index ac475d9d..26a05e19 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackStackPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePackStackPacket.java @@ -14,16 +14,16 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ResourcePackStackPacket implements BedrockPacket { - public boolean forcedToAccept; - public final List behaviorPacks = new ObjectArrayList<>(); - public final List resourcePacks = new ObjectArrayList<>(); - public String gameVersion; - public final List experiments = new ObjectArrayList<>(); - public boolean experimentsPreviouslyToggled; + private boolean forcedToAccept; + private final List behaviorPacks = new ObjectArrayList<>(); + private final List resourcePacks = new ObjectArrayList<>(); + private String gameVersion; + private final List experiments = new ObjectArrayList<>(); + private boolean experimentsPreviouslyToggled; /** * @since v671 */ - public boolean hasEditorPacks; + private boolean hasEditorPacks; @Override @@ -37,9 +37,9 @@ public BedrockPacketType getPacketType() { @Value public static class Entry { - public final String packId; - public final String packVersion; - public final String subPackName; + private final String packId; + private final String packVersion; + private final String subPackName; } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java index 7429f739..88e45450 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java @@ -14,33 +14,33 @@ public class ResourcePacksInfoPacket implements BedrockPacket { /** * @deprecated since v729 */ - public final List behaviorPackInfos = new ObjectArrayList<>(); - public final List resourcePackInfos = new ObjectArrayList<>(); - public boolean forcedToAccept; + private final List behaviorPackInfos = new ObjectArrayList<>(); + private final List resourcePackInfos = new ObjectArrayList<>(); + private boolean forcedToAccept; /** * @since v662 */ - public boolean hasAddonPacks; - public boolean scriptingEnabled; + private boolean hasAddonPacks; + private boolean scriptingEnabled; /** * @since v448 * @deprecated since v729 */ - public boolean forcingServerPacksEnabled; + private boolean forcingServerPacksEnabled; /** * @since v766 */ - public UUID worldTemplateId; + private UUID worldTemplateId; /** * @since v766 */ - public String worldTemplateVersion; + private String worldTemplateVersion; /** * Force the client to disable vibrant visuals, even if the client supports it. * * @since v818 */ - public boolean vibrantVisualsForceDisabled; + private boolean vibrantVisualsForceDisabled; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -54,22 +54,22 @@ public BedrockPacketType getPacketType() { @Data @AllArgsConstructor public static class Entry { - public UUID packId; - public String packVersion; - public long packSize; - public String contentKey; - public String subPackName; - public String contentId; - public boolean scripting; - public boolean raytracingCapable; + private UUID packId; + private String packVersion; + private long packSize; + private String contentKey; + private String subPackName; + private String contentId; + private boolean scripting; + private boolean raytracingCapable; /** * @since v712 */ - public boolean addonPack; + private boolean addonPack; /** * @since v748 */ - public String cdnUrl; + private String cdnUrl; } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksReadyForValidationPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksReadyForValidationPacket.java new file mode 100644 index 00000000..44b6a92a --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksReadyForValidationPacket.java @@ -0,0 +1,35 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Used to inform the server that the client has finished loading all resource packs. + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ResourcePacksReadyForValidationPacket implements BedrockPacket { + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.RESOURCE_PACKS_READY_FOR_VALIDATION; + } + + @Override + public ResourcePacksReadyForValidationPacket clone() { + try { + return (ResourcePacksReadyForValidationPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RespawnPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RespawnPacket.java index 542f1c19..5694dc0d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RespawnPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RespawnPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RespawnPacket implements BedrockPacket { - public Vector3f position; - public State state; - public long runtimeEntityId; // Only used server bound and pretty pointless + private Vector3f position; + private State state; + private long runtimeEntityId; // Only used server bound and pretty pointless @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RiderJumpPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RiderJumpPacket.java index 0bb8eea5..99ecea1b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RiderJumpPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/RiderJumpPacket.java @@ -12,7 +12,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class RiderJumpPacket implements BedrockPacket { - public int jumpStrength; + private int jumpStrength; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptCustomEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptCustomEventPacket.java index 41f7ffa6..4193a66b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptCustomEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptCustomEventPacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ScriptCustomEventPacket implements BedrockPacket { - public String eventName; - public String data; + private String eventName; + private String data; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptMessagePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptMessagePacket.java index f269ff3c..1812a9aa 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptMessagePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ScriptMessagePacket.java @@ -10,8 +10,8 @@ @ToString(doNotUseGetters = true) public class ScriptMessagePacket implements BedrockPacket { - public String channel; - public String message; + private String channel; + private String message; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SendPartyDestinationCookiePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SendPartyDestinationCookiePacket.java new file mode 100644 index 00000000..2d14c3bf --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SendPartyDestinationCookiePacket.java @@ -0,0 +1,69 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSplineType; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.HashMap; +import java.util.Map; + +/** + * Sent by the server to a client with a party destination cookie. + * + * @since v1001 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class SendPartyDestinationCookiePacket implements BedrockPacket { + + private String cookie; + private Intent intent; + private String destinationName; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.SEND_PARTY_DESTINATION_COOKIE; + } + + @Override + public BedrockPacket clone() { + try { + return (SendPartyDestinationCookiePacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } + + public enum Intent { + NOTIFY("notify"), OPT_IN("optin"), OPT_OUT("optout"); + + private static final Map serializeNames = new HashMap<>(values().length); + static { + for (Intent value : values()) { + serializeNames.put(value.getSerializeName(), value); + } + } + + private final String serializeName; + + Intent(String serializeName) { + this.serializeName = serializeName; + } + + public String getSerializeName() { + return this.serializeName; + } + + public static Intent fromName(String serializeName) { + return serializeNames.get(serializeName); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPlayerPostMovePositionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPlayerPostMovePositionPacket.java index dbca21c7..be5ff636 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPlayerPostMovePositionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPlayerPostMovePositionPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ServerPlayerPostMovePositionPacket implements BedrockPacket { - public Vector3f position; + private Vector3f position; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPresenceInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPresenceInfoPacket.java new file mode 100644 index 00000000..169d0c9b --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerPresenceInfoPacket.java @@ -0,0 +1,38 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.PresenceConfiguration; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent by the server to provide PresenceConfiguration to the client. + * + * @since v975 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ServerPresenceInfoPacket implements BedrockPacket { + + private PresenceConfiguration presenceConfiguration; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.SERVER_PRESENCE_INFO; + } + + @Override + public ServerPresenceInfoPacket clone() { + try { + return (ServerPresenceInfoPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerSettingsResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerSettingsResponsePacket.java index 0b573460..072c7778 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerSettingsResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerSettingsResponsePacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ServerSettingsResponsePacket implements BedrockPacket { - public int formId; - public String formData; + private int formId; + private String formData; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStatsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStatsPacket.java index a1864c50..a6258dc4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStatsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStatsPacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class ServerStatsPacket implements BedrockPacket { - public float serverTime; - public float networkTime; + private float serverTime; + private float networkTime; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStoreInfoPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStoreInfoPacket.java new file mode 100644 index 00000000..49e20385 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerStoreInfoPacket.java @@ -0,0 +1,40 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.data.ClientStoreEntrypointConfiguration; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent by the server to provide ClientStoreEntryPointConfiguration to the client. + * + * @since v975 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ServerStoreInfoPacket implements BedrockPacket { + + @Nullable + private ClientStoreEntrypointConfiguration store; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.SERVER_STORE_INFO; + } + + @Override + public ServerStoreInfoPacket clone() { + try { + return (ServerStoreInfoPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerToClientHandshakePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerToClientHandshakePacket.java index 19c865dd..6ef7c8ad 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerToClientHandshakePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerToClientHandshakePacket.java @@ -12,7 +12,7 @@ @ToString(doNotUseGetters = true) @NoEncryption // This is sent in plain text to complete the Diffie Hellman key exchange. public class ServerToClientHandshakePacket implements BedrockPacket { - public String jwt; + private String jwt; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataDrivenScreenClosedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataDrivenScreenClosedPacket.java new file mode 100644 index 00000000..6301412f --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataDrivenScreenClosedPacket.java @@ -0,0 +1,46 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Sent from the client to the server when a data driven screen is closed. + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ServerboundDataDrivenScreenClosedPacket implements BedrockPacket { + + private Integer formId; + private CloseReason closeReason; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.SERVERBOUND_DATA_DRIVEN_SCREEN_CLOSED; + } + + @Override + public ServerboundDataDrivenScreenClosedPacket clone() { + try { + return (ServerboundDataDrivenScreenClosedPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } + + public enum CloseReason { + PROGRAMMATIC_CLOSE, + PROGRAMMATIC_CLOSE_ALL, + CLIENT_CANCELED, + USER_BUSY, + INVALID_FORM, + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataStorePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataStorePacket.java index dfe621d8..245ac113 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataStorePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDataStorePacket.java @@ -3,20 +3,20 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.datastore.DataStoreUpdate; import org.cloudburstmc.protocol.common.PacketSignal; -import java.util.UUID; - +/** + * Applies a single update to the server data store from the client + * + * @since v897 + */ @Data @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ServerboundDataStorePacket implements BedrockPacket { - public String dataStoreName; - public String property; - public String path; - public Object data; - public int updateCount; + private DataStoreUpdate update = new DataStoreUpdate(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java index ccb1ab1a..40a7c8b2 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java @@ -3,21 +3,41 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.EntityDiagnosticTimingInfo; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.MemoryCategoryCounter; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.SystemDiagnosticTimingInfo; +import org.cloudburstmc.protocol.bedrock.data.diagnostics.WhiskerScopeDataSummary; import org.cloudburstmc.protocol.common.PacketSignal; +import java.util.ArrayList; +import java.util.List; + @Data @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ServerboundDiagnosticsPacket implements BedrockPacket{ - public float avgFps; - public float avgServerSimTickTimeMS; - public float avgClientSimTickTimeMS; - public float avgBeginFrameTimeMS; - public float avgInputTimeMS; - public float avgRenderTimeMS; - public float avgEndFrameTimeMS; - public float avgRemainderTimePercent; - public float avgUnaccountedTimePercent; + private float avgFps; + private float avgServerSimTickTimeMS; + private float avgClientSimTickTimeMS; + private float avgBeginFrameTimeMS; + private float avgInputTimeMS; + private float avgRenderTimeMS; + private float avgEndFrameTimeMS; + private float avgRemainderTimePercent; + private float avgUnaccountedTimePercent; + private final List memoryCategoryValues = new ArrayList<>(); + /** + * @since v975 + */ + private final List entityDiagnostics = new ArrayList<>(); + /** + * @since v975 + */ + private final List systemDiagnostics = new ArrayList<>(); + /** + * @since v1001 + */ + private final List whiskerScopes = new ArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java index 88384573..811a2486 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java @@ -10,11 +10,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ServerboundLoadingScreenPacket implements BedrockPacket { - public ServerboundLoadingScreenPacketType type; + private ServerboundLoadingScreenPacketType type; /** * Optional int, not present if null */ - public Integer loadingScreenId; + private Integer loadingScreenId; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundPackSettingChangePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundPackSettingChangePacket.java index f8bdd9c9..534f6a24 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundPackSettingChangePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundPackSettingChangePacket.java @@ -12,9 +12,9 @@ @ToString(doNotUseGetters = true) public class ServerboundPackSettingChangePacket implements BedrockPacket { - public UUID packId; - public String packSettingName; - public Object packSettingValue; + private UUID packId; + private String packSettingName; + private Object packSettingValue; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetCommandsEnabledPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetCommandsEnabledPacket.java index 52119c17..ed2a5d8d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetCommandsEnabledPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetCommandsEnabledPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetCommandsEnabledPacket implements BedrockPacket { - public boolean commandsEnabled; + private boolean commandsEnabled; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDefaultGameTypePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDefaultGameTypePacket.java index d9deb121..f0d8dd66 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDefaultGameTypePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDefaultGameTypePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetDefaultGameTypePacket implements BedrockPacket { - public int gamemode; + private int gamemode; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDifficultyPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDifficultyPacket.java index 3a386361..707ef79f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDifficultyPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDifficultyPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetDifficultyPacket implements BedrockPacket { - public int difficulty; + private int difficulty; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDisplayObjectivePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDisplayObjectivePacket.java index af3271db..b1e2842b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDisplayObjectivePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetDisplayObjectivePacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetDisplayObjectivePacket implements BedrockPacket { - public String displaySlot; - public String objectiveId; - public CharSequence displayName; - public String criteria; - public int sortOrder; + private String displaySlot; + private String objectiveId; + private CharSequence displayName; + private String criteria; + private int sortOrder; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityDataPacket.java index b324681e..137226a7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityDataPacket.java @@ -11,13 +11,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetEntityDataPacket implements BedrockPacket { - public EntityDataMap metadata = new EntityDataMap(); - public long runtimeEntityId; - public long tick; + private EntityDataMap metadata = new EntityDataMap(); + private long runtimeEntityId; + private long tick; /** * @since v557 */ - public EntityProperties properties = new EntityProperties(); + private EntityProperties properties = new EntityProperties(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityLinkPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityLinkPacket.java index c5be22b5..663ee09f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityLinkPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityLinkPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetEntityLinkPacket implements BedrockPacket { - public EntityLinkData entityLink; + private EntityLinkData entityLink; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityMotionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityMotionPacket.java index 9617ac7e..076a405b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityMotionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetEntityMotionPacket.java @@ -10,12 +10,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetEntityMotionPacket implements BedrockPacket { - public long runtimeEntityId; - public Vector3f motion; + private long runtimeEntityId; + private Vector3f motion; /** * @since v662 */ - public long tick; + private long tick; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHealthPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHealthPacket.java index 2395d912..cdac2cbb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHealthPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHealthPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetHealthPacket implements BedrockPacket { - public int health; + private int health; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHudPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHudPacket.java index 0a75dffe..52da40d5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHudPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetHudPacket.java @@ -17,8 +17,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetHudPacket implements BedrockPacket { - public final Set elements = new ObjectOpenHashSet<>(); - public HudVisibility visibility; + private final Set elements = new ObjectOpenHashSet<>(); + private HudVisibility visibility; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLastHurtByPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLastHurtByPacket.java index 3d5e49b4..826d6d80 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLastHurtByPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLastHurtByPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetLastHurtByPacket implements BedrockPacket { - public int entityTypeId; + private int entityTypeId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLocalPlayerAsInitializedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLocalPlayerAsInitializedPacket.java index 7b67f77b..5a7cc48d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLocalPlayerAsInitializedPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetLocalPlayerAsInitializedPacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetLocalPlayerAsInitializedPacket implements BedrockPacket { - public long runtimeEntityId; + private long runtimeEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetMovementAuthorityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetMovementAuthorityPacket.java index d9c99248..2e8dd251 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetMovementAuthorityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetMovementAuthorityPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetMovementAuthorityPacket implements BedrockPacket { - public AuthoritativeMovementMode movementMode; + private AuthoritativeMovementMode movementMode; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerGameTypePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerGameTypePacket.java index 59e05c74..0149de57 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerGameTypePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerGameTypePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetPlayerGameTypePacket implements BedrockPacket { - public int gamemode; + private int gamemode; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerInventoryOptionsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerInventoryOptionsPacket.java index 8ceccb56..6561f494 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerInventoryOptionsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetPlayerInventoryOptionsPacket.java @@ -12,11 +12,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetPlayerInventoryOptionsPacket implements BedrockPacket { - public InventoryTabLeft leftTab; - public InventoryTabRight rightTab; - public boolean filtering; - public InventoryLayout layout; - public InventoryLayout craftingLayout; + private InventoryTabLeft leftTab; + private InventoryTabRight rightTab; + private boolean filtering; + private InventoryLayout layout; + private InventoryLayout craftingLayout; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScorePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScorePacket.java index 57c44095..c7f85eac 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScorePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScorePacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetScorePacket implements BedrockPacket { - public Action action; - public List infos = new ObjectArrayList<>(); + private Action action; + private List infos = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScoreboardIdentityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScoreboardIdentityPacket.java index f61c09d5..d633700d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScoreboardIdentityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetScoreboardIdentityPacket.java @@ -14,8 +14,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetScoreboardIdentityPacket implements BedrockPacket { - public final List entries = new ObjectArrayList<>(); - public Action action; + private final List entries = new ObjectArrayList<>(); + private Action action; @Override public final PacketSignal handle(BedrockPacketHandler handler) { @@ -33,8 +33,8 @@ public enum Action { @Value public static class Entry { - public final long scoreboardId; - public final UUID uuid; + private final long scoreboardId; + private final UUID uuid; } @Override diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetSpawnPositionPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetSpawnPositionPacket.java index b5b0adb2..e68afce3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetSpawnPositionPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetSpawnPositionPacket.java @@ -13,23 +13,23 @@ public class SetSpawnPositionPacket implements BedrockPacket { // spawnType is the type of spawn to set. It is either PLAYER_SPAWN or WORLD_SPAWN, and specifies // the behaviour of the spawn set. If WORLD_SPAWN is set, the position to which compasses will point is // also changed. - public Type spawnType; + private Type spawnType; // blockPosition is the new position of the spawn that was set. If spawnType is WORLD_SPAWN, compasses will // point to this position. As of 1.16, blockPosition is always the position of the player. - public Vector3i blockPosition; + private Vector3i blockPosition; // dimensionId is the ID of the dimension that had its spawn updated. This is specifically relevant for // behaviour added in 1.16 such as the respawn anchor, which allows setting the spawn in a specific // dimension. - public int dimensionId; + private int dimensionId; // SpawnPosition is a new field added in 1.16. It holds the spawn position of the world. This spawn // position is {-2147483648, -2147483648, -2147483648} for a default spawn position. - public Vector3i spawnPosition = Vector3i.from(-2147483648, -2147483648, -2147483648); + private Vector3i spawnPosition = Vector3i.from(-2147483648, -2147483648, -2147483648); @Deprecated - public boolean spawnForced; + private boolean spawnForced; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTimePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTimePacket.java index a7af2911..5a3e531a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTimePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTimePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetTimePacket implements BedrockPacket { - public int time; + private int time; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java index 513fd120..d0106225 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java @@ -9,23 +9,23 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SetTitlePacket implements BedrockPacket { - public Type type; - public CharSequence text; - public int fadeInTime; - public int stayTime; - public int fadeOutTime; + private Type type; + private CharSequence text; + private int fadeInTime; + private int stayTime; + private int fadeOutTime; /** * @since v448 */ - public String xuid; + private String xuid; /** * @since v448 */ - public String platformOnlineId; + private String platformOnlineId; /** * @since v712 */ - public CharSequence filteredTitleText = ""; + private CharSequence filteredTitleText = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SettingsCommandPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SettingsCommandPacket.java index 3dcb7008..fb1dd1f8 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SettingsCommandPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SettingsCommandPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SettingsCommandPacket implements BedrockPacket { - public String command; - public boolean suppressingOutput; + private String command; + private boolean suppressingOutput; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowCreditsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowCreditsPacket.java index 0e01cb99..ddbff0cd 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowCreditsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowCreditsPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ShowCreditsPacket implements BedrockPacket { - public long runtimeEntityId; - public Status status; + private long runtimeEntityId; + private Status status; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowProfilePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowProfilePacket.java index 39671217..a3d65470 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowProfilePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowProfilePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ShowProfilePacket implements BedrockPacket { - public String xuid; + private String xuid; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowStoreOfferPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowStoreOfferPacket.java index 98f8926c..ca61cfa9 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowStoreOfferPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ShowStoreOfferPacket.java @@ -10,17 +10,17 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ShowStoreOfferPacket implements BedrockPacket { - public String offerId; + private String offerId; /** * @since v630 deprecated */ @Deprecated - public boolean shownToAll; + private boolean shownToAll; /** * @since v630 */ - public StoreOfferRedirectType redirectType; + private StoreOfferRedirectType redirectType; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimpleEventPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimpleEventPacket.java index f7e00f1e..334f6d54 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimpleEventPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimpleEventPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SimpleEventPacket implements BedrockPacket { - public SimpleEventType event; + private SimpleEventType event; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimulationTypePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimulationTypePacket.java index d753fb48..9232b241 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimulationTypePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SimulationTypePacket.java @@ -9,7 +9,7 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class SimulationTypePacket implements BedrockPacket { - public SimulationType type; + private SimulationType type; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnExperienceOrbPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnExperienceOrbPacket.java index 890d104a..979c77dd 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnExperienceOrbPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnExperienceOrbPacket.java @@ -10,8 +10,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SpawnExperienceOrbPacket implements BedrockPacket { - public Vector3f position; - public int amount; + private Vector3f position; + private int amount; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnParticleEffectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnParticleEffectPacket.java index 6d6252af..a02729c3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnParticleEffectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SpawnParticleEffectPacket.java @@ -13,11 +13,11 @@ @ToString(doNotUseGetters = true) @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public class SpawnParticleEffectPacket implements BedrockPacket { - public int dimensionId; - public long uniqueEntityId = -1; - public Vector3f position; - public String identifier; - public Optional molangVariablesJson; + private int dimensionId; + private long uniqueEntityId = -1; + private Vector3f position; + private String identifier; + private Optional molangVariablesJson; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java index 802ea456..f5bfbf17 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java @@ -21,111 +21,119 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true, exclude = {"itemDefinitions", "blockPalette"}) public class StartGamePacket implements BedrockPacket { - public final List> gamerules = new ObjectArrayList<>(); - public long uniqueEntityId; - public long runtimeEntityId; - public GameType playerGameType; - public Vector3f playerPosition; - public Vector2f rotation; + private final List> gamerules = new ObjectArrayList<>(); + private long uniqueEntityId; + private long runtimeEntityId; + private GameType playerGameType; + private Vector3f playerPosition; + private Vector2f rotation; // Level settings start - public long seed; - public SpawnBiomeType spawnBiomeType; - public String customBiomeName; - public int dimensionId; - public int generatorId; - public GameType levelGameType; - public int difficulty; - public Vector3i defaultSpawn; - public boolean achievementsDisabled; - public int dayCycleStopTime; - public int eduEditionOffers; - public boolean eduFeaturesEnabled; - public String educationProductionId; - public float rainLevel; - public float lightningLevel; - public boolean platformLockedContentConfirmed; - public boolean multiplayerGame; - public boolean broadcastingToLan; - public GamePublishSetting xblBroadcastMode; - public GamePublishSetting platformBroadcastMode; - public boolean commandsEnabled; - public boolean texturePacksRequired; - public final List experiments = new ObjectArrayList<>(); - public boolean experimentsPreviouslyToggled; - public boolean bonusChestEnabled; - public boolean startingWithMap; - public boolean trustingPlayers; - public PlayerPermission defaultPlayerPermission; - public int serverChunkTickRange; - public boolean behaviorPackLocked; - public boolean resourcePackLocked; - public boolean fromLockedWorldTemplate; - public boolean usingMsaGamertagsOnly; - public boolean fromWorldTemplate; - public boolean worldTemplateOptionLocked; - public boolean onlySpawningV1Villagers; - public String vanillaVersion; - public int limitedWorldWidth; - public int limitedWorldHeight; - public boolean netherType; + private long seed; + private SpawnBiomeType spawnBiomeType; + private String customBiomeName; + private int dimensionId; + private int generatorId; + private GameType levelGameType; + private int difficulty; + private Vector3i defaultSpawn; + private boolean achievementsDisabled; + private int dayCycleStopTime; + private int eduEditionOffers; + private boolean eduFeaturesEnabled; + private String educationProductionId; + private float rainLevel; + private float lightningLevel; + private boolean platformLockedContentConfirmed; + private boolean multiplayerGame; + private boolean broadcastingToLan; + private GamePublishSetting xblBroadcastMode; + private GamePublishSetting platformBroadcastMode; + private boolean commandsEnabled; + private boolean texturePacksRequired; + private final List experiments = new ObjectArrayList<>(); + private boolean experimentsPreviouslyToggled; + private boolean bonusChestEnabled; + private boolean startingWithMap; + private boolean trustingPlayers; + private PlayerPermission defaultPlayerPermission; + private int serverChunkTickRange; + private boolean behaviorPackLocked; + private boolean resourcePackLocked; + private boolean fromLockedWorldTemplate; + private boolean usingMsaGamertagsOnly; + private boolean fromWorldTemplate; + private boolean worldTemplateOptionLocked; + private boolean onlySpawningV1Villagers; + private String vanillaVersion; + private int limitedWorldWidth; + private int limitedWorldHeight; + private boolean netherType; /** * @since v465 */ - public EduSharedUriResource eduSharedUriResource = EduSharedUriResource.EMPTY; - public OptionalBoolean forceExperimentalGameplay; + private EduSharedUriResource eduSharedUriResource = EduSharedUriResource.EMPTY; + private OptionalBoolean forceExperimentalGameplay; /** * @since 1.19.20 */ - public ChatRestrictionLevel chatRestrictionLevel; + private ChatRestrictionLevel chatRestrictionLevel; /** * @since 1.19.20 */ - public boolean disablingPlayerInteractions; + private boolean disablingPlayerInteractions; /** * @since 1.19.20 */ - public boolean disablingPersonas; + private boolean disablingPersonas; /** * @since 1.19.20 */ - public boolean disablingCustomSkins; + private boolean disablingCustomSkins; + /** + * @since v1001 + */ + private int serverEditorConnectionPolicy; + /** + * @since v1001 + */ + private boolean allowAnonymousBlockDropsInEditorWorlds; // Level settings end - public String levelId; - public CharSequence levelName; - public String premiumWorldTemplateId; - public boolean trial; + private String levelId; + private CharSequence levelName; + private String premiumWorldTemplateId; + private boolean trial; // SyncedPlayerMovementSettings start /** * @deprecated since v818. {@link AuthoritativeMovementMode#SERVER_WITH_REWIND} is now the default movement mode. */ - public AuthoritativeMovementMode authoritativeMovementMode; - public int rewindHistorySize; + private AuthoritativeMovementMode authoritativeMovementMode; + private int rewindHistorySize; boolean serverAuthoritativeBlockBreaking; // SyncedPlayerMovementSettings end - public long currentTick; - public int enchantmentSeed; - public NbtList blockPalette; - public final List blockProperties = new ObjectArrayList<>(); + private long currentTick; + private int enchantmentSeed; + private NbtList blockPalette; + private final List blockProperties = new ObjectArrayList<>(); /** * @deprecated since v776. Use ItemComponentPacket instead. */ - public List itemDefinitions = new ObjectArrayList<>(); - public String multiplayerCorrelationId; + private List itemDefinitions = new ObjectArrayList<>(); + private String multiplayerCorrelationId; /** * @since v407 */ - public boolean inventoriesServerAuthoritative; + private boolean inventoriesServerAuthoritative; /** * The name of the server software. * Used for telemetry within the Bedrock client. * * @since v440 */ - public String serverEngine; + private String serverEngine; /** * @since v527 */ - public NbtMap playerPropertyData; + private NbtMap playerPropertyData; /** * A XXHash64 of all block states by their compound tag. * The exact way this is calculated is not currently known. @@ -134,68 +142,76 @@ public class StartGamePacket implements BedrockPacket { * * @since v475 */ - public long blockRegistryChecksum; + private long blockRegistryChecksum; /** * @since v527 */ - public UUID worldTemplateId; + private UUID worldTemplateId; /** * @since v534 */ - public WorldType editorWorldType = WorldType.NON_EDITOR; + private WorldType editorWorldType = WorldType.NON_EDITOR; /** * Enables client side chunk generation * * @since 1.19.20 */ - public boolean clientSideGenerationEnabled; + private boolean clientSideGenerationEnabled; /** * @since v567 */ - public boolean emoteChatMuted; + private boolean emoteChatMuted; /** * Whether block runtime IDs should be replaced by 32-bit integer hashes of NBT block state. * Unlike runtime IDs, this hashes should be persistent across versions and should make support for data-driven/custom blocks easier. * * @since v582 */ - public boolean blockNetworkIdsHashed; + private boolean blockNetworkIdsHashed; /** * @since v582 */ - public boolean createdInEditor; + private boolean createdInEditor; /** * @since v582 */ - public boolean exportedFromEditor; + private boolean exportedFromEditor; /** * @since v589 */ - public NetworkPermissions networkPermissions = NetworkPermissions.DEFAULT; + private NetworkPermissions networkPermissions = NetworkPermissions.DEFAULT; /** * @since v671 */ - public boolean hardcore; + private boolean hardcore; /** * @since v685 */ - public String serverId; + private String serverId; /** * @since v685 */ - public String worldId; + private String worldId; /** * @since v685 */ - public String scenarioId; + private String scenarioId; /** * @since v818 */ - public String ownerId; + private String ownerId; /** * @since v827 */ - public boolean tickDeathSystemsEnabled; + private boolean tickDeathSystemsEnabled; + /** + * @since v924 + */ + private ServerConfigurationJoinInfo serverConfigurationJoinInfo; + /** + * @since v1001 + */ + private boolean isLoggingChat; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java index 4fa0096b..e87c6c2b 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java @@ -9,12 +9,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class StopSoundPacket implements BedrockPacket { - public String soundName; - public boolean stoppingAllSound; + private String soundName; + private boolean stoppingAllSound; /** * @since v712 */ - public boolean stopMusicLegacy; + private boolean stopMusicLegacy; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureBlockUpdatePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureBlockUpdatePacket.java index 6cd79fc3..41eb7a2a 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureBlockUpdatePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureBlockUpdatePacket.java @@ -11,13 +11,13 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class StructureBlockUpdatePacket implements BedrockPacket { - public Vector3i blockPosition; - public StructureEditorData editorData; - public boolean powered; + private Vector3i blockPosition; + private StructureEditorData editorData; + private boolean powered; /** * @since v553 */ - public boolean waterlogged; + private boolean waterlogged; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataRequestPacket.java index 70936bc4..302ee410 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataRequestPacket.java @@ -12,10 +12,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class StructureTemplateDataRequestPacket implements BedrockPacket { - public String name; - public Vector3i position; - public StructureSettings settings; - public StructureTemplateRequestOperation operation; + private String name; + private Vector3i position; + private StructureSettings settings; + private StructureTemplateRequestOperation operation; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataResponsePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataResponsePacket.java index 55fd37cd..d505d61d 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataResponsePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StructureTemplateDataResponsePacket.java @@ -11,10 +11,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class StructureTemplateDataResponsePacket implements BedrockPacket { - public String name; - public boolean save; - public NbtMap tag; - public StructureTemplateResponseType type; + private String name; + private boolean save; + private NbtMap tag; + private StructureTemplateResponseType type; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkPacket.java index 5cc2dec1..71794a82 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkPacket.java @@ -15,13 +15,13 @@ @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) @ToString(doNotUseGetters = true) public class SubChunkPacket extends AbstractReferenceCounted implements BedrockPacket { - public int dimension; - public boolean cacheEnabled; + private int dimension; + private boolean cacheEnabled; /** * @since v485 */ - public Vector3i centerPosition; - public List subChunks = new ObjectArrayList<>(); + private Vector3i centerPosition; + private List subChunks = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkRequestPacket.java index bc92299c..40906218 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubChunkRequestPacket.java @@ -13,12 +13,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class SubChunkRequestPacket implements BedrockPacket { - public int dimension; - public Vector3i subChunkPosition; + private int dimension; + private Vector3i subChunkPosition; /** * @since v485 */ - public List positionOffsets = new ObjectArrayList<>(); + private List positionOffsets = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubClientLoginPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubClientLoginPacket.java index 4691ad29..3172f824 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubClientLoginPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SubClientLoginPacket.java @@ -17,12 +17,12 @@ public class SubClientLoginPacket implements BedrockPacket { * The JWT payload signed by Minecraft's authentication server. * Assuming this is a valid signature, it can be trusted to contain the player's identity and other information. */ - public AuthPayload authPayload; + private AuthPayload authPayload; /** * The JWT payload signed by the client. * The client can modify this, so it should not be trusted. */ - public String clientJwt; + private String clientJwt; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncEntityPropertyPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncEntityPropertyPacket.java index fa8a81c6..9f589529 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncEntityPropertyPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncEntityPropertyPacket.java @@ -8,7 +8,7 @@ @Data @EqualsAndHashCode(doNotUseGetters = true, callSuper = false) public class SyncEntityPropertyPacket implements BedrockPacket { - public NbtMap data; + private NbtMap data; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncWorldClocksPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncWorldClocksPacket.java new file mode 100644 index 00000000..e735278c --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SyncWorldClocksPacket.java @@ -0,0 +1,40 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.clock.SyncWorldClocksPayload; +import org.cloudburstmc.protocol.common.PacketSignal; + +/** + * Initializes and syncs world clocks from the server to clients. (Currently disabled) + * Sent from the server when a client joins to initialize all world clocks for the client and periodically to all clients to keep them in sync. + * It is also sent to all clients when a world clock's paused state changes or when time markers are added or removed. + * + * @since v944 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class SyncWorldClocksPacket implements BedrockPacket { + + private SyncWorldClocksPayload data; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.SYNC_WORLD_CLOCKS; + } + + @Override + public SyncWorldClocksPacket clone() { + try { + return (SyncWorldClocksPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TakeItemEntityPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TakeItemEntityPacket.java index be9f7e2b..0d328c85 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TakeItemEntityPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TakeItemEntityPacket.java @@ -9,8 +9,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class TakeItemEntityPacket implements BedrockPacket { - public long itemRuntimeEntityId; - public long runtimeEntityId; + private long itemRuntimeEntityId; + private long runtimeEntityId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java index 12cc29df..2c67ae73 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TextPacket.java @@ -12,17 +12,17 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class TextPacket implements BedrockPacket { - public Type type; - public String sourceName; - public CharSequence message; - public List parameters = new ObjectArrayList<>(); - public boolean needsTranslation; - public String xuid; - public String platformChatId = ""; + private Type type; + private String sourceName; + private CharSequence message; + private List parameters = new ObjectArrayList<>(); + private boolean needsTranslation; + private String xuid; + private String platformChatId = ""; /** * @since v685 */ - public CharSequence filteredMessage = ""; + private CharSequence filteredMessage = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TickSyncPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TickSyncPacket.java index 4129d639..866005d5 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TickSyncPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TickSyncPacket.java @@ -12,8 +12,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class TickSyncPacket implements BedrockPacket { - public long requestTimestamp; - public long responseTimestamp; + private long requestTimestamp; + private long responseTimestamp; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToastRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToastRequestPacket.java index 9dd5483d..22bb15eb 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToastRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToastRequestPacket.java @@ -10,8 +10,8 @@ @ToString(doNotUseGetters = true) public class ToastRequestPacket implements BedrockPacket { - public CharSequence title; - public CharSequence content; + private CharSequence title; + private CharSequence content; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToggleCrafterSlotRequestPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToggleCrafterSlotRequestPacket.java index 56ecd99a..da6551c4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToggleCrafterSlotRequestPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ToggleCrafterSlotRequestPacket.java @@ -10,9 +10,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class ToggleCrafterSlotRequestPacket implements BedrockPacket { - public Vector3i blockPosition; - public byte slot; - public boolean disabled; + private Vector3i blockPosition; + private byte slot; + private boolean disabled; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TransferPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TransferPacket.java index ea2a2cf3..d4eb66bc 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TransferPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TransferPacket.java @@ -9,12 +9,12 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class TransferPacket implements BedrockPacket { - public String address; - public int port; + private String address; + private int port; /** * @since v729 */ - public boolean reloadWorld; + private boolean reloadWorld; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TrimDataPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TrimDataPacket.java index 0c798a58..f23c51dd 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TrimDataPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/TrimDataPacket.java @@ -15,8 +15,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class TrimDataPacket implements BedrockPacket { - public final List patterns = new ObjectArrayList<>(); - public final List materials = new ObjectArrayList<>(); + private final List patterns = new ObjectArrayList<>(); + private final List materials = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnknownPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnknownPacket.java index 90008190..51d8148e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnknownPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnknownPacket.java @@ -12,8 +12,8 @@ @Data @EqualsAndHashCode(doNotUseGetters = true) public final class UnknownPacket implements BedrockPacket, BedrockPacketSerializer, ReferenceCounted { - public int packetId; - public ByteBuf payload; + private int packetId; + private ByteBuf payload; @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, UnknownPacket packet) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnlockedRecipesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnlockedRecipesPacket.java index 144b5bcb..095cec39 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnlockedRecipesPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UnlockedRecipesPacket.java @@ -13,8 +13,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UnlockedRecipesPacket implements BedrockPacket { - public ActionType action; - public final List unlockedRecipes = new ObjectArrayList<>(); + private ActionType action; + private final List unlockedRecipes = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAbilitiesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAbilitiesPacket.java index 15f73c7d..a6afc7c7 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAbilitiesPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAbilitiesPacket.java @@ -16,10 +16,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateAbilitiesPacket implements BedrockPacket, PlayerAbilityHolder { - public long uniqueEntityId; - public PlayerPermission playerPermission; - public CommandPermission commandPermission; - public List abilityLayers = new ObjectArrayList<>(); + private long uniqueEntityId; + private PlayerPermission playerPermission; + private CommandPermission commandPermission; + private List abilityLayers = new ObjectArrayList<>(); @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAdventureSettingsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAdventureSettingsPacket.java index 3bfcfbff..1ce0d33f 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAdventureSettingsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAdventureSettingsPacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateAdventureSettingsPacket implements BedrockPacket { - public boolean noPvM; - public boolean noMvP; - public boolean immutableWorld; - public boolean showNameTags; - public boolean autoJump; + private boolean noPvM; + private boolean noMvP; + private boolean immutableWorld; + private boolean showNameTags; + private boolean autoJump; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAttributesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAttributesPacket.java index 028457c5..26e898c4 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAttributesPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateAttributesPacket.java @@ -13,9 +13,9 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateAttributesPacket implements BedrockPacket { - public long runtimeEntityId; - public List attributes = new ObjectArrayList<>(); - public long tick; + private long runtimeEntityId; + private List attributes = new ObjectArrayList<>(); + private long tick; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockPropertiesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockPropertiesPacket.java index 6c376e54..0f7aaa60 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockPropertiesPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockPropertiesPacket.java @@ -10,7 +10,7 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateBlockPropertiesPacket implements BedrockPacket { - public NbtMap properties; + private NbtMap properties; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockSyncedPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockSyncedPacket.java index e430999f..68e00392 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockSyncedPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateBlockSyncedPacket.java @@ -8,8 +8,8 @@ @Data @EqualsAndHashCode(doNotUseGetters = true, callSuper = true) public class UpdateBlockSyncedPacket extends UpdateBlockPacket { - public long runtimeEntityId; - public BlockSyncType entityBlockSyncType; + private long runtimeEntityId; + private BlockSyncType entityBlockSyncType; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientInputLocksPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientInputLocksPacket.java index 9e6dcdc4..63ac487e 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientInputLocksPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientInputLocksPacket.java @@ -12,8 +12,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateClientInputLocksPacket implements BedrockPacket { - public int lockComponentData; - public Vector3f serverPosition; + private int lockComponentData; + /** + * @deprecated since v944 + */ + private Vector3f serverPosition; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientOptionsPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientOptionsPacket.java index cc97ce13..fb4c9d49 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientOptionsPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateClientOptionsPacket.java @@ -3,6 +3,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.GraphicsMode; import org.cloudburstmc.protocol.common.PacketSignal; @@ -10,7 +11,14 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateClientOptionsPacket implements BedrockPacket { - public GraphicsMode graphicsMode; + + @Nullable + private GraphicsMode graphicsMode; + /** + * @since v975 + */ + @Nullable + private Boolean filterProfanityChange; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateEquipPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateEquipPacket.java index 48b8464b..787e3a62 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateEquipPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateEquipPacket.java @@ -10,11 +10,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateEquipPacket implements BedrockPacket { - public short windowId; - public short windowType; - public int size; // Couldn't find anything on this one. Looks like it isn't used? - public long uniqueEntityId; - public NbtMap tag; + private short windowId; + private short windowType; + private int size; // Couldn't find anything on this one. Looks like it isn't used? + private long uniqueEntityId; + private NbtMap tag; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdatePlayerGameTypePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdatePlayerGameTypePacket.java index 93d84f3b..903e0bac 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdatePlayerGameTypePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdatePlayerGameTypePacket.java @@ -10,12 +10,12 @@ @EqualsAndHashCode @ToString(doNotUseGetters = true) public class UpdatePlayerGameTypePacket implements BedrockPacket { - public GameType gameType; - public long entityId; + private GameType gameType; + private long entityId; /** * @since v671 */ - public long tick; + private long tick; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSoftEnumPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSoftEnumPacket.java index 5a611ac3..f5d8cdff 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSoftEnumPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSoftEnumPacket.java @@ -11,8 +11,8 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateSoftEnumPacket implements BedrockPacket { - public CommandEnumData softEnum; - public SoftEnumUpdateType type; + private CommandEnumData softEnum; + private SoftEnumUpdateType type; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSubChunkBlocksPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSubChunkBlocksPacket.java index cf4b5c6b..7568e7df 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSubChunkBlocksPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateSubChunkBlocksPacket.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.BlockChangeEntry; import org.cloudburstmc.protocol.common.PacketSignal; @@ -13,12 +14,10 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateSubChunkBlocksPacket implements BedrockPacket { - public int chunkX; - public int chunkY; - public int chunkZ; + private Vector3i position; - public final List standardBlocks = new ObjectArrayList<>(); - public final List extraBlocks = new ObjectArrayList<>(); + private final List standardBlocks = new ObjectArrayList<>(); + private final List extraBlocks = new ObjectArrayList<>(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateTradePacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateTradePacket.java index 5d82472f..a7304662 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateTradePacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/UpdateTradePacket.java @@ -11,17 +11,17 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class UpdateTradePacket implements BedrockPacket { - public int containerId; - public ContainerType containerType; - public int size; // Hardcoded to 0 - public int tradeTier; - public long traderUniqueEntityId; - public long playerUniqueEntityId; - public CharSequence displayName; - public NbtMap offers; - public boolean newTradingUi; - public boolean recipeAddedOnUpdate; - public boolean usingEconomyTrade; + private int containerId; + private ContainerType containerType; + private int size; // Hardcoded to 0 + private int tradeTier; + private long traderUniqueEntityId; + private long playerUniqueEntityId; + private CharSequence displayName; + private NbtMap offers; + private boolean newTradingUi; + private boolean recipeAddedOnUpdate; + private boolean usingEconomyTrade; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VideoStreamConnectPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VideoStreamConnectPacket.java index 0d3299ab..273c7fc3 100644 --- a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VideoStreamConnectPacket.java +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VideoStreamConnectPacket.java @@ -9,11 +9,11 @@ @EqualsAndHashCode(doNotUseGetters = true) @ToString(doNotUseGetters = true) public class VideoStreamConnectPacket implements BedrockPacket { - public String address; - public float screenshotFrequency; - public Action action; - public int width; - public int height; + private String address; + private float screenshotFrequency; + private Action action; + private int width; + private int height; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VoxelShapesPacket.java b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VoxelShapesPacket.java new file mode 100644 index 00000000..6336cbd8 --- /dev/null +++ b/relay/Protocol/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/VoxelShapesPacket.java @@ -0,0 +1,47 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.SerializableVoxelShape; +import org.cloudburstmc.protocol.common.PacketSignal; + +import java.util.List; +import java.util.Map; + +/** + * Syncs client with server voxel shape data on world join. This packet contains a copy of all behavior pack voxel shapes data and is used by StartGamePacket. + * Sends the serializable voxel shapes data to the client as it's needed on both the client and server. This packet should always be sent before StartGamePacket. (since v975) + * + * @since v924 + */ +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class VoxelShapesPacket implements BedrockPacket { + + private List shapes; + private Map nameMap; + /** + * @since v944 + */ + private int customShapeCount; + + @Override + public final PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + public BedrockPacketType getPacketType() { + return BedrockPacketType.VOXEL_SHAPES; + } + + @Override + public VoxelShapesPacket clone() { + try { + return (VoxelShapesPacket) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(e); + } + } +} diff --git a/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/BedrockPeer.java b/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/BedrockPeer.java index 6f8a6066..fddd87cc 100644 --- a/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/BedrockPeer.java +++ b/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/BedrockPeer.java @@ -55,6 +55,7 @@ public class BedrockPeer extends ChannelInboundHandlerAdapter { protected final BedrockSessionFactory sessionFactory; protected ScheduledFuture tickFuture; protected AtomicBoolean closed = new AtomicBoolean(); + protected AtomicBoolean closing = new AtomicBoolean(); public BedrockPeer(Channel channel, BedrockSessionFactory sessionFactory) { this.channel = channel; @@ -62,6 +63,9 @@ public BedrockPeer(Channel channel, BedrockSessionFactory sessionFactory) { } protected void onBedrockPacket(BedrockPacketWrapper wrapper) { + if (this.closing.get()) { + return; + } int targetId = wrapper.getTargetSubClientId(); BedrockSession session = this.sessions.computeIfAbsent(targetId, this::onSessionCreated); session.onPacket(wrapper); @@ -82,17 +86,21 @@ protected void removeSession(BedrockSession session) { } protected void onTick() { - if (this.closed.get()) { + if (this.closing.get() || this.closed.get()) { return; } + flushQueue(); + } - if (!this.packetQueue.isEmpty()) { - BedrockPacketWrapper packet; - while ((packet = this.packetQueue.poll()) != null) { - this.channel.write(packet); - } - this.channel.flush(); + protected void flushQueue() { + if (this.packetQueue.isEmpty()) { + return; } + BedrockPacketWrapper packet; + while ((packet = this.packetQueue.poll()) != null) { + this.channel.write(packet); + } + this.channel.flush(); } private void onRakNetDisconnect(ChannelHandlerContext ctx, RakDisconnectReason reason) { @@ -109,13 +117,34 @@ private void free() { } public void sendPacket(int senderClientId, int targetClientId, BedrockPacket packet) { + if (this.closing.get() || this.closed.get()) { + ReferenceCountUtil.safeRelease(packet); // queue is no longer drained + return; + } this.packetQueue.add(BedrockPacketWrapper.create(0, senderClientId, targetClientId, packet, null)); } public void sendPacketImmediately(int senderClientId, int targetClientId, BedrockPacket packet) { + if (this.closing.get()) { // closed is covered by netty: writes to a closed channel are failed and released + ReferenceCountUtil.safeRelease(packet); + return; + } this.channel.writeAndFlush(BedrockPacketWrapper.create(0, senderClientId, targetClientId, packet, null)); } + public void sendPacketsImmediately(int senderClientId, int targetClientId, BedrockPacket... packets) { + if (this.closing.get()) { + for (BedrockPacket packet : packets) { + ReferenceCountUtil.safeRelease(packet); + } + return; + } + for (BedrockPacket packet : packets) { + this.channel.write(BedrockPacketWrapper.create(0, senderClientId, targetClientId, packet, null)); + } + this.channel.flush(); + } + public void enableEncryption(@NonNull SecretKey secretKey) { Objects.requireNonNull(secretKey, "secretKey"); if (!secretKey.getAlgorithm().equals("AES")) { @@ -178,10 +207,30 @@ public void setCodec(BedrockCodec codec) { } public void close(CharSequence reason) { + if (this.channel.eventLoop().inEventLoop()) { + this.close0(reason, false); + } else { + this.channel.eventLoop().execute(() -> this.close0(reason, false)); + } + } + + protected void close0(CharSequence reason, boolean force) { + if (!this.closing.compareAndSet(false, true)) { + return; + } + + this.blackholeInboundPackets(); // inbound stops either way + for (BedrockSession session : this.sessions.values()) { session.disconnectReason = reason; } - this.channel.disconnect(); + + if (force) { + // If an exception is thrown or the peer is misbehaving, we close it immediately without notification + this.channel.close(); + } else { + this.channel.disconnect(); + } } protected void onClose() { @@ -199,12 +248,13 @@ protected void onClose() { this.tickFuture = null; } - for (BedrockSession session : this.sessions.values()) + for (BedrockSession session : this.sessions.values()) { try { session.onClose(); } catch (Exception e) { log.error("Exception whilst closing session", e); } + } this.free(); } diff --git a/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/util/EncryptionUtils.java b/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/util/EncryptionUtils.java index c41ff601..a785bd9d 100644 --- a/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/util/EncryptionUtils.java +++ b/relay/Protocol/bedrock-connection/src/main/java/org/cloudburstmc/protocol/bedrock/util/EncryptionUtils.java @@ -225,23 +225,33 @@ public static byte[] verifyClientData(String clientDataJwt, PublicKey identityPu public static ChainValidationResult validatePayload(AuthPayload payload) throws JoseException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidJwtException { + ChainValidationResult result; + if (payload instanceof CertificateChainPayload) { CertificateChainPayload chainPayload = (CertificateChainPayload) payload; List chain = chainPayload.getChain(); if (chain == null || chain.isEmpty()) { throw new IllegalStateException("Certificate chain is empty"); } - return validateChain(chain); + result = validateChain(chain); } else if (payload instanceof TokenPayload) { TokenPayload tokenPayload = (TokenPayload) payload; String token = tokenPayload.getToken(); if (token == null || token.isEmpty()) { throw new IllegalStateException("Token is empty"); } - return validateToken(payload.getAuthType(), token); + result = validateToken(payload.getAuthType(), token); } else { throw new IllegalArgumentException("Unsupported AuthPayload type: " + payload.getClass().getName()); } + + if (payload.getAuthType() == AuthType.FULL) { + if (result.identityClaims().extraData == null || result.identityClaims().extraData.xuid == null || result.identityClaims().extraData.displayName == null) { + throw new IllegalStateException("Missing extraData for full auth"); + } + } + + return result; } public static ChainValidationResult validateChain(List chain) diff --git a/relay/Protocol/common/src/main/java/org/cloudburstmc/protocol/common/util/Zlib.java b/relay/Protocol/common/src/main/java/org/cloudburstmc/protocol/common/util/Zlib.java index 492a79de..c2e42055 100644 --- a/relay/Protocol/common/src/main/java/org/cloudburstmc/protocol/common/util/Zlib.java +++ b/relay/Protocol/common/src/main/java/org/cloudburstmc/protocol/common/util/Zlib.java @@ -20,28 +20,22 @@ public class Zlib { private static final int CHUNK = 8192; + private final boolean raw; private final FastThreadLocal inflaterLocal; private final FastThreadLocal deflaterLocal; - private final FastThreadLocal chunkBytes; private Zlib(boolean raw) { - // Required for Android API versions prior to 26. - this.inflaterLocal = new FastThreadLocal() { + this.raw = raw; + this.inflaterLocal = new FastThreadLocal() { @Override - public Inflater initialValue() { - return new Inflater(raw); + protected Inflater initialValue() { + return new Inflater(Zlib.this.raw); } }; - this.deflaterLocal = new FastThreadLocal() { + this.deflaterLocal = new FastThreadLocal() { @Override protected Deflater initialValue() { - return new Deflater(7, raw); - } - }; - this.chunkBytes = new FastThreadLocal() { - @Override - protected byte[] initialValue() { - return new byte[CHUNK]; + return new Deflater(7, Zlib.this.raw); } }; } @@ -62,33 +56,24 @@ public ByteBuf inflate(ByteBuf buffer, int maxSize) throws DataFormatException { Inflater inflater = inflaterLocal.get(); inflater.reset(); - ByteBuffer input = source.internalNioBuffer(source.readerIndex(), source.readableBytes()); - if (input.hasArray()) { - inflater.setInput(input.array(), input.arrayOffset() + input.position(), input.remaining()); - } else { - byte[] bytes = new byte[input.remaining()]; - input.get(bytes); - inflater.setInput(bytes); - } - inflater.finished(); + ByteBuffer nioBuffer = source.internalNioBuffer(source.readerIndex(), source.readableBytes()); + inflater.setInput(nioBuffer.array(), nioBuffer.arrayOffset() + nioBuffer.position(), nioBuffer.remaining()); + byte[] output = new byte[CHUNK]; while (!inflater.finished()) { - decompressed.ensureWritable(CHUNK); - int index = decompressed.writerIndex(); - int written = inflate(inflater, decompressed.internalNioBuffer(index, CHUNK)); + int written = inflater.inflate(output); if (written < 1) { break; } - decompressed.writerIndex(index + written); + decompressed.writeBytes(output, 0, written); if (maxSize > 0 && decompressed.writerIndex() >= maxSize) { throw new DataFormatException("Inflated data exceeds maximum size"); } } + decompressed.retain(); return decompressed; - } catch (DataFormatException e) { - decompressed.release(); - throw e; } finally { + decompressed.release(); if (source != null && source != buffer) { source.release(); } @@ -117,20 +102,13 @@ public void deflate(ByteBuf uncompressed, ByteBuf compressed, int level) throws Deflater deflater = deflaterLocal.get(); deflater.reset(); deflater.setLevel(level); - ByteBuffer input = source.internalNioBuffer(source.readerIndex(), source.readableBytes()); - if (input.hasArray()) { - deflater.setInput(input.array(), input.arrayOffset() + input.position(), input.remaining()); - } else { - byte[] bytes = new byte[input.remaining()]; - input.get(bytes); - deflater.setInput(bytes); - } + ByteBuffer nioBuffer = source.internalNioBuffer(source.readerIndex(), source.readableBytes()); + deflater.setInput(nioBuffer.array(), nioBuffer.arrayOffset() + nioBuffer.position(), nioBuffer.remaining()); + byte[] output = new byte[CHUNK]; while (!deflater.finished()) { - int index = destination.writerIndex(); - destination.ensureWritable(CHUNK); - int written = deflate(deflater, destination.internalNioBuffer(index, CHUNK)); - destination.writerIndex(index + written); + int written = deflater.deflate(output); + destination.writeBytes(output, 0, written); } if (destination != compressed) { @@ -145,35 +123,4 @@ public void deflate(ByteBuf uncompressed, ByteBuf compressed, int level) throws } } } - - private int inflate(Inflater inflater, ByteBuffer output) throws DataFormatException { - if (output.hasArray()) { - return inflater.inflate(output.array(), output.arrayOffset() + output.position(), output.remaining()); - } else { - int startPos = output.position(); - byte[] chunkBytes = this.chunkBytes.get(); - while (output.remaining() > 0 && !inflater.finished()) { - int length = Math.min(output.remaining(), CHUNK); - int result = inflater.inflate(chunkBytes, 0, length); - output.put(chunkBytes, 0, result); - } - return output.position() - startPos; - } - } - - private int deflate(Deflater deflater, ByteBuffer output) { - deflater.finish(); - if (output.hasArray()) { - return deflater.deflate(output.array(), output.arrayOffset() + output.position(), output.remaining()); - } else { - int startPos = output.position(); - byte[] chunkBytes = this.chunkBytes.get(); - while (output.remaining() > 0 && !deflater.finished()) { - int length = Math.min(output.remaining(), CHUNK); - int result = deflater.deflate(chunkBytes, 0, length); - output.put(chunkBytes, 0, result); - } - return output.position() - startPos; - } - } -} \ No newline at end of file +} diff --git a/relay/src/main/kotlin/com/retrivedmods/wrelay/client/ClientIdentification.kt b/relay/src/main/kotlin/com/retrivedmods/wrelay/client/ClientIdentification.kt index 6441cd4a..64e35335 100644 --- a/relay/src/main/kotlin/com/retrivedmods/wrelay/client/ClientIdentification.kt +++ b/relay/src/main/kotlin/com/retrivedmods/wrelay/client/ClientIdentification.kt @@ -9,7 +9,6 @@ object ClientIdentification { fun generateRealisticClientGUID(): Long { val timestamp = System.currentTimeMillis() val random = Random.nextLong(0, 0xFFFFFF) - return (timestamp shl 24) or random } @@ -32,11 +31,11 @@ object ClientIdentification { } fun getRealisticMTUSizes(): Array { - return arrayOf(1464, 1200, 576) + return arrayOf(1472, 1464, 1200, 1024, 576) } fun getMinecraftProtocolVersion(): Int { - return 11 + return 767 } fun getEnhancedClientConfig(): ClientConfig { @@ -47,7 +46,9 @@ object ClientIdentification { unconnectedMagic = createMinecraftUnconnectedMagic(), internalAddresses = generateInternalAddresses(), compatibilityMode = true, - useRealisticTiming = true + useRealisticTiming = true, + connectionTimeout = 30000L, + lan_discovery_enabled = true ) } @@ -59,7 +60,9 @@ object ClientIdentification { unconnectedMagic = createMinecraftUnconnectedMagic(), internalAddresses = generateInternalAddresses(), compatibilityMode = true, - useRealisticTiming = false + useRealisticTiming = false, + connectionTimeout = 30000L, + lan_discovery_enabled = true ) } @@ -68,7 +71,7 @@ object ClientIdentification { } fun getRealisticSessionTimeout(): Long { - return Random.nextLong(15000, 25000) + return Random.nextLong(25000, 35000) } data class ClientConfig( @@ -78,7 +81,9 @@ object ClientIdentification { val unconnectedMagic: ByteBuf, val internalAddresses: List, val compatibilityMode: Boolean, - val useRealisticTiming: Boolean + val useRealisticTiming: Boolean, + val connectionTimeout: Long = 30000L, + val lan_discovery_enabled: Boolean = true ) { override fun equals(other: Any?): Boolean { if (this === other) return true @@ -93,6 +98,8 @@ object ClientIdentification { if (internalAddresses != other.internalAddresses) return false if (compatibilityMode != other.compatibilityMode) return false if (useRealisticTiming != other.useRealisticTiming) return false + if (connectionTimeout != other.connectionTimeout) return false + if (lan_discovery_enabled != other.lan_discovery_enabled) return false return true } @@ -105,7 +112,9 @@ object ClientIdentification { result = 31 * result + internalAddresses.hashCode() result = 31 * result + compatibilityMode.hashCode() result = 31 * result + useRealisticTiming.hashCode() + result = 31 * result + connectionTimeout.hashCode() + result = 31 * result + lan_discovery_enabled.hashCode() return result } } -} \ No newline at end of file +} diff --git a/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/CodecRegistry.kt b/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/CodecRegistry.kt index b53748f5..8f5ce3cf 100644 --- a/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/CodecRegistry.kt +++ b/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/CodecRegistry.kt @@ -70,7 +70,10 @@ object CodecRegistry { registerCodec(859, "1.21.120", "org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859") registerCodec(860, "1.21.124", "org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860") registerCodec(898, "1.21.130", "org.cloudburstmc.protocol.bedrock.codec.v898.Bedrock_v898") - + registerCodec(924, "1.26.0", "org.cloudburstmc.protocol.bedrock.codec.v924.Bedrock_v924") + registerCodec(944, "1.26.10", "org.cloudburstmc.protocol.bedrock.codec.v944.Bedrock_v944") + registerCodec(975, "1.26.20", "org.cloudburstmc.protocol.bedrock.codec.v975.Bedrock_v975") + registerCodec(1001, "1.26.30", "org.cloudburstmc.protocol.bedrock.codec.v1001.Bedrock_v1001") sortedProtocolVersions.sortDescending() } @@ -102,18 +105,23 @@ object CodecRegistry { return exactMatch } - val closestVersion = sortedProtocolVersions.findLast { it <= protocolVersion } - ?: sortedProtocolVersions.last() + // Pick the highest registered protocol that is still <= the requested one. + // If the client is newer than everything we support, fall back to the latest + // codec we actually have registered instead of the oldest. + val closestVersion = sortedProtocolVersions.filter { it <= protocolVersion }.maxOrNull() + ?: sortedProtocolVersions.maxOrNull() + ?: error("No codecs registered") return codecMap[closestVersion]!! } fun getLatestCodec(): BedrockCodec { - return codecMap[sortedProtocolVersions.first()]!! + val latest = sortedProtocolVersions.maxOrNull() ?: error("No codecs registered") + return codecMap[latest]!! } fun getMinecraftVersion(protocolVersion: Int): String? { return minecraftVersionMap.entries.find { it.value == protocolVersion }?.key } -} \ No newline at end of file +} diff --git a/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/VersionDetector.kt b/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/VersionDetector.kt index 48fbf3f7..b5a5ec5e 100644 --- a/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/VersionDetector.kt +++ b/relay/src/main/kotlin/com/retrivedmods/wrelay/codec/VersionDetector.kt @@ -3,6 +3,10 @@ package com.retrivedmods.wrelay.codec object VersionDetector { private val versionRanges = mapOf( + 1001 to listOf("1.26.30", "1.26.31", "1.26.32", "26.33"), + 975 to listOf("1.26.20", "1.26.21", "1.26.22"), + 944 to listOf("1.26.10", "1.26.11", "1.26.12"), + 924 to listOf("1.26.0", "1.26.1", "1.26.2", "1.26.3"), 898 to listOf("1.21.130", "1.21.131", "1.21.132"), 860 to listOf("1.21.124"), 859 to listOf("1.21.120"), diff --git a/relay/src/main/resources/protocol_mapping.txt b/relay/src/main/resources/protocol_mapping.txt index 3dd34e8f..0c874c03 100644 --- a/relay/src/main/resources/protocol_mapping.txt +++ b/relay/src/main/resources/protocol_mapping.txt @@ -51,4 +51,5 @@ 844 859 860 -898 \ No newline at end of file +898 +1001 \ No newline at end of file