Skip to content

Commit

Permalink
Add 1.21.20 support (#245)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alemiz112 authored Jul 26, 2024
2 parents ab383d4 + 989deef commit 7f0e7fb
Show file tree
Hide file tree
Showing 79 changed files with 1,215 additions and 148 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -583,4 +584,14 @@ public DefinitionRegistry<NamedDefinition> getCameraPresetDefinitions() {
public void setCameraPresetDefinitions(DefinitionRegistry<NamedDefinition> registry) {
throw new UnsupportedOperationException();
}

@Override
public void writeItemStackResponseContainer(ByteBuf buffer, ItemStackResponseContainer container) {
throw new UnsupportedOperationException();
}

@Override
public ItemStackResponseContainer readItemStackResponseContainer(ByteBuf buffer) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -233,4 +234,8 @@ default <T> void writeArray(ByteBuf buffer, Collection<T> array, TriConsumer<Byt
void writePlayerAbilities(ByteBuf buffer, PlayerAbilityHolder abilityHolder);

void readPlayerAbilities(ByteBuf buffer, PlayerAbilityHolder abilityHolder);

void writeItemStackResponseContainer(ByteBuf buffer, ItemStackResponseContainer container);

ItemStackResponseContainer readItemStackResponseContainer(ByteBuf buffer);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ protected ResourcePacksInfoPacket.Entry readEntry(ByteBuf buffer, BedrockCodecHe
String contentKey = helper.readString(buffer);
String subPackName = helper.readString(buffer);
String contentId = helper.readString(buffer);
return new ResourcePacksInfoPacket.Entry(packId, packVersion, packSize, contentKey, subPackName, contentId, false, false);
return new ResourcePacksInfoPacket.Entry(packId, packVersion, packSize, contentKey, subPackName, contentId, false, false, false);
}

protected void writeEntry(ByteBuf buffer, BedrockCodecHelper helper, ResourcePacksInfoPacket.Entry entry, boolean resource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@ public ResourcePacksInfoPacket.Entry readEntry(ByteBuf buffer, BedrockCodecHelpe
String contentId = helper.readString(buffer);
boolean isScripting = buffer.readBoolean();
return new ResourcePacksInfoPacket.Entry(packId, packVersion, packSize, contentKey, subPackName, contentId,
isScripting, false);
isScripting, false, false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest;
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
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.InventoryActionData;
import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventorySource;
import org.cloudburstmc.protocol.common.util.TypeMap;
Expand Down Expand Up @@ -231,15 +233,15 @@ protected ItemStackRequestAction readRequestActionData(ByteBuf byteBuf, ItemStac
);
case CRAFT_RECIPE:
return new CraftRecipeAction(
VarInts.readUnsignedInt(byteBuf)
VarInts.readUnsignedInt(byteBuf), 0
);
case CRAFT_RECIPE_AUTO:
return new AutoCraftRecipeAction(
VarInts.readUnsignedInt(byteBuf), 0, Collections.emptyList()
VarInts.readUnsignedInt(byteBuf), 0, Collections.emptyList(), 0
);
case CRAFT_CREATIVE:
return new CraftCreativeAction(
VarInts.readUnsignedInt(byteBuf)
VarInts.readUnsignedInt(byteBuf), 0
);
case CRAFT_NON_IMPLEMENTED_DEPRECATED:
return new CraftNonImplementedAction();
Expand All @@ -257,7 +259,8 @@ protected ItemStackRequestSlotData readStackRequestSlotInfo(ByteBuf buffer) {
return new ItemStackRequestSlotData(
this.readContainerSlotType(buffer),
buffer.readUnsignedByte(),
VarInts.readInt(buffer)
VarInts.readInt(buffer),
null
);
}

Expand Down Expand Up @@ -308,6 +311,37 @@ public void writeIngredient(ByteBuf buffer, ItemDescriptorWithCount ingredient)
VarInts.writeInt(buffer, ingredient.getCount());
}

@Override
public void writeItemStackResponseContainer(ByteBuf buffer, ItemStackResponseContainer container) {
this.writeContainerSlotType(buffer, container.getContainer());
this.writeArray(buffer, container.getItems(), this::writeItemEntry);
}

@Override
public ItemStackResponseContainer readItemStackResponseContainer(ByteBuf buffer) {
ContainerSlotType slotType = this.readContainerSlotType(buffer);
List<ItemStackResponseSlot> 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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResp

List<ItemStackResponseSlot> 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);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,17 @@
public class PlayerArmorDamageSerializer_v407 implements BedrockPacketSerializer<PlayerArmorDamagePacket> {
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);

Expand All @@ -38,11 +42,15 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, PlayerArmorDa
int flagsVal = buffer.readUnsignedByte();
Set<PlayerArmorDamageFlag> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
});
}

Expand All @@ -46,13 +41,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemStackResp
return new ItemStackResponse(result, requestId, Collections.emptyList());

List<ItemStackResponseContainer> containerEntries = new ArrayList<>();
helper.readArray(buf, containerEntries, buf2 -> {
ContainerSlotType container = helper.readContainerSlotType(buf2);

List<ItemStackResponseSlot> 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);
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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();

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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))
Expand Down
Loading

0 comments on commit 7f0e7fb

Please sign in to comment.