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))));