diff --git a/api/src/main/java/lol/pyr/znpcsplus/util/LlamaVariant.java b/api/src/main/java/lol/pyr/znpcsplus/util/LlamaVariant.java new file mode 100644 index 0000000..be5cdc9 --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/util/LlamaVariant.java @@ -0,0 +1,8 @@ +package lol.pyr.znpcsplus.util; + +public enum LlamaVariant { + CREAMY, + WHITE, + BROWN, + GRAY +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index d414ead..be5f764 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -270,6 +270,7 @@ public class ZNpcsPlus extends JavaPlugin { registerEnumParser(manager, HorseStyle.class, incorrectUsageMessage); registerEnumParser(manager, HorseColor.class, incorrectUsageMessage); registerEnumParser(manager, HorseArmor.class, incorrectUsageMessage); + registerEnumParser(manager, LlamaVariant.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/entity/EntityPropertyRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java index c99bee1..821660f 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -63,6 +63,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerEnumSerializer(HorseColor.class); registerEnumSerializer(HorseStyle.class); registerEnumSerializer(HorseArmor.class); + registerEnumSerializer(LlamaVariant.class); /* registerType("using_item", false); // TODO: fix it for 1.8 and add new property to use offhand item and riptide animation @@ -75,10 +76,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerType("beam_target", null); // TODO: Make a block pos class for this registerType("show_base", true); // TODO - // Creeper - registerType("creeper_state", CreeperState.IDLE); - registerType("creeper_charged", false); - // Enderman registerType("enderman_held_block", new BlockState(0)); // TODO: figure out the type on this registerType("enderman_screaming", false); // TODO @@ -96,10 +93,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Sniffer registerType("sniffer_state", null); // TODO: Nothing on wiki.vg, look in mc source - // LLama - registerType("carpet_color", DyeColor.class); // TODO - registerType("llama_variant", 0); // TODO - // Panda registerType("panda_sneezing", false); // TODO registerType("panda_rolling", false); // TODO @@ -347,6 +340,16 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { else if (ver.isNewerThanOrEquals(ServerVersion.V_1_12)) spellIndex = 13; register(new EncodedByteProperty<>("spell", SpellType.NONE, spellIndex, obj -> (byte) Math.min(obj.ordinal(), ver.isOlderThan(ServerVersion.V_1_13) ? 3 : 5))); + // Llama + int llamaIndex; + if (ver.isNewerThanOrEquals(ServerVersion.V_1_18)) llamaIndex = 20; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) llamaIndex = 21; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) llamaIndex = 20; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_14)) llamaIndex = 19; + else llamaIndex = 17; + register(new EncodedIntegerProperty("carpet_color", DyeColor.class, llamaIndex++, obj -> obj == null ? -1 : obj.ordinal())); + register(new EncodedIntegerProperty<>("llama_variant", LlamaVariant.CREAMY, llamaIndex, Enum::ordinal)); + if (!ver.isNewerThanOrEquals(ServerVersion.V_1_14)) return; // Pose register(new NpcPoseProperty()); 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 5821f46..fd6f865 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -202,7 +202,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .addProperties("evoker_spell")); register(builder(p, "llama", EntityTypes.LLAMA) - .setHologramOffset(-0.105)); + .setHologramOffset(-0.105) + .addProperties("carpet_color", "llama_variant")); register(builder(p, "vex", EntityTypes.VEX) .setHologramOffset(-1.175) @@ -276,7 +277,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .setHologramOffset(0.225)); register(builder(p, "trader_llama", EntityTypes.TRADER_LLAMA) - .setHologramOffset(-0.105)); + .setHologramOffset(-0.105) + .addProperties("llama_variant")); register(builder(p, "wandering_trader", EntityTypes.WANDERING_TRADER) .setHologramOffset(-0.025)