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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user