From 475c49c7e224e4043e324c1959d9918a1dc10a85 Mon Sep 17 00:00:00 2001 From: AlexDev_ Date: Tue, 13 Feb 2024 22:48:34 +0100 Subject: [PATCH 1/7] Fixed itemstack/equipment error Fixed packet events error Added blacklist api methods --- .../java/lol/pyr/znpcsplus/api/npc/Npc.java | 22 +++++++++++++++++++ plugin/build.gradle | 2 +- .../lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java | 4 ++-- .../java/lol/pyr/znpcsplus/npc/NpcImpl.java | 12 ++++++++-- .../pyr/znpcsplus/tasks/NpcProcessorTask.java | 5 +++++ .../java/lol/pyr/znpcsplus/util/Viewable.java | 16 ++++++++++++++ 6 files changed, 56 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java index 1c25a8d..740a2f3 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java @@ -100,6 +100,28 @@ public interface Npc extends PropertyHolder { */ void respawn(Player player); + /** + * Blacklists a player from sending packets for this NPC + * This means that the run task won't send packets to the player + * + * @param player The player to be blacklisted + */ + void blacklist(Player player); + + /** + * Removes a player from the blacklist, allowing packets to be sent to them for this NPC. + * + * @param player The player to be removed from the blacklist + */ + void unblacklist(Player player); + + /** + * Gets if a player is blacklisted from sending packets for this NPC + * @param player The player to check + * @return If the player is blacklisted + */ + boolean isBlacklisted(Player player); + /** * Sets the head rotation of this NPC for a player * @param player The {@link Player} to set the head rotation for diff --git a/plugin/build.gradle b/plugin/build.gradle index f8f5ae6..1c7baa0 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -20,7 +20,7 @@ dependencies { compileOnly "com.google.code.gson:gson:2.10.1" // JSON parsing compileOnly "org.bstats:bstats-bukkit:3.0.2" // Plugin stats compileOnly "me.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker - compileOnly "com.github.retrooper.packetevents:spigot:2.1.0" // Packets + compileOnly "com.github.retrooper.packetevents:spigot:2.2.0" // Packets compileOnly "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs compileOnly "lol.pyr:director-adventure:2.1.1" // Commands diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java index f5dc5c1..eb5a25c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java @@ -54,8 +54,8 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { loader.loadLibrary("me.robertlit", "SpigotResourcesAPI", "2.0", "https://repo.pyr.lol/releases"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-core", "1.2.1"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-ext-snakeyaml", "1.2.1"); 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 445fc1f..3e421e6 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java @@ -1,6 +1,7 @@ package lol.pyr.znpcsplus.npc; import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import io.github.retrooper.packetevents.util.SpigotConversionUtil; import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.npc.Npc; import lol.pyr.znpcsplus.api.npc.NpcType; @@ -18,6 +19,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.util.*; import java.util.stream.Collectors; @@ -148,13 +150,19 @@ public class NpcImpl extends Viewable implements Npc { @Override public void setProperty(EntityProperty key, T value) { - setProperty((EntityPropertyImpl) key, value ); + setProperty((EntityPropertyImpl) key, value); } public void setProperty(EntityPropertyImpl key, T value) { if (key == null) return; if (value == null || value.equals(key.getDefaultValue())) propertyMap.remove(key); - else propertyMap.put(key, value); + if (value instanceof ItemStack) { + ItemStack item = (ItemStack) value; + com.github.retrooper.packetevents.protocol.item.ItemStack packetItem = SpigotConversionUtil.fromBukkitItemStack(item); + propertyMap.put(key, packetItem); + } else { + propertyMap.put(key, value); + } UNSAFE_refreshProperty(key); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java index f92838d..a077274 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java @@ -47,6 +47,11 @@ public class NpcProcessorTask extends BukkitRunnable { if (npc.isVisibleTo(player)) npc.hide(player); continue; } + + if (npc.isBlacklisted(player)) { + continue; + } + double distance = player.getLocation().distanceSquared(npc.getBukkitLocation()); // visibility diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java index 27e4bad..78978c1 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java @@ -22,6 +22,7 @@ public abstract class Viewable { } private final Set viewers = ConcurrentHashMap.newKeySet(); + private final Set blacklisted = ConcurrentHashMap.newKeySet(); public Viewable() { all.add(new WeakReference<>(this)); @@ -30,6 +31,7 @@ public abstract class Viewable { public void delete() { UNSAFE_hideAll(); viewers.clear(); + blacklisted.clear(); } public void respawn() { @@ -55,8 +57,22 @@ public abstract class Viewable { UNSAFE_hide(player); } + public void blacklist(Player player) { + blacklisted.add(player); + hide(player); + } + + public void unblacklist(Player player) { + blacklisted.remove(player); + } + + public boolean isBlacklisted(Player player) { + return blacklisted.contains(player); + } + public void UNSAFE_removeViewer(Player player) { viewers.remove(player); + blacklisted.remove(player); } protected void UNSAFE_hideAll() { From e7d12f81922a430ae59eefc43b851cf77ede342b Mon Sep 17 00:00:00 2001 From: AlexDev_ Date: Tue, 13 Feb 2024 22:48:34 +0100 Subject: [PATCH 2/7] Fixed itemstack/equipment error Fixed packet events error Added blacklist api methods --- .../java/lol/pyr/znpcsplus/api/npc/Npc.java | 22 +++++++++++++++++++ plugin/build.gradle | 2 +- .../lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java | 4 ++-- .../java/lol/pyr/znpcsplus/npc/NpcImpl.java | 12 ++++++++-- .../pyr/znpcsplus/tasks/NpcProcessorTask.java | 5 +++++ .../java/lol/pyr/znpcsplus/util/Viewable.java | 16 ++++++++++++++ 6 files changed, 56 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java index 1c25a8d..740a2f3 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java @@ -100,6 +100,28 @@ public interface Npc extends PropertyHolder { */ void respawn(Player player); + /** + * Blacklists a player from sending packets for this NPC + * This means that the run task won't send packets to the player + * + * @param player The player to be blacklisted + */ + void blacklist(Player player); + + /** + * Removes a player from the blacklist, allowing packets to be sent to them for this NPC. + * + * @param player The player to be removed from the blacklist + */ + void unblacklist(Player player); + + /** + * Gets if a player is blacklisted from sending packets for this NPC + * @param player The player to check + * @return If the player is blacklisted + */ + boolean isBlacklisted(Player player); + /** * Sets the head rotation of this NPC for a player * @param player The {@link Player} to set the head rotation for diff --git a/plugin/build.gradle b/plugin/build.gradle index f8f5ae6..1c7baa0 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -20,7 +20,7 @@ dependencies { compileOnly "com.google.code.gson:gson:2.10.1" // JSON parsing compileOnly "org.bstats:bstats-bukkit:3.0.2" // Plugin stats compileOnly "me.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker - compileOnly "com.github.retrooper.packetevents:spigot:2.1.0" // Packets + compileOnly "com.github.retrooper.packetevents:spigot:2.2.0" // Packets compileOnly "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs compileOnly "lol.pyr:director-adventure:2.1.1" // Commands diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java index f5dc5c1..eb5a25c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java @@ -54,8 +54,8 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { loader.loadLibrary("me.robertlit", "SpigotResourcesAPI", "2.0", "https://repo.pyr.lol/releases"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-core", "1.2.1"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-ext-snakeyaml", "1.2.1"); 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 445fc1f..3e421e6 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java @@ -1,6 +1,7 @@ package lol.pyr.znpcsplus.npc; import com.github.retrooper.packetevents.protocol.entity.data.EntityData; +import io.github.retrooper.packetevents.util.SpigotConversionUtil; import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.npc.Npc; import lol.pyr.znpcsplus.api.npc.NpcType; @@ -18,6 +19,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.util.*; import java.util.stream.Collectors; @@ -148,13 +150,19 @@ public class NpcImpl extends Viewable implements Npc { @Override public void setProperty(EntityProperty key, T value) { - setProperty((EntityPropertyImpl) key, value ); + setProperty((EntityPropertyImpl) key, value); } public void setProperty(EntityPropertyImpl key, T value) { if (key == null) return; if (value == null || value.equals(key.getDefaultValue())) propertyMap.remove(key); - else propertyMap.put(key, value); + if (value instanceof ItemStack) { + ItemStack item = (ItemStack) value; + com.github.retrooper.packetevents.protocol.item.ItemStack packetItem = SpigotConversionUtil.fromBukkitItemStack(item); + propertyMap.put(key, packetItem); + } else { + propertyMap.put(key, value); + } UNSAFE_refreshProperty(key); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java index f92838d..a077274 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java @@ -47,6 +47,11 @@ public class NpcProcessorTask extends BukkitRunnable { if (npc.isVisibleTo(player)) npc.hide(player); continue; } + + if (npc.isBlacklisted(player)) { + continue; + } + double distance = player.getLocation().distanceSquared(npc.getBukkitLocation()); // visibility diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java index 27e4bad..78978c1 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java @@ -22,6 +22,7 @@ public abstract class Viewable { } private final Set viewers = ConcurrentHashMap.newKeySet(); + private final Set blacklisted = ConcurrentHashMap.newKeySet(); public Viewable() { all.add(new WeakReference<>(this)); @@ -30,6 +31,7 @@ public abstract class Viewable { public void delete() { UNSAFE_hideAll(); viewers.clear(); + blacklisted.clear(); } public void respawn() { @@ -55,8 +57,22 @@ public abstract class Viewable { UNSAFE_hide(player); } + public void blacklist(Player player) { + blacklisted.add(player); + hide(player); + } + + public void unblacklist(Player player) { + blacklisted.remove(player); + } + + public boolean isBlacklisted(Player player) { + return blacklisted.contains(player); + } + public void UNSAFE_removeViewer(Player player) { viewers.remove(player); + blacklisted.remove(player); } protected void UNSAFE_hideAll() { From a2400b42f563b3411a3695a44191944de2e75c2e Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 16 Feb 2024 16:54:07 +0100 Subject: [PATCH 3/7] revert blacklist api --- .../java/lol/pyr/znpcsplus/api/npc/Npc.java | 22 ------------------- .../pyr/znpcsplus/tasks/NpcProcessorTask.java | 5 ----- .../java/lol/pyr/znpcsplus/util/Viewable.java | 16 -------------- 3 files changed, 43 deletions(-) diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java index 740a2f3..1c25a8d 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java @@ -100,28 +100,6 @@ public interface Npc extends PropertyHolder { */ void respawn(Player player); - /** - * Blacklists a player from sending packets for this NPC - * This means that the run task won't send packets to the player - * - * @param player The player to be blacklisted - */ - void blacklist(Player player); - - /** - * Removes a player from the blacklist, allowing packets to be sent to them for this NPC. - * - * @param player The player to be removed from the blacklist - */ - void unblacklist(Player player); - - /** - * Gets if a player is blacklisted from sending packets for this NPC - * @param player The player to check - * @return If the player is blacklisted - */ - boolean isBlacklisted(Player player); - /** * Sets the head rotation of this NPC for a player * @param player The {@link Player} to set the head rotation for diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java index a077274..f92838d 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java @@ -47,11 +47,6 @@ public class NpcProcessorTask extends BukkitRunnable { if (npc.isVisibleTo(player)) npc.hide(player); continue; } - - if (npc.isBlacklisted(player)) { - continue; - } - double distance = player.getLocation().distanceSquared(npc.getBukkitLocation()); // visibility diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java index 78978c1..27e4bad 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java @@ -22,7 +22,6 @@ public abstract class Viewable { } private final Set viewers = ConcurrentHashMap.newKeySet(); - private final Set blacklisted = ConcurrentHashMap.newKeySet(); public Viewable() { all.add(new WeakReference<>(this)); @@ -31,7 +30,6 @@ public abstract class Viewable { public void delete() { UNSAFE_hideAll(); viewers.clear(); - blacklisted.clear(); } public void respawn() { @@ -57,22 +55,8 @@ public abstract class Viewable { UNSAFE_hide(player); } - public void blacklist(Player player) { - blacklisted.add(player); - hide(player); - } - - public void unblacklist(Player player) { - blacklisted.remove(player); - } - - public boolean isBlacklisted(Player player) { - return blacklisted.contains(player); - } - public void UNSAFE_removeViewer(Player player) { viewers.remove(player); - blacklisted.remove(player); } protected void UNSAFE_hideAll() { From 00de9ef63661675179e588cbcd974f5d89b811e4 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 16 Feb 2024 16:55:07 +0100 Subject: [PATCH 4/7] revert packetevents update --- plugin/build.gradle | 2 +- .../src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/build.gradle b/plugin/build.gradle index 1c7baa0..f8f5ae6 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -20,7 +20,7 @@ dependencies { compileOnly "com.google.code.gson:gson:2.10.1" // JSON parsing compileOnly "org.bstats:bstats-bukkit:3.0.2" // Plugin stats compileOnly "me.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker - compileOnly "com.github.retrooper.packetevents:spigot:2.2.0" // Packets + compileOnly "com.github.retrooper.packetevents:spigot:2.1.0" // Packets compileOnly "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs compileOnly "lol.pyr:director-adventure:2.1.1" // Commands diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java index eb5a25c..f5dc5c1 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java @@ -54,8 +54,8 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { loader.loadLibrary("me.robertlit", "SpigotResourcesAPI", "2.0", "https://repo.pyr.lol/releases"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-core", "1.2.1"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-ext-snakeyaml", "1.2.1"); From c4bb24c8889fd04eef8093f1203a11f84bab0884 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 16 Feb 2024 17:29:44 +0100 Subject: [PATCH 5/7] fix itemstack properties in the api --- .../znpcsplus/api/entity/PropertyHolder.java | 13 +++++++++++- .../pyr/znpcsplus/entity/PacketEntity.java | 6 ++++++ .../pyr/znpcsplus/hologram/HologramLine.java | 6 ++++++ .../java/lol/pyr/znpcsplus/npc/NpcImpl.java | 21 ++++++++++++------- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/entity/PropertyHolder.java b/api/src/main/java/lol/pyr/znpcsplus/api/entity/PropertyHolder.java index cd10b37..65c34a1 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/entity/PropertyHolder.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/entity/PropertyHolder.java @@ -1,5 +1,7 @@ package lol.pyr.znpcsplus.api.entity; +import org.bukkit.inventory.ItemStack; + import java.util.Set; /** @@ -32,10 +34,19 @@ public interface PropertyHolder { */ void setProperty(EntityProperty key, T value); + /** + * Weird fix which is sadly required in order to not decrease performance + * when using item properties, read https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764 + * + * @param key Unique key representing a property + * @param value The value to assign to the property key on this holder + */ + void setItemProperty(EntityProperty key, ItemStack value); + /** * Method used to get a set of all of the property keys that this holder has a value for * - * @return List of property keys + * @return Set of property keys */ Set> getAppliedProperties(); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java index a827221..e198779 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java @@ -10,6 +10,7 @@ import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.reflection.Reflections; import lol.pyr.znpcsplus.util.NpcLocation; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.util.Collection; import java.util.Set; @@ -97,6 +98,11 @@ public class PacketEntity implements PropertyHolder { properties.setProperty(key, value); } + @Override + public void setItemProperty(EntityProperty key, ItemStack value) { + properties.setItemProperty(key, value); + } + @Override public Set> getAppliedProperties() { return properties.getAppliedProperties(); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java index 9bb695f..f2652f0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java @@ -7,6 +7,7 @@ import lol.pyr.znpcsplus.entity.PacketEntity; import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.util.NpcLocation; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.util.Collection; import java.util.HashSet; @@ -70,6 +71,11 @@ public class HologramLine implements PropertyHolder { throw new UnsupportedOperationException("Can't set properties on a hologram line"); } + @Override + public void setItemProperty(EntityProperty key, ItemStack value) { + throw new UnsupportedOperationException("Can't set properties on a hologram line"); + } + @Override public Set> getAppliedProperties() { return properties; 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 3e421e6..3b17eee 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcImpl.java @@ -148,21 +148,26 @@ public class NpcImpl extends Viewable implements Npc { return propertyMap.containsKey((EntityPropertyImpl) key); } + @SuppressWarnings("unchecked") @Override public void setProperty(EntityProperty key, T value) { - setProperty((EntityPropertyImpl) key, value); + // See https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764 + Object val = value; + if (val instanceof ItemStack) val = SpigotConversionUtil.fromBukkitItemStack((ItemStack) val); + + setProperty((EntityPropertyImpl) key, (T) val); + } + + @SuppressWarnings("unchecked") + @Override + public void setItemProperty(EntityProperty key, ItemStack value) { + setProperty((EntityPropertyImpl) key, SpigotConversionUtil.fromBukkitItemStack(value)); } public void setProperty(EntityPropertyImpl key, T value) { if (key == null) return; if (value == null || value.equals(key.getDefaultValue())) propertyMap.remove(key); - if (value instanceof ItemStack) { - ItemStack item = (ItemStack) value; - com.github.retrooper.packetevents.protocol.item.ItemStack packetItem = SpigotConversionUtil.fromBukkitItemStack(item); - propertyMap.put(key, packetItem); - } else { - propertyMap.put(key, value); - } + else propertyMap.put(key, value); UNSAFE_refreshProperty(key); } From 22108fd6d9ebe5c559dda2515e2880175f5c134c Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 16 Feb 2024 16:54:07 +0100 Subject: [PATCH 6/7] revert blacklist api --- .../java/lol/pyr/znpcsplus/api/npc/Npc.java | 22 ------------------- .../pyr/znpcsplus/tasks/NpcProcessorTask.java | 5 ----- .../java/lol/pyr/znpcsplus/util/Viewable.java | 16 -------------- 3 files changed, 43 deletions(-) diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java index 740a2f3..1c25a8d 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/Npc.java @@ -100,28 +100,6 @@ public interface Npc extends PropertyHolder { */ void respawn(Player player); - /** - * Blacklists a player from sending packets for this NPC - * This means that the run task won't send packets to the player - * - * @param player The player to be blacklisted - */ - void blacklist(Player player); - - /** - * Removes a player from the blacklist, allowing packets to be sent to them for this NPC. - * - * @param player The player to be removed from the blacklist - */ - void unblacklist(Player player); - - /** - * Gets if a player is blacklisted from sending packets for this NPC - * @param player The player to check - * @return If the player is blacklisted - */ - boolean isBlacklisted(Player player); - /** * Sets the head rotation of this NPC for a player * @param player The {@link Player} to set the head rotation for diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java index a077274..f92838d 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcProcessorTask.java @@ -47,11 +47,6 @@ public class NpcProcessorTask extends BukkitRunnable { if (npc.isVisibleTo(player)) npc.hide(player); continue; } - - if (npc.isBlacklisted(player)) { - continue; - } - double distance = player.getLocation().distanceSquared(npc.getBukkitLocation()); // visibility diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java index 78978c1..27e4bad 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java @@ -22,7 +22,6 @@ public abstract class Viewable { } private final Set viewers = ConcurrentHashMap.newKeySet(); - private final Set blacklisted = ConcurrentHashMap.newKeySet(); public Viewable() { all.add(new WeakReference<>(this)); @@ -31,7 +30,6 @@ public abstract class Viewable { public void delete() { UNSAFE_hideAll(); viewers.clear(); - blacklisted.clear(); } public void respawn() { @@ -57,22 +55,8 @@ public abstract class Viewable { UNSAFE_hide(player); } - public void blacklist(Player player) { - blacklisted.add(player); - hide(player); - } - - public void unblacklist(Player player) { - blacklisted.remove(player); - } - - public boolean isBlacklisted(Player player) { - return blacklisted.contains(player); - } - public void UNSAFE_removeViewer(Player player) { viewers.remove(player); - blacklisted.remove(player); } protected void UNSAFE_hideAll() { From 1bfdec206e814b135f1ab13987dc01a8955233d2 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 16 Feb 2024 16:55:07 +0100 Subject: [PATCH 7/7] revert packetevents update --- plugin/build.gradle | 2 +- .../src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/build.gradle b/plugin/build.gradle index 1c7baa0..f8f5ae6 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -20,7 +20,7 @@ dependencies { compileOnly "com.google.code.gson:gson:2.10.1" // JSON parsing compileOnly "org.bstats:bstats-bukkit:3.0.2" // Plugin stats compileOnly "me.robertlit:SpigotResourcesAPI:2.0" // Spigot API wrapper for update checker - compileOnly "com.github.retrooper.packetevents:spigot:2.2.0" // Packets + compileOnly "com.github.retrooper.packetevents:spigot:2.1.0" // Packets compileOnly "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" // Configs compileOnly "lol.pyr:director-adventure:2.1.1" // Commands diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java index eb5a25c..f5dc5c1 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java @@ -54,8 +54,8 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { loader.loadLibrary("me.robertlit", "SpigotResourcesAPI", "2.0", "https://repo.pyr.lol/releases"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.2.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); + loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.1.0", "https://repo.codemc.io/repository/maven-releases/"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-core", "1.2.1"); loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-ext-snakeyaml", "1.2.1");