Acara Pendengar
Dalam rangka untuk mendengarkan sebuah acara, event listener harus didaftarkan. Hal ini dilakukan dengan membuat method dengan nama apapun, mendefinisikan parameter pertama untuk menjadi yang diinginkan, jenis acara, dan kemudian pembubuhan :javadoc:`Pendengar` penjelasan untuk metode, seperti yang digambarkan di bawah ini.
import org.spongepowered.api.event.Listener;
@Listener
public void onSomeEvent(SomeEvent event) {
// Do something with the event
}
Selain itu, kelas yang berisi metode-metode ini harus didaftarkan kepada manajer acara:
Tip
Untuk acara pendengar pada plugin utama kelas (annotated oleh Plugin), anda tidak perlu untuk mendaftarkan objek untuk acara-acara seperti Spons yang akan melakukannya secara otomatis.
Catatan
The event bus supports supertypes. For example, ChangeBlockEvent.All extends
ChangeBlockEvent. Therefore, a plugin could listen to ChangeBlockEvent
and still receive
ChangeBlockEvent.All
s. However, a plugin listening to just ChangeBlockEvent.All
would not be notified
of other types of ChangeBlockEvent
.
Mendaftar dan Tidak mendaftar Acara Pendengar
To register event listeners annotated by @Listener
that are not in the main plugin class, you can use
EventManager#registerListeners(PluginContainer, Object), which accepts a reference to the plugin and an instance of
the class containing the event listeners.
Contoh: Mendaftar Acara Pendengar di kelas-Kelas Lain
import org.spongepowered.api.Sponge;
public class ExampleListener {
@Listener
public void onSomeEvent(SomeEvent event) {
// Do something with the event
}
}
Sponge.eventManager().registerListeners(this, new ExampleListener());
Mendaftar Acara Pendengar Secara Dinamis
Beberapa plugin (seperti skrip plugin) mungkin ingin meregistrasi pendengar acara. Dalam hal bahwa pendengar acara ini bukan metode yang dijelaskan dengan @Listener
, melainkan kelas yang menerapkan EventListener
antarmuka. Acara ini pendengar kemudian dapat didaftarkan dengan memanggil EventManager#registerListener
, yang menerima referensi untuk plugin sebagai argumen pertama, ada Class
peristiwa ditangani sebagai argumen kedua, dan pendengar itu sendiri sebagai argumen akhir. Opsional, anda dapat menentukan :javadoc:` Order`untuk menjalankan event listener di ketiga argumen atau nilai boolean sebagai argumen keempat (sebelum contoh dari pendengar) yang menentukan apakah akan memanggil pendengar sebelum server lain modifikasi.
Contoh: Melaksanakan EventListener
import org.spongepowered.api.event.EventListener;
import org.spongepowered.api.event.block.ChangeBlockEvent;
public class ExampleListener implements EventListener<ChangeBlockEvent.All> {
@Override
public void handle(ChangeBlockEvent.Break event) throws Exception {
[...]
}
}
Contoh: secara Dinamis Mendaftar Acara Pendengar
EventListener<ChangeBlockEvent.All> listener = new ExampleListener();
EventListenerRegistration registeration = EventListenerRegistration
.builder(ChangeBlockEvent.All.class)
.listener(listener)
.plugin(pluginContainer)
.build();
Sponge.eventManager().registerListener(registeration);
Tip
Untuk acara pendengar yang dibuat dengan @Listener
penjelasan, agar eksekusi dapat dikonfigurasi (lihat juga Tentang @Listener). Untuk dinamis terdaftar pendengar hal ini dimungkinkan dengan melewatkan Order
untuk ketiga argumen EventManager#registerListener
metode.
Tidak mendaftar Acara Pendengar
Untuk unregister sebuah peristiwa tunggal pendengar, anda dapat menggunakan EventManager#unregisterListeners(Obyek) metode, yang menerima sebuah instance dari kelas yang mengandung pendengar event.
EventListener listener = ...;
Sponge.getEventManager().unregisterListeners(listener);
Atau, anda dapat menggunakan EventManager#unregisterPluginListeners(Obyek), lewat di sebuah referensi untuk plugin, untuk membatalkan semua acara pendengar yang terkait dengan plugin. Catatan bahwa ini akan menghapus semua plugin ini acara pendengar, termasuk orang-orang yang terdaftar dengan @Listener
anotasi.
PluginContainer plugin = ...;
Sponge.eventManager().unregisterListeners(plugin);
Tentang @Pendengar
Yang @Listener
penjelasan memiliki beberapa bidang dikonfigurasi:
order
is the priority in which the event listener is to be run. See the Order enum in SpongeAPI to see the available options.beforeModifications
menentukan jika acara pendengar harus dipanggil sebelum server lain mods, seperti Bengkel modifikasi. Secara default, ini diatur ke palsu.
Secara default, @Listener
dikonfigurasi sehingga acara anda pendengar akan tidak bisa disebut jika acara tersebut dibatalkan dan telah dibatalkan (seperti dengan plugin lain).
RefreshGameEvent
To prevent all plugins providing their own reload commands, Sponge provides a built-in callback for plugins to listen
to, and when executed, perform any refresh actions. What constitutes as a 'refresh action' is purely up to the
plugin to decide. The RefreshGameEvent will fire when a player executes the
/sponge plugins refresh
command. The event is not necessarily limited to reloading configuration.
import org.spongepowered.api.event.lifecycle.RefreshGameEvent;
@Listener
public void refresh(GameRefreshEvent event) {
// Do refresh stuff
}
Perhatikan bahwa ini berbeda untuk apa yang umumnya dianggap sebagai 'ulang', karena acara ini murni semua callback untuk plugin dan tidak melakukan reload sendiri.
Peristiwa Penembakan
Untuk mengirimkan sebuah acara, anda perlu sebuah objek yang mengimplementasikan :javadoc: Acara antarmuka.
Anda dapat peristiwa kebakaran menggunakan bus (EventManager):
boolean cancelled = Sponge.eventManager().post(theEventObject);
Metode pengembalian benar
jika acara dibatalkan, palsu
jika tidak.