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 55bcf21..963022b 100644
--- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java
+++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java
@@ -31,6 +31,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
registerType("skin", SkinDescriptor.class);
registerType("name", Component.class);
registerType("look", false);
+ registerType("cape", 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 8a4edc3..fa362f7 100644
--- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java
+++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java
@@ -6,21 +6,21 @@ import net.kyori.adventure.text.Component;
import java.util.Collection;
/**
- * 1.8 https://wiki.vg/index.php?title=Entity_metadata&oldid=7415
- * 1.9 https://wiki.vg/index.php?title=Entity_metadata&oldid=7968
- * 1.10 https://wiki.vg/index.php?title=Entity_metadata&oldid=8241
- * 1.11 https://wiki.vg/index.php?title=Entity_metadata&oldid=8534
- * 1.12 https://wiki.vg/index.php?title=Entity_metadata&oldid=14048
- * 1.13 https://wiki.vg/index.php?title=Entity_metadata&oldid=14800
- * 1.14 https://wiki.vg/index.php?title=Entity_metadata&oldid=15240
- * 1.15 https://wiki.vg/index.php?title=Entity_metadata&oldid=15991
- * 1.16 https://wiki.vg/index.php?title=Entity_metadata&oldid=16539
- * 1.17 https://wiki.vg/index.php?title=Entity_metadata&oldid=17521
- * 1.18 NOTHING CHANGED
- * 1.19 https://wiki.vg/index.php?title=Entity_metadata
+ * 1.8 ...
+ * 1.9 ...
+ * 1.10 ...
+ * 1.11 ...
+ * 1.12 ...
+ * 1.13 ...
+ * 1.14 ...
+ * 1.15 ...
+ * 1.16 ...
+ * 1.17 ...
+ * 1.18-1.19 ...
*/
public interface MetadataFactory {
EntityData skinLayers(boolean enabled);
+ EntityData cape(boolean enabled);
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 7632abe..5f3a012 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,6 +4,11 @@ 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 new EntityData(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 99a6f78..2329145 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
@@ -7,4 +7,9 @@ public class V1_14MetadataFactory extends V1_13MetadataFactory {
public EntityData skinLayers(boolean enabled) {
return createSkinLayers(15, enabled);
}
+
+ @Override
+ public EntityData cape(boolean enabled) {
+ return createCape(15, enabled);
+ }
}
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
new file mode 100644
index 0000000..cb18d24
--- /dev/null
+++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java
@@ -0,0 +1,12 @@
+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 9735181..ad494d9 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,7 +2,7 @@ package lol.pyr.znpcsplus.metadata;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
-public class V1_16MetadataFactory extends V1_14MetadataFactory {
+public class V1_16MetadataFactory extends V1_15MetadataFactory {
@Override
public EntityData skinLayers(boolean enabled) {
return createSkinLayers(16, enabled);
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 c956181..b171a2c 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
@@ -7,4 +7,9 @@ public class V1_17MetadataFactory extends V1_16MetadataFactory {
public EntityData skinLayers(boolean enabled) {
return createSkinLayers(17, enabled);
}
+
+ @Override
+ public EntityData cape(boolean enabled) {
+ return createCape(17, enabled);
+ }
}
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 a38b296..48694b1 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
@@ -14,6 +14,11 @@ public class V1_8MetadataFactory implements MetadataFactory {
return createSkinLayers(12, enabled);
}
+ @Override
+ public EntityData cape(boolean enabled) {
+ return createCape(10, enabled);
+ }
+
@Override
public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0)));
@@ -40,4 +45,8 @@ public class V1_8MetadataFactory implements MetadataFactory {
protected EntityData createSkinLayers(int index, boolean enabled) {
return new EntityData(index, EntityDataTypes.BYTE, enabled ? Byte.MAX_VALUE : 0);
}
+
+ protected EntityData createCape(int index, boolean enabled) {
+ return new EntityData(index, EntityDataTypes.BYTE, (byte) (enabled ? 0x01 : 0));
+ }
}
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 337a047..0b1c6ab 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
@@ -14,6 +14,11 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory {
return createSkinLayers(13, enabled);
}
+ @Override
+ public EntityData cape(boolean enabled) {
+ return createCape(12, enabled);
+ }
+
@Override
public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0)));
diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java
index 799a2ae..e74fc0c 100644
--- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java
+++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java
@@ -76,6 +76,7 @@ public class NpcTypeImpl implements NpcType {
allowedProperties.add(propertyRegistry.getByName("invisible"));
allowedProperties.add(propertyRegistry.getByName("silent"));
allowedProperties.add(propertyRegistry.getByName("look"));
+ allowedProperties.add(propertyRegistry.getByName("cape"));
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9))
allowedProperties.add(propertyRegistry.getByName("glow"));
return new NpcTypeImpl(name, type, hologramOffset, new HashSet<>(allowedProperties));
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 29261f1..a3ee16f 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,7 +126,10 @@ 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))));
+ 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))));
+ }
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))));