diff --git a/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_17.java b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_17.java new file mode 100644 index 000000000..197ca6a41 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/minecraft/metadata/types/MetaType1_17.java @@ -0,0 +1,50 @@ +package us.myles.ViaVersion.api.minecraft.metadata.types; + +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.api.type.types.version.Types1_17; + +public enum MetaType1_17 implements MetaType { + Byte(0, Type.BYTE), + VarInt(1, Type.VAR_INT), + Float(2, Type.FLOAT), + String(3, Type.STRING), + Chat(4, Type.COMPONENT), + OptChat(5, Type.OPTIONAL_COMPONENT), + Slot(6, Type.FLAT_VAR_INT_ITEM), + Boolean(7, Type.BOOLEAN), + Vector3F(8, Type.ROTATION), + Position(9, Type.POSITION1_14), + OptPosition(10, Type.OPTIONAL_POSITION_1_14), + Direction(11, Type.VAR_INT), + OptUUID(12, Type.OPTIONAL_UUID), + BlockID(13, Type.VAR_INT), + NBTTag(14, Type.NBT), + PARTICLE(15, Types1_17.PARTICLE), + VillagerData(16, Type.VILLAGER_DATA), + OptVarInt(17, Type.OPTIONAL_VAR_INT), + Pose(18, Type.VAR_INT), + Discontinued(99, null); + + private final int typeID; + private final Type type; + + MetaType1_17(int typeID, Type type) { + this.typeID = typeID; + this.type = type; + } + + public static MetaType1_17 byId(int id) { + return values()[id]; + } + + @Override + public int getTypeID() { + return typeID; + } + + @Override + public Type getType() { + return type; + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/minecraft/Particle1_17Type.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/minecraft/Particle1_17Type.java new file mode 100644 index 000000000..aad6e7aa4 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/minecraft/Particle1_17Type.java @@ -0,0 +1,56 @@ +package us.myles.ViaVersion.api.type.types.minecraft; + +import io.netty.buffer.ByteBuf; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.api.type.types.Particle; + +public class Particle1_17Type extends Type { + + public Particle1_17Type() { + super("Particle", Particle.class); + } + + @Override + public void write(ByteBuf buffer, Particle object) throws Exception { + Type.VAR_INT.writePrimitive(buffer, object.getId()); + for (Particle.ParticleData data : object.getArguments()) { + data.getType().write(buffer, data.getValue()); + } + } + + @Override + public Particle read(ByteBuf buffer) throws Exception { + int type = Type.VAR_INT.readPrimitive(buffer); + Particle particle = new Particle(type); + + switch (type) { + // Block / Falling Dust + case 3: + case 24: + particle.getArguments().add(new Particle.ParticleData(Type.VAR_INT, Type.VAR_INT.readPrimitive(buffer))); // Flat Block + break; + // Dust + case 14: + case 15: + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Red 0 - 1 + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Green 0 - 1 + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Blue 0 - 1 + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Scale 0.01 - 4 + if (type == 15) { + // Transition to color + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Red 0 - 1 + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Green 0 - 1 + particle.getArguments().add(new Particle.ParticleData(Type.FLOAT, Type.FLOAT.readPrimitive(buffer))); // Blue 0 - 1 + } + break; + // Item + case 33: + particle.getArguments().add(new Particle.ParticleData(Type.FLAT_VAR_INT_ITEM, Type.FLAT_VAR_INT_ITEM.read(buffer))); // Flat item + break; + case 36: + + } + return particle; + } +} + diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_17Type.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_17Type.java new file mode 100644 index 000000000..35694a3d8 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Metadata1_17Type.java @@ -0,0 +1,13 @@ +package us.myles.ViaVersion.api.type.types.version; + +import us.myles.ViaVersion.api.minecraft.metadata.MetaType; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_17; +import us.myles.ViaVersion.api.type.types.minecraft.ModernMetaType; + +public class Metadata1_17Type extends ModernMetaType { + + @Override + protected MetaType getType(final int index) { + return MetaType1_17.byId(index); + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/MetadataList1_17Type.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/MetadataList1_17Type.java new file mode 100644 index 000000000..8e0abc252 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/MetadataList1_17Type.java @@ -0,0 +1,13 @@ +package us.myles.ViaVersion.api.type.types.version; + +import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.api.type.types.minecraft.ModernMetaListType; + +public class MetadataList1_17Type extends ModernMetaListType { + + @Override + protected Type getType() { + return Types1_17.METADATA; + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Types1_17.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Types1_17.java new file mode 100644 index 000000000..19d8c5f35 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/version/Types1_17.java @@ -0,0 +1,15 @@ +package us.myles.ViaVersion.api.type.types.version; + +import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.api.type.types.Particle; +import us.myles.ViaVersion.api.type.types.minecraft.Particle1_17Type; + +import java.util.List; + +public class Types1_17 { + + public static final Type> METADATA_LIST = new MetadataList1_17Type(); + public static final Type METADATA = new Metadata1_17Type(); + public static final Type PARTICLE = new Particle1_17Type(); +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java index ad8bc6551..81eda3351 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java @@ -2,6 +2,7 @@ package us.myles.ViaVersion.protocols.protocol1_17to1_16_4.packets; import us.myles.ViaVersion.api.entities.Entity1_16_2Types; import us.myles.ViaVersion.api.type.types.version.Types1_14; +import us.myles.ViaVersion.api.type.types.version.Types1_17; import us.myles.ViaVersion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; import us.myles.ViaVersion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4; import us.myles.ViaVersion.protocols.protocol1_17to1_16_4.metadata.MetadataRewriter1_17To1_16_4; @@ -13,7 +14,7 @@ public class EntityPackets { metadataRewriter.registerSpawnTrackerWithData(ClientboundPackets1_16_2.SPAWN_ENTITY, Entity1_16_2Types.EntityType.FALLING_BLOCK); metadataRewriter.registerTracker(ClientboundPackets1_16_2.SPAWN_MOB); metadataRewriter.registerTracker(ClientboundPackets1_16_2.SPAWN_PLAYER, Entity1_16_2Types.EntityType.PLAYER); - metadataRewriter.registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_14.METADATA_LIST); + metadataRewriter.registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_14.METADATA_LIST, Types1_17.METADATA_LIST); metadataRewriter.registerEntityDestroy(ClientboundPackets1_16_2.DESTROY_ENTITIES); } }