diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java index d823bff4..2cf8e639 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/observer/ObserverTracerListener.java @@ -24,6 +24,7 @@ import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.utils.BauMemberUpdateEvent; import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -43,13 +44,12 @@ public class ObserverTracerListener implements Listener { static Set enabled = new HashSet<>(); - public ObserverTracerListener() { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - SWPlayer.allWithSingleComponent(ObserverTracer.class).forEach(pair -> { - if (pair.getSwPlayer().getPlayer().getGameMode() != GameMode.SPECTATOR) return; - pair.getComponent().show(); - }); - }, 15L, 15L); + @LinkedTimer(delay = 15, period = 15) + private void showTracers() { + SWPlayer.allWithSingleComponent(ObserverTracer.class).forEach(pair -> { + if (pair.getSwPlayer().getPlayer().getGameMode() != GameMode.SPECTATOR) return; + pair.getComponent().show(); + }); } @EventHandler diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/rayvisualizer/RayVisualizerCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/rayvisualizer/RayVisualizerCommand.java index af5d4eb0..469db717 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/rayvisualizer/RayVisualizerCommand.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/rayvisualizer/RayVisualizerCommand.java @@ -28,6 +28,7 @@ import de.steamwar.command.SWCommand; import de.steamwar.entity.CRay; import de.steamwar.entity.REntityServer; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.*; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; @@ -104,15 +105,16 @@ public class RayVisualizerCommand extends SWCommand implements Listener { public RayVisualizerCommand() { super("rayvisualizer"); + } - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - if (server.getPlayers().isEmpty()) return; - List primedList = WORLD.getEntitiesByClass(TNTPrimed.class) - .stream().toList(); - rayData.reset(); - if (primedList.isEmpty()) return; - calculateRays(primedList, primedList); - }, 1, 1); + @LinkedTimer(delay = 1, period = 1) + private void updateRays() { + if (server.getPlayers().isEmpty()) return; + List primedList = WORLD.getEntitiesByClass(TNTPrimed.class) + .stream().toList(); + rayData.reset(); + if (primedList.isEmpty()) return; + calculateRays(primedList, primedList); } private void calculateRays(List fromTNTs, List toTNTs) { 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 6265cec4..995583b3 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 @@ -27,6 +27,7 @@ import de.steamwar.bausystem.features.script.lua.libs.StorageLib; import de.steamwar.bausystem.region.Region; import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.EntityType; @@ -47,13 +48,12 @@ import org.luaj.vm2.LuaValue; @Linked public class EventListener implements Listener { - static { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - long millis = System.currentTimeMillis(); - SWPlayer.allWithSingleComponent(ScriptRunner.ScriptData.class) - .filter(pair -> millis - pair.getComponent().getLastF() > 200) - .forEach(pair -> pair.getComponent().setLastF(Long.MAX_VALUE)); - }, 1, 1); + @LinkedTimer(delay = 1, period = 1) + private static void resetLastF() { + long millis = System.currentTimeMillis(); + SWPlayer.allWithSingleComponent(ScriptRunner.ScriptData.class) + .filter(pair -> millis - pair.getComponent().getLastF() > 200) + .forEach(pair -> pair.getComponent().setLastF(Long.MAX_VALUE)); } @EventHandler(priority = EventPriority.MONITOR) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java index 6f674a71..271316f8 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java @@ -44,9 +44,9 @@ import de.steamwar.entity.REntity; import de.steamwar.entity.REntityServer; import de.steamwar.inventory.SWAnvilInv; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import lombok.AllArgsConstructor; import lombok.Getter; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -136,11 +136,10 @@ public class SimulatorCursor implements Listener { private static final Map LAST_SNEAKS = new HashMap<>(); - static { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - long millis = System.currentTimeMillis(); - LAST_SNEAKS.entrySet().removeIf(entry -> millis - entry.getValue() > 200); - }, 1, 1); + @LinkedTimer(delay = 1, period = 1) + private static void clearLastSneaks() { + long millis = System.currentTimeMillis(); + LAST_SNEAKS.entrySet().removeIf(entry -> millis - entry.getValue() > 200); } @EventHandler(priority = EventPriority.HIGH) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/team/boundary/BoundaryViewer.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/team/boundary/BoundaryViewer.java index fe242037..139155ef 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/team/boundary/BoundaryViewer.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/team/boundary/BoundaryViewer.java @@ -19,11 +19,10 @@ package de.steamwar.bausystem.features.team.boundary; -import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Region; import de.steamwar.linkage.Linked; -import org.bukkit.Bukkit; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -38,17 +37,16 @@ public class BoundaryViewer implements Listener { public static Set viewers = new HashSet<>(); - { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - if (viewers.isEmpty()) { - return; - } - viewers.forEach(player -> { - Region region = Region.getRegion(player.getLocation()); - if (region.getType().isGlobal()) return; - showRegion(region, player); - }); - }, 20, 20); + @LinkedTimer(delay = 20, period = 20) + private void showBoundaries() { + if (viewers.isEmpty()) { + return; + } + viewers.forEach(player -> { + Region region = Region.getRegion(player.getLocation()); + if (region.getType().isGlobal()) return; + showRegion(region, player); + }); } private void showRegion(Region region, Player player) { diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java index 5c061545..097ef2bc 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java @@ -23,6 +23,7 @@ import de.steamwar.bausystem.BauSystem; import de.steamwar.core.CRIUWakeupEvent; import de.steamwar.core.CheckpointUtils; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -38,17 +39,16 @@ public class AFKStopperListener implements Listener { private long lastMovementTime = System.currentTimeMillis(); - public AFKStopperListener() { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - long currentTime = System.currentTimeMillis(); - if (currentTime - lastMovementTime > 10 * 60000) { // 10 Minutes - for (Player p : Bukkit.getOnlinePlayers()) { - p.kickPlayer(BauSystem.MESSAGE.parse("AFK_KICK_MESSAGE", p)); - } - } else if (currentTime - lastMovementTime > 9 * 60000) { - BauSystem.MESSAGE.broadcast("AFK_WARNING_MESSAGE"); + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.MINUTES) + private void checkAfk() { + long currentTime = System.currentTimeMillis(); + if (currentTime - lastMovementTime > 10 * 60000) { // 10 Minutes + for (Player p : Bukkit.getOnlinePlayers()) { + p.kickPlayer(BauSystem.MESSAGE.parse("AFK_KICK_MESSAGE", p)); } - }, 1200, 1200); //every minute + } else if (currentTime - lastMovementTime > 9 * 60000) { + BauSystem.MESSAGE.broadcast("AFK_WARNING_MESSAGE"); + } } @EventHandler diff --git a/LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java b/LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java index 87b29fe5..4f129be5 100644 --- a/LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java +++ b/LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java @@ -20,6 +20,7 @@ package de.steamwar.lobby.jumpandrun; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.listener.PlayerSpawn; import de.steamwar.lobby.util.LeaderboardManager; @@ -60,52 +61,51 @@ public class JumpAndRun implements Listener { private static final LeaderboardManager LEADERBOARD = new LeaderboardManager(LobbySystem.getEntityServer(false), JUMP_AND_RUN_CONFIG, new Location(Bukkit.getWorlds().get(0), 2338.5, 42.5, 1231.5)); - { - Bukkit.getScheduler().runTaskTimer(LobbySystem.getInstance(), () -> { - Set toReset = new HashSet<>(); - CURRENT_POS.forEach((player, index) -> { - if (System.currentTimeMillis() - CLICKED.getOrDefault(player, 0L) > 500) { - CLICKED.remove(player); - CLICKED_COUNT.remove(player); - } else { - CLICKED_COUNT.put(player, CLICKED_COUNT.getOrDefault(player, -1) + 1); - } + @LinkedTimer(delay = 1, period = 1) + private void updatePlayers() { + Set toReset = new HashSet<>(); + CURRENT_POS.forEach((player, index) -> { + if (System.currentTimeMillis() - CLICKED.getOrDefault(player, 0L) > 500) { + CLICKED.remove(player); + CLICKED_COUNT.remove(player); + } else { + CLICKED_COUNT.put(player, CLICKED_COUNT.getOrDefault(player, -1) + 1); + } - Location location = player.getLocation(); - Vector point = points.get(index); - if (index < points.size() - 1) { - Vector nextPoint = points.get(index + 1); - double y = Math.min(point.getY(), nextPoint.getY()) - 2; - if (location.getY() < y) { - location.setX(point.getX()); - location.setY(point.getY()); - location.setZ(point.getZ()); - player.teleport(location); - player.playSound(location, Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); - FAILS.put(player, FAILS.getOrDefault(player, 0) + 1); - } + Location location = player.getLocation(); + Vector point = points.get(index); + if (index < points.size() - 1) { + Vector nextPoint = points.get(index + 1); + double y = Math.min(point.getY(), nextPoint.getY()) - 2; + if (location.getY() < y) { + location.setX(point.getX()); + location.setY(point.getY()); + location.setZ(point.getZ()); + player.teleport(location); + player.playSound(location, Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); + FAILS.put(player, FAILS.getOrDefault(player, 0) + 1); } + } - int count = CLICKED_COUNT.getOrDefault(player, -1); - if (count >= 0) { - if (count > 20) { - toReset.add(player); - return; - } - count = Math.min(count / 2, 30); - LobbySystem.getMessage().sendPrefixless("JUMP_AND_RUN_CANCEL", player, ChatMessageType.ACTION_BAR, "§e" + BAR_EMPTY.substring(0, count) + "§7" + BAR_EMPTY.substring(count)); - } else { - long time = System.currentTimeMillis() - START.get(player); - SimpleDateFormat format = new SimpleDateFormat(LobbySystem.getMessage().parse("JUMP_AND_RUN_TIME", player), Locale.ROOT); - String parsed = format.format(new Date(time)); - LobbySystem.getMessage().sendPrefixless("JUMP_AND_RUN_PROGRESS", player, ChatMessageType.ACTION_BAR, index + 1, points.size(), FAILS.get(player), parsed); + int count = CLICKED_COUNT.getOrDefault(player, -1); + if (count >= 0) { + if (count > 20) { + toReset.add(player); + return; } - }); - toReset.forEach(player -> { - reset(player); - player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation().clone().add(0.5, 0, 0.5)); - }); - }, 1, 1); + count = Math.min(count / 2, 30); + LobbySystem.getMessage().sendPrefixless("JUMP_AND_RUN_CANCEL", player, ChatMessageType.ACTION_BAR, "§e" + BAR_EMPTY.substring(0, count) + "§7" + BAR_EMPTY.substring(count)); + } else { + long time = System.currentTimeMillis() - START.get(player); + SimpleDateFormat format = new SimpleDateFormat(LobbySystem.getMessage().parse("JUMP_AND_RUN_TIME", player), Locale.ROOT); + String parsed = format.format(new Date(time)); + LobbySystem.getMessage().sendPrefixless("JUMP_AND_RUN_PROGRESS", player, ChatMessageType.ACTION_BAR, index + 1, points.size(), FAILS.get(player), parsed); + } + }); + toReset.forEach(player -> { + reset(player); + player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation().clone().add(0.5, 0, 0.5)); + }); } public static boolean isPlayerInJumpAndRun(Player player) { diff --git a/LobbySystem/src/de/steamwar/lobby/listener/PlayerSeatListener.java b/LobbySystem/src/de/steamwar/lobby/listener/PlayerSeatListener.java index 3e452b30..0b66cc8c 100644 --- a/LobbySystem/src/de/steamwar/lobby/listener/PlayerSeatListener.java +++ b/LobbySystem/src/de/steamwar/lobby/listener/PlayerSeatListener.java @@ -20,7 +20,7 @@ package de.steamwar.lobby.listener; import de.steamwar.linkage.Linked; -import de.steamwar.lobby.LobbySystem; +import de.steamwar.linkage.LinkedTimer; import org.bukkit.*; import org.bukkit.block.data.Bisected; import org.bukkit.block.data.type.Stairs; @@ -34,7 +34,6 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDismountEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.scheduler.BukkitRunnable; import java.util.HashSet; import java.util.Set; @@ -46,15 +45,11 @@ public class PlayerSeatListener implements Listener { private Set seats = new HashSet<>(); - static { - new BukkitRunnable() { - @Override - public void run() { - for (Arrow arrow : world.getEntitiesByClass(Arrow.class)) { - arrow.setTicksLived(1); - } - } - }.runTaskTimer(LobbySystem.getInstance(), 20 * 60, 20 * 60); + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.MINUTES) + private static void keepArrows() { + for (Arrow arrow : world.getEntitiesByClass(Arrow.class)) { + arrow.setTicksLived(1); + } } @EventHandler diff --git a/LobbySystem/src/de/steamwar/lobby/particle/ParticleListener.java b/LobbySystem/src/de/steamwar/lobby/particle/ParticleListener.java index 52261647..1e1eed30 100644 --- a/LobbySystem/src/de/steamwar/lobby/particle/ParticleListener.java +++ b/LobbySystem/src/de/steamwar/lobby/particle/ParticleListener.java @@ -20,7 +20,7 @@ package de.steamwar.lobby.particle; import de.steamwar.linkage.Linked; -import de.steamwar.lobby.LobbySystem; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.lobby.jumpandrun.JumpAndRun; import de.steamwar.lobby.listener.PlayerSpawn; import de.steamwar.lobby.util.LobbyPlayer; @@ -49,25 +49,24 @@ public class ParticleListener implements Listener { private static Map movingPlayers = new HashMap<>(); - public ParticleListener() { - Bukkit.getScheduler().runTaskTimer(LobbySystem.getInstance(), () -> { - movingPlayers.replaceAll((player, integer) -> integer - 1); - movingPlayers.entrySet().removeIf(entry -> entry.getValue() <= 0); - deg += 0.1; - if (deg > 360) deg = 0; - Bukkit.getOnlinePlayers().forEach(player -> { - if (disabled(player)) return; - if (JumpAndRun.isPlayerInJumpAndRun(player)) return; - LobbyPlayer lobbyPlayer = LobbyPlayer.getLobbyPlayer(player.getUniqueId()); - ParticleEnum particle = lobbyPlayer.getParticle(); - if (particle == null) return; - ParticleData particleData = particle.getParticle(); - ParticleElement particleElement = particleData.getParticleElement(); - if (particleElement.tickType() == ParticleTickType.ALWAYS) { - particleElement.tick(new ParticleTickData(player.getWorld(), player, deg, movingPlayers.containsKey(player))); - } - }); - }, 0, 1); + @LinkedTimer(delay = 0, period = 1) + private void tickParticles() { + movingPlayers.replaceAll((player, integer) -> integer - 1); + movingPlayers.entrySet().removeIf(entry -> entry.getValue() <= 0); + deg += 0.1; + if (deg > 360) deg = 0; + Bukkit.getOnlinePlayers().forEach(player -> { + if (disabled(player)) return; + if (JumpAndRun.isPlayerInJumpAndRun(player)) return; + LobbyPlayer lobbyPlayer = LobbyPlayer.getLobbyPlayer(player.getUniqueId()); + ParticleEnum particle = lobbyPlayer.getParticle(); + if (particle == null) return; + ParticleData particleData = particle.getParticle(); + ParticleElement particleElement = particleData.getParticleElement(); + if (particleElement.tickType() == ParticleTickType.ALWAYS) { + particleElement.tick(new ParticleTickData(player.getWorld(), player, deg, movingPlayers.containsKey(player))); + } + }); } @EventHandler(priority = EventPriority.NORMAL) diff --git a/LobbySystem/src/de/steamwar/lobby/team/TeamPlayer.java b/LobbySystem/src/de/steamwar/lobby/team/TeamPlayer.java index 8a294914..987fa29f 100644 --- a/LobbySystem/src/de/steamwar/lobby/team/TeamPlayer.java +++ b/LobbySystem/src/de/steamwar/lobby/team/TeamPlayer.java @@ -20,6 +20,7 @@ package de.steamwar.lobby.team; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.display.NPC; import de.steamwar.sql.SteamwarUser; @@ -76,55 +77,58 @@ public class TeamPlayer implements Listener { entities.put(name, npc); } + private final AtomicInteger count = new AtomicInteger(); + { SteamwarUser.getServerTeam().forEach(user -> { spawnTeamPlayer(world, user); }); - AtomicInteger count = new AtomicInteger(); LobbySystem.getInstance().getLogger().log(Level.INFO, "Loaded " + entities.size() + " team players"); - Bukkit.getScheduler().runTaskTimer(LobbySystem.getInstance(), () -> { - Collection active = world.getEntitiesByClass(Villager.class); - if (active.size() > entities.size()) { - Set duplicates = new HashSet<>(); - active.stream() - .filter(villager -> !duplicates.add(villager.getCustomName())) - .forEach(Entity::remove); - } + } - count.incrementAndGet(); - if (count.get() % (20 * 60 * 60) == 0) { - count.set(0); - List steamwarUsers = SteamwarUser.getServerTeam(); - AtomicInteger added = new AtomicInteger(); - steamwarUsers.forEach(user -> { - if (!entities.containsKey(user.getUserName())) { - spawnTeamPlayer(world, user); - added.incrementAndGet(); - } - }); - AtomicInteger removed = new AtomicInteger(); - List names = steamwarUsers.stream().map(SteamwarUser::getUserName).collect(Collectors.toList()); - new HashSet<>(entities.keySet()).stream().filter(name -> !names.contains(name)).forEach(name -> { - villagers.remove(name).remove(); - entities.remove(name).delete(); - removed.incrementAndGet(); - }); - if (added.get() > 0 || removed.get() > 0) { - LobbySystem.getInstance().getLogger().log(Level.INFO, "Loaded " + added.get() + " team players, removed " + removed.get() + " team players"); - } - } - world.getEntitiesByClasses(Villager.class).forEach(entity -> { - NPC npc = entities.get(entity.getName()); - if (npc != null) { - if (illegalLocation(entity.getLocation())) { - entity.teleport(npc.getLocation()); - return; - } - npc.setLocation(entity.getLocation()); + @LinkedTimer(delay = 1, period = 1) + private void updateTeamPlayers() { + Collection active = world.getEntitiesByClass(Villager.class); + if (active.size() > entities.size()) { + Set duplicates = new HashSet<>(); + active.stream() + .filter(villager -> !duplicates.add(villager.getCustomName())) + .forEach(Entity::remove); + } + + count.incrementAndGet(); + if (count.get() % (20 * 60 * 60) == 0) { + count.set(0); + List steamwarUsers = SteamwarUser.getServerTeam(); + AtomicInteger added = new AtomicInteger(); + steamwarUsers.forEach(user -> { + if (!entities.containsKey(user.getUserName())) { + spawnTeamPlayer(world, user); + added.incrementAndGet(); } }); - }, 1L, 1L); + AtomicInteger removed = new AtomicInteger(); + List names = steamwarUsers.stream().map(SteamwarUser::getUserName).collect(Collectors.toList()); + new HashSet<>(entities.keySet()).stream().filter(name -> !names.contains(name)).forEach(name -> { + villagers.remove(name).remove(); + entities.remove(name).delete(); + removed.incrementAndGet(); + }); + if (added.get() > 0 || removed.get() > 0) { + LobbySystem.getInstance().getLogger().log(Level.INFO, "Loaded " + added.get() + " team players, removed " + removed.get() + " team players"); + } + } + world.getEntitiesByClasses(Villager.class).forEach(entity -> { + NPC npc = entities.get(entity.getName()); + if (npc != null) { + if (illegalLocation(entity.getLocation())) { + entity.teleport(npc.getLocation()); + return; + } + npc.setLocation(entity.getLocation()); + } + }); } private boolean illegalLocation(Location location) { diff --git a/MissileWars/src/de/steamwar/misslewars/FightInfoPacketSender.java b/MissileWars/src/de/steamwar/misslewars/FightInfoPacketSender.java index a2bcd52e..a4f80b21 100644 --- a/MissileWars/src/de/steamwar/misslewars/FightInfoPacketSender.java +++ b/MissileWars/src/de/steamwar/misslewars/FightInfoPacketSender.java @@ -19,6 +19,8 @@ package de.steamwar.misslewars; +import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.network.NetworkSender; import de.steamwar.network.packets.common.FightInfoPacket; import de.steamwar.sql.SteamwarUser; @@ -28,6 +30,7 @@ import org.bukkit.World; import java.util.List; import java.util.stream.Collectors; +@Linked public class FightInfoPacketSender implements Runnable { private final World world = Bukkit.getWorlds().get(0); @@ -41,6 +44,7 @@ public class FightInfoPacketSender implements Runnable { private final int redLeader = Config.RedLeader != null ? SteamwarUser.get(Config.RedLeader).getId() : 0; @Override + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.SECONDS) public void run() { if (Config.test()) { return; diff --git a/MissileWars/src/de/steamwar/misslewars/MissileWars.java b/MissileWars/src/de/steamwar/misslewars/MissileWars.java index 7734cc74..6323e850 100644 --- a/MissileWars/src/de/steamwar/misslewars/MissileWars.java +++ b/MissileWars/src/de/steamwar/misslewars/MissileWars.java @@ -75,8 +75,6 @@ public class MissileWars extends JavaPlugin { StateDependent.setupState(fightState); - Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20); - Bukkit.getWorlds().forEach(world -> { world.setGameRule(GameRule.KEEP_INVENTORY, true); world.setGameRule(GameRule.MOB_GRIEFING, true); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/Core.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/Core.java index 8f076c0a..f14144e0 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/Core.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/Core.java @@ -26,6 +26,7 @@ import de.steamwar.command.TabCompletionCache; import de.steamwar.command.TypeMapper; import de.steamwar.core.authlib.SteamwarGameProfileRepository; import de.steamwar.linkage.AbstractLinker; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.linkage.SpigotLinker; import de.steamwar.message.Message; import de.steamwar.network.NetworkReceiver; @@ -119,10 +120,6 @@ public class Core extends JavaPlugin { TinyProtocol.init(); CheckpointUtils.signalHandler(); - Bukkit.getScheduler().runTaskTimer(this, TabCompletionCache::invalidateOldEntries, 20, 20); - Bukkit.getScheduler().runTaskTimer(Core.getInstance(), SteamwarUser::clear, 72000, 72000); - Bukkit.getScheduler().runTaskTimer(Core.getInstance(), SchematicNode::clear, 20L * 30, 20L * 30); - try { getLogger().log(Level.INFO, "Running on: " + new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("hostname").getInputStream())).readLine()); } catch (IOException e) { @@ -130,6 +127,21 @@ public class Core extends JavaPlugin { } } + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.SECONDS) + private void invalidateTabCompletions() { + TabCompletionCache.invalidateOldEntries(); + } + + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.HOURS) + private void clearUserCache() { + SteamwarUser.clear(); + } + + @LinkedTimer(delay = 30, period = 30, unit = LinkedTimer.Unit.SECONDS) + private void clearSchematicCache() { + SchematicNode.clear(); + } + @Override public void onDisable() { TinyProtocol.instance.close(); diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/worldedit/WorldEditRenderer.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/worldedit/WorldEditRenderer.java index f11aec11..964890e7 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/worldedit/WorldEditRenderer.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/worldedit/WorldEditRenderer.java @@ -30,6 +30,7 @@ import com.sk89q.worldedit.regions.RegionSelector; import com.sk89q.worldedit.world.World; import de.steamwar.core.Core; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.linkage.PluginCheck; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -55,12 +56,13 @@ public class WorldEditRenderer implements Listener { public WorldEditRenderer() { INSTANCE = this; we = WorldEditWrapper.getWorldEditPlugin(); + } - Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - renderPlayer(player, true); - } - }, 20, 20); + @LinkedTimer(delay = 20, period = 20) + private void renderPlayers() { + for (Player player : Bukkit.getOnlinePlayers()) { + renderPlayer(player, true); + } } public static void renderPlayer(Player player) { diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/cursor/CursorListener.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/cursor/CursorListener.java index 99e286ca..0b919898 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/cursor/CursorListener.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/cursor/CursorListener.java @@ -1,13 +1,12 @@ package de.steamwar.cursor; import com.comphenix.tinyprotocol.TinyProtocol; -import de.steamwar.core.Core; import de.steamwar.core.SWPlayer; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import lombok.Getter; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -29,12 +28,13 @@ public class CursorListener implements Listener { TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.Pos.class, this::updateCursorFromPacket); TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.Rot.class, this::updateCursorFromPacket); TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.PosRot.class, this::updateCursorFromPacket); + } - Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { - SWPlayer.allWithSingleComponent(Cursor.class) - .map(SWPlayer.SWPlayerWithComponent::getComponent) - .forEach(Cursor::renderDeduplicated); - }, 1, 1); + @LinkedTimer(delay = 1, period = 1) + private void renderCursors() { + SWPlayer.allWithSingleComponent(Cursor.class) + .map(SWPlayer.SWPlayerWithComponent::getComponent) + .forEach(Cursor::renderDeduplicated); } public Packet updateCursorFromPacket(Player player, Packet packet) { diff --git a/Teamserver/src/de/steamwar/teamserver/listener/FreezeListener.java b/Teamserver/src/de/steamwar/teamserver/listener/FreezeListener.java index 12c279c7..c040942c 100644 --- a/Teamserver/src/de/steamwar/teamserver/listener/FreezeListener.java +++ b/Teamserver/src/de/steamwar/teamserver/listener/FreezeListener.java @@ -20,6 +20,7 @@ package de.steamwar.teamserver.listener; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.teamserver.Builder; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; @@ -41,13 +42,12 @@ public class FreezeListener implements Listener { public static boolean freeze = true; - public FreezeListener() { - Bukkit.getScheduler().runTaskTimer(Builder.getInstance(), () -> { - if (!freeze) return; - Bukkit.getOnlinePlayers().forEach(player -> { - Builder.MESSAGE.sendPrefixless("REGION_FREEZE_ENABLED", player, ChatMessageType.ACTION_BAR); - }); - }, 1, 1); + @LinkedTimer(delay = 1, period = 1) + private void showFreeze() { + if (!freeze) return; + Bukkit.getOnlinePlayers().forEach(player -> { + Builder.MESSAGE.sendPrefixless("REGION_FREEZE_ENABLED", player, ChatMessageType.ACTION_BAR); + }); } @EventHandler diff --git a/TowerRun/src/de/steamwar/towerrun/FightInfoPacketSender.java b/TowerRun/src/de/steamwar/towerrun/FightInfoPacketSender.java index 764e1eea..43c9d882 100644 --- a/TowerRun/src/de/steamwar/towerrun/FightInfoPacketSender.java +++ b/TowerRun/src/de/steamwar/towerrun/FightInfoPacketSender.java @@ -19,6 +19,8 @@ package de.steamwar.towerrun; +import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.network.NetworkSender; import de.steamwar.network.packets.common.FightInfoPacket; import de.steamwar.sql.SteamwarUser; @@ -33,6 +35,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +@Linked public class FightInfoPacketSender implements Runnable { private final World world = Bukkit.getWorlds().get(0); @@ -44,6 +47,7 @@ public class FightInfoPacketSender implements Runnable { private final String redName = "§cAlive"; @Override + @LinkedTimer(delay = 1, period = 1, unit = LinkedTimer.Unit.SECONDS) public void run() { if (Config.test()) { return; diff --git a/TowerRun/src/de/steamwar/towerrun/TowerRun.java b/TowerRun/src/de/steamwar/towerrun/TowerRun.java index 10298547..1fdc8ae3 100644 --- a/TowerRun/src/de/steamwar/towerrun/TowerRun.java +++ b/TowerRun/src/de/steamwar/towerrun/TowerRun.java @@ -71,7 +71,5 @@ public class TowerRun extends JavaPlugin { Bukkit.shutdown(); return; } - - Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20); } } diff --git a/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java b/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java index 0c2c0aa8..35cf8a4d 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java +++ b/VelocityCore/src/de/steamwar/velocitycore/EventStarter.java @@ -20,6 +20,7 @@ package de.steamwar.velocitycore; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; import de.steamwar.persistent.Subserver; @@ -35,7 +36,6 @@ import java.util.HashSet; import java.util.Map; import java.util.Queue; import java.util.Set; -import java.util.concurrent.TimeUnit; import static de.steamwar.persistent.Storage.eventServer; @@ -58,13 +58,13 @@ public class EventStarter { public EventStarter() { EventFight.loadAllComingFights(); - VelocityCore.schedule(this::run).repeat(10, TimeUnit.SECONDS).schedule(); } public static Map getEventServer() { return eventServer; } + @LinkedTimer(delay = 0, period = 10, unit = LinkedTimer.Unit.SECONDS) private void run() { if (eventServer.entrySet().removeIf(entry -> Subserver.getSubserver(entry.getValue().getServer()) == null)) { EventFight.loadAllComingFights(); diff --git a/VelocityCore/src/de/steamwar/velocitycore/VelocityCore.java b/VelocityCore/src/de/steamwar/velocitycore/VelocityCore.java index d94e8e3d..936628f2 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/VelocityCore.java +++ b/VelocityCore/src/de/steamwar/velocitycore/VelocityCore.java @@ -133,7 +133,6 @@ public class VelocityCore implements ReloadablePlugin { return tabCompleter.apply(sender, s); } }); - schedule(TabCompletionCache::invalidateOldEntries).repeat(1, TimeUnit.SECONDS).schedule(); initStaticServers(); @@ -188,12 +187,6 @@ public class VelocityCore implements ReloadablePlugin { return; } - schedule(() -> { - SteamwarUser.clear(); - Team.clear(); - SteamwarPrefix.clearCache(); - }).repeat(1, TimeUnit.HOURS).schedule(); - DiscordConfig discordConfig = DiscordConfig.load(); if (discordConfig != null) { try { @@ -204,6 +197,18 @@ public class VelocityCore implements ReloadablePlugin { } } + @LinkedTimer(delay = 0, period = 1, unit = LinkedTimer.Unit.SECONDS) + private void invalidateTabCompletions() { + TabCompletionCache.invalidateOldEntries(); + } + + @LinkedTimer(delay = 0, period = 1, unit = LinkedTimer.Unit.HOURS) + private void clearCaches() { + SteamwarUser.clear(); + Team.clear(); + SteamwarPrefix.clearCache(); + } + @Subscribe @Override public void onProxyShutdown(ProxyShutdownEvent event) { diff --git a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java index b130a2d7..5f87b699 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java +++ b/VelocityCore/src/de/steamwar/velocitycore/commands/CheckCommand.java @@ -24,6 +24,7 @@ import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import de.steamwar.command.SWCommand; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.messages.Chatter; import de.steamwar.messages.Message; import de.steamwar.messages.PlayerChatter; @@ -41,10 +42,8 @@ import net.kyori.adventure.text.format.NamedTextColor; import java.awt.*; import java.sql.Timestamp; import java.time.Instant; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.List; -import java.util.concurrent.TimeUnit; import java.util.function.BooleanSupplier; import java.util.logging.Level; @@ -76,7 +75,11 @@ public class CheckCommand extends SWCommand { public CheckCommand() { super("check"); - VelocityCore.schedule(() -> Chatter.allStream().forEach(CheckCommand::sendReminder)).delay(10, TimeUnit.MINUTES).repeat(10, TimeUnit.MINUTES).schedule(); + } + + @LinkedTimer(delay = 10, period = 10, unit = LinkedTimer.Unit.MINUTES) + private static void sendReminders() { + Chatter.allStream().forEach(CheckCommand::sendReminder); } @Override diff --git a/VelocityCore/src/de/steamwar/velocitycore/mods/FabricModSender.java b/VelocityCore/src/de/steamwar/velocitycore/mods/FabricModSender.java index cf32fc53..e64107c5 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/mods/FabricModSender.java +++ b/VelocityCore/src/de/steamwar/velocitycore/mods/FabricModSender.java @@ -29,11 +29,11 @@ import com.velocitypowered.api.event.player.ServerConnectedEvent; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.proxy.protocol.ProtocolUtils; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.persistent.Storage; import de.steamwar.sql.Mod; import de.steamwar.sql.SWException; import de.steamwar.sql.SteamwarUser; -import de.steamwar.velocitycore.VelocityCore; import de.steamwar.velocitycore.listeners.BasicListener; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -55,20 +55,21 @@ public class FabricModSender extends BasicListener { neededFabricMods.add("fabricloader"); neededQuiltMods.add("quilt_loader"); + } - VelocityCore.schedule(() -> { - synchronized (Storage.fabricExpectPluginMessage) { - for (Map.Entry entry : Storage.fabricExpectPluginMessage.entrySet()) { - if (!Storage.fabricCheckedPlayers.containsKey(entry.getKey())) { - continue; - } - if (System.currentTimeMillis() - entry.getValue() > TimeUnit.SECONDS.toMillis(20)) { - Storage.fabricExpectPluginMessage.remove(entry.getKey()); - return; - } + @LinkedTimer(delay = 0, period = 1, unit = LinkedTimer.Unit.SECONDS) + private void removeExpiredExpectations() { + synchronized (Storage.fabricExpectPluginMessage) { + for (Map.Entry entry : Storage.fabricExpectPluginMessage.entrySet()) { + if (!Storage.fabricCheckedPlayers.containsKey(entry.getKey())) { + continue; + } + if (System.currentTimeMillis() - entry.getValue() > TimeUnit.SECONDS.toMillis(20)) { + Storage.fabricExpectPluginMessage.remove(entry.getKey()); + return; } } - }).repeat(1, TimeUnit.SECONDS).schedule(); + } } public void handlePluginMessage(PluginMessageEvent e) { diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java index 9631720d..057c9966 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java @@ -27,6 +27,7 @@ import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedTimer; import de.steamwar.linkage.api.Disable; import de.steamwar.network.packets.common.FightInfoPacket; import de.steamwar.persistent.Storage; @@ -38,7 +39,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; @Linked public class TablistManager extends BasicListener implements Disable { @@ -63,7 +63,6 @@ public class TablistManager extends BasicListener implements Disable { private int seconds = 0; public TablistManager() { - VelocityCore.schedule(this::updateTablist).repeat(1, TimeUnit.SECONDS).schedule(); synchronized (tablists) { VelocityCore.getProxy().getAllPlayers().forEach(player -> tablists.computeIfAbsent(player, Tablist::new).onServerSwitch()); } @@ -102,6 +101,7 @@ public class TablistManager extends BasicListener implements Disable { } } + @LinkedTimer(delay = 0, period = 1, unit = LinkedTimer.Unit.SECONDS) private void updateTablist() { List subservers = new ArrayList<>(); for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())) {