diff --git a/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java b/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java index 4dac6b04385..9bb5589572e 100644 --- a/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java +++ b/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; import java.util.List; public class DropdownComponent extends FormComponent { @@ -38,7 +39,7 @@ public class DropdownComponent extends FormComponent { @Getter @Setter - private List options; + private List options = new ArrayList<>(); @Getter @Setter diff --git a/connector/src/main/java/org/geysermc/connector/event/EventManager.java b/connector/src/main/java/org/geysermc/connector/event/EventManager.java index e9d1f9720c5..74a30c631e3 100644 --- a/connector/src/main/java/org/geysermc/connector/event/EventManager.java +++ b/connector/src/main/java/org/geysermc/connector/event/EventManager.java @@ -41,14 +41,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.PriorityQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; @SuppressWarnings("unused") @Getter public class EventManager { @Getter private static EventManager instance; - private final Map, PriorityQueue>> eventHandlers = new HashMap<>(); + private final Map, PriorityBlockingQueue>> eventHandlers = new ConcurrentHashMap<>(); private final Map>> classEventHandlers = new HashMap<>(); private final GeyserConnector connector; @@ -68,6 +69,7 @@ public EventManager(GeyserConnector connector) { */ public TriggerResult triggerEvent(T event, Class filter) { if (eventHandlers.containsKey(event.getClass())) { + for (EventHandler handler : eventHandlers.get(event.getClass())) { if (handler.hasFilter(filter)) { try { @@ -98,7 +100,7 @@ public LambdaEventHandler.Builder on(Class cls, La */ public void register(EventHandler handler) { if (!eventHandlers.containsKey(handler.getEventClass())) { - eventHandlers.put(handler.getEventClass(), new PriorityQueue<>()); + eventHandlers.put(handler.getEventClass(), new PriorityBlockingQueue<>()); } eventHandlers.get(handler.getEventClass()).add(handler); } diff --git a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java index 4091c6cf616..e5aab6f5e20 100644 --- a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java +++ b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java @@ -105,6 +105,11 @@ public Builder filter(Class[] filter) { return this; } + public Builder filter(Class filter) { + this.filter = new Class[]{filter}; + return this; + } + public LambdaEventHandler build() { LambdaEventHandler handler = new LambdaEventHandler<>(manager, cls, runnable, priority, ignoreCancelled, filter); manager.register(handler); diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java index c01288c9ad0..fb1ebfd61f3 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -103,7 +103,7 @@ public boolean handle(ResourcePackClientResponsePacket packet) { @Override public boolean handle(ModalFormResponsePacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), ModalFormResponsePacket.class).isCancelled()) { + if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), packet.getClass()).isCancelled()) { return true; } @@ -129,10 +129,6 @@ private boolean couldLoginUserByName(String bedrockUsername) { @Override public boolean handle(SetLocalPlayerAsInitializedPacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), SetLocalPlayerAsInitializedPacket.class).isCancelled()) { - return true; - } - LanguageUtils.loadGeyserLocale(session.getClientData().getLanguageCode()); if (!session.isLoggedIn() && !session.isLoggingIn() && session.getConnector().getAuthType() == AuthType.ONLINE) { @@ -147,10 +143,6 @@ public boolean handle(SetLocalPlayerAsInitializedPacket packet) { @Override public boolean handle(MovePlayerPacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), MovePlayerPacket.class).isCancelled()) { - return true; - } - if (session.isLoggingIn()) { session.sendMessage(LanguageUtils.getPlayerLocaleString("geyser.auth.login.wait", session.getClientData().getLanguageCode())); } diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 08be7fdd7bd..3ab423197a4 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 +Subproject commit 3ab423197a4a308665ad1dcb28cab522aabc0815