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.Alls. 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.