Skip to content

Commit cf64b7f

Browse files
authored
Fix 1.9->1.8 use item (#466)
1 parent 6829af6 commit cf64b7f

File tree

5 files changed

+39
-8
lines changed

5 files changed

+39
-8
lines changed

common/src/main/java/com/viaversion/viarewind/protocol/protocol1_8to1_9/entityreplacement/ShulkerModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import com.viaversion.viarewind.protocol.protocol1_7_2_5to1_7_6_10.ClientboundPackets1_7_2_5;
2222
import com.viaversion.viarewind.protocol.protocol1_8to1_9.Protocol1_8To1_9;
23+
import com.viaversion.viarewind.protocol.protocol1_8to1_9.storage.EntityTracker;
2324
import com.viaversion.viarewind.utils.PacketUtil;
2425
import com.viaversion.viaversion.api.connection.UserConnection;
2526
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10;
@@ -92,7 +93,7 @@ public void updateMetadata() {
9293
}
9394
metadataList.add(new Metadata(11, MetaType1_9.VarInt, 2));
9495

95-
getProtocol().getMetadataRewriter().transform(EntityTypes1_10.EntityType.MAGMA_CUBE, metadataList);
96+
getProtocol().getMetadataRewriter().transform(user.get(EntityTracker.class), entityId, metadataList, EntityTypes1_10.EntityType.MAGMA_CUBE);
9697

9798
metadataPacket.write(Types1_8.METADATA_LIST, metadataList);
9899

common/src/main/java/com/viaversion/viarewind/protocol/protocol1_8to1_9/metadata/MetadataRewriter.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020

2121
import com.viaversion.viarewind.ViaRewind;
2222
import com.viaversion.viarewind.protocol.protocol1_8to1_9.Protocol1_8To1_9;
23+
import com.viaversion.viarewind.protocol.protocol1_8to1_9.storage.EntityTracker;
2324
import com.viaversion.viaversion.api.minecraft.EulerAngle;
2425
import com.viaversion.viaversion.api.minecraft.Vector;
25-
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10;
26+
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10.EntityType;
2627
import com.viaversion.viaversion.api.minecraft.item.Item;
2728
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
2829
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_8;
@@ -39,13 +40,34 @@ public MetadataRewriter(Protocol1_8To1_9 protocol) {
3940
this.protocol = protocol;
4041
}
4142

42-
public void transform(EntityTypes1_10.EntityType type, List<Metadata> list) {
43+
public void transform(EntityTracker tracker, int entityId, List<Metadata> list) {
44+
transform(tracker, entityId, list, tracker.getClientEntityTypes().get(entityId));
45+
}
46+
47+
private static final byte HAND_ACTIVE_BIT = 0;
48+
private static final byte STATUS_USE_BIT = 4;
49+
50+
public void transform(EntityTracker tracker, int entityId, List<Metadata> list, EntityType entityType) {
51+
for (Metadata metadata : list) {
52+
if (metadata.id() == MetaIndex.ENTITY_STATUS.getIndex()) {
53+
tracker.getStatusInformation().put(entityId, (Byte) metadata.getValue());
54+
}
55+
}
4356
for (Metadata entry : new ArrayList<>(list)) {
44-
MetaIndex metaIndex = MetaIndex1_8to1_9.searchIndex(type, entry.id());
57+
MetaIndex metaIndex = MetaIndex1_8to1_9.searchIndex(entityType, entry.id());
4558
try {
4659
if (metaIndex != null) {
4760
if (metaIndex.getOldType() == MetaType1_8.NonExistent || metaIndex.getNewType() == null) {
4861
list.remove(entry);
62+
if (metaIndex == MetaIndex.PLAYER_HAND) {
63+
byte status = tracker.getStatusInformation().getOrDefault(entityId, (byte) 0);
64+
if ((((byte) entry.value()) & 1 << HAND_ACTIVE_BIT) != 0) {
65+
status = (byte) (status | 1 << STATUS_USE_BIT);
66+
} else {
67+
status = (byte) (status & ~(1 << STATUS_USE_BIT));
68+
}
69+
list.add(new Metadata(MetaIndex.ENTITY_STATUS.getIndex(), MetaType1_8.Byte, status));
70+
}
4971
continue;
5072
}
5173
Object value = entry.getValue();

common/src/main/java/com/viaversion/viarewind/protocol/protocol1_8to1_9/packets/EntityPackets.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.viaversion.viarewind.utils.PacketUtil;
2929
import com.viaversion.viaversion.api.minecraft.Vector;
3030
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10;
31+
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10.EntityType;
3132
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
3233
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3334
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
@@ -289,7 +290,7 @@ public void register() {
289290
int entityId = wrapper.get(Type.VAR_INT, 0);
290291
EntityTracker tracker = wrapper.user().get(EntityTracker.class);
291292
if (tracker.getClientEntityTypes().containsKey(entityId)) {
292-
protocol.getMetadataRewriter().transform(tracker.getClientEntityTypes().get(entityId), metadataList);
293+
protocol.getMetadataRewriter().transform(tracker, entityId, metadataList);
293294
if (metadataList.isEmpty()) wrapper.cancel();
294295
} else {
295296
tracker.addMetadataToBuffer(entityId, metadataList);

common/src/main/java/com/viaversion/viarewind/protocol/protocol1_8to1_9/packets/SpawnPackets.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public void register() {
216216
if ((replacement = tracker.getEntityReplacement(entityId)) != null) {
217217
replacement.updateMetadata(metadataList);
218218
} else if (tracker.getClientEntityTypes().containsKey(entityId)) {
219-
protocol.getMetadataRewriter().transform(tracker.getClientEntityTypes().get(entityId), metadataList);
219+
protocol.getMetadataRewriter().transform(tracker, entityId, metadataList);
220220
} else {
221221
wrapper.cancel();
222222
}
@@ -256,8 +256,9 @@ public void register() {
256256
handler(packetWrapper -> packetWrapper.write(Type.SHORT, (short) 0));
257257
map(Types1_9.METADATA_LIST, Types1_8.METADATA_LIST);
258258
this.handler(wrapper -> {
259+
int entityId = wrapper.get(Type.VAR_INT, 0);
259260
List<Metadata> metadataList = wrapper.get(Types1_8.METADATA_LIST, 0);
260-
protocol.getMetadataRewriter().transform(EntityTypes1_10.EntityType.PLAYER, metadataList);
261+
protocol.getMetadataRewriter().transform(wrapper.user().get(EntityTracker.class), entityId, metadataList, EntityTypes1_10.EntityType.PLAYER);
261262
});
262263
handler(packetWrapper -> {
263264
int entityId = packetWrapper.get(Type.VAR_INT, 0);

common/src/main/java/com/viaversion/viarewind/protocol/protocol1_8to1_9/storage/EntityTracker.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener;
2626
import com.viaversion.viaversion.api.minecraft.Vector;
2727
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10;
28+
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10.EntityType;
2829
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
2930
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3031
import com.viaversion.viaversion.api.type.Type;
@@ -43,6 +44,7 @@ public class EntityTracker extends StoredObject implements ClientEntityIdChangeL
4344
private final Map<Integer, List<Metadata>> metadataBuffer = new ConcurrentHashMap<>();
4445
private final Map<Integer, EntityModel> entityReplacements = new ConcurrentHashMap<>();
4546
private final Map<Integer, Vector> entityOffsets = new ConcurrentHashMap<>();
47+
private final Map<Integer, Byte> statusInformation = new ConcurrentHashMap<>();
4648
private int playerId;
4749
private int playerGamemode = 0;
4850

@@ -163,7 +165,7 @@ public void sendMetadataBuffer(int entityId) {
163165
PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_8.ENTITY_METADATA, this.getUser());
164166
wrapper.write(Type.VAR_INT, entityId);
165167
wrapper.write(Types1_8.METADATA_LIST, this.metadataBuffer.get(entityId));
166-
protocol.getMetadataRewriter().transform(this.getClientEntityTypes().get(entityId), this.metadataBuffer.get(entityId));
168+
protocol.getMetadataRewriter().transform(this, entityId, this.metadataBuffer.get(entityId));
167169
if (!this.metadataBuffer.get(entityId).isEmpty()) {
168170
try {
169171
wrapper.send(Protocol1_8To1_9.class);
@@ -182,4 +184,8 @@ public void setClientEntityId(int playerEntityId) {
182184
this.playerId = playerEntityId;
183185
clientEntityTypes.put(this.playerId, EntityTypes1_10.EntityType.ENTITY_HUMAN);
184186
}
187+
188+
public Map<Integer, Byte> getStatusInformation() {
189+
return statusInformation;
190+
}
185191
}

0 commit comments

Comments
 (0)