From cf04ee5a5dd51af2fdeb06f38edfbd5578a77c11 Mon Sep 17 00:00:00 2001 From: asofold Date: Thu, 29 Dec 2016 14:24:29 +0100 Subject: [PATCH] Track the current world name in ChatData for now. --- .../net/protocollib/ProtocolLibComponent.java | 9 --------- .../nocheatplus/checks/chat/ChatData.java | 6 ++++++ .../nocheatplus/checks/chat/ChatListener.java | 8 ++++++-- .../neatmonster/nocheatplus/checks/net/NetData.java | 13 ------------- .../nocheatplus/checks/net/NetDataFactory.java | 5 ----- .../nocheatplus/checks/net/NetStatic.java | 4 +++- 6 files changed, 15 insertions(+), 30 deletions(-) diff --git a/NCPCompatProtocolLib/src/main/java/fr/neatmonster/nocheatplus/checks/net/protocollib/ProtocolLibComponent.java b/NCPCompatProtocolLib/src/main/java/fr/neatmonster/nocheatplus/checks/net/protocollib/ProtocolLibComponent.java index 53672f23..d123a503 100644 --- a/NCPCompatProtocolLib/src/main/java/fr/neatmonster/nocheatplus/checks/net/protocollib/ProtocolLibComponent.java +++ b/NCPCompatProtocolLib/src/main/java/fr/neatmonster/nocheatplus/checks/net/protocollib/ProtocolLibComponent.java @@ -24,7 +24,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.plugin.Plugin; @@ -214,12 +213,4 @@ public class ProtocolLibComponent implements IDisableListener, INotifyReload, Jo } } - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerChangedWorld(final PlayerChangedWorldEvent event) { - if (!registeredPacketAdapters.isEmpty()) { - final Player player = event.getPlayer(); - dataFactory.getData(player).onWorldChange(player); - } - } - } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatData.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatData.java index 62d5d389..23fbeda0 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatData.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatData.java @@ -103,6 +103,12 @@ public class ChatData extends AsyncCheckData { public int relogWarnings; public long relogWarningTime; + /** + * Keep track of current world name, to be used for asynchronous world + * config getting. Set on join and world change, reset on leave. + */ + public String currentWorldName = null; + public ChatData(final ChatConfig config) { super(config); } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatListener.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatListener.java index 4722bc6f..d2a5ad12 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatListener.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/chat/ChatListener.java @@ -101,8 +101,10 @@ public class ChatListener extends CheckListener implements INotifyReload, JoinLe @EventHandler(priority=EventPriority.MONITOR) public void onPlayerChangedWorld(final PlayerChangedWorldEvent event) { + final Player player = event.getPlayer(); + ChatData.getData(player).currentWorldName = player.getWorld().getName(); // Tell TickTask to update cached permissions. - TickTask.requestPermissionUpdate(event.getPlayer().getName(), CheckType.CHAT); + TickTask.requestPermissionUpdate(player.getName(), CheckType.CHAT); } /** @@ -212,7 +214,7 @@ public class ChatListener extends CheckListener implements INotifyReload, JoinLe } } - + private boolean checkUntrackedLocation(final Player player, final String message, final MovingConfig mcc) { final Location loc = player.getLocation(useLoc); boolean cancel = false; @@ -282,6 +284,7 @@ public class ChatListener extends CheckListener implements INotifyReload, JoinLe public void playerJoins(final Player player) { final ChatConfig cc = ChatConfig.getConfig(player); final ChatData data = ChatData.getData(player); + data.currentWorldName = player.getWorld().getName(); synchronized (data) { if (captcha.isEnabled(player) && captcha.shouldCheckCaptcha(cc, data)) { // shouldCheckCaptcha: only if really enabled. @@ -294,6 +297,7 @@ public class ChatListener extends CheckListener implements INotifyReload, JoinLe @Override public void playerLeaves(final Player player) { + ChatData.getData(player).currentWorldName = null; } } diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetData.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetData.java index 712c4480..d90e6c3e 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetData.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetData.java @@ -91,13 +91,6 @@ public class NetData extends ACheckData { /** Overall packet frequency. */ public final ActionFrequency packetFrequency; - /** - * Keep track of current world name, to be used for asynchronous world - * config getting. Set on join and world change, reset on leave. - */ - // TODO: Remove? (Despite future use cases where this is nice to have.) - public String currentWorldName = null; - public NetData(final NetConfig config) { super(config); flyingFrequencyAll = new ActionFrequency(config.flyingFrequencySeconds, 1000L); @@ -113,17 +106,11 @@ public class NetData extends ACheckData { public void onJoin(final Player player) { teleportQueue.clear(); clearFlyingQueue(); - currentWorldName = player.getWorld().getName(); } public void onLeave(Player player) { teleportQueue.clear(); clearFlyingQueue(); - currentWorldName = null; - } - - public void onWorldChange(Player player) { - currentWorldName = player.getWorld().getName(); } /** diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetDataFactory.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetDataFactory.java index aff6e88a..4c1a1294 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetDataFactory.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetDataFactory.java @@ -44,11 +44,6 @@ public class NetDataFactory implements CheckDataFactory, ICanHandleTimeRunningBa if (data != null) { return data; } else { - /* - * TODO: Bootstrap problem with NetStatic and null worlds :) -> move - * world tracking to basic data (e.g. PlayerData), needs thread - * safety. - */ data = new NetData((NetConfig) CheckType.NET.getConfigFactory().getConfig(player)); dataMap.put(player.getName(), data); return data; diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetStatic.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetStatic.java index e51ed967..3df81c4b 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetStatic.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/checks/net/NetStatic.java @@ -19,6 +19,7 @@ import java.util.List; import org.bukkit.World; import org.bukkit.entity.Player; +import fr.neatmonster.nocheatplus.checks.chat.ChatData; import fr.neatmonster.nocheatplus.utilities.TickTask; import fr.neatmonster.nocheatplus.utilities.ds.count.ActionFrequency; @@ -181,7 +182,8 @@ public class NetStatic { world = player.getWorld(); } catch (UnsupportedOperationException e) {} - return configCache.getConfig(world == null ? dataFactory.getData(player).currentWorldName : world.getName()); + // TODO: Abusing ChatData for tracking world names. Should be in PlayerData or some generic data. + return configCache.getConfig(world == null ? ChatData.getData(player).currentWorldName : world.getName()); } }