Skip to 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 Dawn 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:

java
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:

java
EventService eventService = FeatherAPI.getEventService();

#Basic Event Subscription

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

java
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:

java
// 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:

java
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:

java
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!");
    }
});