Skip to content

Commit fea324d

Browse files
committed
Dispatch events asynchronously
1 parent d46b74e commit fea324d

6 files changed

Lines changed: 66 additions & 13 deletions

File tree

bukkit/src/main/java/com/cssbham/cssminecraft/bukkit/BukkitCSSMinecraftPlugin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import com.cssbham.cssminecraft.bukkit.logger.BukkitLogger;
88
import com.cssbham.cssminecraft.common.AbstractCSSMinecraftPlugin;
99
import com.cssbham.cssminecraft.common.adapter.ServerChatAdapter;
10-
import com.cssbham.cssminecraft.common.command.CommandSender;
1110
import com.cssbham.cssminecraft.common.command.CommandService;
1211
import com.cssbham.cssminecraft.common.executor.ServerExecutor;
1312
import com.cssbham.cssminecraft.common.logger.Logger;
@@ -39,7 +38,7 @@ public BukkitCSSMinecraftPlugin(JavaPlugin plugin) {
3938
public void enable() {
4039
super.enable();
4140

42-
BukkitEventListener eventListener = new BukkitEventListener(plugin);
41+
BukkitEventListener eventListener = new BukkitEventListener(plugin, executor);
4342
eventListener.bindPlatformToEventBus(super.getEventBus());
4443

4544
plugin.getCommand("makegreen").setExecutor(commandService);

bukkit/src/main/java/com/cssbham/cssminecraft/bukkit/listener/BukkitEventListener.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.cssbham.cssminecraft.common.event.EventBus;
55
import com.cssbham.cssminecraft.common.event.PlatformEventAdapter;
66
import com.cssbham.cssminecraft.common.event.events.ServerMessageEvent;
7+
import com.cssbham.cssminecraft.common.executor.ServerExecutor;
78
import net.kyori.adventure.text.Component;
89
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
910
import org.bukkit.entity.Player;
@@ -19,10 +20,12 @@
1920
public class BukkitEventListener implements Listener, PlatformEventAdapter {
2021

2122
private final JavaPlugin plugin;
23+
private final ServerExecutor executor;
2224
private EventBus eventBus;
2325

24-
public BukkitEventListener(JavaPlugin plugin) {
26+
public BukkitEventListener(JavaPlugin plugin, ServerExecutor executor) {
2527
this.plugin = plugin;
28+
this.executor = executor;
2629
}
2730

2831
@Override
@@ -35,9 +38,7 @@ public void bindPlatformToEventBus(EventBus eventBus) {
3538
private void dispatchEvent(Event event) {
3639
Objects.requireNonNull(event, "event bus not bound");
3740

38-
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, () -> {
39-
eventBus.dispatch(event);
40-
});
41+
executor.doAsync(() -> eventBus.dispatch(event));
4142
}
4243

4344
@EventHandler

fabric/src/main/java/com/cssbham/cssminecraft/fabric/FabricCSSMinecraftPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void enable() {
4040

4141
super.enable();
4242

43-
FabricEventAdapter eventAdapter = new FabricEventAdapter();
43+
FabricEventAdapter eventAdapter = new FabricEventAdapter(executor);
4444
eventAdapter.bindPlatformToEventBus(super.getEventBus());
4545
}
4646

fabric/src/main/java/com/cssbham/cssminecraft/fabric/listener/FabricEventAdapter.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
package com.cssbham.cssminecraft.fabric.listener;
22

3+
import com.cssbham.cssminecraft.common.event.Event;
34
import com.cssbham.cssminecraft.common.event.EventBus;
45
import com.cssbham.cssminecraft.common.event.PlatformEventAdapter;
56
import com.cssbham.cssminecraft.common.event.events.PlayerJoinEvent;
7+
import com.cssbham.cssminecraft.common.event.events.PlayerQuitEvent;
68
import com.cssbham.cssminecraft.common.event.events.ServerMessageEvent;
9+
import com.cssbham.cssminecraft.common.executor.ServerExecutor;
710
import net.fabricmc.fabric.api.message.v1.ServerMessageEvents;
811
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
912
import net.minecraft.server.network.ServerPlayerEntity;
1013

1114
public class FabricEventAdapter implements PlatformEventAdapter {
15+
16+
private final ServerExecutor executor;
17+
18+
public FabricEventAdapter(ServerExecutor executor) {
19+
this.executor = executor;
20+
}
21+
1222
@Override
1323
public void bindPlatformToEventBus(EventBus eventBus) {
14-
//TODO dispatch from thread
1524
ServerMessageEvents.CHAT_MESSAGE.register((message, player, parameters) -> {
1625
String name = player.getName().getString();
1726

18-
eventBus.dispatch(new ServerMessageEvent(
27+
dispatchEvent(eventBus, new ServerMessageEvent(
1928
player.getUuid(),
2029
player.getName().getString(),
2130
(null == player.getDisplayName()) ? name : player.getDisplayName().getString(),
@@ -27,7 +36,7 @@ public void bindPlatformToEventBus(EventBus eventBus) {
2736
ServerPlayerEntity player = handler.getPlayer();
2837
String name = player.getName().getString();
2938

30-
eventBus.dispatch(new PlayerJoinEvent(
39+
dispatchEvent(eventBus, new PlayerJoinEvent(
3140
player.getUuid(),
3241
player.getName().getString(),
3342
(null == player.getDisplayName()) ? name : player.getDisplayName().getString(),
@@ -39,12 +48,16 @@ public void bindPlatformToEventBus(EventBus eventBus) {
3948
ServerPlayerEntity player = handler.getPlayer();
4049
String name = player.getName().getString();
4150

42-
eventBus.dispatch(new PlayerJoinEvent(
51+
dispatchEvent(eventBus, new PlayerQuitEvent(
4352
player.getUuid(),
4453
player.getName().getString(),
4554
(null == player.getDisplayName()) ? name : player.getDisplayName().getString(),
4655
server.getCurrentPlayerCount() - 1
4756
));
4857
});
4958
}
59+
60+
private void dispatchEvent(EventBus eventBus, Event event) {
61+
executor.doAsync(() -> eventBus.dispatch(event));
62+
}
5063
}

forge/src/main/java/com/cssbham/cssminecraft/forge/ForgeCSSMinecraftPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void enable() {
4040

4141
super.enable();
4242

43-
ForgeEventAdapter eventAdapter = new ForgeEventAdapter();
43+
ForgeEventAdapter eventAdapter = new ForgeEventAdapter(server, executor);
4444
eventAdapter.bindPlatformToEventBus(super.getEventBus());
4545
}
4646

forge/src/main/java/com/cssbham/cssminecraft/forge/listener/ForgeEventAdapter.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,30 @@
33
import com.cssbham.cssminecraft.common.event.Event;
44
import com.cssbham.cssminecraft.common.event.EventBus;
55
import com.cssbham.cssminecraft.common.event.PlatformEventAdapter;
6+
import com.cssbham.cssminecraft.common.event.events.PlayerJoinEvent;
7+
import com.cssbham.cssminecraft.common.event.events.PlayerQuitEvent;
68
import com.cssbham.cssminecraft.common.event.events.ServerMessageEvent;
9+
import com.cssbham.cssminecraft.common.executor.ServerExecutor;
10+
import net.minecraft.server.MinecraftServer;
711
import net.minecraft.server.level.ServerPlayer;
12+
import net.minecraft.world.entity.player.Player;
813
import net.minecraftforge.common.MinecraftForge;
914
import net.minecraftforge.event.ServerChatEvent;
15+
import net.minecraftforge.event.entity.player.PlayerEvent;
1016
import net.minecraftforge.eventbus.api.SubscribeEvent;
1117

1218
import java.util.Objects;
1319

1420
public class ForgeEventAdapter implements PlatformEventAdapter {
1521

22+
private final MinecraftServer server;
23+
private final ServerExecutor executor;
24+
25+
public ForgeEventAdapter(MinecraftServer server, ServerExecutor executor) {
26+
this.server = server;
27+
this.executor = executor;
28+
}
29+
1630
private EventBus eventBus;
1731

1832
@Override
@@ -25,7 +39,7 @@ public void bindPlatformToEventBus(EventBus eventBus) {
2539
private void dispatchEvent(Event event) {
2640
Objects.requireNonNull(event, "event bus not bound");
2741

28-
eventBus.dispatch(event);
42+
executor.doAsync(() -> eventBus.dispatch(event));
2943
}
3044

3145
@SubscribeEvent
@@ -40,4 +54,30 @@ public void onChat(ServerChatEvent event) {
4054
event.getRawText()
4155
));
4256
}
57+
58+
@SubscribeEvent
59+
public void onLogin(PlayerEvent.PlayerLoggedInEvent event) {
60+
Player player = event.getEntity();
61+
String name = player.getName().getString();
62+
63+
dispatchEvent(new PlayerJoinEvent(
64+
player.getUUID(),
65+
name,
66+
(null == player.getDisplayName()) ? name : player.getDisplayName().getString(),
67+
server.getPlayerCount() + 1
68+
));
69+
}
70+
71+
@SubscribeEvent
72+
public void onLogout(PlayerEvent.PlayerLoggedOutEvent event) {
73+
Player player = event.getEntity();
74+
String name = player.getName().getString();
75+
76+
dispatchEvent(new PlayerQuitEvent(
77+
player.getUUID(),
78+
name,
79+
(null == player.getDisplayName()) ? name : player.getDisplayName().getString(),
80+
server.getPlayerCount() - 1
81+
));
82+
}
4383
}

0 commit comments

Comments
 (0)