Aether Events is a powerful asynchronous event system for the JVM. It enables modular and flexible event processing with support for synchronous and asynchronous events, event pipelines, and cancellable events.
β
EventBus for centralized event and listener management
β
Event Pipelines for filtering, prioritization, and processing
β
Asynchronous Events with multi-threading support
β
Cancellable Events to stop specific events
β
Thread Safety for parallel processing
β
Easy Integration, no complex dependencies required
Aether Events is available via Maven and Gradle.
There are two repositories available for Aether Events:
- Libraries Repository (Pointer to Nexus):
https://libraries.splatgames.de/ - Nexus Repository:
https://nexus.splatgames.de/repository/maven-public/
<repository>
<id>splatgames.de</id>
<url>https://libraries.splatgames.de/</url>
</repository>
<dependency>
<groupId>de.splatgames.aether</groupId>
<artifactId>aether-events</artifactId>
<version>1.0.0</version>
</dependency>repositories {
maven {
url 'https://libraries.splatgames.de/'
}
}
dependencies {
implementation 'de.splatgames.aether:aether-events:1.0.0'
}EventBus eventBus = EventBus.builder().build();eventBus.subscribe(new TestListener());MyEvent event = new MyEvent(42);
eventBus.createPipeline("test:pipeline").fire(event);Event Pipelines allow flexible event processing with filtering and prioritization:
EventPipeline<MyEvent> pipeline = eventBus.createPipeline("customPipeline");
pipeline
.filter(event -> event.getExampleValue() > 0)
.sorted(Comparator.comparing(MyEvent::getExampleValue))
.registerConsumer(event -> System.out.println("Event received: " + event.getExampleValue()));
pipeline.fire(new MyEvent(10));Events can be processed asynchronously:
Thread thread = new Thread(() -> {
EventPipeline<AsyncMyEvent> asyncPipeline = eventBus.createPipeline("test:asyncPipeline");
asyncPipeline.fire(new AsyncMyEvent(99));
});
thread.start();An event can be canceled before it is processed:
MyCancellableEvent cancellableEvent = new MyCancellableEvent();
EventPipeline<MyCancellableEvent> cancellablePipeline = eventBus.createPipeline("test:cancellablePipeline");
cancellablePipeline.fire(cancellableEvent);
if (cancellableEvent.isCancelled()) {
System.out.println("The event was cancelled!");
}A simple listener that receives events:
public class TestListener implements Listener {
@Subscribe
public void onMyEvent(final MyEvent event) {
System.out.println("MyEvent: " + event.getExampleValue());
}
@Subscribe
public void onAsyncMyEvent(final AsyncMyEvent event) {
System.out.println("AsyncMyEvent: " + event.getExampleValue());
}
@Subscribe
public void onMyCancellableEvent(final MyCancellableEvent event) {
event.setCancelled(true);
System.out.println("MyCancellableEvent was cancelled");
}
}We welcome contributions! π
Please check out our CONTRIBUTING.md for guidelines on how to contribute.
Aether Events is released under the MIT License.
MIT License
Copyright (c) 2025 Splatgames.de Software
Permission is hereby granted, free of charge, to any person obtaining a copy of this software...
Aether Events is a powerful solution for event-driven architectures on the JVM. It offers high flexibility, asynchronous processing, and a modern API for easy integration.
π₯ Get started with Aether Events now! π