From 7f5b7f8f0aefcf171399cf64be16abd728c3079e Mon Sep 17 00:00:00 2001 From: D3v1s0m <49519439+D3v1s0m@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:46:55 +0530 Subject: [PATCH] Implemented frog_variant property --- .../java/lol/pyr/znpcsplus/util/FrogVariant.java | 7 +++++++ .../src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java | 2 ++ .../commands/property/PropertySetCommand.java | 1 + .../znpcsplus/entity/EntityPropertyRegistryImpl.java | 7 ++++--- .../lol/pyr/znpcsplus/metadata/MetadataFactory.java | 3 +++ .../pyr/znpcsplus/metadata/V1_19MetadataFactory.java | 12 ++++++++++++ .../pyr/znpcsplus/metadata/V1_8MetadataFactory.java | 5 +++++ .../lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java | 3 ++- .../lol/pyr/znpcsplus/packets/V1_8PacketFactory.java | 2 ++ 9 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/util/FrogVariant.java create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_19MetadataFactory.java diff --git a/api/src/main/java/lol/pyr/znpcsplus/util/FrogVariant.java b/api/src/main/java/lol/pyr/znpcsplus/util/FrogVariant.java new file mode 100644 index 0000000..53eaa5c --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/util/FrogVariant.java @@ -0,0 +1,7 @@ +package lol.pyr.znpcsplus.util; + +public enum FrogVariant { + TEMPERATE, + WARM, + COLD +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index 1e486ea..16d56cf 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -248,6 +248,7 @@ public class ZNpcsPlus extends JavaPlugin { versions.put(ServerVersion.V_1_15, LazyLoader.of(V1_15MetadataFactory::new)); versions.put(ServerVersion.V_1_16, LazyLoader.of(V1_16MetadataFactory::new)); versions.put(ServerVersion.V_1_17, LazyLoader.of(V1_17MetadataFactory::new)); + versions.put(ServerVersion.V_1_19, LazyLoader.of(V1_19MetadataFactory::new)); ServerVersion version = packetEvents.getServerManager().getVersion(); if (versions.containsKey(version)) return versions.get(version).get(); @@ -286,6 +287,7 @@ public class ZNpcsPlus extends JavaPlugin { registerEnumParser(manager, ParrotVariant.class, incorrectUsageMessage); registerEnumParser(manager, SpellType.class, incorrectUsageMessage); registerEnumParser(manager, FoxVariant.class, incorrectUsageMessage); + registerEnumParser(manager, FrogVariant.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 45d921c..ae7768e 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 @@ -127,6 +127,7 @@ public class PropertySetCommand implements CommandHandler { if (type == BlockState.class) return context.suggestLiteral("hand", "looking_at", "block"); if (type == SpellType.class) return context.suggestEnum(SpellType.values()); if (type == FoxVariant.class) return context.suggestEnum(FoxVariant.values()); + if (type == FrogVariant.class) return context.suggestEnum(FrogVariant.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 13a4b3d..12cbc7e 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -40,6 +40,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerEnumSerializer(ParrotVariant.class); registerEnumSerializer(SpellType.class); registerEnumSerializer(FoxVariant.class); + registerEnumSerializer(FrogVariant.class); registerType("glow", NamedTextColor.class); registerType("fire", false); @@ -133,6 +134,9 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Pufferfish registerType("puff_state", null); // TODO: Make a puff state enum class + // Frog + registerType("frog_variant", FrogVariant.TEMPERATE); + // Tropical Fish registerType("tropical_fish_variant", null); // TODO: Maybe make an enum class for this? its just an int on wiki.vg @@ -148,9 +152,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerType("carpet_color", DyeColor.class); // TODO registerType("llama_variant", 0); // TODO - // Frog - registerType("frog_type", null); // TODO: It has a custom type read on wiki.vg - // Panda registerType("panda_sneezing", false); // TODO registerType("panda_rolling", false); // TODO 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 3b9b694..4a006c1 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -80,4 +80,7 @@ public interface MetadataFactory { // Fox EntityData foxVariant(int variant); EntityData foxProperties(boolean sitting, boolean crouching, boolean sleeping, boolean facePlanted); + + // Frog + EntityData frogVariant(int variant); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_19MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_19MetadataFactory.java new file mode 100644 index 0000000..562007d --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_19MetadataFactory.java @@ -0,0 +1,12 @@ +package lol.pyr.znpcsplus.metadata; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import lol.pyr.znpcsplus.util.FrogVariant; + +public class V1_19MetadataFactory extends V1_17MetadataFactory { + @Override + public EntityData frogVariant(int variant) { + return newEntityData(17, EntityDataTypes.FROG_VARIANT, 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 4cbf6cd..09eeca0 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 @@ -195,6 +195,11 @@ public class V1_8MetadataFactory implements MetadataFactory { throw new UnsupportedOperationException("The fox properties entity data isn't supported on this version"); } + @Override + public EntityData frogVariant(int variant) { + throw new UnsupportedOperationException("The frog variant 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 26deed4..14b5081 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -313,7 +313,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .addHandProperties()); register(builder(p, "frog", EntityTypes.FROG) - .setHologramOffset(-1.475)); + .setHologramOffset(-1.475) + .addProperties("frog_variant")); register(builder(p, "tadpole", EntityTypes.TADPOLE) .setHologramOffset(-1.675)); 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 35ec143..3b61cfd 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 @@ -208,6 +208,8 @@ public class V1_8PacketFactory implements PacketFactory { properties.getProperty(propertyRegistry.getByName("fox_sleeping", Boolean.class)), properties.getProperty(propertyRegistry.getByName("fox_faceplanted", Boolean.class)) )); + } else if (entity.getType().equals(EntityTypes.FROG)) { + add(data, metadataFactory.frogVariant(properties.getProperty(propertyRegistry.getByName("frog_variant", FrogVariant.class)).ordinal())); } if (properties.getProperty(propertyRegistry.getByName("dinnerbone", Boolean.class))) {