Skip to content

Commit

Permalink
Provide better Plugin concurrency and fix a bug in DropdownComponent
Browse files Browse the repository at this point in the history
  • Loading branch information
bundabrg committed Jul 11, 2020
1 parent ac20e61 commit fb27df9
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

public class DropdownComponent extends FormComponent {
Expand All @@ -38,7 +39,7 @@ public class DropdownComponent extends FormComponent {

@Getter
@Setter
private List<String> options;
private List<String> options = new ArrayList<>();

@Getter
@Setter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Class<? extends GeyserEvent>, PriorityQueue<EventHandler<? extends GeyserEvent>>> eventHandlers = new HashMap<>();
private final Map<Class<? extends GeyserEvent>, PriorityBlockingQueue<EventHandler<? extends GeyserEvent>>> eventHandlers = new ConcurrentHashMap<>();
private final Map<Object, ArrayList<EventHandler<?>>> classEventHandlers = new HashMap<>();

private final GeyserConnector connector;
Expand All @@ -68,6 +69,7 @@ public EventManager(GeyserConnector connector) {
*/
public <T extends GeyserEvent> TriggerResult<T> triggerEvent(T event, Class<?> filter) {
if (eventHandlers.containsKey(event.getClass())) {

for (EventHandler<?> handler : eventHandlers.get(event.getClass())) {
if (handler.hasFilter(filter)) {
try {
Expand Down Expand Up @@ -98,7 +100,7 @@ public <T extends GeyserEvent> LambdaEventHandler.Builder<T> on(Class<T> cls, La
*/
public <T extends GeyserEvent> void register(EventHandler<T> handler) {
if (!eventHandlers.containsKey(handler.getEventClass())) {
eventHandlers.put(handler.getEventClass(), new PriorityQueue<>());
eventHandlers.put(handler.getEventClass(), new PriorityBlockingQueue<>());
}
eventHandlers.get(handler.getEventClass()).add(handler);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ public Builder<T> filter(Class<?>[] filter) {
return this;
}

public Builder<T> filter(Class<?> filter) {
this.filter = new Class<?>[]{filter};
return this;
}

public LambdaEventHandler<T> build() {
LambdaEventHandler<T> handler = new LambdaEventHandler<>(manager, cls, runnable, priority, ignoreCancelled, filter);
manager.register(handler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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) {
Expand All @@ -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()));
}
Expand Down

0 comments on commit fb27df9

Please sign in to comment.