diff --git a/README.md b/README.md index 4099ea27f..25e200e1a 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,10 @@ Check out [EXAMPLES.md](EXAMPLES.md) for examples on how to use this library. | Bedrock_v630 | 1.20.50 - 1.20.51 | | Bedrock_v649 | 1.20.60 | | Bedrock_v662 | 1.20.70 | +| Bedrock_v671 | 1.20.80 | +| Bedrock_v685 | 1.21.0 | +| Bedrock_v686 | 1.21.2 | +| Bedrock_v712 | 1.21.20 | ##### Repository: diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java index c25776f80..67fdaea4e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BaseBedrockCodecHelper.java @@ -28,6 +28,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseContainer; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventoryActionData; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventorySource; import org.cloudburstmc.protocol.bedrock.data.skin.AnimationData; @@ -583,4 +584,14 @@ public DefinitionRegistry getCameraPresetDefinitions() { public void setCameraPresetDefinitions(DefinitionRegistry registry) { throw new UnsupportedOperationException(); } + + @Override + public void writeItemStackResponseContainer(ByteBuf buffer, ItemStackResponseContainer container) { + throw new UnsupportedOperationException(); + } + + @Override + public ItemStackResponseContainer readItemStackResponseContainer(ByteBuf buffer) { + throw new UnsupportedOperationException(); + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java index ff46605f3..76867b866 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/BedrockCodecHelper.java @@ -20,6 +20,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseContainer; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventoryActionData; import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.cloudburstmc.protocol.bedrock.data.structure.StructureSettings; @@ -233,4 +234,8 @@ default void writeArray(ByteBuf buffer, Collection array, TriConsumer itemEntries = new ArrayList<>(); + this.readArray(buffer, itemEntries, this::readItemEntry); + return new ItemStackResponseContainer(slotType, itemEntries, null); + } + + protected ItemStackResponseSlot readItemEntry(ByteBuf buffer) { + return new ItemStackResponseSlot( + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + VarInts.readInt(buffer), + "", + 0); + } + + protected void writeItemEntry(ByteBuf buffer, ItemStackResponseSlot itemEntry) { + buffer.writeByte(itemEntry.getSlot()); + buffer.writeByte(itemEntry.getHotbarSlot()); + buffer.writeByte(itemEntry.getCount()); + VarInts.writeInt(buffer, itemEntry.getStackNetworkId()); + } + protected int fromAuxValue(int value) { return value == 0x7fff ? -1 : value; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackResponseSerializer_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackResponseSerializer_v407.java index ab44a964c..b1ea26b5b 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackResponseSerializer_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/ItemStackResponseSerializer_v407.java @@ -53,7 +53,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResp List itemEntries = new ArrayList<>(); helper.readArray(buf2, itemEntries, byteBuf -> this.readItemEntry(byteBuf, helper)); - return new ItemStackResponseContainer(container, itemEntries); + return new ItemStackResponseContainer(container, itemEntries, null); }); return new ItemStackResponse(success, requestId, containerEntries); }); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/PlayerArmorDamageSerializer_v407.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/PlayerArmorDamageSerializer_v407.java index e820f524c..bae808bde 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/PlayerArmorDamageSerializer_v407.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v407/serializer/PlayerArmorDamageSerializer_v407.java @@ -15,13 +15,17 @@ public class PlayerArmorDamageSerializer_v407 implements BedrockPacketSerializer { public static final PlayerArmorDamageSerializer_v407 INSTANCE = new PlayerArmorDamageSerializer_v407(); - private static final PlayerArmorDamageFlag[] FLAGS = PlayerArmorDamageFlag.values(); + protected static final PlayerArmorDamageFlag[] FLAGS = PlayerArmorDamageFlag.values(); @Override public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerArmorDamagePacket packet) { int flags = 0; for (PlayerArmorDamageFlag flag : packet.getFlags()) { - flags |= 1 << flag.ordinal(); + int ordinal = flag.ordinal(); + if (ordinal > this.getMaxFlagIndex()) { + continue; + } + flags |= 1 << ordinal; } buffer.writeByte(flags); @@ -38,11 +42,15 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerArmorDa int flagsVal = buffer.readUnsignedByte(); Set flags = packet.getFlags(); int[] damage = packet.getDamage(); - for (int i = 0; i < 4; i++) { + for (int i = 0; i <= this.getMaxFlagIndex(); i++) { if ((flagsVal & (1 << i)) != 0) { flags.add(FLAGS[i]); damage[i] = VarInts.readInt(buffer); } } } + + protected int getMaxFlagIndex() { + return 3; + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/ItemStackResponseSerializer_v419.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/ItemStackResponseSerializer_v419.java index 0a8808d7f..74fe4e948 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/ItemStackResponseSerializer_v419.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/ItemStackResponseSerializer_v419.java @@ -3,10 +3,8 @@ import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.ItemStackResponseSerializer_v407; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseContainer; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseStatus; import org.cloudburstmc.protocol.bedrock.packet.ItemStackResponsePacket; import org.cloudburstmc.protocol.common.util.VarInts; @@ -28,10 +26,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackRespon if (response.getResult() != ItemStackResponseStatus.OK) return; - helper.writeArray(buf, response.getContainers(), (buf2, containerEntry) -> { - helper.writeContainerSlotType(buf2, containerEntry.getContainer()); - helper.writeArray(buf2, containerEntry.getItems(), this::writeItemEntry); - }); + helper.writeArray(buf, response.getContainers(), helper::writeItemStackResponseContainer); }); } @@ -46,13 +41,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResp return new ItemStackResponse(result, requestId, Collections.emptyList()); List containerEntries = new ArrayList<>(); - helper.readArray(buf, containerEntries, buf2 -> { - ContainerSlotType container = helper.readContainerSlotType(buf2); - - List itemEntries = new ArrayList<>(); - helper.readArray(buf2, itemEntries, byteBuf -> this.readItemEntry(buf2, helper)); - return new ItemStackResponseContainer(container, itemEntries); - }); + helper.readArray(buf, containerEntries, helper::readItemStackResponseContainer); return new ItemStackResponse(result, requestId, containerEntries); }); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java index b9f830856..9b9a6ebb9 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/BedrockCodecHelper_v422.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.CraftRecipeOptionalAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; import org.cloudburstmc.protocol.common.util.TypeMap; import org.cloudburstmc.protocol.common.util.VarInts; @@ -67,4 +68,21 @@ protected void writeRequestActionData(ByteBuf byteBuf, ItemStackRequestAction ac super.writeRequestActionData(byteBuf, action); } } + + @Override + protected ItemStackResponseSlot readItemEntry(ByteBuf buffer) { + return new ItemStackResponseSlot( + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + VarInts.readInt(buffer), + this.readString(buffer), + 0); + } + + @Override + protected void writeItemEntry(ByteBuf buffer, ItemStackResponseSlot itemEntry) { + super.writeItemEntry(buffer, itemEntry); + this.writeString(buffer, itemEntry.getCustomName()); + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java index cc41492dc..eadd1d3f8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/Bedrock_v422.java @@ -3,12 +3,10 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v419.Bedrock_v419; import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.FilterTextSerializer_v422; -import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.ItemStackResponseSerializer_v422; import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.ResourcePacksInfoSerializer_v422; import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; import org.cloudburstmc.protocol.bedrock.packet.FilterTextPacket; -import org.cloudburstmc.protocol.bedrock.packet.ItemStackResponsePacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket; import org.cloudburstmc.protocol.common.util.TypeMap; @@ -24,7 +22,6 @@ public class Bedrock_v422 extends Bedrock_v419 { .minecraftVersion("1.16.200") .helper(() -> new BedrockCodecHelper_v422(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES)) .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v422.INSTANCE) - .updateSerializer(ItemStackResponsePacket.class, ItemStackResponseSerializer_v422.INSTANCE) .registerPacket(FilterTextPacket::new, FilterTextSerializer_v422.INSTANCE, 163, PacketRecipient.BOTH) .build(); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ItemStackResponseSerializer_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ItemStackResponseSerializer_v422.java deleted file mode 100644 index 0fee5bccc..000000000 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ItemStackResponseSerializer_v422.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.cloudburstmc.protocol.bedrock.codec.v422.serializer; - -import io.netty.buffer.ByteBuf; -import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; -import org.cloudburstmc.protocol.bedrock.codec.v419.serializer.ItemStackResponseSerializer_v419; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; -import org.cloudburstmc.protocol.common.util.VarInts; - -public class ItemStackResponseSerializer_v422 extends ItemStackResponseSerializer_v419 { - - public static final ItemStackResponseSerializer_v422 INSTANCE = new ItemStackResponseSerializer_v422(); - - @Override - protected ItemStackResponseSlot readItemEntry(ByteBuf buffer, BedrockCodecHelper helper) { - return new ItemStackResponseSlot( - buffer.readUnsignedByte(), - buffer.readUnsignedByte(), - buffer.readUnsignedByte(), - VarInts.readInt(buffer), - helper.readString(buffer), - 0); - } - - @Override - protected void writeItemEntry(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResponseSlot itemEntry) { - super.writeItemEntry(buffer, helper, itemEntry); - helper.writeString(buffer, itemEntry.getCustomName()); - } -} diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ResourcePacksInfoSerializer_v422.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ResourcePacksInfoSerializer_v422.java index 22319f62d..44ed72de6 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ResourcePacksInfoSerializer_v422.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v422/serializer/ResourcePacksInfoSerializer_v422.java @@ -46,6 +46,6 @@ public ResourcePacksInfoPacket.Entry readEntry(ByteBuf buffer, BedrockCodecHelpe boolean isScripting = buffer.readBoolean(); boolean raytracingCapable = resource && buffer.readBoolean(); return new ResourcePacksInfoPacket.Entry(packId, packVersion, packSize, contentKey, subPackName, contentId, - isScripting, raytracingCapable); + isScripting, raytracingCapable, false); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java index cdb759df8..fd221f77e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/BedrockCodecHelper_v428.java @@ -8,6 +8,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.MineBlockAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; import org.cloudburstmc.protocol.bedrock.data.skin.*; import org.cloudburstmc.protocol.common.util.TypeMap; import org.cloudburstmc.protocol.common.util.VarInts; @@ -139,4 +140,21 @@ public void writeSkin(ByteBuf buffer, SerializedSkin skin) { } } } + + @Override + protected ItemStackResponseSlot readItemEntry(ByteBuf buffer) { + return new ItemStackResponseSlot( + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + buffer.readUnsignedByte(), + VarInts.readInt(buffer), + this.readString(buffer), + VarInts.readInt(buffer)); + } + + @Override + protected void writeItemEntry(ByteBuf buffer, ItemStackResponseSlot itemEntry) { + super.writeItemEntry(buffer, itemEntry); + VarInts.writeInt(buffer, itemEntry.getDurabilityCorrection()); + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java index abc6575a4..462aaebdb 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/Bedrock_v428.java @@ -11,7 +11,10 @@ import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361; import org.cloudburstmc.protocol.bedrock.codec.v388.serializer.AvailableCommandsSerializer_v388; import org.cloudburstmc.protocol.bedrock.codec.v422.Bedrock_v422; -import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.*; +import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.CameraShakeSerializer_v428; +import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.ClientboundDebugRendererSerializer_v428; +import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.PlayerAuthInputSerializer_v428; +import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.StartGameSerializer_v428; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; @@ -84,7 +87,6 @@ public class Bedrock_v428 extends Bedrock_v422 { .helper(() -> new BedrockCodecHelper_v428(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES)) .updateSerializer(StartGamePacket.class, StartGameSerializer_v428.INSTANCE) .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v428.INSTANCE) - .updateSerializer(ItemStackResponsePacket.class, ItemStackResponseSerializer_v428.INSTANCE) .updateSerializer(CameraShakePacket.class, CameraShakeSerializer_v428.INSTANCE) .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/ItemStackResponseSerializer_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/ItemStackResponseSerializer_v428.java deleted file mode 100644 index a75d0b65e..000000000 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/ItemStackResponseSerializer_v428.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.cloudburstmc.protocol.bedrock.codec.v428.serializer; - -import io.netty.buffer.ByteBuf; -import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; -import org.cloudburstmc.protocol.bedrock.codec.v422.serializer.ItemStackResponseSerializer_v422; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; -import org.cloudburstmc.protocol.common.util.VarInts; - -public class ItemStackResponseSerializer_v428 extends ItemStackResponseSerializer_v422 { - - public static final ItemStackResponseSerializer_v428 INSTANCE = new ItemStackResponseSerializer_v428(); - - @Override - protected ItemStackResponseSlot readItemEntry(ByteBuf buffer, BedrockCodecHelper helper) { - return new ItemStackResponseSlot( - buffer.readUnsignedByte(), - buffer.readUnsignedByte(), - buffer.readUnsignedByte(), - VarInts.readInt(buffer), - helper.readString(buffer), - VarInts.readInt(buffer)); - } - - @Override - protected void writeItemEntry(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResponseSlot itemEntry) { - super.writeItemEntry(buffer, helper, itemEntry); - VarInts.writeInt(buffer, itemEntry.getDurabilityCorrection()); - } -} diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java index 5a27c12e1..2577e1add 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v428/serializer/PlayerAuthInputSerializer_v428.java @@ -23,27 +23,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInput super.serialize(buffer, helper, packet); if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { - //TODO use inventory transaction packet serialization? - ItemUseTransaction transaction = packet.getItemUseTransaction(); - int legacyRequestId = transaction.getLegacyRequestId(); - VarInts.writeInt(buffer, legacyRequestId); - - if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { - helper.writeArray(buffer, transaction.getLegacySlots(), (buf, packetHelper, data) -> { - buf.writeByte(data.getContainerId()); - packetHelper.writeByteArray(buf, data.getSlots()); - }); - } - - helper.writeInventoryActions(buffer, transaction.getActions(), transaction.isUsingNetIds()); - VarInts.writeUnsignedInt(buffer, transaction.getActionType()); - helper.writeBlockPosition(buffer, transaction.getBlockPosition()); - VarInts.writeInt(buffer, transaction.getBlockFace()); - VarInts.writeInt(buffer, transaction.getHotbarSlot()); - helper.writeItem(buffer, transaction.getItemInHand()); - helper.writeVector3f(buffer, transaction.getPlayerPosition()); - helper.writeVector3f(buffer, transaction.getClickPosition()); - VarInts.writeUnsignedInt(buffer, transaction.getBlockDefinition().getRuntimeId()); + this.writeItemUseTransaction(buffer, helper, packet.getItemUseTransaction()); } if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { @@ -63,29 +43,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerAuthInp super.deserialize(buffer, helper, packet); if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_INTERACTION)) { - ItemUseTransaction itemTransaction = new ItemUseTransaction(); - - int legacyRequestId = VarInts.readInt(buffer); - itemTransaction.setLegacyRequestId(legacyRequestId); - - if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { - helper.readArray(buffer, itemTransaction.getLegacySlots(), (buf, packetHelper) -> { - byte containerId = buf.readByte(); - byte[] slots = packetHelper.readByteArray(buf, 89); - return new LegacySetItemSlotData(containerId, slots); - }); - } - - boolean hasNetIds = helper.readInventoryActions(buffer, itemTransaction.getActions()); - itemTransaction.setActionType(VarInts.readUnsignedInt(buffer)); - itemTransaction.setBlockPosition(helper.readBlockPosition(buffer)); - itemTransaction.setBlockFace(VarInts.readInt(buffer)); - itemTransaction.setHotbarSlot(VarInts.readInt(buffer)); - itemTransaction.setItemInHand(helper.readItem(buffer)); - itemTransaction.setPlayerPosition(helper.readVector3f(buffer)); - itemTransaction.setClickPosition(helper.readVector3f(buffer)); - itemTransaction.setBlockDefinition(helper.getBlockDefinitions().getDefinition(VarInts.readUnsignedInt(buffer))); - packet.setItemUseTransaction(itemTransaction); + packet.setItemUseTransaction(this.readItemUseTransaction(buffer, helper)); } if (packet.getInputData().contains(PlayerAuthInputData.PERFORM_ITEM_STACK_REQUEST)) { @@ -124,4 +82,53 @@ protected PlayerBlockActionData readPlayerBlockActionData(ByteBuf buffer, Bedroc } return actionData; } + + protected void writeItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper, ItemUseTransaction transaction) { + //TODO use inventory transaction packet serialization? + int legacyRequestId = transaction.getLegacyRequestId(); + VarInts.writeInt(buffer, legacyRequestId); + + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + helper.writeArray(buffer, transaction.getLegacySlots(), (buf, packetHelper, data) -> { + buf.writeByte(data.getContainerId()); + packetHelper.writeByteArray(buf, data.getSlots()); + }); + } + + helper.writeInventoryActions(buffer, transaction.getActions(), transaction.isUsingNetIds()); + VarInts.writeUnsignedInt(buffer, transaction.getActionType()); + helper.writeBlockPosition(buffer, transaction.getBlockPosition()); + VarInts.writeInt(buffer, transaction.getBlockFace()); + VarInts.writeInt(buffer, transaction.getHotbarSlot()); + helper.writeItem(buffer, transaction.getItemInHand()); + helper.writeVector3f(buffer, transaction.getPlayerPosition()); + helper.writeVector3f(buffer, transaction.getClickPosition()); + VarInts.writeUnsignedInt(buffer, transaction.getBlockDefinition().getRuntimeId()); + } + + protected ItemUseTransaction readItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper) { + ItemUseTransaction itemTransaction = new ItemUseTransaction(); + + int legacyRequestId = VarInts.readInt(buffer); + itemTransaction.setLegacyRequestId(legacyRequestId); + + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + helper.readArray(buffer, itemTransaction.getLegacySlots(), (buf, packetHelper) -> { + byte containerId = buf.readByte(); + byte[] slots = packetHelper.readByteArray(buf, 89); + return new LegacySetItemSlotData(containerId, slots); + }); + } + + boolean hasNetIds = helper.readInventoryActions(buffer, itemTransaction.getActions()); + itemTransaction.setActionType(VarInts.readUnsignedInt(buffer)); + itemTransaction.setBlockPosition(helper.readBlockPosition(buffer)); + itemTransaction.setBlockFace(VarInts.readInt(buffer)); + itemTransaction.setHotbarSlot(VarInts.readInt(buffer)); + itemTransaction.setItemInHand(helper.readItem(buffer)); + itemTransaction.setPlayerPosition(helper.readVector3f(buffer)); + itemTransaction.setClickPosition(helper.readVector3f(buffer)); + itemTransaction.setBlockDefinition(helper.getBlockDefinitions().getDefinition(VarInts.readUnsignedInt(buffer))); + return itemTransaction; + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/BedrockCodecHelper_v448.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/BedrockCodecHelper_v448.java index 3d8bd8499..a316dfbc0 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/BedrockCodecHelper_v448.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v448/BedrockCodecHelper_v448.java @@ -22,7 +22,7 @@ public BedrockCodecHelper_v448(EntityDataTypeMap entityData, TypeMap> g protected ItemStackRequestAction readRequestActionData(ByteBuf byteBuf, ItemStackRequestActionType type) { if (type == ItemStackRequestActionType.CRAFT_RECIPE_AUTO) { return new AutoCraftRecipeAction( - VarInts.readUnsignedInt(byteBuf), byteBuf.readUnsignedByte(), Collections.emptyList() + VarInts.readUnsignedInt(byteBuf), byteBuf.readUnsignedByte(), Collections.emptyList(), 0 ); } else { return super.readRequestActionData(byteBuf, type); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/BedrockCodecHelper_v471.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/BedrockCodecHelper_v471.java index 830a95879..11e6b76b8 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/BedrockCodecHelper_v471.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v471/BedrockCodecHelper_v471.java @@ -22,7 +22,7 @@ public BedrockCodecHelper_v471(EntityDataTypeMap entityData, TypeMap> g protected ItemStackRequestAction readRequestActionData(ByteBuf byteBuf, ItemStackRequestActionType type) { switch (type) { case CRAFT_REPAIR_AND_DISENCHANT: - return new CraftGrindstoneAction(VarInts.readUnsignedInt(byteBuf), VarInts.readInt(byteBuf)); + return new CraftGrindstoneAction(VarInts.readUnsignedInt(byteBuf), 0, VarInts.readInt(byteBuf)); case CRAFT_LOOM: return new CraftLoomAction(this.readString(byteBuf)); default: diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/BedrockCodecHelper_v557.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/BedrockCodecHelper_v557.java index 90c3143de..d47a70f08 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/BedrockCodecHelper_v557.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v557/BedrockCodecHelper_v557.java @@ -63,7 +63,8 @@ protected ItemStackRequestAction readRequestActionData(ByteBuf byteBuf, ItemStac return new AutoCraftRecipeAction( recipeId, timesCrafted, - ingredients + ingredients, + 0 ); } else { return super.readRequestActionData(byteBuf, type); diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/CameraPresetsSerializer_v618.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/CameraPresetsSerializer_v618.java index 971ab7367..931f13142 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/CameraPresetsSerializer_v618.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v618/serializer/CameraPresetsSerializer_v618.java @@ -48,6 +48,6 @@ public CameraPreset readPreset(ByteBuf buffer, BedrockCodecHelper helper) { CameraAudioListener listener = helper.readOptional(buffer, null, buf -> CameraAudioListener.values()[buf.readUnsignedByte()]); OptionalBoolean effects = helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean())); - return new CameraPreset(identifier, parentPreset, pos, yaw, pitch, listener, effects); + return new CameraPreset(identifier, parentPreset, pos, yaw, pitch, null, null, listener, effects); } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/BedrockCodecHelper_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/BedrockCodecHelper_v712.java new file mode 100644 index 000000000..fcb672dca --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/BedrockCodecHelper_v712.java @@ -0,0 +1,159 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712; + +import io.netty.buffer.ByteBuf; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap; +import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityLinkData; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.TextProcessingEventOrigin; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.*; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseContainer; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; +import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; +import org.cloudburstmc.protocol.common.util.TypeMap; +import org.cloudburstmc.protocol.common.util.VarInts; + +import java.util.ArrayList; +import java.util.List; + +public class BedrockCodecHelper_v712 extends BedrockCodecHelper_v575 { + + public BedrockCodecHelper_v712(EntityDataTypeMap entityData, TypeMap> gameRulesTypes, TypeMap stackRequestActionTypes, TypeMap containerSlotTypes, TypeMap abilities, TypeMap textProcessingEventOrigins) { + super(entityData, gameRulesTypes, stackRequestActionTypes, containerSlotTypes, abilities, textProcessingEventOrigins); + } + + @Override + public void writeEntityLink(ByteBuf buffer, EntityLinkData entityLink) { + super.writeEntityLink(buffer, entityLink); + buffer.writeFloatLE(entityLink.getVehicleAngularVelocity()); + } + + @Override + public EntityLinkData readEntityLink(ByteBuf buffer) { + return new EntityLinkData( + VarInts.readLong(buffer), + VarInts.readLong(buffer), + EntityLinkData.Type.byId(buffer.readUnsignedByte()), + buffer.readBoolean(), + buffer.readBoolean(), + buffer.readFloatLE() + ); + } + + @Override + protected void writeRequestActionData(ByteBuf byteBuf, ItemStackRequestAction action) { + if (action.getType().equals(ItemStackRequestActionType.CRAFT_RECIPE)) { + VarInts.writeUnsignedInt(byteBuf, ((RecipeItemStackRequestAction) action).getRecipeNetworkId()); + byteBuf.writeByte(((RecipeItemStackRequestAction) action).getNumberOfRequestedCrafts()); + } else if (action.getType().equals(ItemStackRequestActionType.CRAFT_CREATIVE)) { + VarInts.writeUnsignedInt(byteBuf, ((CraftCreativeAction) action).getCreativeItemNetworkId()); + byteBuf.writeByte(((CraftCreativeAction) action).getNumberOfRequestedCrafts()); + } else if (action.getType().equals(ItemStackRequestActionType.CRAFT_REPAIR_AND_DISENCHANT)) { + VarInts.writeUnsignedInt(byteBuf, ((CraftGrindstoneAction) action).getRecipeNetworkId()); + byteBuf.writeByte(((CraftGrindstoneAction) action).getNumberOfRequestedCrafts()); + VarInts.writeInt(byteBuf, ((CraftGrindstoneAction) action).getRepairCost()); + } else if (action.getType().equals(ItemStackRequestActionType.CRAFT_RECIPE_AUTO)) { + VarInts.writeUnsignedInt(byteBuf, ((AutoCraftRecipeAction) action).getRecipeNetworkId()); + byteBuf.writeByte(((AutoCraftRecipeAction) action).getNumberOfRequestedCrafts()); + byteBuf.writeByte(((AutoCraftRecipeAction) action).getTimesCrafted()); + List ingredients = ((AutoCraftRecipeAction) action).getIngredients(); + byteBuf.writeByte(ingredients.size()); + writeArray(byteBuf, ingredients, this::writeIngredient); + } else { + super.writeRequestActionData(byteBuf, action); + } + } + + @Override + protected ItemStackRequestAction readRequestActionData(ByteBuf byteBuf, ItemStackRequestActionType type) { + if (type.equals(ItemStackRequestActionType.CRAFT_RECIPE)) { + return new CraftRecipeAction(VarInts.readUnsignedInt(byteBuf), byteBuf.readByte()); + } else if (type.equals(ItemStackRequestActionType.CRAFT_CREATIVE)) { + return new CraftCreativeAction(VarInts.readUnsignedInt(byteBuf), byteBuf.readByte()); + } else if (type.equals(ItemStackRequestActionType.CRAFT_REPAIR_AND_DISENCHANT)) { + return new CraftGrindstoneAction(VarInts.readUnsignedInt(byteBuf), byteBuf.readByte(), VarInts.readInt(byteBuf)); + } else if (type.equals(ItemStackRequestActionType.CRAFT_RECIPE_AUTO)) { + int recipeNetworkId = VarInts.readUnsignedInt(byteBuf); + int timesCrafted = byteBuf.readUnsignedByte(); + int numberOfRequestedCrafts = byteBuf.readUnsignedByte(); + List ingredients = new ObjectArrayList<>(); + this.readArray(byteBuf, ingredients, ByteBuf::readUnsignedByte, this::readIngredient); + return new AutoCraftRecipeAction(recipeNetworkId, timesCrafted, ingredients, numberOfRequestedCrafts); + } else { + return super.readRequestActionData(byteBuf, type); + } + } + + @Override + protected ItemStackRequestSlotData readStackRequestSlotInfo(ByteBuf buffer) { + FullContainerName containerName = this.readFullContainerName(buffer); + return new ItemStackRequestSlotData( + containerName.getContainer(), + buffer.readUnsignedByte(), + VarInts.readInt(buffer), + containerName + ); + } + + @Override + protected void writeStackRequestSlotInfo(ByteBuf buffer, ItemStackRequestSlotData data) { + this.writeFullContainerName(buffer, data.getContainerName()); + buffer.writeByte(data.getSlot()); + VarInts.writeInt(buffer, data.getStackNetworkId()); + } + + @Override + public void writeItemStackResponseContainer(ByteBuf buffer, ItemStackResponseContainer container) { + this.writeFullContainerName(buffer, container.getContainerName()); + this.writeArray(buffer, container.getItems(), this::writeItemEntry); + } + + @Override + public ItemStackResponseContainer readItemStackResponseContainer(ByteBuf buffer) { + FullContainerName containerName = this.readFullContainerName(buffer); + List itemEntries = new ArrayList<>(); + this.readArray(buffer, itemEntries, this::readItemEntry); + return new ItemStackResponseContainer(containerName.getContainer(), itemEntries, containerName); + } + + @Override + public void writeItemUse(ByteBuf buffer, InventoryTransactionPacket packet) { + VarInts.writeUnsignedInt(buffer, packet.getActionType()); + VarInts.writeUnsignedInt(buffer, packet.getTriggerType().ordinal()); + this.writeBlockPosition(buffer, packet.getBlockPosition()); + VarInts.writeInt(buffer, packet.getBlockFace()); + VarInts.writeInt(buffer, packet.getHotbarSlot()); + this.writeItem(buffer, packet.getItemInHand()); + this.writeVector3f(buffer, packet.getPlayerPosition()); + this.writeVector3f(buffer, packet.getClickPosition()); + VarInts.writeUnsignedInt(buffer, packet.getBlockDefinition().getRuntimeId()); + } + + @Override + public void readItemUse(ByteBuf buffer, InventoryTransactionPacket packet) { + packet.setActionType(VarInts.readUnsignedInt(buffer)); + packet.setTriggerType(ItemUseTransaction.TriggerType.values()[VarInts.readUnsignedInt(buffer)]); + packet.setBlockPosition(this.readBlockPosition(buffer)); + packet.setBlockFace(VarInts.readInt(buffer)); + packet.setHotbarSlot(VarInts.readInt(buffer)); + packet.setItemInHand(this.readItem(buffer)); + packet.setPlayerPosition(this.readVector3f(buffer)); + packet.setClickPosition(this.readVector3f(buffer)); + packet.setBlockDefinition(this.blockDefinitions.getDefinition(VarInts.readUnsignedInt(buffer))); + } + + protected void writeFullContainerName(ByteBuf buffer, FullContainerName containerName) { + this.writeContainerSlotType(buffer, containerName.getContainer()); + buffer.writeIntLE(containerName.getDynamicId()); + } + + protected FullContainerName readFullContainerName(ByteBuf buffer) { + return new FullContainerName(this.readContainerSlotType(buffer), buffer.readIntLE()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/Bedrock_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/Bedrock_v712.java new file mode 100644 index 000000000..8a025e673 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/Bedrock_v712.java @@ -0,0 +1,62 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712; + +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelSoundEvent1Serializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v313.serializer.LevelSoundEvent2Serializer_v313; +import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332; +import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686; +import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.*; +import org.cloudburstmc.protocol.bedrock.data.PacketRecipient; +import org.cloudburstmc.protocol.bedrock.data.SoundEvent; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; +import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.common.util.TypeMap; + +public class Bedrock_v712 extends Bedrock_v686 { + + protected static final TypeMap SOUND_EVENTS = Bedrock_v686.SOUND_EVENTS + .toBuilder() + .insert(510, SoundEvent.IMITATE_BOGGED) + .replace(530, SoundEvent.VAULT_REJECT_REWARDED_PLAYER) + .insert(531, SoundEvent.UNDEFINED) + .build(); + + protected static final TypeMap ITEM_STACK_REQUEST_TYPES = Bedrock_v686.ITEM_STACK_REQUEST_TYPES + .toBuilder() + .remove(7) + .remove(8) + .build(); + + protected static final TypeMap CONTAINER_SLOT_TYPES = Bedrock_v686.CONTAINER_SLOT_TYPES + .toBuilder() + .insert(63, ContainerSlotType.DYNAMIC_CONTAINER) + .build(); + + public static final BedrockCodec CODEC = Bedrock_v686.CODEC.toBuilder() + .raknetProtocolVersion(11) + .protocolVersion(712) + .minecraftVersion("1.21.20") + .helper(() -> new BedrockCodecHelper_v712(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS)) + .updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS)) + .updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS)) + .updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS)) + .updateSerializer(CameraInstructionPacket.class, CameraInstructionSerializer_v712.INSTANCE) + .updateSerializer(CameraPresetsPacket.class, CameraPresetsSerializer_v712.INSTANCE) + .updateSerializer(ChangeDimensionPacket.class, ChangeDimensionSerializer_v712.INSTANCE) + .updateSerializer(DisconnectPacket.class, DisconnectSerializer_v712.INSTANCE) + .updateSerializer(EditorNetworkPacket.class, EditorNetworkSerializer_v712.INSTANCE) + .updateSerializer(InventoryContentPacket.class, InventoryContentSerializer_v712.INSTANCE) + .updateSerializer(InventorySlotPacket.class, InventorySlotSerializer_v712.INSTANCE) + .updateSerializer(MobArmorEquipmentPacket.class, MobArmorEquipmentSerializer_v712.INSTANCE) + .updateSerializer(PlayerArmorDamagePacket.class, PlayerArmorDamageSerializer_v712.INSTANCE) + .updateSerializer(PlayerAuthInputPacket.class, PlayerAuthInputSerializer_v712.INSTANCE) + .updateSerializer(ResourcePacksInfoPacket.class, ResourcePacksInfoSerializer_v712.INSTANCE) + .updateSerializer(SetTitlePacket.class, SetTitleSerializer_v712.INSTANCE) + .updateSerializer(StopSoundPacket.class, StopSoundSerializer_v712.INSTANCE) + .registerPacket(ServerboundLoadingScreenPacket::new, ServerboundLoadingScreenSerializer_v712.INSTANCE, 312, PacketRecipient.SERVER) + .registerPacket(JigsawStructureDataPacket::new, JigsawStructureDataSerializer_v712.INSTANCE, 313, PacketRecipient.CLIENT) + .registerPacket(CurrentStructureFeaturePacket::new, CurrentStructureFeatureSerializer_v712.INSTANCE, 314, PacketRecipient.CLIENT) + .registerPacket(ServerboundDiagnosticsPacket::new, ServerboundDiagnosticsSerializer_v712.INSTANCE, 315, PacketRecipient.SERVER) + .build(); +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraInstructionSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraInstructionSerializer_v712.java new file mode 100644 index 000000000..8811b8fe7 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraInstructionSerializer_v712.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.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.v618.serializer.CameraInstructionSerializer_618; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraTargetInstruction; +import org.cloudburstmc.protocol.bedrock.packet.CameraInstructionPacket; +import org.cloudburstmc.protocol.common.util.OptionalBoolean; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class CameraInstructionSerializer_v712 extends CameraInstructionSerializer_618 { + public static final CameraInstructionSerializer_v712 INSTANCE = new CameraInstructionSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getTargetInstruction(), (buf, targetInstruction) -> { + helper.writeOptionalNull(buf, targetInstruction.getTargetCenterOffset(), helper::writeVector3f); + buf.writeLongLE(targetInstruction.getUniqueEntityId()); + }); + helper.writeOptional(buffer, OptionalBoolean::isPresent, packet.getRemoveTarget(), + (buf, removeTarget) -> buf.writeBoolean(removeTarget.getAsBoolean())); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CameraInstructionPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setTargetInstruction(helper.readOptional(buffer, null, buf -> { + Vector3f targetCenterOffset = helper.readOptional(buffer, null, helper::readVector3f); + long uniqueEntityId = buf.readLongLE(); + return new CameraTargetInstruction(targetCenterOffset, uniqueEntityId); + })); + packet.setRemoveTarget(helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean()))); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraPresetsSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraPresetsSerializer_v712.java new file mode 100644 index 000000000..7ecb792e1 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CameraPresetsSerializer_v712.java @@ -0,0 +1,53 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.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.v618.serializer.CameraPresetsSerializer_v618; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraAudioListener; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraPreset; +import org.cloudburstmc.protocol.common.util.OptionalBoolean; + +public class CameraPresetsSerializer_v712 extends CameraPresetsSerializer_v618 { + public static final CameraPresetsSerializer_v712 INSTANCE = new CameraPresetsSerializer_v712(); + + @Override + public void writePreset(ByteBuf buffer, BedrockCodecHelper helper, CameraPreset preset) { + helper.writeString(buffer, preset.getIdentifier()); + helper.writeString(buffer, preset.getParentPreset()); + helper.writeOptionalNull(buffer, preset.getPos(), (buf, pos) -> buf.writeFloatLE(pos.getX())); + helper.writeOptionalNull(buffer, preset.getPos(), (buf, pos) -> buf.writeFloatLE(pos.getY())); + helper.writeOptionalNull(buffer, preset.getPos(), (buf, pos) -> buf.writeFloatLE(pos.getZ())); + helper.writeOptionalNull(buffer, preset.getPitch(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, preset.getYaw(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, preset.getViewOffset(), (buf, viewOffset) -> { + buf.writeFloatLE(viewOffset.getX()); + buf.writeFloatLE(viewOffset.getY()); + }); + helper.writeOptionalNull(buffer, preset.getRadius(), ByteBuf::writeFloatLE); + helper.writeOptionalNull(buffer, preset.getListener(), (buf, listener) -> buf.writeByte(listener.ordinal())); + helper.writeOptional(buffer, OptionalBoolean::isPresent, preset.getPlayEffect(), + (buf, optional) -> buf.writeBoolean(optional.getAsBoolean())); + } + + @Override + public CameraPreset readPreset(ByteBuf buffer, BedrockCodecHelper helper) { + String identifier = helper.readString(buffer); + String parentPreset = helper.readString(buffer); + + Float x = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float y = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float z = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Vector3f pos = x == null || y == null || z == null ? null : Vector3f.from(x, y, z); + + Float pitch = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Float yaw = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + Vector2f viewOffset = helper.readOptional(buffer, null, buf -> Vector2f.from(buf.readFloatLE(), buf.readFloatLE())); + Float radius = helper.readOptional(buffer, null, ByteBuf::readFloatLE); + + CameraAudioListener listener = helper.readOptional(buffer, null, buf -> CameraAudioListener.values()[buf.readUnsignedByte()]); + OptionalBoolean effects = helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean())); + return new CameraPreset(identifier, parentPreset, pos, yaw, pitch, viewOffset, radius, listener, effects); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ChangeDimensionSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ChangeDimensionSerializer_v712.java new file mode 100644 index 000000000..bfe03e6e8 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ChangeDimensionSerializer_v712.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.ChangeDimensionSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.ChangeDimensionPacket; + +public class ChangeDimensionSerializer_v712 extends ChangeDimensionSerializer_v291 { + public static final ChangeDimensionSerializer_v712 INSTANCE = new ChangeDimensionSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ChangeDimensionPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeOptionalNull(buffer, packet.getLoadingScreenId(), ByteBuf::writeIntLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ChangeDimensionPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setLoadingScreenId(helper.readOptional(buffer, null, ByteBuf::readIntLE)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CurrentStructureFeatureSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CurrentStructureFeatureSerializer_v712.java new file mode 100644 index 000000000..cdd16cbf4 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/CurrentStructureFeatureSerializer_v712.java @@ -0,0 +1,20 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.CurrentStructureFeaturePacket; + +public class CurrentStructureFeatureSerializer_v712 implements BedrockPacketSerializer { + public static final CurrentStructureFeatureSerializer_v712 INSTANCE = new CurrentStructureFeatureSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CurrentStructureFeaturePacket packet) { + helper.writeString(buffer, packet.getCurrentStructureFeature()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CurrentStructureFeaturePacket packet) { + packet.setCurrentStructureFeature(helper.readString(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/DisconnectSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/DisconnectSerializer_v712.java new file mode 100644 index 000000000..f2a98d046 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/DisconnectSerializer_v712.java @@ -0,0 +1,32 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason; +import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class DisconnectSerializer_v712 implements BedrockPacketSerializer { + public static final DisconnectSerializer_v712 INSTANCE = new DisconnectSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) { + VarInts.writeInt(buffer, packet.getReason().ordinal()); + buffer.writeBoolean(packet.isMessageSkipped()); + if (!packet.isMessageSkipped()) { + helper.writeString(buffer, packet.getKickMessage()); + helper.writeString(buffer, packet.getFilteredMessage()); + } + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) { + packet.setReason(DisconnectFailReason.values()[VarInts.readInt(buffer)]); + packet.setMessageSkipped(buffer.readBoolean()); + if (!packet.isMessageSkipped()) { + packet.setKickMessage(helper.readString(buffer)); + packet.setFilteredMessage(helper.readString(buffer)); + } + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/EditorNetworkSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/EditorNetworkSerializer_v712.java new file mode 100644 index 000000000..984f6efba --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/EditorNetworkSerializer_v712.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v534.serializer.EditorNetworkSerializer_v534; +import org.cloudburstmc.protocol.bedrock.packet.EditorNetworkPacket; + +public class EditorNetworkSerializer_v712 extends EditorNetworkSerializer_v534 { + public static final EditorNetworkSerializer_v712 INSTANCE = new EditorNetworkSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, EditorNetworkPacket packet) { + buffer.writeBoolean(packet.isRouteToManager()); + super.serialize(buffer, helper, packet); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, EditorNetworkPacket packet) { + packet.setRouteToManager(buffer.readBoolean()); + super.deserialize(buffer, helper, packet); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventoryContentSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventoryContentSerializer_v712.java new file mode 100644 index 000000000..96afda59b --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventoryContentSerializer_v712.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407; +import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class InventoryContentSerializer_v712 extends InventoryContentSerializer_v407 { + public static final InventoryContentSerializer_v712 INSTANCE = new InventoryContentSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { + super.serialize(buffer, helper, packet); + VarInts.writeUnsignedInt(buffer, packet.getDynamicContainerId()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setDynamicContainerId(VarInts.readUnsignedInt(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventorySlotSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventorySlotSerializer_v712.java new file mode 100644 index 000000000..76baed167 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/InventorySlotSerializer_v712.java @@ -0,0 +1,27 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +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; + +public class InventorySlotSerializer_v712 implements BedrockPacketSerializer { + public static final InventorySlotSerializer_v712 INSTANCE = new InventorySlotSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { + VarInts.writeUnsignedInt(buffer, packet.getContainerId()); + VarInts.writeUnsignedInt(buffer, packet.getSlot()); + VarInts.writeUnsignedInt(buffer, packet.getDynamicContainerId()); + helper.writeNetItem(buffer, packet.getItem()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { + packet.setContainerId(VarInts.readUnsignedInt(buffer)); + packet.setSlot(VarInts.readUnsignedInt(buffer)); + packet.setDynamicContainerId(VarInts.readUnsignedInt(buffer)); + packet.setItem(helper.readNetItem(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/JigsawStructureDataSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/JigsawStructureDataSerializer_v712.java new file mode 100644 index 000000000..0fa381a1b --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/JigsawStructureDataSerializer_v712.java @@ -0,0 +1,21 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.JigsawStructureDataPacket; + +public class JigsawStructureDataSerializer_v712 implements BedrockPacketSerializer { + public static final JigsawStructureDataSerializer_v712 INSTANCE = new JigsawStructureDataSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, JigsawStructureDataPacket packet) { + helper.writeTag(buffer, packet.getJigsawStructureDataTag()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, JigsawStructureDataPacket packet) { + packet.setJigsawStructureDataTag(helper.readTag(buffer, NbtMap.class)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/MobArmorEquipmentSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/MobArmorEquipmentSerializer_v712.java new file mode 100644 index 000000000..15f10d54f --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/MobArmorEquipmentSerializer_v712.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobArmorEquipmentSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; + +public class MobArmorEquipmentSerializer_v712 extends MobArmorEquipmentSerializer_v291 { + public static final MobArmorEquipmentSerializer_v712 INSTANCE = new MobArmorEquipmentSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { + super.serialize(buffer, helper, packet); + helper.writeItem(buffer, packet.getBody()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setBody(helper.readItem(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerArmorDamageSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerArmorDamageSerializer_v712.java new file mode 100644 index 000000000..87252b526 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerArmorDamageSerializer_v712.java @@ -0,0 +1,12 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.PlayerArmorDamageSerializer_v407; + +public class PlayerArmorDamageSerializer_v712 extends PlayerArmorDamageSerializer_v407 { + public static final PlayerArmorDamageSerializer_v712 INSTANCE = new PlayerArmorDamageSerializer_v712(); + + @Override + protected int getMaxFlagIndex() { + return 4; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerAuthInputSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerAuthInputSerializer_v712.java new file mode 100644 index 000000000..199ce06d2 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/PlayerAuthInputSerializer_v712.java @@ -0,0 +1,66 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.PlayerAuthInputSerializer_v662; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.LegacySetItemSlotData; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class PlayerAuthInputSerializer_v712 extends PlayerAuthInputSerializer_v662 { + public static final PlayerAuthInputSerializer_v712 INSTANCE = new PlayerAuthInputSerializer_v712(); + + @Override + protected void writeItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper, ItemUseTransaction transaction) { + int legacyRequestId = transaction.getLegacyRequestId(); + VarInts.writeInt(buffer, legacyRequestId); + + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + helper.writeArray(buffer, transaction.getLegacySlots(), (buf, packetHelper, data) -> { + buf.writeByte(data.getContainerId()); + packetHelper.writeByteArray(buf, data.getSlots()); + }); + } + + helper.writeInventoryActions(buffer, transaction.getActions(), transaction.isUsingNetIds()); + VarInts.writeUnsignedInt(buffer, transaction.getActionType()); + VarInts.writeUnsignedInt(buffer, transaction.getTriggerType().ordinal()); + helper.writeBlockPosition(buffer, transaction.getBlockPosition()); + VarInts.writeInt(buffer, transaction.getBlockFace()); + VarInts.writeInt(buffer, transaction.getHotbarSlot()); + helper.writeItem(buffer, transaction.getItemInHand()); + helper.writeVector3f(buffer, transaction.getPlayerPosition()); + helper.writeVector3f(buffer, transaction.getClickPosition()); + VarInts.writeUnsignedInt(buffer, transaction.getBlockDefinition().getRuntimeId()); + VarInts.writeUnsignedInt(buffer, transaction.getClientInteractPrediction().ordinal()); + } + + @Override + protected ItemUseTransaction readItemUseTransaction(ByteBuf buffer, BedrockCodecHelper helper) { + ItemUseTransaction itemTransaction = new ItemUseTransaction(); + + int legacyRequestId = VarInts.readInt(buffer); + itemTransaction.setLegacyRequestId(legacyRequestId); + + if (legacyRequestId < -1 && (legacyRequestId & 1) == 0) { + helper.readArray(buffer, itemTransaction.getLegacySlots(), (buf, packetHelper) -> { + byte containerId = buf.readByte(); + byte[] slots = packetHelper.readByteArray(buf, 89); + return new LegacySetItemSlotData(containerId, slots); + }); + } + + boolean hasNetIds = helper.readInventoryActions(buffer, itemTransaction.getActions()); + itemTransaction.setActionType(VarInts.readUnsignedInt(buffer)); + itemTransaction.setTriggerType(ItemUseTransaction.TriggerType.values()[VarInts.readUnsignedInt(buffer)]); + itemTransaction.setBlockPosition(helper.readBlockPosition(buffer)); + itemTransaction.setBlockFace(VarInts.readInt(buffer)); + itemTransaction.setHotbarSlot(VarInts.readInt(buffer)); + itemTransaction.setItemInHand(helper.readItem(buffer)); + itemTransaction.setPlayerPosition(helper.readVector3f(buffer)); + itemTransaction.setClickPosition(helper.readVector3f(buffer)); + itemTransaction.setBlockDefinition(helper.getBlockDefinitions().getDefinition(VarInts.readUnsignedInt(buffer))); + itemTransaction.setClientInteractPrediction(ItemUseTransaction.PredictedResult.values()[VarInts.readUnsignedInt(buffer)]); + return itemTransaction; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ResourcePacksInfoSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ResourcePacksInfoSerializer_v712.java new file mode 100644 index 000000000..c0c35bc27 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ResourcePacksInfoSerializer_v712.java @@ -0,0 +1,31 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.ResourcePacksInfoSerializer_v622; +import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket; + +public class ResourcePacksInfoSerializer_v712 extends ResourcePacksInfoSerializer_v622 { + public static final ResourcePacksInfoSerializer_v712 INSTANCE = new ResourcePacksInfoSerializer_v712(); + + @Override + public void writeEntry(ByteBuf buffer, BedrockCodecHelper helper, ResourcePacksInfoPacket.Entry entry, boolean resource) { + super.writeEntry(buffer, helper, entry, resource); + buffer.writeBoolean(entry.isAddonPack()); + } + + @Override + public ResourcePacksInfoPacket.Entry readEntry(ByteBuf buffer, BedrockCodecHelper helper, boolean resource) { + String packId = helper.readString(buffer); + String packVersion = helper.readString(buffer); + long packSize = buffer.readLongLE(); + String contentKey = helper.readString(buffer); + String subPackName = helper.readString(buffer); + String contentId = helper.readString(buffer); + boolean isScripting = buffer.readBoolean(); + boolean isAddonPack = buffer.readBoolean(); + boolean raytracingCapable = resource && buffer.readBoolean(); + return new ResourcePacksInfoPacket.Entry(packId, packVersion, packSize, contentKey, subPackName, contentId, + isScripting, raytracingCapable, isAddonPack); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundDiagnosticsSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundDiagnosticsSerializer_v712.java new file mode 100644 index 000000000..58345ca5d --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundDiagnosticsSerializer_v712.java @@ -0,0 +1,36 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; + +public class ServerboundDiagnosticsSerializer_v712 implements BedrockPacketSerializer { + public static final ServerboundDiagnosticsSerializer_v712 INSTANCE = new ServerboundDiagnosticsSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + buffer.writeFloatLE(packet.getAvgTps()); + buffer.writeFloatLE(packet.getAvgServerSimTickTimeMS()); + buffer.writeFloatLE(packet.getAvgClientSimTickTimeMS()); + buffer.writeFloatLE(packet.getAvgBeginFrameTimeMS()); + buffer.writeFloatLE(packet.getAvgInputTimeMS()); + buffer.writeFloatLE(packet.getAvgRenderTimeMS()); + buffer.writeFloatLE(packet.getAvgEndFrameTimeMS()); + buffer.writeFloatLE(packet.getAvgRemainderTimePercent()); + buffer.writeFloatLE(packet.getAvgUnaccountedTimePercent()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundDiagnosticsPacket packet) { + packet.setAvgTps(buffer.readFloatLE()); + packet.setAvgServerSimTickTimeMS(buffer.readFloatLE()); + packet.setAvgClientSimTickTimeMS(buffer.readFloatLE()); + packet.setAvgBeginFrameTimeMS(buffer.readFloatLE()); + packet.setAvgInputTimeMS(buffer.readFloatLE()); + packet.setAvgRenderTimeMS(buffer.readFloatLE()); + packet.setAvgEndFrameTimeMS(buffer.readFloatLE()); + packet.setAvgRemainderTimePercent(buffer.readFloatLE()); + packet.setAvgUnaccountedTimePercent(buffer.readFloatLE()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundLoadingScreenSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundLoadingScreenSerializer_v712.java new file mode 100644 index 000000000..abf03fc4f --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/ServerboundLoadingScreenSerializer_v712.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; +import org.cloudburstmc.protocol.bedrock.data.ServerboundLoadingScreenPacketType; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundLoadingScreenPacket; +import org.cloudburstmc.protocol.common.util.VarInts; + +public class ServerboundLoadingScreenSerializer_v712 implements BedrockPacketSerializer { + public static final ServerboundLoadingScreenSerializer_v712 INSTANCE = new ServerboundLoadingScreenSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundLoadingScreenPacket packet) { + VarInts.writeInt(buffer, packet.getType().ordinal()); + helper.writeOptionalNull(buffer, packet.getLoadingScreenId(), ByteBuf::writeIntLE); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ServerboundLoadingScreenPacket packet) { + packet.setType(ServerboundLoadingScreenPacketType.values()[VarInts.readInt(buffer)]); + packet.setLoadingScreenId(helper.readOptional(buffer, null, ByteBuf::readIntLE)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/SetTitleSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/SetTitleSerializer_v712.java new file mode 100644 index 000000000..73d39f7cb --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/SetTitleSerializer_v712.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v448.serializer.SetTitleSerializer_v448; +import org.cloudburstmc.protocol.bedrock.packet.SetTitlePacket; + +public class SetTitleSerializer_v712 extends SetTitleSerializer_v448 { + public static final SetTitleSerializer_v712 INSTANCE = new SetTitleSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, SetTitlePacket packet) { + super.serialize(buffer, helper, packet); + helper.writeString(buffer, packet.getFilteredTitleText()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SetTitlePacket packet) { + super.deserialize(buffer, helper, packet); + packet.setFilteredTitleText(helper.readString(buffer)); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/StopSoundSerializer_v712.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/StopSoundSerializer_v712.java new file mode 100644 index 000000000..c9ea64327 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v712/serializer/StopSoundSerializer_v712.java @@ -0,0 +1,22 @@ +package org.cloudburstmc.protocol.bedrock.codec.v712.serializer; + +import io.netty.buffer.ByteBuf; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.StopSoundSerializer_v291; +import org.cloudburstmc.protocol.bedrock.packet.StopSoundPacket; + +public class StopSoundSerializer_v712 extends StopSoundSerializer_v291 { + public static final StopSoundSerializer_v712 INSTANCE = new StopSoundSerializer_v712(); + + @Override + public void serialize(ByteBuf buffer, BedrockCodecHelper helper, StopSoundPacket packet) { + super.serialize(buffer, helper, packet); + buffer.writeBoolean(packet.isStopMusicLegacy()); + } + + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, StopSoundPacket packet) { + super.deserialize(buffer, helper, packet); + packet.setStopMusicLegacy(buffer.readBoolean()); + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/AbilityLayer.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/AbilityLayer.java index 0014f7641..8a2f59acf 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/AbilityLayer.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/AbilityLayer.java @@ -21,6 +21,10 @@ public enum Type { /** * @since v557 */ - EDITOR + EDITOR, + /** + * @since v712 + */ + LOADING_SCREEN } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java index 70fa0a510..4ca784a65 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/DisconnectFailReason.java @@ -119,5 +119,6 @@ public enum DisconnectFailReason { SERVICE_SIGN_IN_ISSUE, CONN_NO_SIGNALING_CHANNEL, CONN_NOT_LOGGED_IN, - CONN_CLIENT_SIGNALING_ERROR + CONN_CLIENT_SIGNALING_ERROR, + SUB_CLIENT_LOGIN_DISABLED } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerArmorDamageFlag.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerArmorDamageFlag.java index 68ede3aa7..825d3cab7 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerArmorDamageFlag.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/PlayerArmorDamageFlag.java @@ -4,5 +4,9 @@ public enum PlayerArmorDamageFlag { HELMET, CHESTPLATE, LEGGINGS, - BOOTS + BOOTS, + /** + * @since v712 + */ + BODY } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerboundLoadingScreenPacketType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerboundLoadingScreenPacketType.java new file mode 100644 index 000000000..677b8bf99 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/ServerboundLoadingScreenPacketType.java @@ -0,0 +1,8 @@ +package org.cloudburstmc.protocol.bedrock.data; + +public enum ServerboundLoadingScreenPacketType { + + UNKNOWN, + START_LOADING_SCREEN, + END_LOADING_SCREEN +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java index 42c0fe477..02262a73a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/SoundEvent.java @@ -709,6 +709,14 @@ public enum SoundEvent { * @since v685 */ RECORD_PRECIPICE, + /** + * @since v712 + */ + IMITATE_BOGGED, + /** + * @since v712 + */ + VAULT_REJECT_REWARDED_PLAYER, UNDEFINED } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraPreset.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraPreset.java index e59b46575..5ede2dc5e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraPreset.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraPreset.java @@ -3,6 +3,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.common.util.OptionalBoolean; @@ -16,6 +17,14 @@ public class CameraPreset { private Vector3f pos; private Float yaw; private Float pitch; + /** + * @since v712 + */ + private Vector2f viewOffset; + /** + * @since v712 + */ + private Float radius; private CameraAudioListener listener; private OptionalBoolean playEffect; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraTargetInstruction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraTargetInstruction.java new file mode 100644 index 000000000..612156aad --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/camera/CameraTargetInstruction.java @@ -0,0 +1,14 @@ +package org.cloudburstmc.protocol.bedrock.data.camera; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.cloudburstmc.math.vector.Vector3f; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CameraTargetInstruction { + private Vector3f targetCenterOffset; + private long uniqueEntityId; +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityLinkData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityLinkData.java index e94ad25c8..f449e833e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityLinkData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/entity/EntityLinkData.java @@ -11,10 +11,19 @@ public class EntityLinkData { private final Type type; private final boolean immediate; private final boolean riderInitiated; + /** + * @since v712 + */ + private final float vehicleAngularVelocity; @Deprecated public EntityLinkData(long from, long to, Type type, boolean immediate) { - this(from, to, type, immediate, false); + this(from, to, type, immediate, false, 0f); + } + + @Deprecated + public EntityLinkData(long from, long to, Type type, boolean immediate, boolean riderInitiated) { + this(from, to, type, immediate, riderInitiated, 0f); } public enum Type { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java index 1e3a02835..ca20b4701 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ContainerSlotType.java @@ -66,5 +66,9 @@ public enum ContainerSlotType { /** * @since v630 */ - CRAFTER_BLOCK_CONTAINER + CRAFTER_BLOCK_CONTAINER, + /** + * @since v712 + */ + DYNAMIC_CONTAINER } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/FullContainerName.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/FullContainerName.java new file mode 100644 index 000000000..06e1f96ea --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/FullContainerName.java @@ -0,0 +1,10 @@ +package org.cloudburstmc.protocol.bedrock.data.inventory; + +import lombok.Value; + +@Value +public class FullContainerName { + + private final ContainerSlotType container; + private final int dynamicId; +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/ItemStackRequestSlotData.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/ItemStackRequestSlotData.java index 76df01fe9..b67d0d92c 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/ItemStackRequestSlotData.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/ItemStackRequestSlotData.java @@ -2,20 +2,34 @@ import lombok.Value; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; /** * Holds information on a specific slot client-side. */ @Value public class ItemStackRequestSlotData { - // container the slot was in + /** + * container the slot was in + * + * @deprecated since v712 + */ ContainerSlotType container; - // slot is the index of the slot within the container + /** + * slot is the index of the slot within the container + */ int slot; - // stackNetworkId is the unique stack ID that the client assumes to be present in this slot. The server - // must check if these IDs match. If they do not match, servers should reject the stack request that the - // action holding this info was in. + /** + * stackNetworkId is the unique stack ID that the client assumes to be present in this slot. The server + * must check if these IDs match. If they do not match, servers should reject the stack request that the + * action holding this info was in. + */ int stackNetworkId; + + /** + * @since v712 + */ + FullContainerName containerName; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/AutoCraftRecipeAction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/AutoCraftRecipeAction.java index ac161a8d6..11e9dc367 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/AutoCraftRecipeAction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/AutoCraftRecipeAction.java @@ -22,6 +22,11 @@ public class AutoCraftRecipeAction implements RecipeItemStackRequestAction { */ List ingredients; + /** + * @since v712 + */ + int numberOfRequestedCrafts; + @Override public ItemStackRequestActionType getType() { return ItemStackRequestActionType.CRAFT_RECIPE_AUTO; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftCreativeAction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftCreativeAction.java index 3cad52ae8..6c2071bdc 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftCreativeAction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftCreativeAction.java @@ -13,6 +13,10 @@ public class CraftCreativeAction implements ItemStackRequestAction { * creative item network IDs sent in the CreativeContent packet. */ int creativeItemNetworkId; + /** + * @since v712 + */ + int numberOfRequestedCrafts; @Override public ItemStackRequestActionType getType() { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftGrindstoneAction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftGrindstoneAction.java index 0b13c8e21..570090c14 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftGrindstoneAction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftGrindstoneAction.java @@ -5,6 +5,10 @@ @Value public class CraftGrindstoneAction implements ItemStackRequestAction { int recipeNetworkId; + /** + * @since v712 + */ + int numberOfRequestedCrafts; int repairCost; @Override diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftRecipeAction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftRecipeAction.java index a3896520e..718c6e304 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftRecipeAction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/CraftRecipeAction.java @@ -11,6 +11,10 @@ @Value public class CraftRecipeAction implements RecipeItemStackRequestAction { int recipeNetworkId; + /** + * @since v712 + */ + int numberOfRequestedCrafts; @Override public ItemStackRequestActionType getType() { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/ItemStackRequestActionType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/ItemStackRequestActionType.java index 08296e14a..973c95302 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/ItemStackRequestActionType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/ItemStackRequestActionType.java @@ -19,6 +19,12 @@ public enum ItemStackRequestActionType { CRAFT_LOOM, CRAFT_NON_IMPLEMENTED_DEPRECATED, CRAFT_RESULTS_DEPRECATED, + /** + * @deprecated since 712 + */ PLACE_IN_ITEM_CONTAINER, + /** + * @deprecated since 712 + */ TAKE_FROM_ITEM_CONTAINER } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/RecipeItemStackRequestAction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/RecipeItemStackRequestAction.java index c4d96f3ff..d2c80054a 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/RecipeItemStackRequestAction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/request/action/RecipeItemStackRequestAction.java @@ -7,4 +7,6 @@ public interface RecipeItemStackRequestAction extends ItemStackRequestAction { int getRecipeNetworkId(); + + int getNumberOfRequestedCrafts(); } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseContainer.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseContainer.java index d890defd2..b74364df2 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseContainer.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/itemstack/response/ItemStackResponseContainer.java @@ -2,6 +2,7 @@ import lombok.Value; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import java.util.List; @@ -12,6 +13,8 @@ public class ItemStackResponseContainer { /** * container that the slots that follow are in. + * + * @deprecated since v712 */ ContainerSlotType container; @@ -19,4 +22,9 @@ public class ItemStackResponseContainer { * items holds information on what item stack should be present in specific slots in the container. */ List items; + + /** + * @since v712 + */ + FullContainerName containerName; } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java index 5a16fbb98..244af1ad3 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/transaction/ItemUseTransaction.java @@ -23,4 +23,23 @@ public class ItemUseTransaction { private Vector3f playerPosition; private Vector3f clickPosition; private BlockDefinition blockDefinition; + /** + * @since v712 + */ + private PredictedResult clientInteractPrediction; + /** + * @since v712 + */ + private TriggerType triggerType; + + public enum PredictedResult { + FAILURE, + SUCCESS + } + + public enum TriggerType { + UNKNOWN, + PLAYER_INPUT, + SIMULATION_TICK + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateRequestOperation.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateRequestOperation.java index a6684666b..38f3ca51e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateRequestOperation.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateRequestOperation.java @@ -7,6 +7,7 @@ public enum StructureTemplateRequestOperation { QUERY_SAVED_STRUCTURE, /** * @since v560 + * @deprecated since v712 */ IMPORT; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateResponseType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateResponseType.java index b73942185..b3d89fb71 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateResponseType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/structure/StructureTemplateResponseType.java @@ -6,6 +6,7 @@ public enum StructureTemplateResponseType { QUERY, /** * @since v560 + * @deprecated since v712 */ IMPORT; diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java index 5acca998e..b6ace38dd 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketHandler.java @@ -843,4 +843,20 @@ default PacketSignal handle(AwardAchievementPacket packet) { default PacketSignal handle(ClientboundCloseFormPacket packet) { return PacketSignal.UNHANDLED; } + + default PacketSignal handle(ServerboundLoadingScreenPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(JigsawStructureDataPacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(CurrentStructureFeaturePacket packet) { + return PacketSignal.UNHANDLED; + } + + default PacketSignal handle(ServerboundDiagnosticsPacket packet) { + return PacketSignal.UNHANDLED; + } } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java index 080c8d414..d6c762185 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/BedrockPacketType.java @@ -209,5 +209,9 @@ public enum BedrockPacketType { SET_PLAYER_INVENTORY_OPTIONS, SET_HUD, AWARD_ACHIEVEMENT, - CLIENTBOUND_CLOSE_FORM + CLIENTBOUND_CLOSE_FORM, + SERVERBOUND_LOADING_SCREEN, + JIGSAW_STRUCTURE_DATA, + CURRENT_STRUCTURE_FEATURE, + SERVERBOUND_DIAGNOSTICS } diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java index d2c34b2a1..e139b761e 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CameraInstructionPacket.java @@ -6,6 +6,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.camera.CameraFadeInstruction; import org.cloudburstmc.protocol.bedrock.data.camera.CameraSetInstruction; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraTargetInstruction; import org.cloudburstmc.protocol.common.PacketSignal; import org.cloudburstmc.protocol.common.util.OptionalBoolean; @@ -16,6 +17,14 @@ public class CameraInstructionPacket implements BedrockPacket { private CameraSetInstruction setInstruction; private CameraFadeInstruction fadeInstruction; private OptionalBoolean clear = OptionalBoolean.empty(); + /** + * @since v712 + */ + private CameraTargetInstruction targetInstruction; + /** + * @since v712 + */ + private OptionalBoolean removeTarget = OptionalBoolean.empty(); @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java index 16aeb3b27..f642587f1 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ChangeDimensionPacket.java @@ -13,6 +13,11 @@ public class ChangeDimensionPacket implements BedrockPacket { private int dimension; private Vector3f position; private boolean respawn; + /** + * Will be serialized as optional not present if null + * @since v712 + */ + private Integer loadingScreenId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java new file mode 100644 index 000000000..242aa6a4a --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/CurrentStructureFeaturePacket.java @@ -0,0 +1,23 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class CurrentStructureFeaturePacket implements BedrockPacket { + private String currentStructureFeature; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.CURRENT_STRUCTURE_FEATURE; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java index ade057f14..5bd623073 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/DisconnectPacket.java @@ -13,6 +13,10 @@ public class DisconnectPacket implements BedrockPacket { private DisconnectFailReason reason = DisconnectFailReason.UNKNOWN; private boolean messageSkipped; private String kickMessage; + /** + * @since v712 + */ + private String filteredMessage = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java index c789dbe47..b6d513fc6 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/EditorNetworkPacket.java @@ -10,6 +10,10 @@ @ToString(doNotUseGetters = true) public class EditorNetworkPacket implements BedrockPacket { private Object payload; // NBT like + /** + * @since v712 + */ + private boolean routeToManager; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java index 92aa9f191..64b41e478 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryContentPacket.java @@ -15,6 +15,10 @@ public class InventoryContentPacket implements BedrockPacket { private List contents = new ObjectArrayList<>(); private int containerId; + /** + * @since v712 + */ + private int dynamicContainerId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java index d9ddd12b7..914904e70 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventorySlotPacket.java @@ -13,6 +13,10 @@ public class InventorySlotPacket implements BedrockPacket { private int containerId; private int slot; private ItemData item; + /** + * @since v712 + */ + private int dynamicContainerId; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java index ac84c02db..5b32f6ae0 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/InventoryTransactionPacket.java @@ -10,6 +10,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventoryActionData; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventoryTransactionType; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.LegacySetItemSlotData; import org.cloudburstmc.protocol.common.PacketSignal; @@ -46,6 +47,10 @@ public class InventoryTransactionPacket implements BedrockPacket { * @return block definition of block */ private BlockDefinition blockDefinition; + /** + * @since v712 + */ + private ItemUseTransaction.TriggerType triggerType; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java new file mode 100644 index 000000000..348526e7a --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/JigsawStructureDataPacket.java @@ -0,0 +1,24 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.common.PacketSignal; + +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class JigsawStructureDataPacket implements BedrockPacket { + private NbtMap jigsawStructureDataTag; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.JIGSAW_STRUCTURE_DATA; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java index e86a6d610..40cf5904f 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/MobArmorEquipmentPacket.java @@ -15,6 +15,10 @@ public class MobArmorEquipmentPacket implements BedrockPacket { private ItemData chestplate; private ItemData leggings; private ItemData boots; + /** + * @since v712 + */ + private ItemData body; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java index d5e80c50a..3cdb3f46d 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/PlayerArmorDamagePacket.java @@ -14,7 +14,7 @@ @ToString(doNotUseGetters = true) public class PlayerArmorDamagePacket implements BedrockPacket { private final Set flags = EnumSet.noneOf(PlayerArmorDamageFlag.class); - private final int[] damage = new int[4]; + private final int[] damage = new int[5]; @Override public PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java index dc93389cf..c96ff6021 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ResourcePacksInfoPacket.java @@ -1,7 +1,10 @@ package org.cloudburstmc.protocol.bedrock.packet; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import lombok.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.Value; import org.cloudburstmc.protocol.common.PacketSignal; import java.util.List; @@ -46,6 +49,10 @@ public static class Entry { private final String contentId; private final boolean scripting; private final boolean raytracingCapable; + /** + * @since v712 + */ + private final boolean addonPack; } @Value diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java new file mode 100644 index 000000000..0d8522844 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundDiagnosticsPacket.java @@ -0,0 +1,31 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.common.PacketSignal; + +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ServerboundDiagnosticsPacket implements BedrockPacket{ + private float avgTps; + private float avgServerSimTickTimeMS; + private float avgClientSimTickTimeMS; + private float avgBeginFrameTimeMS; + private float avgInputTimeMS; + private float avgRenderTimeMS; + private float avgEndFrameTimeMS; + private float avgRemainderTimePercent; + private float avgUnaccountedTimePercent; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.SERVERBOUND_DIAGNOSTICS; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java new file mode 100644 index 000000000..21d16e308 --- /dev/null +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ServerboundLoadingScreenPacket.java @@ -0,0 +1,28 @@ +package org.cloudburstmc.protocol.bedrock.packet; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.cloudburstmc.protocol.bedrock.data.ServerboundLoadingScreenPacketType; +import org.cloudburstmc.protocol.common.PacketSignal; + +@Data +@EqualsAndHashCode(doNotUseGetters = true) +@ToString(doNotUseGetters = true) +public class ServerboundLoadingScreenPacket implements BedrockPacket { + private ServerboundLoadingScreenPacketType type; + /** + * Optional int, not present if null + */ + private Integer loadingScreenId; + + @Override + public PacketSignal handle(BedrockPacketHandler handler) { + return handler.handle(this); + } + + @Override + public BedrockPacketType getPacketType() { + return BedrockPacketType.SERVERBOUND_LOADING_SCREEN; + } +} \ No newline at end of file diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java index 722afa90a..812b16845 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/SetTitlePacket.java @@ -22,6 +22,10 @@ public class SetTitlePacket implements BedrockPacket { * @since v448 */ private String platformOnlineId; + /** + * @since v712 + */ + private String filteredTitleText = ""; @Override public final PacketSignal handle(BedrockPacketHandler handler) { diff --git a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java index cac579b94..783566d77 100644 --- a/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java +++ b/bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StopSoundPacket.java @@ -11,6 +11,10 @@ public class StopSoundPacket implements BedrockPacket { private String soundName; private boolean stoppingAllSound; + /** + * @since v712 + */ + private boolean stopMusicLegacy; @Override public final PacketSignal handle(BedrockPacketHandler handler) {