From e7601f8e4b25b798134bb431120960436b0ab120 Mon Sep 17 00:00:00 2001 From: D3v1s0m Date: Mon, 2 Oct 2023 10:24:31 +0530 Subject: [PATCH] added Wolf properties and sitting property for tameable --- .../entity/EntityPropertyRegistryImpl.java | 42 +++++++++++++------ .../lol/pyr/znpcsplus/npc/NpcTypeImpl.java | 3 ++ .../znpcsplus/npc/NpcTypeRegistryImpl.java | 4 +- 3 files changed, 35 insertions(+), 14 deletions(-) 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 b958e5e..6bc2f5d 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -99,10 +99,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Guardian registerType("is_elder", false); // TODO: ensure it only works till 1.10. Note: index is wrong on wiki.vg - // Wolf - registerType("wolf_collar_color", DyeColor.RED); // TODO - registerType("wolf_angry", false); // TODO - // Show Golem registerType("pumpkin", true); // TODO @@ -144,14 +140,15 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { linkProperties("glow", "fire", "invisible"); register(new BooleanProperty("silent", 4, false, legacyBooleans)); - final int tamedIndex; - if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) tamedIndex = 17; - else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) tamedIndex = 16; - else if (ver.isNewerThanOrEquals(ServerVersion.V_1_14)) tamedIndex = 15; - else if (ver.isNewerThanOrEquals(ServerVersion.V_1_10)) tamedIndex = 13; - else if (ver.isNewerThanOrEquals(ServerVersion.V_1_9)) tamedIndex = 12; - else tamedIndex = 16; - register(new BitsetProperty("tamed", tamedIndex, 0x04)); + final int tameableIndex; + if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) tameableIndex = 17; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) tameableIndex = 16; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_14)) tameableIndex = 15; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_10)) tameableIndex = 13; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_9)) tameableIndex = 12; + else tameableIndex = 16; + register(new BitsetProperty("sitting", tameableIndex, 0x01)); + register(new BitsetProperty("tamed", tameableIndex, 0x04)); int potionIndex; if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) potionIndex = 10; @@ -348,6 +345,27 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { register(new EncodedByteProperty<>("sheep_color", DyeColor.WHITE, sheepIndex, DyeColor::getWoolData)); register(new BitsetProperty("sheep_sheared", sheepIndex, 0x10, false, legacyBooleans)); // no need to link because sheep_sheared is only visible when sheep_color is WHITE + // Wolf + int wolfIndex; + if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) wolfIndex = 19; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) wolfIndex = 18; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_10)) wolfIndex = 16; + else if (ver.isNewerThanOrEquals(ServerVersion.V_1_9)) wolfIndex = 15; + else wolfIndex = 19; + register(new BooleanProperty("wolf_begging", wolfIndex++, false, legacyBooleans)); + if (legacyBooleans) { + // noinspection deprecation + register(new EncodedByteProperty<>("wolf_collar", DyeColor.BLUE, wolfIndex++, DyeColor::getDyeData)); + } else register(new EncodedIntegerProperty<>("wolf_collar", DyeColor.RED, wolfIndex++, Enum::ordinal)); + if (ver.isNewerThanOrEquals(ServerVersion.V_1_16)) { + register(new EncodedIntegerProperty<>("wolf_angry", false, wolfIndex, b -> b ? 1 : 0)); + linkProperties("tamed", "sitting"); + } + else { + register(new BitsetProperty("wolf_angry", tameableIndex, 0x02)); + linkProperties("wolf_angry", "tamed", "sitting"); + } + if (!ver.isNewerThanOrEquals(ServerVersion.V_1_10)) return; // Polar Bear int polarBearIndex; diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java index f072bd6..b9c6884 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java @@ -158,6 +158,9 @@ public class NpcTypeImpl implements NpcType { addProperties("panda_eating"); } } + if (EntityTypes.isTypeInstanceOf(type, EntityTypes.ABSTRACT_TAMEABLE_ANIMAL)) { + addProperties("tamed", "sitting"); + } return new NpcTypeImpl(name, type, hologramOffset, new HashSet<>(allowedProperties), defaultProperties); } } 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 acb5bc7..fba1fad 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -156,7 +156,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { register(builder(p, "wolf", EntityTypes.WOLF) .setHologramOffset(-1.125) - .addProperties("tamed")); + .addProperties("wolf_begging", "wolf_collar", "wolf_angry")); register(builder(p, "zombie", EntityTypes.ZOMBIE) .setHologramOffset(-0.025) @@ -269,7 +269,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { register(builder(p, "cat", EntityTypes.CAT) .setHologramOffset(-1.275) - .addProperties("cat_variant", "cat_laying", "cat_relaxed", "cat_collar", "tamed")); + .addProperties("cat_variant", "cat_laying", "cat_relaxed", "cat_collar")); register(builder(p, "fox", EntityTypes.FOX) .setHologramOffset(-1.275)