Skip to content

Commit 76f72b5

Browse files
committed
XaeroLevelMapSender
1 parent 6167988 commit 76f72b5

2 files changed

Lines changed: 91 additions & 64 deletions

File tree

Lines changed: 6 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.turikhay.mc.mapmodcompanion.spigot;
22

33
import com.turikhay.mc.mapmodcompanion.*;
4-
import org.bukkit.World;
5-
import org.bukkit.entity.Player;
64
import org.bukkit.event.EventHandler;
75
import org.bukkit.event.EventPriority;
86
import org.bukkit.event.HandlerList;
@@ -11,30 +9,26 @@
119
import org.bukkit.event.player.PlayerEvent;
1210
import org.bukkit.event.player.PlayerJoinEvent;
1311

14-
import java.util.Arrays;
15-
import java.util.Locale;
16-
import java.util.UUID;
1712
import java.util.concurrent.Executors;
1813
import java.util.concurrent.ScheduledExecutorService;
19-
import java.util.concurrent.TimeUnit;
2014
import java.util.logging.Logger;
2115

2216
public class XaeroHandler implements Handler, Listener {
2317
private final Logger logger;
24-
private final String configPath;
2518
private final String channelName;
2619
private final MapModCompanion plugin;
2720
private final ScheduledExecutorService scheduler;
21+
private final XaeroLevelMapSender sender;
2822

2923
public XaeroHandler(Logger logger, String configPath, String channelName, MapModCompanion plugin) {
3024
this.logger = logger;
31-
this.configPath = configPath;
3225
this.channelName = channelName;
3326
this.plugin = plugin;
3427

3528
this.scheduler = Executors.newSingleThreadScheduledExecutor(
3629
new DaemonThreadFactory(ILogger.ofJava(logger), XaeroHandler.class)
3730
);
31+
this.sender = new XaeroLevelMapSender(logger, plugin, channelName, configPath, scheduler);
3832
}
3933

4034
public void init() throws InitializationException {
@@ -53,36 +47,16 @@ public void cleanUp() {
5347

5448
@EventHandler(priority = EventPriority.MONITOR)
5549
public void onPlayerJoined(PlayerJoinEvent event) {
56-
sendPacket(event, Type.JOIN);
50+
sendPacket(event, XaeroLevelMapSender.EventSource.JOIN);
5751
}
5852

5953
@EventHandler(priority = EventPriority.MONITOR)
6054
public void onWorldChanged(PlayerChangedWorldEvent event) {
61-
sendPacket(event, Type.WORLD_CHANGE);
55+
sendPacket(event, XaeroLevelMapSender.EventSource.WORLD_CHANGE);
6256
}
6357

64-
private void sendPacket(PlayerEvent event, Type type) {
65-
Player p = event.getPlayer();
66-
World world = p.getWorld();
67-
int id = plugin.getRegistry().getId(world);
68-
byte[] payload = LevelMapProperties.Serializer.instance().serialize(id);
69-
SendPayloadTask task = new SendPayloadTask(logger, plugin, p.getUniqueId(), channelName, payload, world.getUID());
70-
int repeatTimes = plugin.getConfig().getInt(
71-
configPath + ".events." + type.name().toLowerCase(Locale.ROOT) + ".repeat_times",
72-
1
73-
);
74-
if (repeatTimes > 1) {
75-
for (int i = 0; i < repeatTimes; i++) {
76-
scheduler.schedule(task, i, TimeUnit.SECONDS);
77-
}
78-
} else {
79-
task.run();
80-
}
81-
}
82-
83-
private enum Type {
84-
JOIN,
85-
WORLD_CHANGE,
58+
private void sendPacket(PlayerEvent event, XaeroLevelMapSender.EventSource source) {
59+
sender.sendPacket(event.getPlayer(), source);
8660
}
8761

8862
public static class Factory implements Handler.Factory<MapModCompanion> {
@@ -111,37 +85,5 @@ public XaeroHandler create(MapModCompanion plugin) throws InitializationExceptio
11185
}
11286
}
11387

114-
private static class SendPayloadTask implements Runnable {
115-
private final Logger logger;
116-
private final MapModCompanion plugin;
117-
private final UUID playerId;
118-
private final String channelName;
119-
private final byte[] payload;
120-
private final UUID expectedWorld;
121-
122-
public SendPayloadTask(Logger logger, MapModCompanion plugin, UUID playerId, String channelName, byte[] payload,
123-
UUID expectedWorld) {
124-
this.logger = logger;
125-
this.plugin = plugin;
126-
this.playerId = playerId;
127-
this.channelName = channelName;
128-
this.payload = payload;
129-
this.expectedWorld = expectedWorld;
130-
}
13188

132-
@Override
133-
public void run() {
134-
Player player = plugin.getServer().getPlayer(playerId);
135-
if (player == null) {
136-
return;
137-
}
138-
UUID world = player.getWorld().getUID();
139-
if (!world.equals(expectedWorld)) {
140-
logger.fine("Skipping sending Xaero's LevelMapProperties to " + player.getName() + ": unexpected world");
141-
return;
142-
}
143-
logger.fine(() -> "Sending Xaero's LevelMapProperties to " + player.getName() + ": " + Arrays.toString(payload));
144-
player.sendPluginMessage(plugin, channelName, payload);
145-
}
146-
}
14789
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.turikhay.mc.mapmodcompanion.spigot;
2+
3+
import com.turikhay.mc.mapmodcompanion.LevelMapProperties;
4+
import org.bukkit.World;
5+
import org.bukkit.entity.Player;
6+
7+
import java.util.Arrays;
8+
import java.util.Locale;
9+
import java.util.UUID;
10+
import java.util.concurrent.ScheduledExecutorService;
11+
import java.util.concurrent.TimeUnit;
12+
import java.util.logging.Logger;
13+
14+
class XaeroLevelMapSender {
15+
private final Logger logger;
16+
private final MapModCompanion plugin;
17+
private final String channelName;
18+
private final String configPath;
19+
private final ScheduledExecutorService scheduler;
20+
21+
XaeroLevelMapSender(Logger logger, MapModCompanion plugin, String channelName, String configPath, ScheduledExecutorService scheduler) {
22+
this.logger = logger;
23+
this.plugin = plugin;
24+
this.channelName = channelName;
25+
this.configPath = configPath;
26+
this.scheduler = scheduler;
27+
}
28+
29+
void sendPacket(Player p, EventSource source) {
30+
World world = p.getWorld();
31+
int id = plugin.getRegistry().getId(world);
32+
byte[] payload = LevelMapProperties.Serializer.instance().serialize(id);
33+
SendPayloadTask task = new SendPayloadTask(logger, plugin, p.getUniqueId(), channelName, payload, world.getUID());
34+
int repeatTimes = plugin.getConfig().getInt(
35+
configPath + ".events." + source.name().toLowerCase(Locale.ROOT) + ".repeat_times",
36+
1
37+
);
38+
if (repeatTimes > 1) {
39+
for (int i = 0; i < repeatTimes; i++) {
40+
scheduler.schedule(task, i, TimeUnit.SECONDS);
41+
}
42+
} else {
43+
task.run();
44+
}
45+
}
46+
47+
enum EventSource {
48+
JOIN,
49+
WORLD_CHANGE,
50+
}
51+
52+
private static class SendPayloadTask implements Runnable {
53+
private final Logger logger;
54+
private final MapModCompanion plugin;
55+
private final UUID playerId;
56+
private final String channelName;
57+
private final byte[] payload;
58+
private final UUID expectedWorld;
59+
60+
public SendPayloadTask(Logger logger, MapModCompanion plugin, UUID playerId, String channelName, byte[] payload,
61+
UUID expectedWorld) {
62+
this.logger = logger;
63+
this.plugin = plugin;
64+
this.playerId = playerId;
65+
this.channelName = channelName;
66+
this.payload = payload;
67+
this.expectedWorld = expectedWorld;
68+
}
69+
70+
@Override
71+
public void run() {
72+
Player player = plugin.getServer().getPlayer(playerId);
73+
if (player == null) {
74+
return;
75+
}
76+
UUID world = player.getWorld().getUID();
77+
if (!world.equals(expectedWorld)) {
78+
logger.fine("Skipping sending Xaero's LevelMapProperties to " + player.getName() + ": unexpected world");
79+
return;
80+
}
81+
logger.fine(() -> "Sending Xaero's LevelMapProperties to " + player.getName() + ": " + Arrays.toString(payload));
82+
player.sendPluginMessage(plugin, channelName, payload);
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)