Skip to content

Commit f264fd0

Browse files
committed
fix: player list are now only updating uuids not sending the full report
1 parent 5b42cc1 commit f264fd0

14 files changed

Lines changed: 229 additions & 11 deletions

File tree

backends/bukkit/src/main/java/dev/objz/commandbridge/bukkit/Adapter.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import dev.objz.commandbridge.backends.net.in.ExecuteCommandHandler;
77
import dev.objz.commandbridge.backends.net.in.RegistrationHandler;
88
import dev.objz.commandbridge.backends.net.out.ctx.PlayerListContext;
9+
import dev.objz.commandbridge.backends.net.out.ctx.PlayerUpdateContext;
910
import dev.objz.commandbridge.backends.platform.PathsUtil;
1011
import dev.objz.commandbridge.backends.platform.PlatformAdapter;
1112
import dev.objz.commandbridge.backends.platform.cmd.ClientCommands;
@@ -151,16 +152,37 @@ private void sendPlayerList() {
151152
}
152153
}
153154

155+
private void sendPlayerJoin(java.util.UUID playerUuid) {
156+
if (client == null) return;
157+
try {
158+
client.outboundRouter().send(MessageType.PLAYER_JOIN,
159+
new PlayerUpdateContext(playerUuid));
160+
} catch (Exception e) {
161+
Log.debug("Failed to send player join: {}", e.getMessage());
162+
}
163+
}
164+
165+
private void sendPlayerLeave(java.util.UUID playerUuid) {
166+
if (client == null) return;
167+
try {
168+
client.outboundRouter().send(MessageType.PLAYER_LEAVE,
169+
new PlayerUpdateContext(playerUuid));
170+
} catch (Exception e) {
171+
Log.debug("Failed to send player leave: {}", e.getMessage());
172+
}
173+
}
174+
154175
private class PlayerListener implements Listener {
155176
@EventHandler
156177
public void onJoin(PlayerJoinEvent event) {
157-
sendPlayerList();
178+
sendPlayerJoin(event.getPlayer().getUniqueId());
158179
}
159180

160181
@EventHandler
161182
public void onQuit(PlayerQuitEvent event) {
162183
// Delay slightly so the quitting player is removed from online list
163-
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> sendPlayerList(), 1L);
184+
java.util.UUID uuid = event.getPlayer().getUniqueId();
185+
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> sendPlayerLeave(uuid), 1L);
164186
}
165187
}
166188

backends/folia/src/main/java/dev/objz/commandbridge/folia/Adapter.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import dev.objz.commandbridge.backends.net.in.ExecuteCommandHandler;
77
import dev.objz.commandbridge.backends.net.in.RegistrationHandler;
88
import dev.objz.commandbridge.backends.net.out.ctx.PlayerListContext;
9+
import dev.objz.commandbridge.backends.net.out.ctx.PlayerUpdateContext;
910
import dev.objz.commandbridge.backends.platform.PathsUtil;
1011
import dev.objz.commandbridge.backends.platform.PlatformAdapter;
1112
import dev.objz.commandbridge.backends.platform.cmd.ClientCommands;
@@ -146,16 +147,37 @@ private void sendPlayerList() {
146147
}
147148
}
148149

150+
private void sendPlayerJoin(java.util.UUID playerUuid) {
151+
if (client == null) return;
152+
try {
153+
client.outboundRouter().send(MessageType.PLAYER_JOIN,
154+
new PlayerUpdateContext(playerUuid));
155+
} catch (Exception e) {
156+
Log.debug("Failed to send player join: {}", e.getMessage());
157+
}
158+
}
159+
160+
private void sendPlayerLeave(java.util.UUID playerUuid) {
161+
if (client == null) return;
162+
try {
163+
client.outboundRouter().send(MessageType.PLAYER_LEAVE,
164+
new PlayerUpdateContext(playerUuid));
165+
} catch (Exception e) {
166+
Log.debug("Failed to send player leave: {}", e.getMessage());
167+
}
168+
}
169+
149170
private class PlayerListener implements Listener {
150171
@EventHandler
151172
public void onJoin(PlayerJoinEvent event) {
152-
sendPlayerList();
173+
sendPlayerJoin(event.getPlayer().getUniqueId());
153174
}
154175

155176
@EventHandler
156177
public void onQuit(PlayerQuitEvent event) {
157178
// Use Folia async scheduler for slight delay
158-
Bukkit.getAsyncScheduler().runDelayed(plugin, (t) -> sendPlayerList(), 50, TimeUnit.MILLISECONDS);
179+
java.util.UUID uuid = event.getPlayer().getUniqueId();
180+
Bukkit.getAsyncScheduler().runDelayed(plugin, (t) -> sendPlayerLeave(uuid), 50, TimeUnit.MILLISECONDS);
159181
}
160182
}
161183

backends/paper/src/main/java/dev/objz/commandbridge/paper/Adapter.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import dev.objz.commandbridge.backends.net.in.ExecuteCommandHandler;
77
import dev.objz.commandbridge.backends.net.in.RegistrationHandler;
88
import dev.objz.commandbridge.backends.net.out.ctx.PlayerListContext;
9+
import dev.objz.commandbridge.backends.net.out.ctx.PlayerUpdateContext;
910
import dev.objz.commandbridge.backends.platform.PathsUtil;
1011
import dev.objz.commandbridge.backends.platform.PlatformAdapter;
1112
import dev.objz.commandbridge.backends.platform.cmd.ClientCommands;
@@ -151,15 +152,36 @@ private void sendPlayerList() {
151152
}
152153
}
153154

155+
private void sendPlayerJoin(java.util.UUID playerUuid) {
156+
if (client == null) return;
157+
try {
158+
client.outboundRouter().send(MessageType.PLAYER_JOIN,
159+
new PlayerUpdateContext(playerUuid));
160+
} catch (Exception e) {
161+
Log.debug("Failed to send player join: {}", e.getMessage());
162+
}
163+
}
164+
165+
private void sendPlayerLeave(java.util.UUID playerUuid) {
166+
if (client == null) return;
167+
try {
168+
client.outboundRouter().send(MessageType.PLAYER_LEAVE,
169+
new PlayerUpdateContext(playerUuid));
170+
} catch (Exception e) {
171+
Log.debug("Failed to send player leave: {}", e.getMessage());
172+
}
173+
}
174+
154175
private class PlayerListener implements Listener {
155176
@EventHandler
156177
public void onJoin(PlayerJoinEvent event) {
157-
sendPlayerList();
178+
sendPlayerJoin(event.getPlayer().getUniqueId());
158179
}
159180

160181
@EventHandler
161182
public void onQuit(PlayerQuitEvent event) {
162-
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> sendPlayerList(), 1L);
183+
java.util.UUID uuid = event.getPlayer().getUniqueId();
184+
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> sendPlayerLeave(uuid), 1L);
163185
}
164186
}
165187

backends/src/main/java/dev/objz/commandbridge/backends/net/MessageRouter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.objz.commandbridge.backends.net.out.AuthRequest;
55
import dev.objz.commandbridge.backends.net.out.InvokedCommandEvent;
66
import dev.objz.commandbridge.backends.net.out.PlayerListEvent;
7+
import dev.objz.commandbridge.backends.net.out.PlayerUpdateEvent;
78
import dev.objz.commandbridge.logging.Log;
89
import dev.objz.commandbridge.net.InNode;
910
import dev.objz.commandbridge.net.OutNode;
@@ -122,6 +123,8 @@ protected void onClose(WebSocketChannel ch, StreamSourceFrameChannel frameChanne
122123
outNode.register(MessageType.AUTH_REQUEST, new AuthRequest(new AuthService(secret), location));
123124
outNode.register(MessageType.INVOKED_COMMAND, new InvokedCommandEvent());
124125
outNode.register(MessageType.PLAYER_LIST, new PlayerListEvent());
126+
outNode.register(MessageType.PLAYER_JOIN, new PlayerUpdateEvent(MessageType.PLAYER_JOIN));
127+
outNode.register(MessageType.PLAYER_LEAVE, new PlayerUpdateEvent(MessageType.PLAYER_LEAVE));
125128

126129
inNode.register(MessageType.PING, new PingHandler());
127130
}

backends/src/main/java/dev/objz/commandbridge/backends/net/RedisMessageRouter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.objz.commandbridge.backends.net.out.AuthRequest;
55
import dev.objz.commandbridge.backends.net.out.InvokedCommandEvent;
66
import dev.objz.commandbridge.backends.net.out.PlayerListEvent;
7+
import dev.objz.commandbridge.backends.net.out.PlayerUpdateEvent;
78
import dev.objz.commandbridge.logging.Log;
89
import dev.objz.commandbridge.net.Endpoint;
910
import dev.objz.commandbridge.net.InNode;
@@ -71,6 +72,8 @@ public void setupEndpoint(Endpoint endpoint) {
7172
outNode.register(MessageType.AUTH_REQUEST, new AuthRequest(new AuthService(secret), location));
7273
outNode.register(MessageType.INVOKED_COMMAND, new InvokedCommandEvent());
7374
outNode.register(MessageType.PLAYER_LIST, new PlayerListEvent());
75+
outNode.register(MessageType.PLAYER_JOIN, new PlayerUpdateEvent(MessageType.PLAYER_JOIN));
76+
outNode.register(MessageType.PLAYER_LEAVE, new PlayerUpdateEvent(MessageType.PLAYER_LEAVE));
7477
inNode.register(MessageType.PING, new PingHandler());
7578
}
7679

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dev.objz.commandbridge.backends.net.out;
2+
3+
import dev.objz.commandbridge.backends.net.out.ctx.PlayerUpdateContext;
4+
import dev.objz.commandbridge.net.OutboundHandler;
5+
import dev.objz.commandbridge.net.SendOperation;
6+
import dev.objz.commandbridge.net.payloads.util.PlayerUpdatePayload;
7+
import dev.objz.commandbridge.net.proto.Envelope;
8+
import dev.objz.commandbridge.net.proto.MessageType;
9+
10+
public final class PlayerUpdateEvent extends OutboundHandler<PlayerUpdateContext> {
11+
12+
private final MessageType messageType;
13+
14+
public PlayerUpdateEvent(MessageType messageType) {
15+
this.messageType = messageType;
16+
}
17+
18+
@Override
19+
public SendOperation accept(PlayerUpdateContext ctx) {
20+
var payload = Envelope.MAPPER.valueToTree(new PlayerUpdatePayload(ctx.player()));
21+
22+
Envelope env = Envelope.make(
23+
messageType,
24+
clientId,
25+
serverId,
26+
payload);
27+
28+
SendOperation op = send(env);
29+
op.dispatch();
30+
return op;
31+
}
32+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package dev.objz.commandbridge.backends.net.out.ctx;
2+
3+
import java.util.UUID;
4+
5+
public record PlayerUpdateContext(UUID player) {
6+
}

backends/velocity/src/main/java/dev/objz/commandbridge/velocity/Adapter.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import dev.objz.commandbridge.backends.net.in.ExecuteCommandHandler;
1414
import dev.objz.commandbridge.backends.net.in.RegistrationHandler;
1515
import dev.objz.commandbridge.backends.net.out.ctx.PlayerListContext;
16+
import dev.objz.commandbridge.backends.net.out.ctx.PlayerUpdateContext;
1617
import dev.objz.commandbridge.backends.platform.PathsUtil;
1718
import dev.objz.commandbridge.backends.platform.PlatformAdapter;
1819
import dev.objz.commandbridge.backends.platform.bootstrap.VelocityMain;
@@ -159,15 +160,36 @@ private void sendPlayerList() {
159160
}
160161
}
161162

163+
private void sendPlayerJoin(UUID playerUuid) {
164+
if (client == null) return;
165+
try {
166+
client.outboundRouter().send(MessageType.PLAYER_JOIN,
167+
new PlayerUpdateContext(playerUuid));
168+
} catch (Exception e) {
169+
Log.debug("Failed to send player join: {}", e.getMessage());
170+
}
171+
}
172+
173+
private void sendPlayerLeave(UUID playerUuid) {
174+
if (client == null) return;
175+
try {
176+
client.outboundRouter().send(MessageType.PLAYER_LEAVE,
177+
new PlayerUpdateContext(playerUuid));
178+
} catch (Exception e) {
179+
Log.debug("Failed to send player leave: {}", e.getMessage());
180+
}
181+
}
182+
162183
private class PlayerListener {
163184
@Subscribe
164185
public void onPostLogin(PostLoginEvent event) {
165-
sendPlayerList();
186+
sendPlayerJoin(event.getPlayer().getUniqueId());
166187
}
167188

168189
@Subscribe
169190
public void onDisconnect(DisconnectEvent event) {
170-
proxy.getScheduler().buildTask(pluginInstance, () -> sendPlayerList())
191+
UUID uuid = event.getPlayer().getUniqueId();
192+
proxy.getScheduler().buildTask(pluginInstance, () -> sendPlayerLeave(uuid))
171193
.delay(50, TimeUnit.MILLISECONDS)
172194
.schedule();
173195
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package dev.objz.commandbridge.net.payloads.util;
2+
3+
import java.util.UUID;
4+
5+
public record PlayerUpdatePayload(UUID player) {
6+
}

core/src/main/java/dev/objz/commandbridge/net/proto/MessageType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,7 @@ public enum MessageType {
99
EXECUTE_COMMAND_RESULT,
1010
SCHEDULE_LISTENER,
1111
PLAYER_LIST,
12+
PLAYER_JOIN,
13+
PLAYER_LEAVE,
1214
PING, PONG
1315
}

0 commit comments

Comments
 (0)