From 8c83cb34284d3a70a9e9d9ee58bf535fe06cc542 Mon Sep 17 00:00:00 2001 From: D3v1s0m <49519439+D3v1s0m@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:18:33 +0530 Subject: [PATCH] Added evoker_spell property. --- .../java/lol/pyr/znpcsplus/util/SpellType.java | 10 ++++++++++ .../main/java/lol/pyr/znpcsplus/ZNpcsPlus.java | 1 + .../commands/property/PropertySetCommand.java | 1 + .../entity/EntityPropertyRegistryImpl.java | 4 ++++ .../pyr/znpcsplus/metadata/MetadataFactory.java | 3 +++ .../znpcsplus/metadata/V1_11MetadataFactory.java | 5 +++++ .../znpcsplus/metadata/V1_12MetadataFactory.java | 5 +++++ .../znpcsplus/metadata/V1_14MetadataFactory.java | 15 +++++++++++++++ .../znpcsplus/metadata/V1_15MetadataFactory.java | 5 +++++ .../znpcsplus/metadata/V1_17MetadataFactory.java | 5 +++++ .../znpcsplus/metadata/V1_8MetadataFactory.java | 5 +++++ .../pyr/znpcsplus/npc/NpcTypeRegistryImpl.java | 3 ++- .../pyr/znpcsplus/packets/V1_8PacketFactory.java | 2 ++ 13 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/util/SpellType.java diff --git a/api/src/main/java/lol/pyr/znpcsplus/util/SpellType.java b/api/src/main/java/lol/pyr/znpcsplus/util/SpellType.java new file mode 100644 index 0000000..cf67c3b --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/util/SpellType.java @@ -0,0 +1,10 @@ +package lol.pyr.znpcsplus.util; + +public enum SpellType { + NONE, + SUMMON_VEX, + ATTACK, + WOLOLO, + DISAPPEAR, + BLINDNESS, +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index 7df4727..83fa40c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -284,6 +284,7 @@ public class ZNpcsPlus extends JavaPlugin { registerEnumParser(manager, CatVariant.class, incorrectUsageMessage); registerEnumParser(manager, CreeperState.class, incorrectUsageMessage); registerEnumParser(manager, ParrotVariant.class, incorrectUsageMessage); + registerEnumParser(manager, SpellType.class, incorrectUsageMessage); manager.registerCommand("npc", new MultiCommand(loadHelpMessage("root")) .addSubcommand("create", new CreateCommand(npcRegistry, typeRegistry)) diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/commands/property/PropertySetCommand.java b/plugin/src/main/java/lol/pyr/znpcsplus/commands/property/PropertySetCommand.java index f41ba10..1ca6fbe 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/commands/property/PropertySetCommand.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/commands/property/PropertySetCommand.java @@ -125,6 +125,7 @@ public class PropertySetCommand implements CommandHandler { if (type == CreeperState.class) return context.suggestEnum(CreeperState.values()); if (type == ParrotVariant.class) return context.suggestEnum(ParrotVariant.values()); if (type == BlockState.class) return context.suggestLiteral("hand", "looking_at", "block"); + if (type == SpellType.class) return context.suggestEnum(SpellType.values()); } else if (context.argSize() == 4) { if (type == BlockState.class) { 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 3bbb60e..051c1c5 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -38,6 +38,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerEnumSerializer(CatVariant.class); registerEnumSerializer(CreeperState.class); registerEnumSerializer(ParrotVariant.class); + registerEnumSerializer(SpellType.class); registerType("glow", NamedTextColor.class); registerType("fire", false); @@ -118,6 +119,9 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerType("enderman_screaming", false); // TODO registerType("enderman_staring", false); // TODO + // Evoker + registerType("evoker_spell", SpellType.NONE); + // Pufferfish registerType("puff_state", null); // TODO: Make a puff state enum 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 25683c7..a4a5a08 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -73,4 +73,7 @@ public interface MetadataFactory { EntityData endermanHeldBlock(int heldBlock); EntityData endermanScreaming(boolean screaming); EntityData endermanStaring(boolean staring); + + // Evoker + EntityData evokerSpell(int spell); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_11MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_11MetadataFactory.java index 7333545..c0ba2df 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_11MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_11MetadataFactory.java @@ -13,4 +13,9 @@ public class V1_11MetadataFactory extends V1_10MetadataFactory { public EntityData usingItem(boolean usingItem, boolean offHand, boolean riptide) { return newEntityData(6, EntityDataTypes.BYTE, (byte) ((usingItem ? 0x01 : 0) | (offHand ? 0x02 : 0))); } + + @Override + public EntityData evokerSpell(int spell) { + return newEntityData(12, EntityDataTypes.BYTE, (byte) spell); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java index a60b0fc..9616a5e 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java @@ -24,4 +24,9 @@ public class V1_12MetadataFactory extends V1_11MetadataFactory { public EntityData createShoulderEntityRight(int index, ParrotVariant variant) { return newEntityData(index, EntityDataTypes.NBT, variant == ParrotVariant.NONE ? new NBTCompound() : new ParrotNBTCompound(variant).getTag()); } + + @Override + public EntityData evokerSpell(int spell) { + return newEntityData(13, EntityDataTypes.BYTE, (byte) spell); + } } 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 c615182..ec3adb9 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 @@ -114,4 +114,19 @@ public class V1_14MetadataFactory extends V1_13MetadataFactory { public EntityData creeperCharged(boolean charged) { return newEntityData(15, EntityDataTypes.BOOLEAN, charged); } + + @Override + public EntityData evokerSpell(int spell) { + return newEntityData(15, EntityDataTypes.BYTE, (byte) spell); + } } + +// @Override +// public EntityData foxVariant(int variant) { +// return newEntityData(15, EntityDataTypes.INT, variant); +// } +// +// @Override +// public EntityData foxProperties(boolean sitting, boolean crouching, boolean sleeping, boolean facePlanted) { +// return newEntityData(16, EntityDataTypes.BYTE, (byte) ((sitting ? 0x01 : 0) | (crouching ? 0x04 : 0) | (sleeping ? 0x20 : 0))); +// } 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 index 411869e..cf30403 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java @@ -98,4 +98,9 @@ public class V1_15MetadataFactory extends V1_14MetadataFactory { public EntityData creeperCharged(boolean charged) { return newEntityData(16, EntityDataTypes.BOOLEAN, charged); } + + @Override + public EntityData evokerSpell(int spell) { + return newEntityData(16, EntityDataTypes.BYTE, (byte) spell); + } } 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 2f7e1b1..303ef94 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 @@ -158,4 +158,9 @@ public class V1_17MetadataFactory extends V1_16MetadataFactory { public EntityData endermanStaring(boolean staring) { return newEntityData(18, EntityDataTypes.BOOLEAN, staring); } + + @Override + public EntityData evokerSpell(int spell) { + return newEntityData(17, EntityDataTypes.BYTE, (byte) spell); + } } 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 d15c1e3..555a6f4 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 @@ -180,6 +180,11 @@ public class V1_8MetadataFactory implements MetadataFactory { return newEntityData(18, EntityDataTypes.BOOLEAN, staring); } + @Override + public EntityData evokerSpell(int spell) { + throw new UnsupportedOperationException("The evoker spell entity data isn't supported on this version"); + } + @Override public EntityData silent(boolean enabled) { return newEntityData(4, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java index 7a27b48..aec92f3 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -193,7 +193,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { if (!version.isNewerThanOrEquals(ServerVersion.V_1_11)) return; register(builder(p, "evoker", EntityTypes.EVOKER) - .setHologramOffset(-0.025)); + .setHologramOffset(-0.025) + .addProperties("evoker_spell")); register(builder(p, "llama", EntityTypes.LLAMA) .setHologramOffset(-0.105)); 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 bd49c8d..75b19a4 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 @@ -195,6 +195,8 @@ public class V1_8PacketFactory implements PacketFactory { ); add(data, metadataFactory.endermanScreaming(properties.getProperty(propertyRegistry.getByName("enderman_screaming", Boolean.class)))); add(data, metadataFactory.endermanStaring(properties.getProperty(propertyRegistry.getByName("enderman_staring", Boolean.class)))); + } else if (entity.getType().equals(EntityTypes.EVOKER)) { + add(data, metadataFactory.evokerSpell(properties.getProperty(propertyRegistry.getByName("evoker_spell", SpellType.class)).ordinal())); } if (properties.getProperty(propertyRegistry.getByName("dinnerbone", Boolean.class))) {