Skip to content

Commit b25d4b1

Browse files
committed
scheduler abuse
1 parent cb1e175 commit b25d4b1

2 files changed

Lines changed: 23 additions & 17 deletions

File tree

src/main/java/dev/plex/NUSHModule.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
import dev.plex.listener.ChatListener;
66
import dev.plex.listener.JoinListener;
77
import dev.plex.module.PlexModule;
8-
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
98
import org.bukkit.entity.Player;
109

1110
import java.util.Map;
1211
import java.util.UUID;
1312
import java.util.concurrent.ConcurrentHashMap;
1413
import java.util.concurrent.TimeUnit;
14+
import java.util.concurrent.Executors;
15+
import java.util.concurrent.ScheduledExecutorService;
16+
import java.util.concurrent.ScheduledFuture;
17+
import java.util.concurrent.atomic.AtomicReference;
1518

1619
public class NUSHModule extends PlexModule
1720
{
1821
private ModuleConfiguration config;
19-
private final Map<UUID, ScheduledTask> newPlayers = new ConcurrentHashMap<>();
22+
private final Map<UUID, ScheduledFuture<?>> newPlayers = new ConcurrentHashMap<>();
23+
private ScheduledExecutorService expiryExecutor;
2024
private boolean enabled;
2125
private int time;
2226

@@ -31,6 +35,8 @@ public void load()
3135
@Override
3236
public void enable()
3337
{
38+
expiryExecutor = Executors.newSingleThreadScheduledExecutor(
39+
Thread.ofPlatform().daemon().name("Plex-NUSH-Expiry").factory());
3440
config.load();
3541
enabled = config.getBoolean("server.enabled", false);
3642
time = config.getInt("server.wait_time", 2);
@@ -41,6 +47,11 @@ public void enable()
4147
@Override
4248
public void disable()
4349
{
50+
if (expiryExecutor != null)
51+
{
52+
expiryExecutor.shutdownNow();
53+
expiryExecutor = null;
54+
}
4455
clearNewPlayers();
4556
}
4657

@@ -71,12 +82,14 @@ public void setTime(int minutes)
7182
public void queueNewPlayer(Player player)
7283
{
7384
UUID uuid = player.getUniqueId();
74-
ScheduledTask task = scheduler().runAsyncLater(
75-
scheduledTask -> newPlayers.remove(uuid, scheduledTask), time, TimeUnit.MINUTES);
76-
ScheduledTask previous = newPlayers.put(uuid, task);
85+
AtomicReference<ScheduledFuture<?>> taskReference = new AtomicReference<>();
86+
ScheduledFuture<?> task = expiryExecutor.schedule(
87+
() -> newPlayers.remove(uuid, taskReference.get()), time, TimeUnit.MINUTES);
88+
taskReference.set(task);
89+
ScheduledFuture<?> previous = newPlayers.put(uuid, task);
7790
if (previous != null)
7891
{
79-
previous.cancel();
92+
previous.cancel(false);
8093
}
8194
}
8295

@@ -87,16 +100,16 @@ public boolean isNewPlayer(Player player)
87100

88101
public void removePlayer(Player player)
89102
{
90-
ScheduledTask task = newPlayers.remove(player.getUniqueId());
103+
ScheduledFuture<?> task = newPlayers.remove(player.getUniqueId());
91104
if (task != null)
92105
{
93-
task.cancel();
106+
task.cancel(false);
94107
}
95108
}
96109

97110
public void clearNewPlayers()
98111
{
99-
newPlayers.values().forEach(ScheduledTask::cancel);
112+
newPlayers.values().forEach(task -> task.cancel(false));
100113
newPlayers.clear();
101114
}
102115
}

src/main/java/dev/plex/listener/JoinListener.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,7 @@ public void onJoin(PlayerJoinEvent event)
2525
module.api().logging().debug("Adding {0} to the new player list", player.getName());
2626
module.queueNewPlayer(player);
2727
String playerName = player.getName();
28-
module.scheduler().runGlobal(() -> Bukkit.getOnlinePlayers().forEach(recipient ->
29-
module.scheduler().runEntity(recipient, () ->
30-
{
31-
if (recipient.hasPermission("plex.nush.view"))
32-
{
33-
recipient.sendMessage(module.messageComponent("newPlayerMarked", playerName, module.getTime()));
34-
}
35-
})));
28+
Bukkit.broadcast(module.messageComponent("newPlayerMarked", playerName, module.getTime()), "plex.nush.view");
3629
}
3730
}
3831
}

0 commit comments

Comments
 (0)