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 ce2cc66..d9c3694 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -200,6 +200,8 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { public void registerTypes(PacketFactory packetFactory) { ServerVersion ver = PacketEvents.getAPI().getServerManager().getVersion(); boolean legacyBooleans = ver.isOlderThan(ServerVersion.V_1_9); + boolean legacyNames = ver.isOlderThan(ServerVersion.V_1_9); + boolean optionalComponents = ver.isNewerThanOrEquals(ServerVersion.V_1_13); register(new EquipmentProperty(packetFactory, "helmet", EquipmentSlot.HELMET)); register(new EquipmentProperty(packetFactory, "chestplate", EquipmentSlot.CHEST_PLATE)); @@ -208,13 +210,10 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { register(new EquipmentProperty(packetFactory, "hand", EquipmentSlot.MAIN_HAND)); register(new EquipmentProperty(packetFactory, "offhand", EquipmentSlot.OFF_HAND)); - boolean legacyName = ver.isOlderThan(ServerVersion.V_1_9); - boolean optionalComponent = ver.isNewerThanOrEquals(ServerVersion.V_1_13); - register(new NameProperty(legacyName, optionalComponent)); - register(new DinnerboneProperty(legacyName, optionalComponent)); + register(new NameProperty(legacyNames, optionalComponents)); + register(new DinnerboneProperty(legacyNames, optionalComponents)); register(new DummyProperty<>("look", false)); - register(new GlowProperty(packetFactory)); register(new BitsetProperty("fire", 0, 0x01)); register(new BitsetProperty("invisible", 0, 0x20)); @@ -276,13 +275,13 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { else ghastAttackingIndex = 16; register(new BooleanProperty("attacking", ghastAttackingIndex, false, legacyBooleans)); + if (!ver.isNewerThanOrEquals(ServerVersion.V_1_17)) return; + // Goat - if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) { - register(new BooleanProperty("has_left_horn", 18, true, legacyBooleans)); - register(new BooleanProperty("has_right_horn", 19, true, legacyBooleans)); - } - + register(new BooleanProperty("has_left_horn", 18, true, legacyBooleans)); + register(new BooleanProperty("has_right_horn", 19, true, legacyBooleans)); + register(new ShakingProperty(7)); } private void registerSerializer(PropertySerializer serializer) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/BooleanProperty.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/BooleanProperty.java index d04360c..2355e56 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/BooleanProperty.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/BooleanProperty.java @@ -11,16 +11,24 @@ import java.util.Map; public class BooleanProperty extends EntityPropertyImpl { private final int index; private final boolean legacy; + private final boolean inverted; public BooleanProperty(String name, int index, boolean defaultValue, boolean legacy) { + this(name, index, defaultValue, legacy, false); + } + + public BooleanProperty(String name, int index, boolean defaultValue, boolean legacy, boolean inverted) { super(name, defaultValue, Boolean.class); this.index = index; this.legacy = legacy; + this.inverted = inverted; } @Override public void apply(Player player, PacketEntity entity, boolean isSpawned, Map properties) { - if (legacy) properties.put(index, new EntityData(index, EntityDataTypes.BYTE, (entity.getProperty(this) ? 1 : 0))); - else properties.put(index, new EntityData(index, EntityDataTypes.BOOLEAN, entity.getProperty(this))); + boolean enabled = entity.getProperty(this); + if (inverted) enabled = !enabled; + if (legacy) properties.put(index, new EntityData(index, EntityDataTypes.BYTE, (enabled ? 1 : 0))); + else properties.put(index, new EntityData(index, EntityDataTypes.BOOLEAN, enabled)); } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/IntegerProperty.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/IntegerProperty.java new file mode 100644 index 0000000..2fe1c35 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/IntegerProperty.java @@ -0,0 +1,23 @@ +package lol.pyr.znpcsplus.entity.properties; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import lol.pyr.znpcsplus.entity.EntityPropertyImpl; +import lol.pyr.znpcsplus.entity.PacketEntity; +import org.bukkit.entity.Player; + +import java.util.Map; + +public class IntegerProperty extends EntityPropertyImpl { + private final int index; + + protected IntegerProperty(String name, int index, Integer defaultValue) { + super(name, defaultValue, Integer.class); + this.index = index; + } + + @Override + public void apply(Player player, PacketEntity entity, boolean isSpawned, Map properties) { + properties.put(index, newEntityData(index, EntityDataTypes.INT, entity.getProperty(this))); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ShakingProperty.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ShakingProperty.java new file mode 100644 index 0000000..3d9266a --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ShakingProperty.java @@ -0,0 +1,23 @@ +package lol.pyr.znpcsplus.entity.properties; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import lol.pyr.znpcsplus.entity.EntityPropertyImpl; +import lol.pyr.znpcsplus.entity.PacketEntity; +import org.bukkit.entity.Player; + +import java.util.Map; + +public class ShakingProperty extends EntityPropertyImpl { + private final int index; + + public ShakingProperty(int index) { + super("shaking", false, Boolean.class); + this.index = index; + } + + @Override + public void apply(Player player, PacketEntity entity, boolean isSpawned, Map properties) { + properties.put(index, newEntityData(index, EntityDataTypes.INT, entity.getProperty(this) ? 140 : 0)); + } +} 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 1e888cb..843fb5a 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -26,10 +26,8 @@ public interface MetadataFactory { EntityData noGravity(); EntityData pose(EntityPose pose); - EntityData shaking(boolean enabled); + EntityData usingItem(boolean enabled, boolean offhand, boolean riptide); - EntityData potionColor(int color); - EntityData potionAmbient(boolean ambient); EntityData shoulderEntityLeft(ParrotVariant variant); EntityData shoulderEntityRight(ParrotVariant variant); 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 aaabeb8..2358af9 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 @@ -12,16 +12,6 @@ public class V1_10MetadataFactory extends V1_9MetadataFactory { return newEntityData(5, EntityDataTypes.BOOLEAN, true); } - @Override - public EntityData potionColor(int color) { - return newEntityData(8, EntityDataTypes.INT, color); - } - - @Override - public EntityData potionAmbient(boolean ambient) { - return newEntityData(9, EntityDataTypes.BOOLEAN, ambient); - } - @Override public EntityData batHanging(boolean hanging) { return newEntityData(12, EntityDataTypes.BYTE, (byte) (hanging ? 0x01 : 0)); 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 076fc97..edfb880 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 @@ -22,16 +22,6 @@ public class V1_14MetadataFactory extends V1_13MetadataFactory { return newEntityData(7, EntityDataTypes.BYTE, (byte) ((usingItem ? 0x01 : 0) | (offHand ? 0x02 : 0) | (riptide ? 0x04 : 0))); } - @Override - public EntityData potionColor(int color) { - return newEntityData(9, EntityDataTypes.INT, color); - } - - @Override - public EntityData potionAmbient(boolean ambient) { - return newEntityData(10, EntityDataTypes.BOOLEAN, ambient); - } - @Override public EntityData shoulderEntityLeft(ParrotVariant variant) { return createShoulderEntityLeft(17, variant); 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 dbd7068..c7bc061 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 @@ -11,26 +11,11 @@ import org.bukkit.DyeColor; @Deprecated public class V1_17MetadataFactory extends V1_16MetadataFactory { - @Override - public EntityData shaking(boolean enabled) { - return newEntityData(7, EntityDataTypes.INT, enabled ? 140 : 0); - } - @Override public EntityData usingItem(boolean usingItem, boolean offHand, boolean riptide) { return newEntityData(8, EntityDataTypes.BYTE, (byte) ((usingItem ? 0x01 : 0) | (offHand ? 0x02 : 0) | (riptide ? 0x04 : 0))); } - @Override - public EntityData potionColor(int color) { - return newEntityData(10, EntityDataTypes.INT, color); - } - - @Override - public EntityData potionAmbient(boolean ambient) { - return newEntityData(11, EntityDataTypes.BOOLEAN, ambient); - } - @Override public EntityData shoulderEntityLeft(ParrotVariant variant) { return createShoulderEntityLeft(19, variant); 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 5c6522e..da25b5d 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 @@ -20,26 +20,11 @@ public class V1_8MetadataFactory implements MetadataFactory { throw new UnsupportedOperationException("The pose entity data isn't supported on this version"); } - @Override - public EntityData shaking(boolean enabled) { - throw new UnsupportedOperationException("The shaking entity data isn't supported on this version"); - } - @Override public EntityData usingItem(boolean enabled, boolean offHand, boolean riptide) { throw new UnsupportedOperationException("The standalone using item data isn't supported on this version"); } - @Override - public EntityData potionColor(int color) { - return newEntityData(7, EntityDataTypes.INT, color); - } - - @Override - public EntityData potionAmbient(boolean ambient) { - return newEntityData(8, EntityDataTypes.BYTE, (byte) (ambient ? 1 : 0)); - } - @Override public EntityData shoulderEntityLeft(ParrotVariant variant) { throw new UnsupportedOperationException("The shoulder entity data isn't supported on this version"); 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 37091df..8c69719 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 @@ -7,11 +7,6 @@ import lol.pyr.znpcsplus.util.CreeperState; @Deprecated public class V1_9MetadataFactory extends V1_8MetadataFactory { - @Override - public EntityData potionAmbient(boolean ambient) { - return newEntityData(8, EntityDataTypes.BOOLEAN, ambient); - } - @Override public EntityData batHanging(boolean hanging) { return newEntityData(11, EntityDataTypes.BYTE, (byte) (hanging ? 0x01 : 0));