diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java index 0eadc3ed..2f444561 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptListener.java @@ -67,7 +67,7 @@ public class ScriptListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - ScriptRunner.remove(event.getPlayer()); + playerSet.remove(event.getPlayer()); } @EventHandler diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java index 3bcb1f71..ee10536e 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/ScriptRunner.java @@ -26,6 +26,8 @@ import de.steamwar.bausystem.features.script.lua.SteamWarPlatform; import de.steamwar.core.SWPlayer; import de.steamwar.sql.Script; import de.steamwar.sql.SteamwarUser; +import lombok.Getter; +import lombok.Setter; import lombok.experimental.UtilityClass; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; @@ -49,6 +51,17 @@ public class ScriptRunner { private Map> events = new EnumMap<>(SteamWarGlobalLuaPlugin.EventType.class); private Map> hotkeys = new HashMap<>(); private Map commands = new HashMap<>(); + + @Getter + private Set calledCommands = new HashSet<>(); + + @Getter + @Setter + private Long lastF = Long.MAX_VALUE; + + @Getter + @Setter + private boolean ignore; } public Set getCommandsOfPlayer(Player player) { diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java index d52e4d9b..f79d4ac3 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/CommandListener.java @@ -21,44 +21,24 @@ package de.steamwar.bausystem.features.script.event; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.features.script.ScriptRunner; +import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; @Linked public class CommandListener implements Listener { - private Map> calledCommands = new HashMap<>(); - @EventHandler public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { if(!Permission.BUILD.hasPermission(event.getPlayer())) return; String[] split = event.getMessage().split(" "); - if (calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).contains(split[0])) { - return; - } + ScriptRunner.ScriptData scriptData = SWPlayer.of(event.getPlayer()).getComponentOrDefault(ScriptRunner.ScriptData.class, ScriptRunner.ScriptData::new); + if (scriptData.getCalledCommands().contains(split[0])) return; - calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).add(split[0]); + scriptData.getCalledCommands().add(split[0]); event.setCancelled(ScriptRunner.callCommand(event.getPlayer(), split[0].substring(1), split)); - calledCommands.getOrDefault(event.getPlayer(), new HashSet<>()).remove(split[0]); - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - calledCommands.put(event.getPlayer(), new HashSet<>()); - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - calledCommands.remove(event.getPlayer()); + scriptData.getCalledCommands().remove(split[0]); } } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java index 8aade642..3490ea2e 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/event/EventListener.java @@ -25,6 +25,7 @@ import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin; import de.steamwar.bausystem.features.script.lua.libs.StorageLib; import de.steamwar.bausystem.region.Region; +import de.steamwar.core.SWPlayer; import de.steamwar.core.TrickyTrialsWrapper; import de.steamwar.linkage.Linked; import org.bukkit.Bukkit; @@ -43,32 +44,27 @@ import org.bukkit.event.player.*; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - @Linked public class EventListener implements Listener { - private static final Map LAST_FS = new HashMap<>(); - static { Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { long millis = System.currentTimeMillis(); - LAST_FS.entrySet().removeIf(entry -> millis - entry.getValue() > 200); + SWPlayer.allWithSingleComponent(ScriptRunner.ScriptData.class) + .filter(pair -> millis - pair.getValue().getLastF() > 200) + .forEach(pair -> pair.getValue().setLastF(Long.MAX_VALUE)); }, 1, 1); } @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL, event); } @EventHandler(priority = EventPriority.HIGH) public void onPlayerQuit(PlayerQuitEvent event) { - if(Permission.BUILD.hasPermission(event.getPlayer())) { + if (Permission.BUILD.hasPermission(event.getPlayer())) { ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL, event); } StorageLib.removePlayer(event.getPlayer()); @@ -76,19 +72,20 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; - if (LAST_FS.containsKey(event.getPlayer())) { + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; + ScriptRunner.ScriptData scriptData = SWPlayer.of(event.getPlayer()).getComponentOrDefault(ScriptRunner.ScriptData.class, ScriptRunner.ScriptData::new); + if (scriptData.getLastF() != Long.MAX_VALUE) { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL, event); }, 1); } else { - LAST_FS.put(event.getPlayer(), System.currentTimeMillis()); + scriptData.setLastF(System.currentTimeMillis()); } } @EventHandler(priority = EventPriority.HIGH) public void onBlockPlace(BlockPlaceEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; LuaTable table = new LuaTable(); table.set("x", event.getBlock().getX()); table.set("y", event.getBlock().getY()); @@ -99,7 +96,7 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onBlockBreak(BlockBreakEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; LuaTable table = new LuaTable(); table.set("x", event.getBlock().getX()); table.set("y", event.getBlock().getY()); @@ -108,12 +105,12 @@ public class EventListener implements Listener { ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.BreakBlock, table, event); } - private final Set ignore = new HashSet<>(); - @EventHandler(priority = EventPriority.LOW) public void onPlayerInteract(PlayerInteractEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; - if (ignore.remove(event.getPlayer())) { + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; + ScriptRunner.ScriptData scriptData = SWPlayer.of(event.getPlayer()).getComponentOrDefault(ScriptRunner.ScriptData.class, ScriptRunner.ScriptData::new); + if (scriptData.isIgnore()) { + scriptData.setIgnore(false); return; } LuaTable table = new LuaTable(); @@ -124,7 +121,7 @@ public class EventListener implements Listener { table.set("hand", event.getHand().name()); } table.set("block", event.getItem() == null ? Material.AIR.name() : event.getItem().getType().name()); - if(event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) { table.set("hasBlock", LuaValue.valueOf(true)); table.set("blockX", event.getClickedBlock().getX()); table.set("blockY", event.getClickedBlock().getY()); @@ -150,7 +147,7 @@ public class EventListener implements Listener { Region tntRegion = Region.getRegion(event.getLocation()); for (Player player : Bukkit.getOnlinePlayers()) { - if(!Permission.BUILD.hasPermission(player)) continue; + if (!Permission.BUILD.hasPermission(player)) continue; if (tntRegion.getArea().inRegion(player.getLocation(), false)) { ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL, event); } @@ -172,7 +169,7 @@ public class EventListener implements Listener { boolean inBuild = event.blockList().stream().anyMatch(block -> tntRegion.getBuildArea().inRegion(block.getLocation(), true)); for (Player player : Bukkit.getOnlinePlayers()) { - if(!Permission.BUILD.hasPermission(player)) continue; + if (!Permission.BUILD.hasPermission(player)) continue; if (tntRegion.getArea().inRegion(player.getLocation(), false)) { ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table, event); if (inBuild) { @@ -184,8 +181,9 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onPlayerDropItem(PlayerDropItemEvent event) { - if(!Permission.BUILD.hasPermission(event.getPlayer())) return; - ignore.add(event.getPlayer()); + if (!Permission.BUILD.hasPermission(event.getPlayer())) return; + ScriptRunner.ScriptData scriptData = SWPlayer.of(event.getPlayer()).getComponentOrDefault(ScriptRunner.ScriptData.class, ScriptRunner.ScriptData::new); + scriptData.setIgnore(true); LuaTable table = new LuaTable(); table.set("type", event.getItemDrop().getItemStack().getType().name()); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DropItem, table, event); @@ -194,7 +192,7 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void onEntityDeath(EntityDeathEvent event) { for (Player player : Bukkit.getOnlinePlayers()) { - if(!Permission.BUILD.hasPermission(player)) continue; + if (!Permission.BUILD.hasPermission(player)) continue; LuaTable table = new LuaTable(); table.set("type", event.getEntityType().name()); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.EntityDeath, table, event);