From 80b75ebc0d1907c9538ab48baccbd6337b710aad Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Thu, 25 May 2023 13:51:58 +0100 Subject: [PATCH] add hologram offsets for all npc types & register equipment properties to npcs that support it --- .../lol/pyr/znpcsplus/npc/NpcTypeImpl.java | 29 +- .../znpcsplus/npc/NpcTypeRegistryImpl.java | 341 +++++++++++++----- 2 files changed, 272 insertions(+), 98 deletions(-) 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 31669d8..799a2ae 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeImpl.java @@ -45,7 +45,6 @@ public class NpcTypeImpl implements NpcType { private final String name; private final EntityType type; private final List> allowedProperties = new ArrayList<>(); - private boolean globalProperties = true; private double hologramOffset = 0; Builder(EntityPropertyRegistryImpl propertyRegistry, String name, EntityType type) { @@ -54,9 +53,12 @@ public class NpcTypeImpl implements NpcType { this.type = type; } - public Builder addProperties(EntityPropertyImpl... properties) { - allowedProperties.addAll(Arrays.asList(properties)); - return this; + public Builder addEquipmentProperties() { + return addProperties("helmet", "chestplate", "leggings", "boots", "hand", "offhand"); + } + + public Builder addHandProperties() { + return addProperties("hand", "offhand"); } public Builder addProperties(String... names) { @@ -64,25 +66,18 @@ public class NpcTypeImpl implements NpcType { return this; } - public Builder setEnableGlobalProperties(boolean enabled) { - globalProperties = enabled; - return this; - } - public Builder setHologramOffset(double hologramOffset) { this.hologramOffset = hologramOffset; return this; } public NpcTypeImpl build() { - if (globalProperties) { - allowedProperties.add(propertyRegistry.getByName("fire")); - allowedProperties.add(propertyRegistry.getByName("invisible")); - allowedProperties.add(propertyRegistry.getByName("silent")); - allowedProperties.add(propertyRegistry.getByName("look")); - if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) - allowedProperties.add(propertyRegistry.getByName("glow")); - } + allowedProperties.add(propertyRegistry.getByName("fire")); + allowedProperties.add(propertyRegistry.getByName("invisible")); + allowedProperties.add(propertyRegistry.getByName("silent")); + allowedProperties.add(propertyRegistry.getByName("look")); + if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) + allowedProperties.add(propertyRegistry.getByName("glow")); return new NpcTypeImpl(name, type, hologramOffset, new HashSet<>(allowedProperties)); } } 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 e765e86..91acebb 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -25,110 +25,289 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { return type; } - public void registerDefault(PacketEventsAPI packetEvents, EntityPropertyRegistryImpl propertyRegistry) { + private NpcTypeImpl.Builder builder(EntityPropertyRegistryImpl propertyRegistry, String name, EntityType type) { + return new NpcTypeImpl.Builder(propertyRegistry, name, type); + } + + public void registerDefault(PacketEventsAPI packetEvents, EntityPropertyRegistryImpl p /* propertyRegistry */) { ServerVersion version = packetEvents.getServerManager().getVersion(); - register(new NpcTypeImpl.Builder(propertyRegistry, "player", EntityTypes.PLAYER).setHologramOffset(-0.15D) - .addProperties("skin", "skin_layers", "helmet", "chestplate", "leggings", "boots", "hand", "offhand")); + register(builder(p, "player", EntityTypes.PLAYER) + .setHologramOffset(-0.15D) + .addEquipmentProperties()); - register(new NpcTypeImpl.Builder(propertyRegistry, "armor_stand", EntityTypes.ARMOR_STAND)); - register(new NpcTypeImpl.Builder(propertyRegistry, "bat", EntityTypes.BAT).setHologramOffset(-1.365)); - register(new NpcTypeImpl.Builder(propertyRegistry, "blaze", EntityTypes.BLAZE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "cat", EntityTypes.CAT)); - register(new NpcTypeImpl.Builder(propertyRegistry, "cave_spider", EntityTypes.CAVE_SPIDER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "chicken", EntityTypes.CHICKEN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "cow", EntityTypes.COW)); - register(new NpcTypeImpl.Builder(propertyRegistry, "creeper", EntityTypes.CREEPER).setHologramOffset(-0.3D)); - register(new NpcTypeImpl.Builder(propertyRegistry, "donkey", EntityTypes.DONKEY)); - register(new NpcTypeImpl.Builder(propertyRegistry, "elder_guardian", EntityTypes.ELDER_GUARDIAN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "ender_dragon", EntityTypes.ENDER_DRAGON)); - register(new NpcTypeImpl.Builder(propertyRegistry, "enderman", EntityTypes.ENDERMAN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "endermite", EntityTypes.ENDERMITE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "ghast", EntityTypes.GHAST)); - register(new NpcTypeImpl.Builder(propertyRegistry, "giant", EntityTypes.GIANT)); - register(new NpcTypeImpl.Builder(propertyRegistry, "guardian", EntityTypes.GUARDIAN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "horse", EntityTypes.HORSE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "iron_golem", EntityTypes.IRON_GOLEM)); - register(new NpcTypeImpl.Builder(propertyRegistry, "magma_cube", EntityTypes.MAGMA_CUBE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "mooshroom", EntityTypes.MOOSHROOM)); - register(new NpcTypeImpl.Builder(propertyRegistry, "mule", EntityTypes.MULE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "ocelot", EntityTypes.OCELOT)); - register(new NpcTypeImpl.Builder(propertyRegistry, "pig", EntityTypes.PIG)); - register(new NpcTypeImpl.Builder(propertyRegistry, "rabbit", EntityTypes.RABBIT)); - register(new NpcTypeImpl.Builder(propertyRegistry, "sheep", EntityTypes.SHEEP)); - register(new NpcTypeImpl.Builder(propertyRegistry, "silverfish", EntityTypes.SILVERFISH)); - register(new NpcTypeImpl.Builder(propertyRegistry, "skeleton", EntityTypes.SKELETON)); - register(new NpcTypeImpl.Builder(propertyRegistry, "skeleton_horse", EntityTypes.SKELETON_HORSE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "slime", EntityTypes.SLIME)); - register(new NpcTypeImpl.Builder(propertyRegistry, "snow_golem", EntityTypes.SNOW_GOLEM)); - register(new NpcTypeImpl.Builder(propertyRegistry, "spider", EntityTypes.SPIDER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "squid", EntityTypes.SQUID)); - register(new NpcTypeImpl.Builder(propertyRegistry, "villager", EntityTypes.VILLAGER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "witch", EntityTypes.WITCH)); - register(new NpcTypeImpl.Builder(propertyRegistry, "wither", EntityTypes.WITHER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "wither_skeleton", EntityTypes.WITHER_SKELETON)); - register(new NpcTypeImpl.Builder(propertyRegistry, "wolf", EntityTypes.WOLF)); - register(new NpcTypeImpl.Builder(propertyRegistry, "zombie", EntityTypes.ZOMBIE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "zombie_horse", EntityTypes.ZOMBIE_HORSE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "zombie_villager", EntityTypes.ZOMBIE_VILLAGER)); + // Most hologram offsets generated using Entity#getHeight() in 1.19.4 + + register(builder(p, "armor_stand", EntityTypes.ARMOR_STAND) + .setHologramOffset(-0.15).addEquipmentProperties()); + + register(builder(p, "bat", EntityTypes.BAT) + .setHologramOffset(-1.075)); + + register(builder(p, "blaze", EntityTypes.BLAZE) + .setHologramOffset(-0.175)); + + register(builder(p, "cat", EntityTypes.CAT) + .setHologramOffset(-1.275)); + + register(builder(p, "cave_spider", EntityTypes.CAVE_SPIDER) + .setHologramOffset(-1.475)); + + register(builder(p, "chicken", EntityTypes.CHICKEN) + .setHologramOffset(-1.275)); + + register(builder(p, "cow", EntityTypes.COW) + .setHologramOffset(-0.575)); + + register(builder(p, "creeper", EntityTypes.CREEPER) + .setHologramOffset(-0.275)); + + register(builder(p, "donkey", EntityTypes.DONKEY) + .setHologramOffset(-0.475)); + + register(builder(p, "elder_guardian", EntityTypes.ELDER_GUARDIAN) + .setHologramOffset(0.0225)); + + register(builder(p, "ender_dragon", EntityTypes.ENDER_DRAGON) + .setHologramOffset(6.0245)); + + register(builder(p, "enderman", EntityTypes.ENDERMAN) + .setHologramOffset(0.925)); + + register(builder(p, "endermite", EntityTypes.ENDERMITE) + .setHologramOffset(-1.675)); + + register(builder(p, "ghast", EntityTypes.GHAST) + .setHologramOffset(2.025)); + + register(builder(p, "giant", EntityTypes.GIANT) + .setHologramOffset(10.025) + .addEquipmentProperties()); + + register(builder(p, "guardian", EntityTypes.GUARDIAN) + .setHologramOffset(-1.125)); + + register(builder(p, "horse", EntityTypes.HORSE) + .setHologramOffset(-0.375)); + + register(builder(p, "iron_golem", EntityTypes.IRON_GOLEM) + .setHologramOffset(0.725)); + + register(builder(p, "magma_cube", EntityTypes.MAGMA_CUBE)); // TODO: Hologram offset scaling with size property + + register(builder(p, "mooshroom", EntityTypes.MOOSHROOM) + .setHologramOffset(-0.575)); + + register(builder(p, "mule", EntityTypes.MULE) + .setHologramOffset(-0.375)); + + register(builder(p, "ocelot", EntityTypes.OCELOT) + .setHologramOffset(-1.275)); + + register(builder(p, "pig", EntityTypes.PIG) + .setHologramOffset(-1.075)); + + register(builder(p, "rabbit", EntityTypes.RABBIT) + .setHologramOffset(-1.475)); + + register(builder(p, "sheep", EntityTypes.SHEEP) + .setHologramOffset(-0.675)); + + register(builder(p, "silverfish", EntityTypes.SILVERFISH) + .setHologramOffset(-1.675)); + + register(builder(p, "skeleton", EntityTypes.SKELETON) + .setHologramOffset(0.015) + .addEquipmentProperties()); + + register(builder(p, "skeleton_horse", EntityTypes.SKELETON_HORSE) + .setHologramOffset(-0.375)); + + register(builder(p, "slime", EntityTypes.SLIME)); // TODO: Hologram offset scaling with size property + + register(builder(p, "snow_golem", EntityTypes.SNOW_GOLEM) + .setHologramOffset(-0.075)); + + register(builder(p, "spider", EntityTypes.SPIDER) + .setHologramOffset(-1.075)); + + register(builder(p, "squid", EntityTypes.SQUID) + .setHologramOffset(-1.175)); + + register(builder(p, "villager", EntityTypes.VILLAGER) + .setHologramOffset(-0.025) + .addProperties("hand")); + + register(builder(p, "witch", EntityTypes.WITCH) + .setHologramOffset(-0.025) + .addProperties("hand")); + + register(builder(p, "wither", EntityTypes.WITHER) + .setHologramOffset(1.525)); + + register(builder(p, "wither_skeleton", EntityTypes.WITHER_SKELETON) + .setHologramOffset(0.425) + .addEquipmentProperties()); + + register(builder(p, "wolf", EntityTypes.WOLF) + .setHologramOffset(-1.125)); + + register(builder(p, "zombie", EntityTypes.ZOMBIE) + .setHologramOffset(-0.025) + .addEquipmentProperties()); + + register(builder(p, "zombie_horse", EntityTypes.ZOMBIE_HORSE) + .setHologramOffset(-0.375)); + + register(builder(p, "zombie_villager", EntityTypes.ZOMBIE_VILLAGER) + .setHologramOffset(-1.0) + .addEquipmentProperties()); if (!version.isNewerThanOrEquals(ServerVersion.V_1_9)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "shulker", EntityTypes.SHULKER)); + + register(builder(p, "shulker", EntityTypes.SHULKER) + .setHologramOffset(-0.975)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_10)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "husk", EntityTypes.HUSK)); - register(new NpcTypeImpl.Builder(propertyRegistry, "polar_bear", EntityTypes.POLAR_BEAR)); - register(new NpcTypeImpl.Builder(propertyRegistry, "stray", EntityTypes.STRAY)); + + register(builder(p, "husk", EntityTypes.HUSK) + .setHologramOffset(-0.025) + .addEquipmentProperties()); + + register(builder(p, "polar_bear", EntityTypes.POLAR_BEAR) + .setHologramOffset(-0.575)); + + register(builder(p, "stray", EntityTypes.STRAY) + .setHologramOffset(0.015) + .addEquipmentProperties()); if (!version.isNewerThanOrEquals(ServerVersion.V_1_11)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "evoker", EntityTypes.EVOKER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "llama", EntityTypes.LLAMA)); - register(new NpcTypeImpl.Builder(propertyRegistry, "vex", EntityTypes.VEX)); - register(new NpcTypeImpl.Builder(propertyRegistry, "vindicator", EntityTypes.VINDICATOR)); + + register(builder(p, "evoker", EntityTypes.EVOKER) + .setHologramOffset(-0.025)); + + register(builder(p, "llama", EntityTypes.LLAMA) + .setHologramOffset(-0.105)); + + register(builder(p, "vex", EntityTypes.VEX) + .setHologramOffset(-1.175) + .addHandProperties()); + + register(builder(p, "vindicator", EntityTypes.VINDICATOR) + .setHologramOffset(-0.025)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_12)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "illusioner", EntityTypes.ILLUSIONER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "parrot", EntityTypes.PARROT)); + + register(builder(p, "illusioner", EntityTypes.ILLUSIONER) + .setHologramOffset(-0.025)); + + register(builder(p, "parrot", EntityTypes.PARROT) + .setHologramOffset(-1.075)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_13)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "cod", EntityTypes.COD)); - register(new NpcTypeImpl.Builder(propertyRegistry, "dolphin", EntityTypes.DOLPHIN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "drowned", EntityTypes.DROWNED)); - register(new NpcTypeImpl.Builder(propertyRegistry, "phantom", EntityTypes.PHANTOM)); - register(new NpcTypeImpl.Builder(propertyRegistry, "pufferfish", EntityTypes.PUFFERFISH)); - register(new NpcTypeImpl.Builder(propertyRegistry, "salmon", EntityTypes.SALMON)); - register(new NpcTypeImpl.Builder(propertyRegistry, "tropical_fish", EntityTypes.TROPICAL_FISH)); - register(new NpcTypeImpl.Builder(propertyRegistry, "turtle", EntityTypes.TURTLE)); + + register(builder(p, "cod", EntityTypes.COD) + .setHologramOffset(-1.675)); + + register(builder(p, "dolphin", EntityTypes.DOLPHIN) + .setHologramOffset(-1.375) + .addProperties("hand")); + + register(builder(p, "drowned", EntityTypes.DROWNED) + .setHologramOffset(-0.025) + .addEquipmentProperties()); + + register(builder(p, "phantom", EntityTypes.PHANTOM) + .setHologramOffset(-1.475)); + + register(builder(p, "pufferfish", EntityTypes.PUFFERFISH) + .setHologramOffset(-1.625)); + + register(builder(p, "salmon", EntityTypes.SALMON) + .setHologramOffset(-1.575)); + + register(builder(p, "tropical_fish", EntityTypes.TROPICAL_FISH) + .setHologramOffset(-1.575)); + + register(builder(p, "turtle", EntityTypes.TURTLE) + .setHologramOffset(-1.575)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_14)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "fox", EntityTypes.FOX)); - register(new NpcTypeImpl.Builder(propertyRegistry, "panda", EntityTypes.PANDA)); - register(new NpcTypeImpl.Builder(propertyRegistry, "pillager", EntityTypes.PILLAGER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "ravager", EntityTypes.RAVAGER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "trader_llama", EntityTypes.TRADER_LLAMA)); - register(new NpcTypeImpl.Builder(propertyRegistry, "wandering_trader", EntityTypes.WANDERING_TRADER)); + + register(builder(p, "fox", EntityTypes.FOX) + .setHologramOffset(-1.275) + .addProperties("hand")); + + register(builder(p, "panda", EntityTypes.PANDA) + .setHologramOffset(-0.725)); + + register(builder(p, "pillager", EntityTypes.PILLAGER) + .setHologramOffset(-0.025) + .addHandProperties()); + + register(builder(p, "ravager", EntityTypes.RAVAGER) + .setHologramOffset(0.225)); + + register(builder(p, "trader_llama", EntityTypes.TRADER_LLAMA) + .setHologramOffset(-0.105)); + + register(builder(p, "wandering_trader", EntityTypes.WANDERING_TRADER) + .setHologramOffset(-0.025) + .addProperties("hand")); if (!version.isNewerThanOrEquals(ServerVersion.V_1_15)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "bee", EntityTypes.BEE)); + + register(builder(p, "bee", EntityTypes.BEE) + .setHologramOffset(-1.375)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_16)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "hoglin", EntityTypes.HOGLIN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "piglin", EntityTypes.PIGLIN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "piglin_brute", EntityTypes.PIGLIN_BRUTE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "strider", EntityTypes.STRIDER)); - register(new NpcTypeImpl.Builder(propertyRegistry, "zoglin", EntityTypes.ZOGLIN)); - register(new NpcTypeImpl.Builder(propertyRegistry, "zombified_piglin", EntityTypes.ZOMBIFIED_PIGLIN)); + + register(builder(p, "hoglin", EntityTypes.HOGLIN) + .setHologramOffset(-0.575)); + + register(builder(p, "piglin", EntityTypes.PIGLIN) + .setHologramOffset(-1.0) + .addEquipmentProperties()); + + register(builder(p, "piglin_brute", EntityTypes.PIGLIN_BRUTE) + .setHologramOffset(-0.025) + .addEquipmentProperties()); + + register(builder(p, "strider", EntityTypes.STRIDER) + .setHologramOffset(-0.275)); + + register(builder(p, "zoglin", EntityTypes.ZOGLIN) + .setHologramOffset(-0.575)); + + register(builder(p, "zombified_piglin", EntityTypes.ZOMBIFIED_PIGLIN) + .setHologramOffset(-0.025) + .addEquipmentProperties()); if (!version.isNewerThanOrEquals(ServerVersion.V_1_17)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "axolotl", EntityTypes.AXOLOTL)); - register(new NpcTypeImpl.Builder(propertyRegistry, "glow_squid", EntityTypes.GLOW_SQUID)); - register(new NpcTypeImpl.Builder(propertyRegistry, "goat", EntityTypes.GOAT)); + + register(builder(p, "axolotl", EntityTypes.AXOLOTL) + .setHologramOffset(-1.555)); + + register(builder(p, "glow_squid", EntityTypes.GLOW_SQUID) + .setHologramOffset(-1.175)); + + register(builder(p, "goat", EntityTypes.GOAT) + .setHologramOffset(-0.675)); if (!version.isNewerThanOrEquals(ServerVersion.V_1_19)) return; - register(new NpcTypeImpl.Builder(propertyRegistry, "allay", EntityTypes.ALLAY)); - register(new NpcTypeImpl.Builder(propertyRegistry, "frog", EntityTypes.FROG)); - register(new NpcTypeImpl.Builder(propertyRegistry, "tadpole", EntityTypes.TADPOLE)); - register(new NpcTypeImpl.Builder(propertyRegistry, "warden", EntityTypes.WARDEN)); + + register(builder(p, "allay", EntityTypes.ALLAY) + .setHologramOffset(-1.375) + .addHandProperties()); + + register(builder(p, "frog", EntityTypes.FROG) + .setHologramOffset(-1.475)); + + register(builder(p, "tadpole", EntityTypes.TADPOLE) + .setHologramOffset(-1.675)); + + register(builder(p, "warden", EntityTypes.WARDEN) + .setHologramOffset(0.925)); } public Collection getAll() {