Acara Khusus
Anda bisa menulis sendiri acara kelas dan kirimkan kejadian tersebut dengan menggunakan metode yang dijelaskan di atas. Acara kelas itu harus diperluaskan :javadoc:`peristiwa abstrak`kelas, demikian itu menerapkan :javadoc:`peristiwa`antarmuka. Tergantung pada sifat acara dari peristiwa, lebih bagus antarmuka menjadi diimplementasikan, suka :javadoc:`bisa dicegah`untuk acara itu bisa dibatalkan oleh seorang pendengar atau antar muka seperti :javadoc:`Target pemain peristiwa`klarifikasi seperti apa dari objek anda dipengaruhi oleh acara.
Contoh: adat kelas acara peristiwa
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.
Karena umumnya acara khusus dimaksudkan untuk didengarkan oleh plugin lain, sangat penting untuk mendokumentasikannya dengan tepat. Ini termasuk daftar objek yang biasanya ditemukan di :javadoc:`Penyebab`. Dalam contoh di bawah ini, mungkin akan disebutkan bahwa akar masalahnya pada umumnya adalah objek kelas SumberFLARD
kelas.
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;
}
}
Contoh: Acara Khusus Kebakaran
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
}
Ingatlah bahwa Anda perlu menyediakan penyebab yang tidak kosong. Jika acara Anda `` Bisa dicegah``, pastikan tidak dibatalkan sebelum melakukan tindakan yang dijelaskan oleh acara.
Contoh: Dengarkan Peristiwa Khusus
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!"));
}
}