diff --git a/api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java b/api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java index 4036e94..605702e 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java +++ b/api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java @@ -20,5 +20,8 @@ public enum NpcPose { ROARING, SNIFFING, EMERGING, - DIGGING + DIGGING, + SLIDING, + SHOOTING, + INHALING, } diff --git a/plugin/build.gradle b/plugin/build.gradle index a4ae386..90a9e2a 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -8,7 +8,7 @@ runServer { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(21) } - minecraftVersion "1.20.6" + minecraftVersion "1.21" } processResources { @@ -20,7 +20,7 @@ dependencies { implementation "com.google.code.gson:gson:2.10.1" // JSON parsing implementation "org.bstats:bstats-bukkit:3.0.2" // Plugin stats implementation "me.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker - implementation "com.github.retrooper.packetevents:spigot:2.3.0" // Packets + implementation "com.github.retrooper:packetevents-spigot:2.4.0" // Packets implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs implementation "lol.pyr:director-adventure:2.1.2" // Commands 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 ba70aa3..a7490c0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -659,6 +659,11 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Wolf register(new EncodedIntegerProperty<>("wolf_variant", WoldVariant.PALE, wolfIndex, WoldVariant::getId, EntityDataTypes.WOLF_VARIANT)); + + if (!ver.isNewerThanOrEquals(ServerVersion.V_1_21)) return; + + // Bogged + register(new BooleanProperty("bogged_sheared", 16, false, legacyBooleans)); } private void registerSerializer(PropertySerializer serializer) { diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ForceBodyRotationProperty.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ForceBodyRotationProperty.java index 4d568a7..8a6ca71 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ForceBodyRotationProperty.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/properties/ForceBodyRotationProperty.java @@ -18,7 +18,9 @@ public class ForceBodyRotationProperty extends DummyProperty { @Override public void apply(Player player, PacketEntity entity, boolean isSpawned, Map properties) { - Bukkit.getScheduler().runTaskLater(plugin, () -> entity.swingHand(player, false), 2L); - Bukkit.getScheduler().runTaskLater(plugin, () -> entity.swingHand(player, false), 6L); + if (entity.getProperty(this)) { + Bukkit.getScheduler().runTaskLater(plugin, () -> entity.swingHand(player, false), 2L); + Bukkit.getScheduler().runTaskLater(plugin, () -> entity.swingHand(player, false), 6L); + } } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java index e7a2b7f..5916218 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java @@ -56,6 +56,7 @@ public class NpcImpl extends Viewable implements Npc { UNSAFE_hideAll(); this.type = type; entity = new PacketEntity(packetFactory, this, type.getType(), entity.getLocation()); + hologram.setLocation(location.withY(location.getY() + type.getHologramOffset())); UNSAFE_showAll(); } 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 138bbd9..39f52b7 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -48,7 +48,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { // Most hologram offsets generated using Entity#getHeight() in 1.19.4 register(builder(p, "armor_stand", EntityTypes.ARMOR_STAND) - .setHologramOffset(-0.15) + .setHologramOffset(0) .addEquipmentProperties() .addProperties("small", "arms", "base_plate", "head_rotation", "body_rotation", "left_arm_rotation", "right_arm_rotation", "left_leg_rotation", "right_leg_rotation")); @@ -106,7 +106,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { 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, "magma_cube", EntityTypes.MAGMA_CUBE) + .setHologramOffset(-1.455)); // TODO: Hologram offset scaling with size property register(builder(p, "mooshroom", EntityTypes.MOOSHROOM) .setHologramOffset(-0.575) @@ -137,7 +138,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { 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, "slime", EntityTypes.SLIME) + .setHologramOffset(-1.455)); // TODO: Hologram offset scaling with size property register(builder(p, "snow_golem", EntityTypes.SNOW_GOLEM) .setHologramOffset(-0.075) @@ -230,7 +232,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .addEquipmentProperties()); register(builder(p, "zombie_villager", EntityTypes.ZOMBIE_VILLAGER) - .setHologramOffset(-1.0) + .setHologramOffset(-0.025) .addEquipmentProperties()); if (!version.isNewerThanOrEquals(ServerVersion.V_1_12)) return; @@ -315,7 +317,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .addProperties("hoglin_immune_to_zombification")); register(builder(p, "piglin", EntityTypes.PIGLIN) - .setHologramOffset(-1.0) + .setHologramOffset(-0.025) .addEquipmentProperties() .addProperties("piglin_baby", "piglin_charging_crossbow", "piglin_dancing")); @@ -363,18 +365,27 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { if (!version.isNewerThanOrEquals(ServerVersion.V_1_20)) return; register(builder(p, "sniffer", EntityTypes.SNIFFER) - .setHologramOffset(0.125) + .setHologramOffset(0.075) .addProperties("sniffer_state")); register(builder(p, "camel", EntityTypes.CAMEL) - .setHologramOffset(0.25) + .setHologramOffset(0.4) .addProperties("bashing", "camel_sitting")); if (!version.isNewerThanOrEquals(ServerVersion.V_1_20_5)) return; register(builder(p, "armadillo", EntityTypes.ARMADILLO) - .setHologramOffset(-1.475) + .setHologramOffset(-1.325) .addProperties("armadillo_state")); + + if (!version.isNewerThanOrEquals(ServerVersion.V_1_21)) return; + + register(builder(p, "bogged", EntityTypes.BOGGED) + .setHologramOffset(0.015) + .addProperties("bogged_sheared")); + + register(builder(p, "breeze", EntityTypes.BREEZE) + .setHologramOffset(-0.205)); } public Collection getAll() {