diff --git a/main/pom.xml b/main/pom.xml
index a79ded8e8..75791292e 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -46,7 +46,7 @@
viaversion-repo
https://repo.viaversion.com
-
+
@@ -55,7 +55,7 @@
${craftbukkit.version}
jar
provided
-
+
org.powermock
powermock-module-junit4
diff --git a/main/src/main/java/net/citizensnpcs/trait/SkinTrait.java b/main/src/main/java/net/citizensnpcs/trait/SkinTrait.java
index 342203c5c..a9066516a 100644
--- a/main/src/main/java/net/citizensnpcs/trait/SkinTrait.java
+++ b/main/src/main/java/net/citizensnpcs/trait/SkinTrait.java
@@ -146,10 +146,10 @@ public class SkinTrait extends Trait {
}
/**
- * Sets the skin data directly, respawning the NPC if spawned
+ * Sets the skin data directly, respawning the NPC if spawned.
*
* @param skinName
- * Skin name, for caching purposes
+ * Skin name or cache key
* @param signature
* {@link #getSignature()}
* @param data
diff --git a/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java b/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java
index 56851002e..d4bda2a88 100644
--- a/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java
+++ b/main/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java
@@ -238,7 +238,7 @@ public class LinearWaypointProvider implements EnumerableWaypointProvider {
};
}
- private final class LinearWaypointEditor extends WaypointEditor {
+ private class LinearWaypointEditor extends WaypointEditor {
Conversation conversation;
boolean editing = true;
EntityMarkers markers;
@@ -324,12 +324,9 @@ public class LinearWaypointProvider implements EnumerableWaypointProvider {
String message = event.getMessage();
if (message.equalsIgnoreCase("triggers")) {
event.setCancelled(true);
- Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
- @Override
- public void run() {
- conversation = TriggerEditPrompt.start(player, LinearWaypointEditor.this);
- conversation.addConversationAbandonedListener(e -> conversation = null);
- }
+ Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), () -> {
+ conversation = TriggerEditPrompt.start(player, LinearWaypointEditor.this);
+ conversation.addConversationAbandonedListener(e -> conversation = null);
});
} else if (message.equalsIgnoreCase("clear")) {
event.setCancelled(true);
diff --git a/main/src/main/java/net/citizensnpcs/util/EntityPacketTracker.java b/main/src/main/java/net/citizensnpcs/util/EntityPacketTracker.java
index eca93b8e6..4706e6eda 100644
--- a/main/src/main/java/net/citizensnpcs/util/EntityPacketTracker.java
+++ b/main/src/main/java/net/citizensnpcs/util/EntityPacketTracker.java
@@ -1,13 +1,90 @@
package net.citizensnpcs.util;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
import java.util.function.Consumer;
import org.bukkit.entity.Player;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
public interface EntityPacketTracker extends Runnable {
public void link(Player player);
public void unlink(Player player);
public void unlinkAll(Consumer callback);
+
+ public static class PacketAggregator {
+ private final Set connections = Sets.newHashSet();
+ private List