Skip to content

Commit b474694

Browse files
committed
refactor(spigot): cache listening whitelist on protocollib listener
1 parent d9a6b71 commit b474694

File tree

1 file changed

+38
-34
lines changed

1 file changed

+38
-34
lines changed

triton-spigot/src/main/java/com/rexcantor64/triton/spigot/packetinterceptor/ProtocolLibListener.java

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.rexcantor64.triton.spigot.wrappers.WrappedClientConfiguration;
3535
import com.rexcantor64.triton.utils.ComponentUtils;
3636
import com.rexcantor64.triton.wrappers.WrappedPlayerChatMessage;
37+
import lombok.Getter;
3738
import lombok.val;
3839
import net.kyori.adventure.text.Component;
3940
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
@@ -85,6 +86,11 @@ public class ProtocolLibListener implements PacketListener {
8586
private final Map<PacketType, HandlerFunction> packetHandlers = new HashMap<>();
8687
private final AtomicBoolean firstRun = new AtomicBoolean(true);
8788

89+
@Getter
90+
private ListeningWhitelist sendingWhitelist;
91+
@Getter
92+
private ListeningWhitelist receivingWhitelist;
93+
8894
public ProtocolLibListener(SpigotTriton main, HandlerFunction.HandlerType... allowedTypes) {
8995
this.main = main;
9096
this.allowedTypes = Arrays.asList(allowedTypes);
@@ -185,6 +191,38 @@ private void setupPacketHandlers() {
185191
bossBarPacketHandler.registerPacketTypes(packetHandlers);
186192
entitiesPacketHandler.registerPacketTypes(packetHandlers);
187193
signPacketHandler.registerPacketTypes(packetHandlers);
194+
195+
setupListenerWhitelists();
196+
}
197+
198+
private void setupListenerWhitelists() {
199+
val sendingTypes = packetHandlers.entrySet().stream()
200+
.filter(entry -> this.allowedTypes.contains(entry.getValue().getHandlerType()))
201+
.map(Map.Entry::getKey)
202+
.collect(Collectors.toList());
203+
204+
sendingWhitelist = ListeningWhitelist.newBuilder()
205+
.gamePhase(GamePhase.PLAYING)
206+
.types(sendingTypes)
207+
.mergeOptions(ListenerOptions.ASYNC)
208+
.highest()
209+
.build();
210+
211+
val receivingTypes = new ArrayList<PacketType>();
212+
if (this.allowedTypes.contains(HandlerFunction.HandlerType.SYNC)) {
213+
// only listen for these packets in the sync handler
214+
receivingTypes.add(PacketType.Play.Client.SETTINGS);
215+
if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { // MC 1.20.2
216+
receivingTypes.add(PacketType.Configuration.Client.CLIENT_INFORMATION);
217+
}
218+
}
219+
220+
receivingWhitelist = ListeningWhitelist.newBuilder()
221+
.gamePhase(GamePhase.PLAYING)
222+
.types(receivingTypes)
223+
.mergeOptions(ListenerOptions.ASYNC)
224+
.highest()
225+
.build();
188226
}
189227

190228
/* PACKET HANDLERS */
@@ -821,40 +859,6 @@ public void onPacketReceiving(PacketEvent packet) {
821859
}
822860
}
823861

824-
@Override
825-
public ListeningWhitelist getSendingWhitelist() {
826-
val types = packetHandlers.entrySet().stream()
827-
.filter(entry -> this.allowedTypes.contains(entry.getValue().getHandlerType()))
828-
.map(Map.Entry::getKey)
829-
.collect(Collectors.toList());
830-
831-
return ListeningWhitelist.newBuilder()
832-
.gamePhase(GamePhase.PLAYING)
833-
.types(types)
834-
.mergeOptions(ListenerOptions.ASYNC)
835-
.highest()
836-
.build();
837-
}
838-
839-
@Override
840-
public ListeningWhitelist getReceivingWhitelist() {
841-
val types = new ArrayList<PacketType>();
842-
if (this.allowedTypes.contains(HandlerFunction.HandlerType.SYNC)) {
843-
// only listen for these packets in the sync handler
844-
types.add(PacketType.Play.Client.SETTINGS);
845-
if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { // MC 1.20.2
846-
types.add(PacketType.Configuration.Client.CLIENT_INFORMATION);
847-
}
848-
}
849-
850-
return ListeningWhitelist.newBuilder()
851-
.gamePhase(GamePhase.PLAYING)
852-
.types(types)
853-
.mergeOptions(ListenerOptions.ASYNC)
854-
.highest()
855-
.build();
856-
}
857-
858862
/* REFRESH */
859863

860864
public void refreshSigns(SpigotLanguagePlayer player) {

0 commit comments

Comments
 (0)