Skip to content

Commit 51b1715

Browse files
committed
Add entity equipment read type
1 parent 395beba commit 51b1715

File tree

6 files changed

+41
-79
lines changed

6 files changed

+41
-79
lines changed

common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
3131
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.data.MapColorMappings1_15_2;
3232
import com.viaversion.viaversion.api.connection.UserConnection;
33+
import com.viaversion.viaversion.api.minecraft.EntityEquipment;
3334
import com.viaversion.viaversion.api.minecraft.item.Item;
3435
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3536
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
@@ -47,7 +48,6 @@
4748
import com.viaversion.viaversion.util.CompactArrayUtil;
4849
import com.viaversion.viaversion.util.Key;
4950
import com.viaversion.viaversion.util.UUIDUtil;
50-
import java.util.ArrayList;
5151
import java.util.List;
5252
import java.util.Map;
5353
import java.util.UUID;
@@ -143,27 +143,21 @@ protected void registerPackets() {
143143
protocol.registerClientbound(ClientboundPackets1_16.SET_EQUIPMENT, ClientboundPackets1_15.SET_EQUIPPED_ITEM, wrapper -> {
144144
int entityId = wrapper.passthrough(Types.VAR_INT);
145145

146-
List<EquipmentData> equipmentData = new ArrayList<>();
147-
byte slot;
148-
do {
149-
slot = wrapper.read(Types.BYTE);
150-
Item item = handleItemToClient(wrapper.user(), wrapper.read(Types.ITEM1_13_2));
151-
int rawSlot = slot & 0x7F;
152-
equipmentData.add(new EquipmentData(rawSlot, item));
153-
} while ((slot & 0xFFFFFF80) != 0);
146+
List<EntityEquipment> equipmentData = wrapper.read(equipmentType());
147+
equipmentData.replaceAll(equipment -> equipment.rewrite(wrapper.user(), protocol, true));
154148

155149
// Send first data in the current packet
156-
EquipmentData firstData = equipmentData.get(0);
157-
wrapper.write(Types.VAR_INT, firstData.slot);
158-
wrapper.write(Types.ITEM1_13_2, firstData.item);
150+
EntityEquipment firstData = equipmentData.get(0);
151+
wrapper.write(Types.VAR_INT, firstData.slot());
152+
wrapper.write(Types.ITEM1_13_2, firstData.item());
159153

160154
// If there are more items, send new packets for them
161155
for (int i = 1; i < equipmentData.size(); i++) {
162156
PacketWrapper equipmentPacket = wrapper.create(ClientboundPackets1_15.SET_EQUIPPED_ITEM);
163-
EquipmentData data = equipmentData.get(i);
157+
EntityEquipment data = equipmentData.get(i);
164158
equipmentPacket.write(Types.VAR_INT, entityId);
165-
equipmentPacket.write(Types.VAR_INT, data.slot);
166-
equipmentPacket.write(Types.ITEM1_13_2, data.item);
159+
equipmentPacket.write(Types.VAR_INT, data.slot());
160+
equipmentPacket.write(Types.ITEM1_13_2, data.item());
167161
equipmentPacket.send(Protocol1_16To1_15_2.class);
168162
}
169163
});
@@ -315,7 +309,4 @@ public Item handleItemToServer(UserConnection connection, Item item) {
315309
enchantmentRewriter.handleToServer(item);
316310
return item;
317311
}
318-
319-
private record EquipmentData(int slot, Item item) {
320-
}
321312
}

common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/rewriter/EntityPacketRewriter1_19_4.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.storage.EntityTracker1_19_4;
2929
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.storage.LinkedEntityStorage;
3030
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
31+
import com.viaversion.viaversion.api.minecraft.EntityEquipment;
3132
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
3233
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_19_3;
3334
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_19_4;
@@ -42,6 +43,8 @@
4243
import com.viaversion.viaversion.protocols.v1_19_1to1_19_3.packet.ClientboundPackets1_19_3;
4344
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
4445
import com.viaversion.viaversion.util.TagUtil;
46+
import java.util.ArrayList;
47+
import java.util.List;
4548

4649
public final class EntityPacketRewriter1_19_4 extends EntityRewriter<ClientboundPackets1_19_4, Protocol1_19_4To1_19_3> {
4750

@@ -284,9 +287,9 @@ public void registerRewrites() {
284287

285288
final PacketWrapper setEquipment = PacketWrapper.create(ClientboundPackets1_19_3.SET_EQUIPMENT, event.user());
286289
setEquipment.write(Types.VAR_INT, event.entityId()); // Entity id
287-
setEquipment.write(Types.BYTE, (byte) 5); // Slot - head
288-
setEquipment.write(Types.ITEM1_13_2, value);
289-
290+
final List<EntityEquipment> equipmentList = new ArrayList<>(1);
291+
equipmentList.add(new EntityEquipment(5, value)); // Slot - head
292+
setEquipment.write(protocol.getItemRewriter().mappedEquipmentType(), equipmentList);
290293
setEquipment.send(Protocol1_19_4To1_19_3.class);
291294
});
292295
filter().type(EntityTypes1_19_4.DISPLAY).handler((event, data) -> {

common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
3636
import com.viaversion.viaversion.api.minecraft.item.Item;
3737
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
38-
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
3938
import com.viaversion.viaversion.api.type.Type;
4039
import com.viaversion.viaversion.api.type.Types;
4140
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_18;
@@ -182,19 +181,7 @@ public void registerPackets() {
182181
wrapper.passthrough(Types.BOOLEAN); // Send telemetry
183182
}
184183
});
185-
protocol.registerClientbound(ClientboundPackets1_20_2.SET_EQUIPMENT, new PacketHandlers() {
186-
@Override
187-
public void register() {
188-
map(Types.VAR_INT); // 0 - Entity ID
189-
handler(wrapper -> {
190-
byte slot;
191-
do {
192-
slot = wrapper.passthrough(Types.BYTE);
193-
wrapper.write(Types.ITEM1_13_2, handleItemToClient(wrapper.user(), wrapper.read(Types.ITEM1_20_2)));
194-
} while ((slot & 0xFFFFFF80) != 0);
195-
});
196-
}
197-
});
184+
registerSetEquipment(ClientboundPackets1_20_2.SET_EQUIPMENT);
198185

199186
new RecipeRewriter1_20_2<>(protocol) {
200187
@Override

common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.storage.SecureChatStorage;
3131
import com.viaversion.viaversion.api.connection.UserConnection;
3232
import com.viaversion.viaversion.api.data.entity.DimensionData;
33+
import com.viaversion.viaversion.api.minecraft.EntityEquipment;
3334
import com.viaversion.viaversion.api.minecraft.Particle;
3435
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
3536
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
@@ -71,28 +72,24 @@ public void registerPackets() {
7172
registerRemoveEntities(ClientboundPackets1_20_5.REMOVE_ENTITIES);
7273

7374
protocol.registerClientbound(ClientboundPackets1_20_5.SET_EQUIPMENT, wrapper -> {
74-
final int entityId = wrapper.passthrough(Types.VAR_INT); // Entity id
75+
final int entityId = wrapper.passthrough(Types.VAR_INT);
7576
final EntityType type = tracker(wrapper.user()).entityType(entityId);
76-
byte slot;
77-
do {
78-
slot = wrapper.read(Types.BYTE);
79-
final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(VersionedTypes.V1_20_5.item()));
80-
final int rawSlot = slot & 0x7F;
81-
82-
if (rawSlot == 6) {
83-
final boolean lastSlot = (slot & 0xFFFFFF80) == 0;
84-
slot = (byte) (lastSlot ? 4 : 4 | 0xFFFFFF80); // Map body slot index to chest slot index for horses, also wolves
77+
final List<EntityEquipment> equipmentList = wrapper.read(protocol.getItemRewriter().equipmentType());
78+
equipmentList.replaceAll(equipment -> {
79+
int slot = equipment.slot();
80+
Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), equipment.item());
81+
if (equipment.slot() == 6) {
82+
slot = 4;
8583

8684
if (type != null && type.isOrHasParent(EntityTypes1_20_5.LLAMA)) {
8785
// Cancel equipment and set correct entity data instead
8886
wrapper.cancel();
8987
sendCarpetColorUpdate(wrapper.user(), entityId, item);
9088
}
9189
}
92-
93-
wrapper.write(Types.BYTE, slot);
94-
wrapper.write(Types.ITEM1_20_2, item);
95-
} while ((slot & 0xFFFFFF80) != 0);
90+
return new EntityEquipment(slot, item);
91+
});
92+
wrapper.write(protocol.getItemRewriter().mappedEquipmentType(), equipmentList);
9693
});
9794

9895
protocol.registerClientbound(ClientboundPackets1_20_5.HORSE_SCREEN_OPEN, wrapper -> {

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/BlockItemPacketRewriter1_21_5.java

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.viaversion.viaversion.api.data.Mappings;
3333
import com.viaversion.viaversion.api.data.entity.EntityTracker;
3434
import com.viaversion.viaversion.api.data.entity.TrackedEntity;
35+
import com.viaversion.viaversion.api.minecraft.EntityEquipment;
3536
import com.viaversion.viaversion.api.minecraft.Holder;
3637
import com.viaversion.viaversion.api.minecraft.HolderSet;
3738
import com.viaversion.viaversion.api.minecraft.PaintingVariant;
@@ -67,9 +68,7 @@
6768
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_21_5;
6869
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
6970
import com.viaversion.viaversion.data.item.ItemHasherBase;
70-
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
7171
import com.viaversion.viaversion.libs.fastutil.ints.IntLinkedOpenHashSet;
72-
import com.viaversion.viaversion.libs.fastutil.ints.IntList;
7372
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPacket1_21_4;
7473
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPackets1_21_4;
7574
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPacket1_21_5;
@@ -90,6 +89,7 @@
9089
import static com.viaversion.viaversion.util.MathUtil.ceilLog2;
9190

9291
public final class BlockItemPacketRewriter1_21_5 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_5, ServerboundPacket1_21_4, Protocol1_21_5To1_21_4> {
92+
private static final int MAPPED_SADDLE_ID = 793;
9393
private static final int SIGN_BOCK_ENTITY_ID = 7;
9494
private static final int HANGING_SIGN_BOCK_ENTITY_ID = 8;
9595
private static final int SADDLE_EQUIPMENT_SLOT = 7;
@@ -180,39 +180,23 @@ public void registerPackets() {
180180
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), carriedItem));
181181
});
182182

183-
protocol.registerClientbound(ClientboundPackets1_21_5.SET_EQUIPMENT, wrapper -> {
184-
final int entityId = wrapper.passthrough(Types.VAR_INT);
183+
registerSetEquipment(ClientboundPackets1_21_5.SET_EQUIPMENT);
184+
protocol.appendClientbound(ClientboundPackets1_21_5.SET_EQUIPMENT, wrapper -> {
185+
final int entityId = wrapper.get(Types.VAR_INT, 0);
185186
final TrackedEntity trackedEntity = protocol.getEntityRewriter().tracker(wrapper.user()).entity(entityId);
186-
187-
// Remove saddle equipment, keep the rest
188-
final IntList keptSlots = new IntArrayList();
189-
final List<Item> keptItems = new ArrayList<>();
190-
byte value;
191-
do {
192-
value = wrapper.read(Types.BYTE);
193-
final int equipmentSlot = value & 0x7F;
194-
final Item item = wrapper.read(itemType());
195-
if (equipmentSlot == SADDLE_EQUIPMENT_SLOT) {
187+
final List<EntityEquipment> equipmentList = wrapper.get(protocol.getItemRewriter().mappedEquipmentType(), 0);
188+
equipmentList.removeIf(equipment -> {
189+
if (equipment.slot() == SADDLE_EQUIPMENT_SLOT) {
196190
// Send saddle entity data for horses
197191
if (trackedEntity != null && trackedEntity.entityType().isOrHasParent(EntityTypes1_21_5.ABSTRACT_HORSE)) {
198-
sendSaddledEntityData(wrapper.user(), trackedEntity, entityId, item.identifier() == 800);
192+
sendSaddledEntityData(wrapper.user(), trackedEntity, entityId, equipment.item().identifier() == MAPPED_SADDLE_ID);
199193
}
200-
} else {
201-
keptSlots.add(equipmentSlot);
202-
keptItems.add(handleItemToClient(wrapper.user(), item));
194+
return true;
203195
}
204-
} while (value < 0);
205-
206-
if (keptSlots.isEmpty()) {
196+
return false;
197+
});
198+
if (equipmentList.isEmpty()) {
207199
wrapper.cancel();
208-
return;
209-
}
210-
211-
for (int i = 0; i < keptSlots.size(); i++) {
212-
final int slot = keptSlots.getInt(i);
213-
final boolean more = i < keptSlots.size() - 1;
214-
wrapper.write(Types.BYTE, (byte) (more ? (slot | -128) : slot));
215-
wrapper.write(mappedItemType(), keptItems.get(i));
216200
}
217201
});
218202

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ metadata.format.version = "1.1"
33
[versions]
44

55
# ViaVersion
6-
viaver = "5.6.0"
6+
viaver = "5.6.1-SNAPSHOT"
77

88
# Common provided
99
netty = "4.0.20.Final"

0 commit comments

Comments
 (0)