Package studio.mevera.imperat.events
Interface Event
- All Known Subinterfaces:
CancellableEvent
- All Known Implementing Classes:
CommandEvent,CommandPostProcessEvent,CommandPostRegistrationEvent,CommandPreProcessEvent,CommandPreRegistrationEvent
public interface Event
Base marker interface for all events that can be handled by the
EventBus.
Only events implementing this interface are eligible for registration and processing through the event bus system. This design ensures type safety and prevents arbitrary objects from being posted as events.
This is a marker interface with no methods, serving purely as a contract that identifies classes as events within the framework's event system.
Creating Custom Events
To create a custom event, simply implement this interface and add any relevant data fields and accessor methods:
public class PlayerJoinEvent implements Event {
private final Player player;
private final String joinMessage;
public PlayerJoinEvent(Player player, String joinMessage) {
this.player = player;
this.joinMessage = joinMessage;
}
public Player getPlayer() {
return player;
}
public String getJoinMessage() {
return joinMessage;
}
}
Cancellable Events
For events that support cancellation, implement CancellableEvent instead:
public class PlayerChatEvent implements CancellableEvent {
private final Player player;
private String message;
private boolean cancelled;
public PlayerChatEvent(Player player, String message) {
this.player = player;
this.message = message;
}
public Player getPlayer() {
return player;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}
RootCommand-Related Events
For events related to command operations, extend CommandEvent:
public class CommandExecutionEvent<S extends CommandSource> extends CommandEvent<S> {
private final ExecutionContext<S> context;
private final long executionTime;
public CommandExecutionEvent(RootCommand<S> command,
ExecutionContext<S> context,
long executionTime) {
super(command);
this.context = context;
this.executionTime = executionTime;
}
public ExecutionContext<S> getContext() {
return context;
}
public long getExecutionTime() {
return executionTime;
}
}
Usage Example
// Register a handler for your custom event
eventBus.register(PlayerJoinEvent.class, event -> {
Player player = event.getPlayer();
logger.info("Player joined: " + player.getName());
broadcastMessage(event.getJoinMessage());
});
// Post the event
eventBus.post(new PlayerJoinEvent(player, "Welcome!"));
- Since:
- 1.0
- See Also: