forked from SteamWar/SteamWar
Use @LinkedTimer for the timers of linked classes
The repeating timers that linked classes and the plugin main classes started once for the whole runtime now use @LinkedTimer, on Spigot (BauSystem, SpigotCore, LobbySystem, MissileWars, TowerRun, Teamserver) and Velocity. The FightInfoPacketSenders of MissileWars and TowerRun are linked themselves instead of being started by the main class.
This commit is contained in:
+7
-7
@@ -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<Player> 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
|
||||
|
||||
+10
-8
@@ -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<TNTPrimed> 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<TNTPrimed> primedList = WORLD.getEntitiesByClass(TNTPrimed.class)
|
||||
.stream().toList();
|
||||
rayData.reset();
|
||||
if (primedList.isEmpty()) return;
|
||||
calculateRays(primedList, primedList);
|
||||
}
|
||||
|
||||
private void calculateRays(List<TNTPrimed> fromTNTs, List<TNTPrimed> toTNTs) {
|
||||
|
||||
+7
-7
@@ -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)
|
||||
|
||||
+5
-6
@@ -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<Player, Long> 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)
|
||||
|
||||
+11
-13
@@ -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<Player> 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) {
|
||||
|
||||
+10
-10
@@ -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
|
||||
|
||||
@@ -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<Player> 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<Player> 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) {
|
||||
|
||||
@@ -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<Location> 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
|
||||
|
||||
@@ -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<Player, Integer> 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)
|
||||
|
||||
@@ -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<Villager> active = world.getEntitiesByClass(Villager.class);
|
||||
if (active.size() > entities.size()) {
|
||||
Set<String> 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<SteamwarUser> 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<String> 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<Villager> active = world.getEntitiesByClass(Villager.class);
|
||||
if (active.size() > entities.size()) {
|
||||
Set<String> 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<SteamwarUser> 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<String> 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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -71,7 +71,5 @@ public class TowerRun extends JavaPlugin {
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Integer, Subserver> 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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<Player, Long> 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<Player, Long> 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) {
|
||||
|
||||
@@ -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<TablistPart> subservers = new ArrayList<>();
|
||||
for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())) {
|
||||
|
||||
Reference in New Issue
Block a user