11package com .turikhay .mc .mapmodcompanion .spigot ;
22
33import com .turikhay .mc .mapmodcompanion .*;
4- import org .bukkit .World ;
5- import org .bukkit .entity .Player ;
64import org .bukkit .event .EventHandler ;
75import org .bukkit .event .EventPriority ;
86import org .bukkit .event .HandlerList ;
119import org .bukkit .event .player .PlayerEvent ;
1210import org .bukkit .event .player .PlayerJoinEvent ;
1311
14- import java .util .Arrays ;
15- import java .util .Locale ;
16- import java .util .UUID ;
1712import java .util .concurrent .Executors ;
1813import java .util .concurrent .ScheduledExecutorService ;
19- import java .util .concurrent .TimeUnit ;
2014import java .util .logging .Logger ;
2115
2216public 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}
0 commit comments