diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java index 963022b..780825c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -24,14 +24,20 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerSerializer(new ItemStackPropertySerializer()); registerType("glow", NamedTextColor.class); - registerType("skin_layers", true); registerType("fire", false); registerType("invisible", false); registerType("silent", false); registerType("skin", SkinDescriptor.class); registerType("name", Component.class); registerType("look", false); - registerType("cape", true); + + registerType("skin_cape", true); + registerType("skin_jacket", true); + registerType("skin_left_sleeve", true); + registerType("skin_right_sleeve", true); + registerType("skin_left_leg", true); + registerType("skin_right_leg", true); + registerType("skin_hat", true); registerType("helmet", ItemStack.class); registerType("chestplate", ItemStack.class); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java index fa362f7..96f4a10 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -19,8 +19,7 @@ import java.util.Collection; * 1.18-1.19 ... */ public interface MetadataFactory { - EntityData skinLayers(boolean enabled); - EntityData cape(boolean enabled); + EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat); EntityData effects(boolean onFire, boolean glowing, boolean invisible); EntityData silent(boolean enabled); Collection name(Component name); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java index 80473ce..1004728 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java @@ -4,11 +4,6 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; public class V1_10MetadataFactory extends V1_9MetadataFactory { - @Override - public EntityData cape(boolean enabled) { - return createCape(13, enabled); - } - @Override public EntityData noGravity() { return newEntityData(5, EntityDataTypes.BOOLEAN, true); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java index 2329145..f898ec9 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java @@ -4,12 +4,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; public class V1_14MetadataFactory extends V1_13MetadataFactory { @Override - public EntityData skinLayers(boolean enabled) { - return createSkinLayers(15, enabled); - } - - @Override - public EntityData cape(boolean enabled) { - return createCape(15, enabled); + public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return createSkinLayers(15, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat); } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java deleted file mode 100644 index aa531d3..0000000 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package lol.pyr.znpcsplus.metadata; - -import com.github.retrooper.packetevents.protocol.entity.data.EntityData; - -public class V1_15MetadataFactory extends V1_14MetadataFactory { - @Override - public EntityData cape(boolean enabled) { - return createCape(16, enabled); - } -} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16MetadataFactory.java index ad494d9..2d97c2b 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16MetadataFactory.java @@ -2,9 +2,9 @@ package lol.pyr.znpcsplus.metadata; import com.github.retrooper.packetevents.protocol.entity.data.EntityData; -public class V1_16MetadataFactory extends V1_15MetadataFactory { +public class V1_16MetadataFactory extends V1_14MetadataFactory { @Override - public EntityData skinLayers(boolean enabled) { - return createSkinLayers(16, enabled); + public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return createSkinLayers(16, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat); } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java index b171a2c..c5a86d0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java @@ -4,12 +4,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; public class V1_17MetadataFactory extends V1_16MetadataFactory { @Override - public EntityData skinLayers(boolean enabled) { - return createSkinLayers(17, enabled); - } - - @Override - public EntityData cape(boolean enabled) { - return createCape(17, enabled); + public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return createSkinLayers(17, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat); } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java index 41af850..a54a03a 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java @@ -11,13 +11,8 @@ import java.util.Collection; public class V1_8MetadataFactory implements MetadataFactory { @Override - public EntityData skinLayers(boolean enabled) { - return createSkinLayers(12, enabled); - } - - @Override - public EntityData cape(boolean enabled) { - return createCape(10, enabled); + public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return createSkinLayers(12, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat); } @Override @@ -43,12 +38,16 @@ public class V1_8MetadataFactory implements MetadataFactory { return newEntityData(4, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); } - protected EntityData createSkinLayers(int index, boolean enabled) { - return newEntityData(index, EntityDataTypes.BYTE, enabled ? Byte.MAX_VALUE : (byte) 0); - } - - protected EntityData createCape(int index, boolean enabled) { - return newEntityData(index, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); + protected EntityData createSkinLayers(int index, boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return newEntityData(index, EntityDataTypes.BYTE, (byte) ( + (cape ? 0x01 : 0) | + (jacket ? 0x02 : 0) | + (leftSleeve ? 0x04 : 0) | + (rightSleeve ? 0x08 : 0) | + (leftLeg ? 0x10 : 0) | + (rightLeg ? 0x20 : 0) | + (hat ? 0x40 : 0)) + ); } protected EntityData newEntityData(int index, EntityDataType type, T value) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java index 2e975ec..5228b74 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java @@ -10,13 +10,8 @@ import java.util.Collection; public class V1_9MetadataFactory extends V1_8MetadataFactory { @Override - public EntityData skinLayers(boolean enabled) { - return createSkinLayers(13, enabled); - } - - @Override - public EntityData cape(boolean enabled) { - return createCape(12, enabled); + public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) { + return createSkinLayers(13, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat); } @Override diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java index a3ee16f..d112d2f 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java @@ -126,10 +126,15 @@ public class V1_8PacketFactory implements PacketFactory { @Override public Map generateMetadata(Player player, PacketEntity entity, PropertyHolder properties) { HashMap data = new HashMap<>(); - if (entity.getType() == EntityTypes.PLAYER) { - add(data, metadataFactory.skinLayers(properties.getProperty(propertyRegistry.getByName("skin_layers", Boolean.class)))); - add(data, metadataFactory.cape(properties.getProperty(propertyRegistry.getByName("cape", Boolean.class)))); - } + if (entity.getType() == EntityTypes.PLAYER) add(data, metadataFactory.skinLayers( + properties.getProperty(propertyRegistry.getByName("skin_cape", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_jacket", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_left_sleeve", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_right_sleeve", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_left_leg", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_right_leg", Boolean.class)), + properties.getProperty(propertyRegistry.getByName("skin_hat", Boolean.class)) + )); add(data, metadataFactory.effects(properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)), false, properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)))); add(data, metadataFactory.silent(properties.getProperty(propertyRegistry.getByName("silent", Boolean.class)))); if (properties.hasProperty(propertyRegistry.getByName("name"))) addAll(data, metadataFactory.name(properties.getProperty(propertyRegistry.getByName("name", Component.class))));