From f8648b7d01b35accbf5fe5e5b575cb3ed4224d61 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Sat, 1 Jul 2023 00:46:38 +0200 Subject: [PATCH 1/4] add some build file comments to make it easier to check if a library is being used --- plugin/build.gradle | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/plugin/build.gradle b/plugin/build.gradle index d932746..f02091b 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -17,17 +17,19 @@ processResources { dependencies { compileOnly "org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT" - compileOnly "me.clip:placeholderapi:2.11.3" - implementation "com.google.code.gson:gson:2.10.1" - implementation "org.bstats:bstats-bukkit:3.0.2" - implementation "com.github.robertlit:SpigotResourcesAPI:2.0" + compileOnly "me.clip:placeholderapi:2.11.3" // Placeholder support + implementation "com.google.code.gson:gson:2.10.1" // JSON parsing + implementation "org.bstats:bstats-bukkit:3.0.2" // Plugin stats + implementation "com.github.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker + implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" // Packets + implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs + implementation "lol.pyr:director-adventure:2.1.1" // Commands + + // Fancy text library implementation "net.kyori:adventure-platform-bukkit:4.3.0" implementation "net.kyori:adventure-text-minimessage:4.14.0" - implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" - implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" - implementation "lol.pyr:director-adventure:2.1.1" implementation project(":api") } @@ -39,18 +41,14 @@ shadowJar { relocate "me.robertlit.spigotresources", "lol.pyr.znpcsplus.lib.spigotresources" relocate "net.kyori", "lol.pyr.znpcsplus.lib.kyori" relocate "org.checkerframework", "lol.pyr.znpcsplus.lib.checkerframework" - relocate "javax.annotation", "lol.pyr.znpcsplus.lib.javaxannotation" relocate "com.google", "lol.pyr.znpcsplus.lib.google" - relocate "com.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.api" relocate "io.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.impl" - relocate "org.yaml.snakeyaml", "lol.pyr.znpcsplus.lib.snakeyaml" relocate "space.arim.dazzleconf", "lol.pyr.znpcsplus.lib.dazzleconf" - relocate "lol.pyr.director", "lol.pyr.znpcsplus.lib.command" + minimize() } - tasks.assemble.dependsOn shadowJar \ No newline at end of file From f2c94099235b7c43fd92d3b538bf87c26d36703e Mon Sep 17 00:00:00 2001 From: D3v1s0m <49519439+D3v1s0m@users.noreply.github.com> Date: Sat, 1 Jul 2023 12:28:18 +0530 Subject: [PATCH 2/4] Fixed dinnerbone property removal not updating. --- plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java | 1 + 1 file changed, 1 insertion(+) 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 39b57b7..9bb6b09 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java @@ -150,6 +150,7 @@ public class NpcImpl extends Viewable implements Npc { propertyMap.remove(key); UNSAFE_refreshMeta(); if (key.getName().equalsIgnoreCase("glow")) UNSAFE_remakeTeam(); + else if (key.getName().equalsIgnoreCase("dinnerbone")) respawn(); } public Set> getAppliedProperties() { From f812c77cc9863d819e5e287df7f941c446cd6375 Mon Sep 17 00:00:00 2001 From: D3v1s0m <49519439+D3v1s0m@users.noreply.github.com> Date: Sun, 2 Jul 2023 10:51:54 +0530 Subject: [PATCH 3/4] Added shoulder entities for player npc --- .../lol/pyr/znpcsplus/util/ParrotVariant.java | 10 +++++++ .../java/lol/pyr/znpcsplus/ZNpcsPlus.java | 2 ++ .../commands/property/PropertySetCommand.java | 6 +++++ .../entity/EntityPropertyRegistryImpl.java | 4 +++ .../znpcsplus/entity/ParrotNBTCompound.java | 21 +++++++++++++++ .../znpcsplus/metadata/MetadataFactory.java | 7 ++++- .../metadata/V1_12MetadataFactory.java | 27 +++++++++++++++++++ .../metadata/V1_13MetadataFactory.java | 2 +- .../metadata/V1_14MetadataFactory.java | 11 ++++++++ .../metadata/V1_15MetadataFactory.java | 11 ++++++++ .../metadata/V1_17MetadataFactory.java | 11 ++++++++ .../metadata/V1_8MetadataFactory.java | 11 ++++++++ .../znpcsplus/npc/NpcTypeRegistryImpl.java | 2 +- .../znpcsplus/packets/V1_8PacketFactory.java | 2 ++ 14 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/util/ParrotVariant.java create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/entity/ParrotNBTCompound.java create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java diff --git a/api/src/main/java/lol/pyr/znpcsplus/util/ParrotVariant.java b/api/src/main/java/lol/pyr/znpcsplus/util/ParrotVariant.java new file mode 100644 index 0000000..5014e03 --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/util/ParrotVariant.java @@ -0,0 +1,10 @@ +package lol.pyr.znpcsplus.util; + +public enum ParrotVariant { + RED_BLUE, + BLUE, + GREEN, + YELLOW_BLUE, + GRAY, + NONE // only used to set empty nbt compound +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index d0ce041..7df4727 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -242,6 +242,7 @@ public class ZNpcsPlus extends JavaPlugin { versions.put(ServerVersion.V_1_9, LazyLoader.of(V1_9MetadataFactory::new)); versions.put(ServerVersion.V_1_10, LazyLoader.of(V1_10MetadataFactory::new)); versions.put(ServerVersion.V_1_11, LazyLoader.of(V1_11MetadataFactory::new)); + versions.put(ServerVersion.V_1_12, LazyLoader.of(V1_12MetadataFactory::new)); versions.put(ServerVersion.V_1_13, LazyLoader.of(V1_13MetadataFactory::new)); versions.put(ServerVersion.V_1_14, LazyLoader.of(V1_14MetadataFactory::new)); versions.put(ServerVersion.V_1_15, LazyLoader.of(V1_15MetadataFactory::new)); @@ -282,6 +283,7 @@ public class ZNpcsPlus extends JavaPlugin { registerEnumParser(manager, DyeColor.class, incorrectUsageMessage); registerEnumParser(manager, CatVariant.class, incorrectUsageMessage); registerEnumParser(manager, CreeperState.class, incorrectUsageMessage); + registerEnumParser(manager, ParrotVariant.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 23f422b..80b7bed 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 @@ -14,6 +14,7 @@ import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; import lol.pyr.znpcsplus.util.NpcPose; import lol.pyr.znpcsplus.util.Vector3f; +import lol.pyr.znpcsplus.util.ParrotVariant; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Color; @@ -60,6 +61,10 @@ public class PropertySetCommand implements CommandHandler { value = Color.BLACK; valueName = "NONE"; } + else if (type == ParrotVariant.class && context.argSize() < 1 && npc.getProperty(property) != null) { + value = ParrotVariant.NONE; + valueName = "NONE"; + } else { value = context.parse(type); valueName = String.valueOf(value); @@ -86,6 +91,7 @@ public class PropertySetCommand implements CommandHandler { if (type == DyeColor.class) return context.suggestEnum(DyeColor.values()); if (type == CatVariant.class) return context.suggestEnum(CatVariant.values()); if (type == CreeperState.class) return context.suggestEnum(CreeperState.values()); + if (type == ParrotVariant.class) return context.suggestEnum(ParrotVariant.values()); } } return Collections.emptyList(); 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 f7411cc..38c7544 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -10,6 +10,7 @@ import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; import lol.pyr.znpcsplus.util.NpcPose; import lol.pyr.znpcsplus.util.Vector3f; +import lol.pyr.znpcsplus.util.ParrotVariant; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Color; @@ -39,6 +40,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerEnumSerializer(DyeColor.class); registerEnumSerializer(CatVariant.class); registerEnumSerializer(CreeperState.class); + registerEnumSerializer(ParrotVariant.class); registerType("glow", NamedTextColor.class); registerType("fire", false); @@ -72,6 +74,8 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { registerType("skin_left_leg", true); registerType("skin_right_leg", true); registerType("skin_hat", true); + registerType("shoulder_entity_left", ParrotVariant.NONE); + registerType("shoulder_entity_right", ParrotVariant.NONE); // End Crystal registerType("beam_target", null); // TODO: Make a block pos class for this diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/ParrotNBTCompound.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/ParrotNBTCompound.java new file mode 100644 index 0000000..13eacf9 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/ParrotNBTCompound.java @@ -0,0 +1,21 @@ +package lol.pyr.znpcsplus.entity; + +import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; +import com.github.retrooper.packetevents.protocol.nbt.NBTInt; +import com.github.retrooper.packetevents.protocol.nbt.NBTString; +import lol.pyr.znpcsplus.util.ParrotVariant; + +// Not sure where to put this or even if it's needed +public class ParrotNBTCompound { + private final NBTCompound tag = new NBTCompound(); + + public ParrotNBTCompound(ParrotVariant variant) { + tag.setTag("id", new NBTString("minecraft:parrot")); + tag.setTag("Variant", new NBTInt(variant.ordinal())); + // other tags if needed, idk + } + + public NBTCompound getTag() { + return tag; + } +} 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 33e03a2..82bf431 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -4,6 +4,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose; import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; +import lol.pyr.znpcsplus.util.ParrotVariant; import lol.pyr.znpcsplus.util.Vector3f; import net.kyori.adventure.text.Component; import org.bukkit.DyeColor; @@ -22,7 +23,6 @@ import org.bukkit.DyeColor; * 1.18-1.19 ... */ public interface MetadataFactory { - EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat); EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy); EntityData silent(boolean enabled); EntityData name(Component name); @@ -34,6 +34,11 @@ public interface MetadataFactory { EntityData potionColor(int color); EntityData potionAmbient(boolean ambient); + // Player + EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat); + EntityData shoulderEntityLeft(ParrotVariant variant); + EntityData shoulderEntityRight(ParrotVariant variant); + // Armor Stand EntityData armorStandProperties(boolean small, boolean arms, boolean noBasePlate); EntityData armorStandHeadRotation(Vector3f headRotation); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java new file mode 100644 index 0000000..a60b0fc --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_12MetadataFactory.java @@ -0,0 +1,27 @@ +package lol.pyr.znpcsplus.metadata; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import com.github.retrooper.packetevents.protocol.nbt.NBTCompound; +import lol.pyr.znpcsplus.entity.ParrotNBTCompound; +import lol.pyr.znpcsplus.util.ParrotVariant; + +public class V1_12MetadataFactory extends V1_11MetadataFactory { + @Override + public EntityData shoulderEntityLeft(ParrotVariant variant) { + return createShoulderEntityLeft(15, variant); + } + + public EntityData createShoulderEntityLeft(int index, ParrotVariant variant) { + return newEntityData(index, EntityDataTypes.NBT, variant == ParrotVariant.NONE ? new NBTCompound() : new ParrotNBTCompound(variant).getTag()); + } + + @Override + public EntityData shoulderEntityRight(ParrotVariant variant) { + return createShoulderEntityRight(16, variant); + } + + public EntityData createShoulderEntityRight(int index, ParrotVariant variant) { + return newEntityData(index, EntityDataTypes.NBT, variant == ParrotVariant.NONE ? new NBTCompound() : new ParrotNBTCompound(variant).getTag()); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13MetadataFactory.java index 10606f0..854549c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13MetadataFactory.java @@ -7,7 +7,7 @@ import net.kyori.adventure.text.Component; import java.util.Optional; -public class V1_13MetadataFactory extends V1_11MetadataFactory { +public class V1_13MetadataFactory extends V1_12MetadataFactory { @Override public EntityData name(Component name) { return newEntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.of(AdventureSerializer.getGsonSerializer().serialize(name))); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java index 569b1af..c615182 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java @@ -5,6 +5,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose; import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; +import lol.pyr.znpcsplus.util.ParrotVariant; import lol.pyr.znpcsplus.util.Vector3f; import org.bukkit.DyeColor; @@ -34,6 +35,16 @@ public class V1_14MetadataFactory extends V1_13MetadataFactory { return newEntityData(10, EntityDataTypes.BOOLEAN, ambient); } + @Override + public EntityData shoulderEntityLeft(ParrotVariant variant) { + return createShoulderEntityLeft(17, variant); + } + + @Override + public EntityData shoulderEntityRight(ParrotVariant variant) { + return createShoulderEntityRight(18, variant); + } + @Override public EntityData armorStandProperties(boolean small, boolean arms, boolean noBasePlate) { return newEntityData(13, EntityDataTypes.BYTE, (byte) ((small ? 0x01 : 0) | (arms ? 0x04 : 0) | (noBasePlate ? 0x08 : 0))); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java index 617044b..411869e 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java @@ -4,10 +4,21 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; +import lol.pyr.znpcsplus.util.ParrotVariant; import lol.pyr.znpcsplus.util.Vector3f; import org.bukkit.DyeColor; public class V1_15MetadataFactory extends V1_14MetadataFactory { + @Override + public EntityData shoulderEntityLeft(ParrotVariant variant) { + return createShoulderEntityLeft(18, variant); + } + + @Override + public EntityData shoulderEntityRight(ParrotVariant variant) { + return createShoulderEntityRight(19, variant); + } + @Override public EntityData armorStandProperties(boolean small, boolean arms, boolean noBasePlate) { return newEntityData(14, EntityDataTypes.BYTE, (byte) ((small ? 0x01 : 0) | (arms ? 0x04 : 0) | (!noBasePlate ? 0x08 : 0))); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java index 165163e..741dbf2 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java @@ -4,6 +4,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; +import lol.pyr.znpcsplus.util.ParrotVariant; import lol.pyr.znpcsplus.util.Vector3f; import org.bukkit.DyeColor; @@ -38,6 +39,16 @@ public class V1_17MetadataFactory extends V1_16MetadataFactory { return newEntityData(11, EntityDataTypes.BOOLEAN, ambient); } + @Override + public EntityData shoulderEntityLeft(ParrotVariant variant) { + return createShoulderEntityLeft(19, variant); + } + + @Override + public EntityData shoulderEntityRight(ParrotVariant variant) { + return createShoulderEntityRight(20, variant); + } + @Override public EntityData armorStandProperties(boolean small, boolean arms, boolean noBasePlate) { return newEntityData(15, EntityDataTypes.BYTE, (byte) ((small ? 0x01 : 0) | (arms ? 0x04 : 0) | (noBasePlate ? 0x08 : 0))); 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 c6247f9..e5c0e39 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 @@ -7,6 +7,7 @@ import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose; import com.github.retrooper.packetevents.util.adventure.AdventureSerializer; import lol.pyr.znpcsplus.util.CatVariant; import lol.pyr.znpcsplus.util.CreeperState; +import lol.pyr.znpcsplus.util.ParrotVariant; import lol.pyr.znpcsplus.util.Vector3f; import net.kyori.adventure.text.Component; import org.bukkit.DyeColor; @@ -62,6 +63,16 @@ public class V1_8MetadataFactory implements MetadataFactory { return newEntityData(8, EntityDataTypes.BYTE, (byte) (ambient ? 1 : 0)); } + @Override + public EntityData shoulderEntityLeft(ParrotVariant variant) { + throw new UnsupportedOperationException("The shoulder entity data isn't supported on this version"); + } + + @Override + public EntityData shoulderEntityRight(ParrotVariant variant) { + throw new UnsupportedOperationException("The shoulder entity data isn't supported on this version"); + } + @Override public EntityData armorStandProperties(boolean small, boolean arms, boolean noBasePlate) { return newEntityData(10, EntityDataTypes.BYTE, (byte) ((small ? 0x01 : 0) | (arms ? 0x04 : 0) | (noBasePlate ? 0x08 : 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 235ccde..bad1262 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -36,7 +36,7 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { register(builder(p, "player", EntityTypes.PLAYER) .setHologramOffset(-0.15D) .addEquipmentProperties() - .addProperties("skin_cape", "skin_jacket", "skin_left_sleeve", "skin_right_sleeve", "skin_left_leg", "skin_right_leg", "skin_hat")); + .addProperties("skin_cape", "skin_jacket", "skin_left_sleeve", "skin_right_sleeve", "skin_left_leg", "skin_right_leg", "skin_hat", "shoulder_entity_left", "shoulder_entity_right")); // Most hologram offsets generated using Entity#getHeight() in 1.19.4 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 567e1b8..4e8759b 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 @@ -149,6 +149,8 @@ public class V1_8PacketFactory implements PacketFactory { properties.getProperty(propertyRegistry.getByName("skin_right_leg", Boolean.class)), properties.getProperty(propertyRegistry.getByName("skin_hat", Boolean.class)) )); + add(data, metadataFactory.shoulderEntityLeft(properties.getProperty(propertyRegistry.getByName("shoulder_entity_left", ParrotVariant.class)))); + add(data, metadataFactory.shoulderEntityRight(properties.getProperty(propertyRegistry.getByName("shoulder_entity_right", ParrotVariant.class)))); } else if (entity.getType().equals(EntityTypes.ARMOR_STAND)) { add(data, metadataFactory.armorStandProperties( From fbc3be625994b5ac8dbc2f7685d31a00e537f21a Mon Sep 17 00:00:00 2001 From: D3v1s0m <49519439+D3v1s0m@users.noreply.github.com> Date: Sun, 2 Jul 2023 15:35:36 +0530 Subject: [PATCH 4/4] filter npcs in same world only for near command. fixes #69 --- .../main/java/lol/pyr/znpcsplus/commands/NearCommand.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/commands/NearCommand.java b/plugin/src/main/java/lol/pyr/znpcsplus/commands/NearCommand.java index 863e8a8..f9588cc 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/commands/NearCommand.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/commands/NearCommand.java @@ -25,9 +25,10 @@ public class NearCommand implements CommandHandler { double radius = Math.pow(raw, 2); String npcs = npcRegistry.getAllModifiable().stream() - .filter(entry -> entry.getNpc().getBukkitLocation().distanceSquared(player.getLocation()) < radius) - .map(NpcEntryImpl::getId) - .collect(Collectors.joining(", ")); + .filter(entry -> entry.getNpc().getWorld().equals(player.getWorld())) + .filter(entry -> entry.getNpc().getBukkitLocation().distanceSquared(player.getLocation()) < radius) + .map(NpcEntryImpl::getId) + .collect(Collectors.joining(", ")); if (npcs.length() == 0) context.halt(Component.text("There are no npcs within " + raw + " blocks around you.", NamedTextColor.RED)); context.send(Component.text("All NPCs that are within " + raw + " blocks from you:", NamedTextColor.GREEN).appendNewline()