Skip to main content

Events

Events allows your server plugin to respond to various Feather-specific events. This enables you to detect when players join with Feather, monitor their enabled mods, and react accordingly.

Available Events​

The Feather Server API provides several events that your plugin can subscribe to:

PlayerHelloEvent

Triggered when a player Feather joins the server.

MethodReturn TypeDescription
getPlatform()@NotNull PlatformRetrieves the modding platform on which Feather is running (FORGE or FABRIC).
getFeatherMods()@NotNull Collection<FeatherMod>Retrieves a collection of Feather mods that are enabled for the player.

Usage Example:

eventService.subscribe(PlayerHelloEvent.class, event -> {
FeatherPlayer player = event.getPlayer();
Platform platform = event.getPlatform();
Collection<FeatherMod> mods = event.getFeatherMods();

getLogger().info(player.getName() + " joined with Feather on " + platform);
});

Getting Started with Events​

Accessing the Event Service​

The Event Service is accessed through the FeatherAPI:

EventService eventService = FeatherAPI.getEventService();

Basic Event Subscription​

To subscribe to an event, use the subscribe() method:

EventSubscription<PlayerHelloEvent> subscription = eventService.subscribe(
PlayerHelloEvent.class,
event -> {
// Handle the event
FeatherPlayer player = event.getPlayer();
System.out.println("Player " + player.getName() + " joined with Feather!");
}
);

Unsubscribing from Events​

When your plugin is disabled or you no longer need to listen to an event, you should unsubscribe:

// Store the subscription when you subscribe
EventSubscription<PlayerHelloEvent> subscription = eventService.subscribe(
PlayerHelloEvent.class,
this::handlePlayerHello
);

// Later, when you want to unsubscribe
subscription.unsubscribe();

Working with Player Events​

Detecting Players with Feather​

One of the most common use cases is detecting when players join with Feather:

eventService.subscribe(PlayerHelloEvent.class, event -> {
FeatherPlayer player = event.getPlayer();
Platform platform = event.getPlatform();
Collection<FeatherMod> mods = event.getFeatherMods();

getLogger().info(player.getName() + " joined with Feather on " + platform);
getLogger().info("Enabled mods: " + mods.stream()
.map(FeatherMod::getName)
.collect(Collectors.joining(", ")));
});

Checking for Specific Mods​

You might want to check if players are using specific Feather mods:

eventService.subscribe(PlayerHelloEvent.class, event -> {
boolean hasFps = event.getFeatherMods().stream()
.anyMatch(mod -> mod.getName().equals("fps"));

if (hasFps) {
getLogger().info(event.getPlayer().getName() + " is using the FPS mod!");
}
});