diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/MetaType.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/MetaType.java new file mode 100644 index 000000000..31f2c40e8 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/MetaType.java @@ -0,0 +1,20 @@ +package us.myles.ViaVersion.api.minecraft.metadata; + +import us.myles.ViaVersion.api.type.Type; + +public interface MetaType { + + /** + * Get the write/read type + * + * @return Type instance + */ + Type getType(); + + /** + * Get type id from the specific MetaDataType + * + * @return Type id as an integer + */ + int getTypeID(); +} diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/Metadata.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/Metadata.java index 1f4b1c261..68fdeca43 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/Metadata.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/Metadata.java @@ -2,13 +2,11 @@ package us.myles.ViaVersion.api.minecraft.metadata; import lombok.AllArgsConstructor; import lombok.Data; -import us.myles.ViaVersion.api.type.Type; @AllArgsConstructor @Data public class Metadata { private int id; - private int typeID; - private Type type; + private MetaType metaType; private Object value; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataTypes.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java similarity index 69% rename from common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataTypes.java rename to common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java index 36060f9bd..7d75b39fe 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataTypes.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_8.java @@ -1,12 +1,13 @@ -package us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata; +package us.myles.ViaVersion.api.minecraft.metadata.types; import lombok.Getter; import lombok.RequiredArgsConstructor; +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; @RequiredArgsConstructor @Getter -public enum MetadataTypes { +public enum MetaType1_8 implements MetaType { Byte(0, Type.BYTE), Short(1, Type.SHORT), Int(2, Type.INT), @@ -20,7 +21,7 @@ public enum MetadataTypes { private final int typeID; private final Type type; - public static MetadataTypes byId(int id) { + public static MetaType1_8 byId(int id) { return values()[id]; } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/NewType.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java similarity index 75% rename from common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/NewType.java rename to common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java index 53ae361f2..30be6bef2 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/NewType.java +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_9.java @@ -1,12 +1,13 @@ -package us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata; +package us.myles.ViaVersion.api.minecraft.metadata.types; import lombok.Getter; import lombok.RequiredArgsConstructor; +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.type.Type; @RequiredArgsConstructor @Getter -public enum NewType { +public enum MetaType1_9 implements MetaType { Byte(0, Type.BYTE), VarInt(1, Type.VAR_INT), Float(2, Type.FLOAT), @@ -25,7 +26,7 @@ public enum NewType { private final int typeID; private final Type type; - public static NewType byId(int id) { + public static MetaType1_9 byId(int id) { return values()[id]; } diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_8Type.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_8Type.java index cb46b8256..6f3ad63e7 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_8Type.java +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_8Type.java @@ -3,8 +3,8 @@ package us.myles.ViaVersion.api.type.types.version; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_8; import us.myles.ViaVersion.api.type.types.minecraft.MetaTypeTemplate; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.MetadataTypes; public class Metadata1_8Type extends MetaTypeTemplate { @@ -13,15 +13,15 @@ public class Metadata1_8Type extends MetaTypeTemplate { byte item = buffer.readByte(); if (item == 127) return null; // end of metadata int typeID = (item & 0xE0) >> 5; - MetadataTypes type = MetadataTypes.byId(typeID); + MetaType1_8 type = MetaType1_8.byId(typeID); int id = item & 0x1F; - return new Metadata(id, typeID, type.getType(), type.getType().read(buffer)); + return new Metadata(id, type, type.getType().read(buffer)); } @Override public void write(ByteBuf buffer, Metadata meta) throws Exception { - byte item = (byte) (meta.getTypeID() << 5 | meta.getId() & 0x1F); + byte item = (byte) (meta.getMetaType().getTypeID() << 5 | meta.getId() & 0x1F); buffer.writeByte(item); - meta.getType().write(buffer, meta.getValue()); + meta.getMetaType().getType().write(buffer, meta.getValue()); } } diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_9Type.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_9Type.java index fb541263c..7d87f7931 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_9Type.java +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_9Type.java @@ -2,8 +2,8 @@ package us.myles.ViaVersion.api.type.types.version; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import us.myles.ViaVersion.api.type.types.minecraft.MetaTypeTemplate; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; public class Metadata1_9Type extends MetaTypeTemplate { @@ -12,9 +12,9 @@ public class Metadata1_9Type extends MetaTypeTemplate { short index = buffer.readUnsignedByte(); if (index == 0xff) return null; //End of metadata - NewType type = NewType.byId(buffer.readByte()); + MetaType1_9 type = MetaType1_9.byId(buffer.readByte()); - return new Metadata(index, type.getTypeID(), type.getType(), type.getType().read(buffer)); + return new Metadata(index, type, type.getType().read(buffer)); } @Override @@ -23,8 +23,8 @@ public class Metadata1_9Type extends MetaTypeTemplate { buffer.writeByte(255); } else { buffer.writeByte(object.getId()); - buffer.writeByte(object.getTypeID()); - object.getType().write(buffer, object.getValue()); + buffer.writeByte(object.getMetaType().getTypeID()); + object.getMetaType().getType().write(buffer, object.getValue()); } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetaIndex.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetaIndex.java index be627a532..08ccfb5d4 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetaIndex.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetaIndex.java @@ -3,6 +3,8 @@ package us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata; import com.google.common.base.Optional; import lombok.Getter; import us.myles.ViaVersion.api.Pair; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_8; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import us.myles.ViaVersion.util.EntityUtil; import java.util.HashMap; @@ -13,132 +15,132 @@ import static us.myles.ViaVersion.util.EntityUtil.EntityType.*; public enum MetaIndex { // entity - ENTITY_STATUS(ENTITY, 0, Type.Byte, NewType.Byte), - ENTITY_AIR(ENTITY, 1, Type.Short, NewType.VarInt), - ENTITY_NAMETAG(ENTITY, 2, Type.String, NewType.String), // in the entity class @ spigot 1.8.8, blame wiki.vg - ENTITY_ALWAYS_SHOW_NAMETAG(ENTITY, 3, Type.Byte, NewType.Boolean), // in the entity class @ Spigot 1.8.8, blame wiki.vg - ENTITY_SILENT(ENTITY, 4, Type.Byte, NewType.Boolean), + ENTITY_STATUS(ENTITY, 0, MetaType1_8.Byte, MetaType1_9.Byte), + ENTITY_AIR(ENTITY, 1, MetaType1_8.Short, MetaType1_9.VarInt), + ENTITY_NAMETAG(ENTITY, 2, MetaType1_8.String, MetaType1_9.String), // in the entity class @ spigot 1.8.8, blame wiki.vg + ENTITY_ALWAYS_SHOW_NAMETAG(ENTITY, 3, MetaType1_8.Byte, MetaType1_9.Boolean), // in the entity class @ Spigot 1.8.8, blame wiki.vg + ENTITY_SILENT(ENTITY, 4, MetaType1_8.Byte, MetaType1_9.Boolean), // living entity - LIVINGENTITY_HEALTH(ENTITY_LIVING, 6, Type.Float, NewType.Float), - LIVINGENTITY_POTION_EFFECT_COLOR(ENTITY_LIVING, 7, Type.Int, NewType.VarInt), - LIVINGENTITY_IS_POTION_AMBIENT(ENTITY_LIVING, 8, Type.Byte, NewType.Boolean), - LIVINGENTITY_NUMBER_OF_ARROWS_IN(ENTITY_LIVING, 9, Type.Byte, NewType.VarInt), - LIVINGENTITY_NO_AI(ENTITY_LIVING, 15, Type.Byte, 10, NewType.Byte), // in 1.9 this is combined with Left handed, oh. + LIVINGENTITY_HEALTH(ENTITY_LIVING, 6, MetaType1_8.Float, MetaType1_9.Float), + LIVINGENTITY_POTION_EFFECT_COLOR(ENTITY_LIVING, 7, MetaType1_8.Int, MetaType1_9.VarInt), + LIVINGENTITY_IS_POTION_AMBIENT(ENTITY_LIVING, 8, MetaType1_8.Byte, MetaType1_9.Boolean), + LIVINGENTITY_NUMBER_OF_ARROWS_IN(ENTITY_LIVING, 9, MetaType1_8.Byte, MetaType1_9.VarInt), + LIVINGENTITY_NO_AI(ENTITY_LIVING, 15, MetaType1_8.Byte, 10, MetaType1_9.Byte), // in 1.9 this is combined with Left handed, oh. // ageable - AGEABLE_AGE(ENTITY_AGEABLE, 12, Type.Byte, 11, NewType.Boolean), + AGEABLE_AGE(ENTITY_AGEABLE, 12, MetaType1_8.Byte, 11, MetaType1_9.Boolean), // armour stand - STAND_INFO(ARMOR_STAND, 10, Type.Byte, NewType.Byte), - STAND_HEAD_POS(ARMOR_STAND, 11, Type.Rotation, NewType.Vector3F), - STAND_BODY_POS(ARMOR_STAND, 12, Type.Rotation, NewType.Vector3F), - STAND_LA_POS(ARMOR_STAND, 13, Type.Rotation, NewType.Vector3F), - STAND_RA_POS(ARMOR_STAND, 14, Type.Rotation, NewType.Vector3F), - STAND_LL_POS(ARMOR_STAND, 15, Type.Rotation, NewType.Vector3F), - STAND_RL_POS(ARMOR_STAND, 16, Type.Rotation, NewType.Vector3F), + STAND_INFO(ARMOR_STAND, 10, MetaType1_8.Byte, MetaType1_9.Byte), + STAND_HEAD_POS(ARMOR_STAND, 11, MetaType1_8.Rotation, MetaType1_9.Vector3F), + STAND_BODY_POS(ARMOR_STAND, 12, MetaType1_8.Rotation, MetaType1_9.Vector3F), + STAND_LA_POS(ARMOR_STAND, 13, MetaType1_8.Rotation, MetaType1_9.Vector3F), + STAND_RA_POS(ARMOR_STAND, 14, MetaType1_8.Rotation, MetaType1_9.Vector3F), + STAND_LL_POS(ARMOR_STAND, 15, MetaType1_8.Rotation, MetaType1_9.Vector3F), + STAND_RL_POS(ARMOR_STAND, 16, MetaType1_8.Rotation, MetaType1_9.Vector3F), // human, discountined? - PLAYER_SKIN_FLAGS(ENTITY_HUMAN, 10, Type.Byte, 12, NewType.Byte), // unsigned on 1.8 - PLAYER_HUMAN_BYTE(ENTITY_HUMAN, 16, Type.Byte, NewType.Discontinued), // unused on 1.8 - PLAYER_ADDITIONAL_HEARTS(ENTITY_HUMAN, 17, Type.Float, 10, NewType.Float), - PLAYER_SCORE(ENTITY_HUMAN, 18, Type.Int, 11, NewType.VarInt), - PLAYER_HAND(ENTITY_HUMAN, -1, Type.NonExistent, 5, NewType.Byte), // new in 1.9 - SOMETHING_ANTICHEAT_PLUGINS_FOR_SOME_REASON_USE(ENTITY_HUMAN, 11, Type.Byte, NewType.Discontinued), //For what we know, This doesn't exists. If you think it exists and knows what it does. Please tell us. + PLAYER_SKIN_FLAGS(ENTITY_HUMAN, 10, MetaType1_8.Byte, 12, MetaType1_9.Byte), // unsigned on 1.8 + PLAYER_HUMAN_BYTE(ENTITY_HUMAN, 16, MetaType1_8.Byte, MetaType1_9.Discontinued), // unused on 1.8 + PLAYER_ADDITIONAL_HEARTS(ENTITY_HUMAN, 17, MetaType1_8.Float, 10, MetaType1_9.Float), + PLAYER_SCORE(ENTITY_HUMAN, 18, MetaType1_8.Int, 11, MetaType1_9.VarInt), + PLAYER_HAND(ENTITY_HUMAN, -1, MetaType1_8.NonExistent, 5, MetaType1_9.Byte), // new in 1.9 + SOMETHING_ANTICHEAT_PLUGINS_FOR_SOME_REASON_USE(ENTITY_HUMAN, 11, MetaType1_8.Byte, MetaType1_9.Discontinued), //For what we know, This doesn't exists. If you think it exists and knows what it does. Please tell us. // horse - HORSE_INFO(HORSE, 16, Type.Int, 12, NewType.Byte), - HORSE_TYPE(HORSE, 19, Type.Byte, 13, NewType.VarInt), - HORSE_SUBTYPE(HORSE, 20, Type.Int, 14, NewType.VarInt), - HORSE_OWNER(HORSE, 21, Type.String, 15, NewType.OptUUID), - HORSE_ARMOR(HORSE, 22, Type.Int, 16, NewType.VarInt), + HORSE_INFO(HORSE, 16, MetaType1_8.Int, 12, MetaType1_9.Byte), + HORSE_TYPE(HORSE, 19, MetaType1_8.Byte, 13, MetaType1_9.VarInt), + HORSE_SUBTYPE(HORSE, 20, MetaType1_8.Int, 14, MetaType1_9.VarInt), + HORSE_OWNER(HORSE, 21, MetaType1_8.String, 15, MetaType1_9.OptUUID), + HORSE_ARMOR(HORSE, 22, MetaType1_8.Int, 16, MetaType1_9.VarInt), // bat - BAT_ISHANGING(BAT, 16, Type.Byte, 11, NewType.Byte), + BAT_ISHANGING(BAT, 16, MetaType1_8.Byte, 11, MetaType1_9.Byte), // tameable - TAMING_INFO(ENTITY_TAMEABLE_ANIMAL, 16, Type.Byte, 12, NewType.Byte), - TAMING_OWNER(ENTITY_TAMEABLE_ANIMAL, 17, Type.String, 13, NewType.OptUUID), + TAMING_INFO(ENTITY_TAMEABLE_ANIMAL, 16, MetaType1_8.Byte, 12, MetaType1_9.Byte), + TAMING_OWNER(ENTITY_TAMEABLE_ANIMAL, 17, MetaType1_8.String, 13, MetaType1_9.OptUUID), // ocelot - OCELOT_TYPE(OCELOT, 18, Type.Byte, 14, NewType.VarInt), + OCELOT_TYPE(OCELOT, 18, MetaType1_8.Byte, 14, MetaType1_9.VarInt), // wolf - WOLF_HEALTH(WOLF, 18, Type.Float, 14, NewType.Float), - WOLF_BEGGING(WOLF, 19, Type.Byte, 15, NewType.Boolean), - WOLF_COLLAR(WOLF, 20, Type.Byte, 16, NewType.VarInt), + WOLF_HEALTH(WOLF, 18, MetaType1_8.Float, 14, MetaType1_9.Float), + WOLF_BEGGING(WOLF, 19, MetaType1_8.Byte, 15, MetaType1_9.Boolean), + WOLF_COLLAR(WOLF, 20, MetaType1_8.Byte, 16, MetaType1_9.VarInt), // pig - PIG_SADDLE(PIG, 16, Type.Byte, 12, NewType.Boolean), + PIG_SADDLE(PIG, 16, MetaType1_8.Byte, 12, MetaType1_9.Boolean), // rabbit - RABBIT_TYPE(RABBIT, 18, Type.Byte, 12, NewType.VarInt), + RABBIT_TYPE(RABBIT, 18, MetaType1_8.Byte, 12, MetaType1_9.VarInt), // sheep - SHEEP_COLOR(SHEEP, 16, Type.Byte, 12, NewType.Byte), + SHEEP_COLOR(SHEEP, 16, MetaType1_8.Byte, 12, MetaType1_9.Byte), // villager - VILLAGER_PROFESSION(VILLAGER, 16, Type.Int, 12, NewType.VarInt), + VILLAGER_PROFESSION(VILLAGER, 16, MetaType1_8.Int, 12, MetaType1_9.VarInt), // enderman - ENDERMAN_BLOCK(ENDERMAN, 16, Type.Short, 11, NewType.BlockID), // special case - ENDERMAN_BLOCKDATA(ENDERMAN, 17, Type.Byte, 11, NewType.BlockID), // special case - ENDERMAN_ISSCREAMING(ENDERMAN, 18, Type.Byte, 12, NewType.Boolean), + ENDERMAN_BLOCK(ENDERMAN, 16, MetaType1_8.Short, 11, MetaType1_9.BlockID), // special case + ENDERMAN_BLOCKDATA(ENDERMAN, 17, MetaType1_8.Byte, 11, MetaType1_9.BlockID), // special case + ENDERMAN_ISSCREAMING(ENDERMAN, 18, MetaType1_8.Byte, 12, MetaType1_9.Boolean), // zombie - ZOMBIE_ISCHILD(ZOMBIE, 12, Type.Byte, 11, NewType.Boolean), - ZOMBIE_ISVILLAGER(ZOMBIE, 13, Type.Byte, 12, NewType.VarInt), - ZOMBIE_ISCONVERTING(ZOMBIE, 14, Type.Byte, 13, NewType.Boolean), + ZOMBIE_ISCHILD(ZOMBIE, 12, MetaType1_8.Byte, 11, MetaType1_9.Boolean), + ZOMBIE_ISVILLAGER(ZOMBIE, 13, MetaType1_8.Byte, 12, MetaType1_9.VarInt), + ZOMBIE_ISCONVERTING(ZOMBIE, 14, MetaType1_8.Byte, 13, MetaType1_9.Boolean), // ZOMBIE_RISINGHANDS added in 1.9 // blaze - BLAZE_ONFIRE(BLAZE, 16, Type.Byte, 11, NewType.Byte), + BLAZE_ONFIRE(BLAZE, 16, MetaType1_8.Byte, 11, MetaType1_9.Byte), // spider - SPIDER_CIMBING(SPIDER, 16, Type.Byte, 11, NewType.Byte), + SPIDER_CIMBING(SPIDER, 16, MetaType1_8.Byte, 11, MetaType1_9.Byte), // creeper - CREEPER_FUSE(CREEPER, 16, Type.Byte, 11, NewType.VarInt), // -1 idle, 1 is fuse - CREEPER_ISPOWERED(CREEPER, 17, Type.Byte, 12, NewType.Boolean), - CREEPER_ISIGNITED(CREEPER, 18, Type.Byte, 13, NewType.Boolean), + CREEPER_FUSE(CREEPER, 16, MetaType1_8.Byte, 11, MetaType1_9.VarInt), // -1 idle, 1 is fuse + CREEPER_ISPOWERED(CREEPER, 17, MetaType1_8.Byte, 12, MetaType1_9.Boolean), + CREEPER_ISIGNITED(CREEPER, 18, MetaType1_8.Byte, 13, MetaType1_9.Boolean), // ghast - GHAST_ISATTACKING(GHAST, 16, Type.Byte, 11, NewType.Boolean), + GHAST_ISATTACKING(GHAST, 16, MetaType1_8.Byte, 11, MetaType1_9.Boolean), // slime - SLIME_SIZE(SLIME, 16, Type.Byte, 11, NewType.VarInt), + SLIME_SIZE(SLIME, 16, MetaType1_8.Byte, 11, MetaType1_9.VarInt), // skeleton - SKELETON_TYPE(SKELETON, 13, Type.Byte, 11, NewType.VarInt), + SKELETON_TYPE(SKELETON, 13, MetaType1_8.Byte, 11, MetaType1_9.VarInt), // witch - WITCH_AGGRO(WITCH, 21, Type.Byte, 11, NewType.Boolean), + WITCH_AGGRO(WITCH, 21, MetaType1_8.Byte, 11, MetaType1_9.Boolean), // iron golem - IRON_PLAYERMADE(IRON_GOLEM, 16, Type.Byte, 11, NewType.Byte), + IRON_PLAYERMADE(IRON_GOLEM, 16, MetaType1_8.Byte, 11, MetaType1_9.Byte), // wither - WITHER_TARGET1(WITHER, 17, Type.Int, 11, NewType.VarInt), - WITHER_TARGET2(WITHER, 18, Type.Int, 12, NewType.VarInt), - WITHER_TARGET3(WITHER, 19, Type.Int, 13, NewType.VarInt), - WITHER_INVULN_TIME(WITHER, 20, Type.Int, 14, NewType.VarInt), - WITHER_PROPERTIES(WITHER, 10, Type.Byte, NewType.Byte), - WITHER_UNKNOWN(WITHER, 11, Type.Byte, NewType.Discontinued), + WITHER_TARGET1(WITHER, 17, MetaType1_8.Int, 11, MetaType1_9.VarInt), + WITHER_TARGET2(WITHER, 18, MetaType1_8.Int, 12, MetaType1_9.VarInt), + WITHER_TARGET3(WITHER, 19, MetaType1_8.Int, 13, MetaType1_9.VarInt), + WITHER_INVULN_TIME(WITHER, 20, MetaType1_8.Int, 14, MetaType1_9.VarInt), + WITHER_PROPERTIES(WITHER, 10, MetaType1_8.Byte, MetaType1_9.Byte), + WITHER_UNKNOWN(WITHER, 11, MetaType1_8.Byte, MetaType1_9.Discontinued), // wither skull - WITHERSKULL_INVULN(WITHER_SKULL, 10, Type.Byte, 5, NewType.Boolean), + WITHERSKULL_INVULN(WITHER_SKULL, 10, MetaType1_8.Byte, 5, MetaType1_9.Boolean), // guardian - GUARDIAN_INFO(GUARDIAN, 16, Type.Int, 11, NewType.Byte), - GUARDIAN_TARGET(GUARDIAN, 17, Type.Int, 12, NewType.VarInt), + GUARDIAN_INFO(GUARDIAN, 16, MetaType1_8.Int, 11, MetaType1_9.Byte), + GUARDIAN_TARGET(GUARDIAN, 17, MetaType1_8.Int, 12, MetaType1_9.VarInt), // boat - BOAT_SINCEHIT(BOAT, 17, Type.Int, 5, NewType.VarInt), - BOAT_FORWARDDIR(BOAT, 18, Type.Int, 6, NewType.VarInt), - BOAT_DMGTAKEN(BOAT, 19, Type.Float, 7, NewType.Float), + BOAT_SINCEHIT(BOAT, 17, MetaType1_8.Int, 5, MetaType1_9.VarInt), + BOAT_FORWARDDIR(BOAT, 18, MetaType1_8.Int, 6, MetaType1_9.VarInt), + BOAT_DMGTAKEN(BOAT, 19, MetaType1_8.Float, 7, MetaType1_9.Float), // BOAT_TYPE in 1.9 // minecart - MINECART_SHAKINGPOWER(MINECART_ABSTRACT, 17, Type.Int, 5, NewType.VarInt), - MINECART_SHAKINGDIRECTION(MINECART_ABSTRACT, 18, Type.Int, 6, NewType.VarInt), - MINECART_DAMAGETAKEN(MINECART_ABSTRACT, 19, Type.Float, 7, NewType.Float), // also shaking modifier :P - MINECART_BLOCK(MINECART_ABSTRACT, 20, Type.Int, 8, NewType.VarInt), - MINECART_BLOCK_Y(MINECART_ABSTRACT, 21, Type.Int, 9, NewType.VarInt), - MINECART_SHOWBLOCK(MINECART_ABSTRACT, 22, Type.Byte, 10, NewType.Boolean), + MINECART_SHAKINGPOWER(MINECART_ABSTRACT, 17, MetaType1_8.Int, 5, MetaType1_9.VarInt), + MINECART_SHAKINGDIRECTION(MINECART_ABSTRACT, 18, MetaType1_8.Int, 6, MetaType1_9.VarInt), + MINECART_DAMAGETAKEN(MINECART_ABSTRACT, 19, MetaType1_8.Float, 7, MetaType1_9.Float), // also shaking modifier :P + MINECART_BLOCK(MINECART_ABSTRACT, 20, MetaType1_8.Int, 8, MetaType1_9.VarInt), + MINECART_BLOCK_Y(MINECART_ABSTRACT, 21, MetaType1_8.Int, 9, MetaType1_9.VarInt), + MINECART_SHOWBLOCK(MINECART_ABSTRACT, 22, MetaType1_8.Byte, 10, MetaType1_9.Boolean), // Command minecart (they are still broken) - MINECART_COMMANDBLOCK_COMMAND(MINECART_ABSTRACT, 23, Type.String, 11, NewType.String), - MINECART_COMMANDBLOCK_OUTPUT(MINECART_ABSTRACT, 24, Type.String, 12, NewType.Chat), + MINECART_COMMANDBLOCK_COMMAND(MINECART_ABSTRACT, 23, MetaType1_8.String, 11, MetaType1_9.String), + MINECART_COMMANDBLOCK_OUTPUT(MINECART_ABSTRACT, 24, MetaType1_8.String, 12, MetaType1_9.Chat), // furnace cart - FURNACECART_ISPOWERED(MINECART_ABSTRACT, 16, Type.Byte, 11, NewType.Boolean), + FURNACECART_ISPOWERED(MINECART_ABSTRACT, 16, MetaType1_8.Byte, 11, MetaType1_9.Boolean), // item drop - ITEM_ITEM(DROPPED_ITEM, 10, Type.Slot, 5, NewType.Slot), + ITEM_ITEM(DROPPED_ITEM, 10, MetaType1_8.Slot, 5, MetaType1_9.Slot), // arrow - ARROW_ISCRIT(ARROW, 16, Type.Byte, 5, NewType.Byte), + ARROW_ISCRIT(ARROW, 16, MetaType1_8.Byte, 5, MetaType1_9.Byte), // firework - FIREWORK_INFO(FIREWORK, 8, Type.Slot, 5, NewType.Slot), + FIREWORK_INFO(FIREWORK, 8, MetaType1_8.Slot, 5, MetaType1_9.Slot), // item frame - ITEMFRAME_ITEM(ITEM_FRAME, 8, Type.Slot, 5, NewType.Slot), - ITEMFRAME_ROTATION(ITEM_FRAME, 9, Type.Byte, 6, NewType.VarInt), + ITEMFRAME_ITEM(ITEM_FRAME, 8, MetaType1_8.Slot, 5, MetaType1_9.Slot), + ITEMFRAME_ROTATION(ITEM_FRAME, 9, MetaType1_8.Byte, 6, MetaType1_9.VarInt), // ender crystal - ENDERCRYSTAL_HEALTH(ENDER_CRYSTAL, 8, Type.Int, NewType.Discontinued), + ENDERCRYSTAL_HEALTH(ENDER_CRYSTAL, 8, MetaType1_8.Int, MetaType1_9.Discontinued), // Ender dragon boss bar issues - ENDERDRAGON_UNKNOWN(ENDER_DRAGON, 5, Type.Byte, NewType.Discontinued), - ENDERDRAGON_NAME(ENDER_DRAGON, 10, Type.String, NewType.Discontinued), + ENDERDRAGON_UNKNOWN(ENDER_DRAGON, 5, MetaType1_8.Byte, MetaType1_9.Discontinued), + ENDERDRAGON_NAME(ENDER_DRAGON, 10, MetaType1_8.String, MetaType1_9.Discontinued), // Normal Ender dragon - ENDERDRAGON_FLAG(ENDER_DRAGON, 15, Type.Byte, NewType.Discontinued), - ENDERDRAGON_PHASE(ENDER_DRAGON, 11, Type.Byte, NewType.VarInt); + ENDERDRAGON_FLAG(ENDER_DRAGON, 15, MetaType1_8.Byte, MetaType1_9.Discontinued), + ENDERDRAGON_PHASE(ENDER_DRAGON, 11, MetaType1_8.Byte, MetaType1_9.VarInt); private static final HashMap, MetaIndex> metadataRewrites = new HashMap<>(); @@ -149,11 +151,11 @@ public enum MetaIndex { private EntityUtil.EntityType clazz; private int newIndex; - private NewType newType; - private Type oldType; + private MetaType1_9 newType; + private MetaType1_8 oldType; private int index; - MetaIndex(EntityUtil.EntityType type, int index, Type oldType, NewType newType) { + MetaIndex(EntityUtil.EntityType type, int index, MetaType1_8 oldType, MetaType1_9 newType) { this.clazz = type; this.index = index; this.newIndex = index; @@ -161,7 +163,7 @@ public enum MetaIndex { this.newType = newType; } - MetaIndex(EntityUtil.EntityType type, int index, Type oldType, int newIndex, NewType newType) { + MetaIndex(EntityUtil.EntityType type, int index, MetaType1_8 oldType, int newIndex, MetaType1_9 newType) { this.clazz = type; this.index = index; this.oldType = oldType; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataRewriter.java index 6a3ce503d..5966d249a 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/MetadataRewriter.java @@ -4,7 +4,10 @@ import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.minecraft.EulerAngle; import us.myles.ViaVersion.api.minecraft.Vector; import us.myles.ViaVersion.api.minecraft.item.Item; +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_8; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import us.myles.ViaVersion.protocols.protocol1_9to1_8.ItemRewriter; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8; import us.myles.ViaVersion.util.EntityUtil; @@ -21,20 +24,19 @@ public class MetadataRewriter { MetaIndex metaIndex = MetaIndex.searchIndex(type, entry.getId()); try { if (metaIndex != null) { - if (metaIndex.getNewType() != NewType.Discontinued) { - if (metaIndex.getNewType() != NewType.BlockID || id != -1 && data == -1 || id == -1 && data != -1) { // block ID is only written if we have both parts + if (metaIndex.getNewType() != MetaType1_9.Discontinued) { + if (metaIndex.getNewType() != MetaType1_9.BlockID || id != -1 && data == -1 || id == -1 && data != -1) { // block ID is only written if we have both parts entry.setId(metaIndex.getNewIndex()); - entry.setTypeID(metaIndex.getNewType().getTypeID()); + entry.setMetaType(metaIndex.getNewType()); } Object value = entry.getValue(); switch (metaIndex.getNewType()) { case Byte: - entry.setType(us.myles.ViaVersion.api.type.Type.BYTE); // convert from int, byte - if (metaIndex.getOldType() == Type.Byte) { + if (metaIndex.getOldType() == MetaType1_8.Byte) { entry.setValue(value); } - if (metaIndex.getOldType() == Type.Int) { + if (metaIndex.getOldType() == MetaType1_8.Int) { entry.setValue(((Integer) value).byteValue()); } // After writing the last one @@ -44,13 +46,12 @@ public class MetadataRewriter { val = 1; } int newIndex = MetaIndex.PLAYER_HAND.getNewIndex(); - int typeID = MetaIndex.PLAYER_HAND.getNewType().getTypeID(); - Metadata metadata = new Metadata(newIndex, typeID, us.myles.ViaVersion.api.type.Type.BYTE, val); + MetaType metaType = MetaIndex.PLAYER_HAND.getNewType(); + Metadata metadata = new Metadata(newIndex, metaType, val); list.add(metadata); } break; case OptUUID: - entry.setType(us.myles.ViaVersion.api.type.Type.OPTIONAL_UUID); String owner = (String) value; UUID toWrite = null; if (owner.length() != 0) { @@ -62,12 +63,11 @@ public class MetadataRewriter { entry.setValue(toWrite); break; case BlockID: - entry.setType(us.myles.ViaVersion.api.type.Type.VAR_INT); // if we have both sources :)) - if (metaIndex.getOldType() == Type.Byte) { + if (metaIndex.getOldType() == MetaType1_8.Byte) { data = (Byte) value; } - if (metaIndex.getOldType() == Type.Short) { + if (metaIndex.getOldType() == MetaType1_8.Short) { id = (Short) value; } if (id != -1 && data != -1) { @@ -80,50 +80,42 @@ public class MetadataRewriter { } break; case VarInt: - entry.setType(us.myles.ViaVersion.api.type.Type.VAR_INT); // convert from int, short, byte - if (metaIndex.getOldType() == Type.Byte) { + if (metaIndex.getOldType() == MetaType1_8.Byte) { entry.setValue(((Byte) value).intValue()); } - if (metaIndex.getOldType() == Type.Short) { + if (metaIndex.getOldType() == MetaType1_8.Short) { entry.setValue(((Short) value).intValue()); } - if (metaIndex.getOldType() == Type.Int) { + if (metaIndex.getOldType() == MetaType1_8.Int) { entry.setValue(value); } break; case Float: - entry.setType(us.myles.ViaVersion.api.type.Type.FLOAT); entry.setValue(value); break; case String: - entry.setType(us.myles.ViaVersion.api.type.Type.STRING); entry.setValue(value); break; case Boolean: - entry.setType(us.myles.ViaVersion.api.type.Type.BOOLEAN); if (metaIndex == MetaIndex.AGEABLE_AGE) entry.setValue((Byte) value < 0); else entry.setValue((Byte) value != 0); break; case Slot: - entry.setType(us.myles.ViaVersion.api.type.Type.ITEM); entry.setValue(value); ItemRewriter.toClient((Item) entry.getValue()); break; case Position: - entry.setType(us.myles.ViaVersion.api.type.Type.VECTOR); Vector vector = (Vector) value; entry.setValue(vector); break; case Vector3F: - entry.setType(us.myles.ViaVersion.api.type.Type.ROTATION); EulerAngle angle = (EulerAngle) value; entry.setValue(angle); break; case Chat: - entry.setType(us.myles.ViaVersion.api.type.Type.STRING); value = Protocol1_9TO1_8.fixJson((String) value); entry.setValue(value); break; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/Type.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/Type.java deleted file mode 100644 index 18bb90b4b..000000000 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/metadata/Type.java +++ /dev/null @@ -1,23 +0,0 @@ -package us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Getter -public enum Type { - Byte(0), - Short(1), - Int(2), - Float(3), - String(4), - Slot(5), - Position(6), - Rotation(7), - NonExistent(-1); - private final int typeID; - - public static Type byId(int id) { - return values()[id]; - } -} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/SpawnPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/SpawnPackets.java index d286f2067..5274c11f6 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/SpawnPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/packets/SpawnPackets.java @@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocol1_9to1_8.packets; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import us.myles.ViaVersion.api.protocol.Protocol; import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; @@ -15,7 +16,6 @@ import us.myles.ViaVersion.packets.State; import us.myles.ViaVersion.protocols.protocol1_9to1_8.ItemRewriter; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.MetadataRewriter; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.EntityTracker; import us.myles.ViaVersion.util.EntityUtil; @@ -105,7 +105,7 @@ public class SpawnPackets { Item item = new Item((short) 373, (byte) 1, (short) data, null); // Potion ItemRewriter.toClient(item); // Rewrite so that it gets the right nbt // TEMP FIX FOR POTIONS UNTIL WE FIGURE OUT HOW TO TRANSFORM SENT PACKETS - Metadata potion = new Metadata(5, NewType.Slot.getTypeID(), Type.ITEM, item); + Metadata potion = new Metadata(5, MetaType1_9.Slot, item); meta.add(potion); wrapper.write(Types1_9.METADATA_LIST, meta); } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker.java index 6e5cefa07..9fc8f18fb 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/storage/EntityTracker.java @@ -16,13 +16,13 @@ import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.Position; import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_9; import us.myles.ViaVersion.protocols.base.ProtocolInfo; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_8.chat.GameMode; import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.MetadataRewriter; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; import us.myles.ViaVersion.util.EntityUtil; import java.util.*; @@ -137,7 +137,7 @@ public class EntityTracker extends StoredObject { if (type == EntityUtil.EntityType.SKELETON) { if ((getMetaByIndex(metadataList, 12)) == null) { - metadataList.add(new Metadata(12, NewType.Boolean.getTypeID(), Type.BOOLEAN, true)); + metadataList.add(new Metadata(12, MetaType1_9.Boolean, true)); } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_10/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_10/MetadataRewriter.java index 7224c151b..5c42e7714 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_10/MetadataRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocolsnapshotto1_10/MetadataRewriter.java @@ -3,8 +3,7 @@ package us.myles.ViaVersion.protocols.protocolsnapshotto1_10; import com.google.common.base.Optional; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; -import us.myles.ViaVersion.api.type.Type; -import us.myles.ViaVersion.protocols.protocol1_9to1_8.metadata.NewType; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9; import java.util.ArrayList; import java.util.List; @@ -41,7 +40,7 @@ public class MetadataRewriter { if (options.isPresent()) { int value = (int) options.get().getValue(); if (value > 0 && value < 6) { - metadata.add(new Metadata(16, NewType.VarInt.getTypeID(), Type.VAR_INT, value - 1)); // Add profession type to new metadata + metadata.add(new Metadata(16, MetaType1_9.VarInt, value - 1)); // Add profession type to new metadata return 27; } if (value == 6) { @@ -90,8 +89,7 @@ public class MetadataRewriter { if (type == 4 || type == 68) { // Guardians int oldid = metadata.getId(); if (oldid == 12) { - metadata.setType(Type.BOOLEAN); - metadata.setTypeID(NewType.Boolean.getTypeID()); + metadata.setMetaType(MetaType1_9.Boolean); boolean val = (((byte) metadata.getValue()) & 0x02) == 0x02; metadata.setValue(val); } @@ -144,9 +142,9 @@ public class MetadataRewriter { // Chested Horse if (metadata.getId() == 13) { if ((((byte) metadata.getValue()) & 0x08) == 0x08) { - metadatas.add(new Metadata(15, NewType.Boolean.getTypeID(), Type.BOOLEAN, true)); + metadatas.add(new Metadata(15, MetaType1_9.Boolean, true)); } else { - metadatas.add(new Metadata(15, NewType.Boolean.getTypeID(), Type.BOOLEAN, false)); + metadatas.add(new Metadata(15, MetaType1_9.Boolean, false)); } } } diff --git a/pom.xml b/pom.xml index 3cd69f629..5e478606b 100644 --- a/pom.xml +++ b/pom.xml @@ -114,6 +114,13 @@ bungeecord-chat 1.10-SNAPSHOT + + + + com.google.guava + guava + 19.0 +