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
Acara bis mendukung supertypes. Misalnya, ChangeBlockEvent.Break meluas ChangeBlockEvent. Oleh karena itu, sebuah plugin yang bisa mendengarkan ChangeBlockEvent dan masih menerima ChangeBlockEvent.Istirahats. Namun, sebuah plugin yang mendengarkan hanya ChangeBlockEvent.Break tidak akan diberitahu tentang jenis lain dari ChangeBlockEvent.
Mendaftar dan Tidak mendaftar Acara Pendengar
Untuk mendaftar acara ini pendengar dijelaskan oleh @Listener yang tidak di plugin utama kelas, anda dapat menggunakan EventManager#registerListeners(Objek, Objek), yang menerima referensi untuk plugin dan sebuah instance dari kelas yang mengisi acara pendengar.
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.getEventManager().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.Break> {
@Override
public void handle(ChangeBlockEvent.Break event) throws Exception {
...
}
}
Contoh: secara Dinamis Mendaftar Acara Pendengar
EventListener<ChangeBlockEvent.Break> listener = new ExampleListener();
Sponge.getEventManager().registerListener(this, ChangeBlockEvent.Break.class, listener);
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.
MyPlugin plugin = ...
Sponge.getEventManager().unregisterPluginListeners(plugin);
Tentang @Pendengar
Yang @Listener
penjelasan memiliki beberapa bidang dikonfigurasi:
order
adalah prioritas di mana pendengar acara ini akan dijalankan. Melihat Order enum di SpongeAPI untuk melihat pilihan yang tersedia.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).
GameReloadEvent
Untuk mencegah semua plugin yang menyediakan mereka sendiri reload perintah, Spons menyediakan bangunan di callback untuk plugin untuk mendengarkan, dan ketika dijalankan, melakukan ulang tindakan. Apa yang merupakan sebagai 'mengulang tindakan' ini murni hingga plugin untuk memutuskan. Yang GameReloadEvent akan api ketika seorang pemain menjalankan /sponge plugins reload
perintah. Acara ini tidak terbatas untuk reload konfigurasi.
import org.spongepowered.api.event.game.GameReloadEvent;
@Listener
public void reload(GameReloadEvent event) {
// Do reload 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.getEventManager().post(theEventObject);
Metode pengembalian benar
jika acara dibatalkan, palsu
jika tidak.
Penembakan Sponge Peristiwa
Hal ini dimungkinkan untuk menghasilkan contoh built-in peristiwa dengan statis SpongeEventFactory
. Kelas ini secara otomatis dihasilkan sehingga tidak ada Javadocs. Menggunakan IDE pelengkapan otomatis untuk daftar metode yang ada. Peristiwa yang diciptakan oleh SpongeEventFactory
yang kemudian diteruskan ke EventManager#post(Acara).
Contoh: Penembakan LightningEvent
import org.spongepowered.api.event.SpongeEventFactory;
import org.spongepowered.api.event.action.LightningEvent;
import org.spongepowered.api.event.cause.Cause;
LightningEvent lightningEvent = SpongeEventFactory.createLightningEvent(Cause.source(plugin).build());
Sponge.getEventManager().post(lightningEvent);
Peringatan
Sebuah :javadoc:`Penyebab` tidak akan pernah bisa kosong. Setidaknya harus mengandung plugin container.