Özel olaylar

Kendi etkinlik sınıflarınızı yazabilir ve yukarıda açıklanan yöntemi kullanarak bu etkinlikleri gönderebilirsiniz.Bir olay sınıfı: javadoc: AbstractEvent sınıfını genişletmelidir;böylece: javadoc: Event arayüzü uygulanır.Etkinliğin doğasına bağlı olarak,daha fazla arayüz uygulanmalıdır,örneğin: javadoc: gibi bir dinleyici veya aşağıdakiler gibi arayüzlerle iptal edilebilen etkinlikler için ‘İptal Edilebilir’: javadoc: TargetPlayerEvent, hangi nesnenin hangi etkinliğin tarafından etkilendiğini açıklığa kavuşturuyor.

Örnek: Özel Olay Sınıfı

The following class describes an event indicating a Player has come in contact with FLARD and is now about to mutate in a way specified by the event. Since the event targets a player and can be cancelled by listeners, it implements both the TargetPlayerEvent and Cancellable interfaces.

Genellikle özel olayların diğer eklentiler tarafından dinlenmesi amaçlandığından,bunları uygun bir şekilde belgelemek sizin yararınızadır.Bu, tipik olarak: javadoc: `Cause`de bulunan nesnelerin listesini içerir. Aşağıdaki örnekte,muhtemelen ana sebebin hayali “FLARDSource” sınıfının bir nesnesi olduğu söylenebilir.

import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Cancellable;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.entity.living.humanoid.player.TargetPlayerEvent;
import org.spongepowered.api.event.impl.AbstractEvent;

public class PlayerMutationEvent extends AbstractEvent implements TargetPlayerEvent, Cancellable {

    public enum Mutation {
        COMPULSIVE_POETRY,
        ROTTED_SOCKS,
        SPONTANEOUS_COMBUSTION;
    };

    private final Cause cause;
    private final Player victim;
    private final Mutation mutation;
    private boolean cancelled = false;

    public PlayerMutationEvent(Player victim, Mutation mutation, Cause cause) {
        this.victim = victim;
        this.mutation = mutation;
        this.cause = cause;
    }

    public Mutation getMutation() {
        return this.mutation;
    }

    @Override
    public boolean isCancelled() {
        return this.cancelled;
    }

    @Override
    public void setCancelled(boolean cancel) {
        this.cancelled = cancel;
    }

    @Override
    public Cause getCause() {
        return this.cause;
    }

    @Override
    public Player getTargetEntity() {
        return this.victim;
    }

}

Örnek: Özel Ateş Etkinliği

import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.EventContext;
import org.spongepowered.api.event.cause.EventContextKeys;
import org.spongepowered.api.Sponge;

PluginContainer plugin = ...;
EventContext eventContext = EventContext.builder().add(EventContextKeys.PLUGIN, plugin).build();

PlayerMutationEvent event = new PlayerMutationEvent(victim, PlayerMutationEvent.Mutation.ROTTED_SOCKS,
        Cause.of(eventContext, plugin));
Sponge.getEventManager().post(event);
if (!event.isCancelled()) {
    // Mutation code
}

Boş olmayan bir neden vermeniz gerektiğini unutmayın. Etkinliğiniz İptal Edilebilir ise, olay tarafından açıklanan işlemi gerçekleştirmeden önce iptal edilmediğinden emin olun.

Örnek: Özel etkinliği dinle

import org.spongepowered.api.event.Listener;
import org.spongepowered.api.text.Text;

@Listener
public void onPrivateMessage(PlayerMutationEvent event) {
    if(event.getMutation() == PlayerMutationEvent.Mutation.SPONTANEOUS_COMBUSTION) {
        event.setCancelled(true);
        event.getTargetEntity().sendMessage(Text.of("You cannot combust here, this is a non-smoking area!"));
    }
}