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