Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .idea/copyright/Geyser.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/copyright/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {

group = "org.geysermc.event"

version = "1.1-SNAPSHOT"
version = "1.1.1-SNAPSHOT"

repositories { mavenCentral() }

Expand All @@ -19,6 +19,7 @@ dependencies {
implementation("org.slf4j", "slf4j-api", "2.0.7")

compileOnly("org.checkerframework", "checker-qual", "3.19.0")
compileOnly("org.jspecify", "jspecify", "1.0.0")

testImplementation("org.junit.jupiter", "junit-jupiter-api", "5.8.2")
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", "5.8.2")
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/org/geysermc/event/FireResult.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -27,7 +27,6 @@
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.subscribe.Subscriber;

public class FireResult {
Expand All @@ -51,7 +50,7 @@ public Map<Subscriber<?>, Throwable> exceptions() {
return exceptions;
}

public static FireResult resultFor(@NonNull Map<Subscriber<?>, Throwable> exceptions) {
public static FireResult resultFor(Map<Subscriber<?>, Throwable> exceptions) {
Objects.requireNonNull(exceptions);
if (exceptions.isEmpty()) {
return ok();
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/org/geysermc/event/bus/BaseBus.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand All @@ -25,7 +25,6 @@
package org.geysermc.event.bus;

import java.util.Set;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.FireResult;
import org.geysermc.event.subscribe.Subscriber;

Expand All @@ -35,22 +34,22 @@ public interface BaseBus<E, S extends Subscriber<? extends E>> {
*
* @param subscription the event subscription
*/
void unsubscribe(@NonNull S subscription);
void unsubscribe(S subscription);

/**
* Fires the given event and log all exceptions that occur while executing this event.
*
* @param event the event to fire
*/
FireResult fire(@NonNull E event);
FireResult fire(E event);

/**
* Fires the given event silently.
*
* @param event the event to fire
* @return the result of firing the given event
*/
FireResult fireSilently(@NonNull E event);
FireResult fireSilently(E event);

/**
* Gets the subscriptions for the given event class.
Expand All @@ -59,5 +58,5 @@ public interface BaseBus<E, S extends Subscriber<? extends E>> {
* @param <T> the value
* @return the subscriptions for the event class
*/
@NonNull <T extends E> Set<? extends Subscriber<T>> subscribers(@NonNull Class<T> eventClass);
<T extends E> Set<? extends Subscriber<T>> subscribers(Class<T> eventClass);
}
10 changes: 4 additions & 6 deletions src/main/java/org/geysermc/event/bus/EventBus.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand All @@ -25,7 +25,6 @@
package org.geysermc.event.bus;

import java.util.function.Consumer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.PostOrder;
import org.geysermc.event.subscribe.Subscriber;

Expand All @@ -35,12 +34,11 @@ public interface EventBus<E, S extends Subscriber<? extends E>> extends BaseBus<
*
* @param listener the listener
*/
void register(@NonNull Object listener);
void register(Object listener);

@NonNull <T extends E, U extends Subscriber<T>> U subscribe(@NonNull Class<T> eventClass, @NonNull Consumer<T> consumer);
<T extends E, U extends Subscriber<T>> U subscribe(Class<T> eventClass, Consumer<T> consumer);

@NonNull <T extends E, U extends Subscriber<T>> U subscribe(
@NonNull Class<T> eventClass, @NonNull Consumer<T> consumer, @NonNull PostOrder postOrder);
<T extends E, U extends Subscriber<T>> U subscribe(Class<T> eventClass, Consumer<T> consumer, PostOrder postOrder);

void unregisterAll();
}
19 changes: 7 additions & 12 deletions src/main/java/org/geysermc/event/bus/OwnedEventBus.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand All @@ -26,7 +26,6 @@

import java.util.Set;
import java.util.function.Consumer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.PostOrder;
import org.geysermc.event.subscribe.OwnedSubscriber;
import org.geysermc.event.subscribe.Subscriber;
Expand All @@ -45,8 +44,7 @@ public interface OwnedEventBus<O, E, S extends OwnedSubscriber<O, ? extends E>>
* @param <T> the event class
* @return the event subscription
*/
@NonNull <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
@NonNull O owner, @NonNull Class<T> eventClass, @NonNull Consumer<T> consumer);
<T extends E, U extends OwnedSubscriber<O, T>> U subscribe(O owner, Class<T> eventClass, Consumer<T> consumer);

/**
* Subscribes to the given event see {@link Subscriber}.
Expand All @@ -62,27 +60,24 @@ public interface OwnedEventBus<O, E, S extends OwnedSubscriber<O, ? extends E>>
* @param postOrder the order of the subscriber
* @return the event subscription
*/
@NonNull <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
@NonNull O owner,
@NonNull Class<T> eventClass,
@NonNull Consumer<T> consumer,
@NonNull PostOrder postOrder);
<T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
O owner, Class<T> eventClass, Consumer<T> consumer, PostOrder postOrder);

/**
* Registers events for the given listener.
*
* @param owner the extension registering the event
* @param listener the listener
*/
void register(@NonNull O owner, @NonNull Object listener);
void register(O owner, Object listener);

/**
* Unregisters all events from a given owner.
*
* @param owner the extension
*/
void unregisterAll(@NonNull O owner);
void unregisterAll(O owner);

@Override
@NonNull <T extends E> Set<? extends OwnedSubscriber<O, T>> subscribers(@NonNull Class<T> eventClass);
<T extends E> Set<? extends OwnedSubscriber<O, T>> subscribers(Class<T> eventClass);
}
11 changes: 5 additions & 6 deletions src/main/java/org/geysermc/event/bus/impl/BaseBusImpl.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -42,7 +42,6 @@
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.FireResult;
import org.geysermc.event.bus.BaseBus;
import org.geysermc.event.bus.impl.util.Utils;
Expand Down Expand Up @@ -115,7 +114,7 @@ protected <T extends E> void register(Class<T> eventClass, S subscriber) {

@SuppressWarnings("unchecked")
protected <T extends E> void findSubscriptions(
@NonNull Object listener, TriConsumer<Class<T>, Subscribe, BiConsumer<Object, T>> consumer) {
Object listener, TriConsumer<Class<T>, Subscribe, BiConsumer<Object, T>> consumer) {
Class<?> currentClass = listener.getClass();
while (currentClass != Object.class) {
for (Method method : currentClass.getDeclaredMethods()) {
Expand Down Expand Up @@ -152,7 +151,7 @@ protected <T extends E> void findSubscriptions(
}

@Override
public void unsubscribe(@NonNull S subscription) {
public void unsubscribe(S subscription) {
synchronized (subscribers) {
// we can trust the subscription because the implementation that will be used is final.
Class<? extends E> eventClass = subscription.eventClass();
Expand All @@ -176,7 +175,7 @@ protected void unsubscribeAll() {
}

@Override
public FireResult fire(@NonNull E event) {
public FireResult fire(E event) {
FireResult result = fireSilently(event);
if (!result.success()) {
result.exceptions().forEach((subscriber, throwable) -> {
Expand All @@ -192,7 +191,7 @@ public FireResult fire(@NonNull E event) {

@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public FireResult fireSilently(@NonNull E event) {
public FireResult fireSilently(E event) {
Map<Subscriber<?>, Throwable> thrown = new HashMap<>();

for (Subscriber subscriber : sortedSubscribers(event.getClass())) {
Expand Down
21 changes: 8 additions & 13 deletions src/main/java/org/geysermc/event/bus/impl/EventBusImpl.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -28,7 +28,6 @@
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.PostOrder;
import org.geysermc.event.bus.EventBus;
import org.geysermc.event.subscribe.Subscribe;
Expand All @@ -38,17 +37,14 @@ public abstract class EventBusImpl<E, S extends Subscriber<? extends E>> extends
implements EventBus<E, S> {

protected abstract <H, T extends E, B extends Subscriber<T>> B makeSubscription(
@NonNull Class<T> eventClass,
@NonNull Subscribe subscribe,
@NonNull H listener,
@NonNull BiConsumer<H, T> handler);
Class<T> eventClass, Subscribe subscribe, H listener, BiConsumer<H, T> handler);

protected abstract <T extends E, B extends Subscriber<T>> B makeSubscription(
@NonNull Class<T> eventClass, @NonNull Consumer<T> handler, @NonNull PostOrder postOrder);
Class<T> eventClass, Consumer<T> handler, PostOrder postOrder);

@Override
@SuppressWarnings("unchecked")
public void register(@NonNull Object listener) {
public void register(Object listener) {
findSubscriptions(listener, (eventType, subscribe, handler) -> {
S subscriber = (S) makeSubscription(eventType, subscribe, listener, handler);

Expand All @@ -57,15 +53,14 @@ public void register(@NonNull Object listener) {
}

@Override
@NonNull public <T extends E, U extends Subscriber<T>> U subscribe(
@NonNull Class<T> eventClass, @NonNull Consumer<T> consumer) {
public <T extends E, U extends Subscriber<T>> U subscribe(Class<T> eventClass, Consumer<T> consumer) {
return subscribe(eventClass, consumer, PostOrder.NORMAL);
}

@Override
@SuppressWarnings("unchecked")
public @NonNull <T extends E, U extends Subscriber<T>> U subscribe(
@NonNull Class<T> eventClass, @NonNull Consumer<T> consumer, @NonNull PostOrder postOrder) {
public <T extends E, U extends Subscriber<T>> U subscribe(
Class<T> eventClass, Consumer<T> consumer, PostOrder postOrder) {
U subscription = makeSubscription(eventClass, consumer, postOrder);
register(eventClass, (S) subscription);
return subscription;
Expand All @@ -77,7 +72,7 @@ public void unregisterAll() {
}

@Override
@NonNull public <T extends E> Set<? extends Subscriber<T>> subscribers(@NonNull Class<T> eventClass) {
public <T extends E> Set<? extends Subscriber<T>> subscribers(Class<T> eventClass) {
return Collections.unmodifiableSet(eventSubscribers(eventClass));
}
}
27 changes: 9 additions & 18 deletions src/main/java/org/geysermc/event/bus/impl/OwnedEventBusImpl.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022-2023 GeyserMC <https://geysermc.org>
* Copyright (c) 2022-2026 GeyserMC <https://geysermc.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -31,7 +31,6 @@
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.event.PostOrder;
import org.geysermc.event.bus.OwnedEventBus;
import org.geysermc.event.subscribe.OwnedSubscriber;
Expand All @@ -45,28 +44,20 @@ public abstract class OwnedEventBusImpl<O, E, S extends OwnedSubscriber<O, ? ext
Multimaps.synchronizedSetMultimap(HashMultimap.create());

protected abstract <L, T extends E, B extends OwnedSubscriber<O, T>> B makeSubscription(
@NonNull O owner,
@NonNull Class<T> eventClass,
@NonNull Subscribe subscribe,
@NonNull L listener,
@NonNull BiConsumer<L, T> handler);
O owner, Class<T> eventClass, Subscribe subscribe, L listener, BiConsumer<L, T> handler);

protected abstract <T extends E, B extends OwnedSubscriber<O, T>> B makeSubscription(
@NonNull O owner, @NonNull Class<T> eventClass, @NonNull Consumer<T> handler, @NonNull PostOrder postOrder);
O owner, Class<T> eventClass, Consumer<T> handler, PostOrder postOrder);

@Override
@NonNull public <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
@NonNull O owner, @NonNull Class<T> eventClass, @NonNull Consumer<T> handler) {
public <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
O owner, Class<T> eventClass, Consumer<T> handler) {
return subscribe(owner, eventClass, handler, PostOrder.NORMAL);
}

@Override
@NonNull @SuppressWarnings("unchecked")
public <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(
@NonNull O owner,
@NonNull Class<T> eventClass,
@NonNull Consumer<T> handler,
@NonNull PostOrder postOrder) {
O owner, Class<T> eventClass, Consumer<T> handler, PostOrder postOrder) {
OwnedSubscriber<O, T> subscription = makeSubscription(owner, eventClass, handler, postOrder);

synchronized (ownedSubscribers) {
Expand All @@ -79,7 +70,7 @@ public <T extends E, U extends OwnedSubscriber<O, T>> U subscribe(

@Override
@SuppressWarnings("unchecked")
public void register(@NonNull O owner, @NonNull Object listener) {
public void register(O owner, Object listener) {
findSubscriptions(listener, (eventClass, subscribe, handler) -> {
S subscriber = (S) makeSubscription(owner, eventClass, subscribe, listener, handler);

Expand All @@ -89,12 +80,12 @@ public void register(@NonNull O owner, @NonNull Object listener) {
}

@Override
public void unregisterAll(@NonNull O owner) {
public void unregisterAll(O owner) {
unsubscribeMany(castGenericSet(ownedSubscribers.removeAll(owner)));
}

@Override
@NonNull public <T extends E> Set<? extends OwnedSubscriber<O, T>> subscribers(@NonNull Class<T> eventClass) {
public <T extends E> Set<? extends OwnedSubscriber<O, T>> subscribers(Class<T> eventClass) {
return Collections.unmodifiableSet(eventSubscribers(eventClass));
}
}
Loading