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:
2026-10-31 16:26:34 +01:00
parent 9598b1c961
commit 9fd2bd17d4
23 changed files with 241 additions and 217 deletions
@@ -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) {