diff --git a/.idea/PhantomSMP.iml b/.idea/PhantomSMP.iml
new file mode 100644
index 0000000..78b2cc5
--- /dev/null
+++ b/.idea/PhantomSMP.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..baaea04
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 8ad78db..0306467 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,13 +28,13 @@
org.bukkit
bukkit
- 1.13.1-R0.1-SNAPSHOT
+ 1.13.2-R0.1-SNAPSHOT
provided
org.bstats
bstats-bukkit
- 1.4
+ 1.5
compile
diff --git a/src/main/java/com/simonorj/mc/phantomsmp/PhantomListener.java b/src/main/java/com/simonorj/mc/phantomsmp/PhantomListener.java
index e440388..39aaee1 100644
--- a/src/main/java/com/simonorj/mc/phantomsmp/PhantomListener.java
+++ b/src/main/java/com/simonorj/mc/phantomsmp/PhantomListener.java
@@ -17,6 +17,7 @@ import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.world.ChunkLoadEvent;
+import org.bukkit.event.world.ChunkUnloadEvent;
import java.util.*;
@@ -115,6 +116,13 @@ public class PhantomListener implements Listener {
}
}
+ private void removePhantom(Phantom phantom) {
+ Player p = phantomPlayerMap.remove(phantom);
+ if (p == null)
+ return;
+ playerPhantomMap.get(p).remove(phantom);
+ }
+
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent e) {
playerPhantomMap.put(e.getPlayer(), new LinkedHashSet<>());
@@ -176,17 +184,22 @@ public class PhantomListener implements Listener {
targeting((Phantom) ent, null, null);
}
+ // Untrack phantoms in unloaded chunks
+ @EventHandler
+ public void onPhantomInUnloadedChunk(ChunkUnloadEvent e) {
+ if (e.getWorld().getEnvironment() != World.Environment.NORMAL)
+ return;
+
+ for (Entity ent : e.getChunk().getEntities())
+ if (ent instanceof Phantom)
+ removePhantom((Phantom) ent);
+ }
+
@EventHandler
public void onPhantomDeath(EntityDeathEvent e) {
if (!(e.getEntity() instanceof Phantom))
return;
- Phantom phantom = (Phantom) e.getEntity();
-
- Player p = phantomPlayerMap.remove(phantom);
- if (p == null)
- return;
-
- playerPhantomMap.get(p).remove(phantom);
+ removePhantom((Phantom) e.getEntity());
}
}