From f3d5e3f3a86e507c3812c581cfa9c4619242f8ad Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Sat, 5 Aug 2023 20:49:48 +0200 Subject: [PATCH] implement silent property (untested) --- .../entity/EntityPropertyRegistryImpl.java | 9 ++++--- .../properties/SimpleBooleanProperty.java | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/SimpleBooleanProperty.java 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 8d7d76f..b707c49 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -1,5 +1,7 @@ package lol.pyr.znpcsplus.entity; +import com.github.retrooper.packetevents.PacketEvents; +import com.github.retrooper.packetevents.manager.server.ServerVersion; import com.github.retrooper.packetevents.protocol.player.EquipmentSlot; import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; @@ -55,9 +57,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerEnumSerializer(VillagerProfession.class); registerEnumSerializer(VillagerLevel.class); /* - registerType("silent", false); - registerType("name", Component.class); - registerType("look", false); registerType("dinnerbone", false); registerType("using_item", false); // TODO: fix it for 1.8 and add new property to use offhand item and riptide animation @@ -228,6 +227,8 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { } public void registerTypes(PacketFactory packetFactory) { + ServerVersion ver = PacketEvents.getAPI().getServerManager().getVersion(); + register(new EquipmentProperty(packetFactory, "helmet", EquipmentSlot.HELMET)); register(new EquipmentProperty(packetFactory, "chestplate", EquipmentSlot.CHEST_PLATE)); register(new EquipmentProperty(packetFactory, "leggings", EquipmentSlot.LEGGINGS)); @@ -243,6 +244,8 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { register(new EffectsProperty("fire", 0x01)); register(new EffectsProperty("invisible", 0x20)); linkProperties("glow", "fire", "invisible"); + + register(new SimpleBooleanProperty("silent", 4, false, ver.isOlderThan(ServerVersion.V_1_9))); } private void registerSerializer(PropertySerializer serializer) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/SimpleBooleanProperty.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/SimpleBooleanProperty.java new file mode 100644 index 0000000..763b0a9 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/SimpleBooleanProperty.java @@ -0,0 +1,26 @@ +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 SimpleBooleanProperty extends EntityPropertyImpl { + private final int index; + private final boolean legacy; + + public SimpleBooleanProperty(String name, int index, boolean defaultValue, boolean legacy) { + super(name, defaultValue, Boolean.class); + this.index = index; + this.legacy = legacy; + } + + @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))); + } +}