diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 6a9021a3a..9b483cd2b 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
diff --git a/bungee/pom.xml b/bungee/pom.xml
index 51fe28676..2a578acf5 100644
--- a/bungee/pom.xml
+++ b/bungee/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
diff --git a/common/pom.xml b/common/pom.xml
index db0a19baa..3728b9bd6 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/item/Item.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/item/Item.java
index 8ab95b856..8a47bcaa5 100644
--- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/item/Item.java
+++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/item/Item.java
@@ -1,6 +1,7 @@
package us.myles.ViaVersion.api.minecraft.item;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
+import com.google.gson.annotations.SerializedName;
import lombok.*;
@Getter
@@ -10,6 +11,7 @@ import lombok.*;
@ToString
@EqualsAndHashCode
public class Item {
+ @SerializedName(value = "identifier", alternate = "id")
private int identifier;
private byte amount;
private short data;
diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
index 6cbc02a83..5f3ab8268 100644
--- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
+++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java
@@ -67,7 +67,7 @@ public class ProtocolVersion {
register(v1_13 = new ProtocolVersion(393, "1.13"));
register(v1_13_1 = new ProtocolVersion(401, "1.13.1"));
register(v1_13_2 = new ProtocolVersion(404, "1.13.2"));
- register(v1_14 = new ProtocolVersion(456, "1.14"));
+ register(v1_14 = new ProtocolVersion(457, "1.14"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java
index 5d1978906..468f13c3c 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java
@@ -9,6 +9,7 @@ import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_13_2;
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_14;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.packets.InventoryPackets;
+import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage.EntityTracker;
import java.util.ArrayList;
import java.util.List;
@@ -18,6 +19,7 @@ public class MetadataRewriter {
public static void handleMetadata(int entityId, Entity1_14Types.EntityType type, List metadatas, UserConnection connection) {
for (Metadata metadata : new ArrayList<>(metadatas)) {
try {
+ EntityTracker tracker = connection.get(EntityTracker.class);
// 1.13 changed item to flat item (no data)
if (metadata.getMetaType() == MetaType1_13_2.Slot) {
InventoryPackets.toClient((Item) metadata.getValue());
@@ -26,7 +28,9 @@ public class MetadataRewriter {
int data = (int) metadata.getValue();
metadata.setValue(Protocol1_14To1_13_2.getNewBlockStateId(data));
}
+
if (type == null) continue;
+
if (type.isOrHasParent(Entity1_14Types.EntityType.MINECART_ABSTRACT) && metadata.getId() == 9) {
// New block format
int data = (int) metadata.getValue();
@@ -46,6 +50,19 @@ public class MetadataRewriter {
metadata.setMetaType(MetaType1_14.VillagerData);
}
}
+
+ if (type.isOrHasParent(Entity1_14Types.EntityType.ARROW)) {
+ if (metadata.getId() >= 8) {
+ metadata.setId(metadata.getId() + 1);
+ }
+ }
+
+ if (type.is(Entity1_14Types.EntityType.FIREWORKS_ROCKET)) {
+ if (metadata.getId() == 7) {
+ metadata.setValue(tracker.getUUID(((Number) metadata.getValue()).intValue()).orNull());
+ metadata.setMetaType(MetaType1_14.OptUUID);
+ }
+ }
} catch (Exception e) {
metadatas.remove(metadata);
if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) {
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/EntityTypeRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/EntityTypeRewriter.java
index 90eb75507..1f68cb84e 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/EntityTypeRewriter.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/EntityTypeRewriter.java
@@ -50,7 +50,7 @@ public class EntityTypeRewriter {
regEnt(45, 46); // tnt_minecart
regEnt(46, 47); // mule
regEnt(47, 48); // mooshroom
- regEnt(48, 49); // ocelot
+ regEnt(48, 6); // ocelot -> cat TODO Remap untamed ocelot to ocelot?
regEnt(49, 50); // painting
regEnt(50, 52); // parrot
regEnt(51, 53); // pig
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java
index f05f69531..4156131bc 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java
@@ -8,12 +8,15 @@ import us.myles.ViaVersion.api.remapper.PacketHandler;
import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.api.type.types.version.Types1_13_2;
+import us.myles.ViaVersion.api.type.types.version.Types1_14;
import us.myles.ViaVersion.packets.State;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.MetadataRewriter;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.EntityTypeRewriter;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage.EntityTracker;
+import java.util.UUID;
+
public class EntityPackets {
public static void register(Protocol protocol) {
@@ -37,6 +40,7 @@ public class EntityPackets {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0);
+ UUID uuid = wrapper.get(Type.UUID, 0);
byte type = wrapper.get(Type.BYTE, 0);
Entity1_14Types.EntityType entType = Entity1_14Types.getTypeFromId(type, true);
@@ -47,7 +51,7 @@ public class EntityPackets {
}
}
// Register Type ID
- wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
+ wrapper.user().get(EntityTracker.class).addEntity(entityId, uuid, entType);
}
});
}
@@ -69,13 +73,14 @@ public class EntityPackets {
map(Type.SHORT); // 9 - Velocity X
map(Type.SHORT); // 10 - Velocity Y
map(Type.SHORT); // 11 - Velocity Z
- map(Types1_13_2.METADATA_LIST); // 12 - Metadata
+ map(Types1_13_2.METADATA_LIST, Types1_14.METADATA_LIST); // 12 - Metadata
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0);
int type = wrapper.get(Type.VAR_INT, 1);
+ UUID uuid = wrapper.get(Type.UUID, 0);
type = EntityTypeRewriter.getNewId(type).or(type);
@@ -84,9 +89,9 @@ public class EntityPackets {
wrapper.set(Type.VAR_INT, 1, type);
// Register Type ID
- wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
+ wrapper.user().get(EntityTracker.class).addEntity(entityId, uuid, entType);
- MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_13_2.METADATA_LIST, 0), wrapper.user());
+ MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
}
});
}
@@ -115,17 +120,18 @@ public class EntityPackets {
map(Type.DOUBLE); // 4 - Z
map(Type.BYTE); // 5 - Yaw
map(Type.BYTE); // 6 - Pitch
- map(Types1_13_2.METADATA_LIST); // 7 - Metadata
+ map(Types1_13_2.METADATA_LIST, Types1_14.METADATA_LIST); // 7 - Metadata
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
+ UUID uuid = wrapper.get(Type.UUID, 0);
int entityId = wrapper.get(Type.VAR_INT, 0);
Entity1_14Types.EntityType entType = Entity1_14Types.EntityType.PLAYER;
// Register Type ID
- wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
- MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_13_2.METADATA_LIST, 0), wrapper.user());
+ wrapper.user().get(EntityTracker.class).addEntity(entityId, uuid, entType);
+ MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
}
});
}
@@ -161,14 +167,14 @@ public class EntityPackets {
@Override
public void registerMap() {
map(Type.VAR_INT); // 0 - Entity ID
- map(Types1_13_2.METADATA_LIST); // 1 - Metadata list
+ map(Types1_13_2.METADATA_LIST, Types1_14.METADATA_LIST); // 1 - Metadata list
handler(new PacketHandler() {
@Override
public void handle(PacketWrapper wrapper) throws Exception {
int entityId = wrapper.get(Type.VAR_INT, 0);
Optional type = wrapper.user().get(EntityTracker.class).get(entityId);
- MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_13_2.METADATA_LIST, 0), wrapper.user());
+ MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
}
});
}
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java
index 95c4d3031..29c9a44ea 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java
@@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocol1_14to1_13_2.packets;
import com.google.common.primitives.Bytes;
import io.netty.buffer.ByteBuf;
import us.myles.ViaVersion.api.PacketWrapper;
+import us.myles.ViaVersion.api.entities.Entity1_14Types;
import us.myles.ViaVersion.api.minecraft.BlockChangeRecord;
import us.myles.ViaVersion.api.minecraft.chunks.Chunk;
import us.myles.ViaVersion.api.minecraft.chunks.ChunkSection;
@@ -12,9 +13,11 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
import us.myles.ViaVersion.api.remapper.ValueCreator;
import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.packets.State;
+import us.myles.ViaVersion.protocols.base.ProtocolInfo;
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.types.Chunk1_13Type;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData;
+import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage.EntityTracker;
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type;
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
@@ -244,6 +247,12 @@ public class WorldPackets {
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
int dimensionId = wrapper.get(Type.INT, 1);
clientChunks.setEnvironment(dimensionId);
+
+ int entityId = wrapper.get(Type.INT, 0);
+
+ Entity1_14Types.EntityType entType = Entity1_14Types.EntityType.PLAYER;
+ // Register Type ID
+ wrapper.user().get(EntityTracker.class).addEntity(entityId, wrapper.user().get(ProtocolInfo.class).getUuid(), entType);
}
});
}
diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker.java
index 5f4cc24e2..aadb38aeb 100644
--- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker.java
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/storage/EntityTracker.java
@@ -1,25 +1,32 @@
package us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage;
import com.google.common.base.Optional;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+import com.google.common.collect.Maps;
import us.myles.ViaVersion.api.data.StoredObject;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.api.entities.Entity1_14Types;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public class EntityTracker extends StoredObject {
private final Map clientEntityTypes = new ConcurrentHashMap<>();
+ private final BiMap uuidToId = Maps.synchronizedBiMap(HashBiMap.create());
public EntityTracker(UserConnection user) {
super(user);
}
public void removeEntity(int entityId) {
+ uuidToId.inverse().remove(entityId);
clientEntityTypes.remove(entityId);
}
- public void addEntity(int entityId, Entity1_14Types.EntityType type) {
+ public void addEntity(int entityId, UUID uuid, Entity1_14Types.EntityType type) {
+ uuidToId.forcePut(uuid, entityId);
clientEntityTypes.put(entityId, type);
}
@@ -30,4 +37,8 @@ public class EntityTracker extends StoredObject {
public Optional get(int id) {
return Optional.fromNullable(clientEntityTypes.get(id));
}
+
+ public Optional getUUID(int id) {
+ return Optional.fromNullable(uuidToId.inverse().get(id));
+ }
}
diff --git a/jar/pom.xml b/jar/pom.xml
index b0a8836cf..75cd335a7 100644
--- a/jar/pom.xml
+++ b/jar/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
viaversion-jar
diff --git a/pom.xml b/pom.xml
index 842e7b8ab..d58548fce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
us.myles
viaversion-parent
- 2.0.0-19w04a
+ 2.0.0-19w04b
pom
viaversion-parent
diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml
index 638f47deb..1a4ad4b88 100644
--- a/sponge-legacy/pom.xml
+++ b/sponge-legacy/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
diff --git a/sponge/pom.xml b/sponge/pom.xml
index 1ceacc0a2..fb58d2db4 100644
--- a/sponge/pom.xml
+++ b/sponge/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0
diff --git a/velocity/pom.xml b/velocity/pom.xml
index e6ea448ca..324137497 100644
--- a/velocity/pom.xml
+++ b/velocity/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.0.0-19w04a
+ 2.0.0-19w04b
4.0.0