44import dev .plex .api .config .ModuleConfiguration ;
55import dev .plex .guild .Guild ;
66import dev .plex .guild .GuildHolder ;
7+ import dev .plex .guild .GuildMutationService ;
78import dev .plex .handler .ChatHandlerImpl ;
89import dev .plex .handler .GuildMenuListener ;
910import dev .plex .handler .GuildWorldProtectionListener ;
1920import org .bukkit .entity .Player ;
2021
2122import java .sql .SQLException ;
23+ import java .time .ZoneId ;
24+ import java .util .Set ;
25+ import java .util .stream .Collectors ;
2226
2327@ Getter
2428public class Guilds extends PlexModule
@@ -27,28 +31,29 @@ public class Guilds extends PlexModule
2731 private static final String ASP_LOADER_CLASS = "com.infernalsuite.asp.api.loaders.SlimeLoader" ;
2832 private static final String ASP_WORLD_SERVICE_CLASS = "dev.plex.world.AspGuildWorldService" ;
2933
30- private static Guilds module ;
3134 private final GuildHolder guildHolder = new GuildHolder ();
32- private final GuildMenuListener guildMenuListener = new GuildMenuListener ();
33- private final GuildWorldProtectionListener guildWorldProtectionListener = new GuildWorldProtectionListener ();
34- private final RankPermissionMenuListener rankPermissionMenuListener = new RankPermissionMenuListener ();
35+ private final GuildMutationService guildMutationService = new GuildMutationService (this );
36+ private final GuildMenuListener guildMenuListener = new GuildMenuListener (this , guildMutationService );
37+ private final GuildWorldProtectionListener guildWorldProtectionListener = new GuildWorldProtectionListener (this );
38+ private final RankPermissionMenuListener rankPermissionMenuListener = new RankPermissionMenuListener (this );
3539
3640 private GuildWorldService guildWorldService ;
3741
3842 private GuildRepository guildRepository ;
3943
4044 private ModuleConfiguration config ;
45+ private ZoneId zoneId ;
4146 private volatile boolean ready ;
4247 private volatile boolean loadFailed ;
4348
4449 @ Override
4550 public void load ()
4651 {
47- module = this ;
4852 config = api ().moduleConfigs ().create (this , "config.yml" );
4953 config .load ();
54+ zoneId = ZoneId .of (api ().configuration ().mainConfig ().getString ("server.timezone" , "Etc/UTC" ));
5055 loadMessages ("messages.yml" );
51- this .registerCommand (new GuildCommand ());
56+ this .registerCommand (new GuildCommand (this ));
5257 }
5358
5459 @ Override
@@ -66,7 +71,7 @@ public void enable()
6671 {
6772 throw new IllegalStateException ("Failed to run Guilds migrations" , e );
6873 }
69- guildRepository = new JdbiGuildRepository (storage );
74+ guildRepository = new JdbiGuildRepository (storage , scheduler (). asyncExecutor (), zoneId );
7075 guildRepository .loadGuilds ().whenComplete ((guilds , throwable ) ->
7176 {
7277 if (throwable != null )
@@ -79,7 +84,7 @@ public void enable()
7984 guildHolder .replaceAll (guilds );
8085 ready = true ;
8186 });
82- registerListener (new ChatHandlerImpl ());
87+ registerListener (new ChatHandlerImpl (this ));
8388 registerListener (guildMenuListener );
8489 registerListener (guildWorldProtectionListener );
8590 registerListener (rankPermissionMenuListener );
@@ -111,7 +116,7 @@ private void enableGuildWorlds()
111116
112117 Class <? extends GuildWorldService > serviceClass = Class .forName (ASP_WORLD_SERVICE_CLASS , true , classLoader )
113118 .asSubclass (GuildWorldService .class );
114- GuildWorldService service = serviceClass .getConstructor ().newInstance ();
119+ GuildWorldService service = serviceClass .getConstructor (Guilds . class ).newInstance (this );
115120 service .enable ();
116121 guildWorldService = service ;
117122 }
@@ -121,20 +126,19 @@ private void enableGuildWorlds()
121126 }
122127 }
123128
124- public void broadcastToGuild (Guild guild , Component message )
129+ public java . util . concurrent . CompletableFuture < Void > broadcastToGuild (Guild guild , Component message )
125130 {
126- guild .getMembers ().forEach (member ->
131+ java .util .concurrent .CompletableFuture <Void > completion = new java .util .concurrent .CompletableFuture <>();
132+ Set <java .util .UUID > recipients = guild .getMembers ().stream ().map (member -> member .getUuid ()).collect (Collectors .toSet ());
133+ scheduler ().runGlobal (() ->
127134 {
128- Player player = Bukkit .getPlayer (member .getUuid ());
129- if (player != null )
135+ for (Player player : java .util .List .copyOf (Bukkit .getOnlinePlayers ()))
130136 {
131- player .sendMessage (message );
137+ if ( recipients . contains ( player . getUniqueId ())) player .sendMessage (message );
132138 }
139+ completion .complete (null );
133140 });
141+ return completion ;
134142 }
135143
136- public static Guilds get ()
137- {
138- return module ;
139- }
140144}
0 commit comments