Layanan

Cukup banyak segala sesuatu (peristiwa, perizinan, dll.) ditangani melalui jasa. semua layanan yang diakses melalui layanan manager:

import org.spongepowered.api.Sponge;

Sponge.getServiceManager().provide(EventManager.class);

Jika anda perlu untuk mendapatkan referensi objek untuk sesuatu, hanya mendapatkannya off service manager.

Layanan podoman

  • Pelayanan harus terdaftar selama POST_INITIALIZATION permainan negara di terbaru.

  • Pelayanan harus sepenuhnya operasional oleh SERVER_ABOUT_TO_START permainan negara.

Anda dapat membaca lebih lanjut tentang permainan di siklus halaman.

Catatan

Ini adalah praktik yang baik untuk mendaftar layanan sesegera mungkin sehingga plugin lain dapat dicatat bahwa layanan akan diberikan.

Menyediakan layanan anda sendiri

Your plugin can provide the implementation for a core interface like PermissionService, or for a custom interface that is not part of SpongeAPI (e.g. economy, web server):

Sponge.getServiceManager().setProvider(Object plugin, Class<T> service, T provider);

Objek `` provider`` harus menerapkan antarmuka atau kelas `` service``.

Merancang API ini cara membuat sponge yang sangat modular.

Catatan

Plugin harus memberikan pilihan untuk tidak menginstal penyedia mereka jika plugin tidak didedikasikan untuk fungsi tunggal.

Contoh: Menyediakan sederhana warp layanan

Langkah pertama adalah opsional, tetapi dianjurkan. Anda menentukan metode umum dari layanan kelas dalam sebuah antarmuka:

import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;
import java.util.Optional;

public interface WarpService {
    void setWarp(String name, Location<World> location);
    Optional<Location<World>> getWarp(String name);
}

Sekarang anda dapat menulis kelas yang mengimplementasikan antarmuka anda:

import java.util.HashMap;

public class SimpleWarpService implements WarpService {
    HashMap<String, Location<World>> warpMap = new HashMap<String, Location<World>>();

    @Override
    public Optional<Location<World>> getWarp(String name) {
        if(!warpMap.containsKey(name)) {
            return Optional.empty();
        } else {
            return Optional.of(warpMap.get(name));
        }
    }

    @Override
    public void setWarp(String name, Location<World> location) {
        warpMap.put(name, location);
    }
}

Sekarang kita bisa register a new instance dari kelas di service manager. Kami menggunakan antarmuka WarpService.class sebagai layanan tombol.

Hal ini memungkinkan untuk plugin lain pengembang untuk menulis mereka sendiri pelaksanaan layanan anda (yang mengimplementasikan interface) dan mengganti versi anda.

PluginContainer plugin = ...;

Sponge.getServiceManager().setProvider(plugin, WarpService.class, new SimpleWarpService());

Plugin lainnya sekarang dapat mengakses layanan melalui service manager:

Sponge.getServiceManager().provide(WarpService.class);

Tip

Jika anda tidak ingin menggunakan antarmuka, hanya mengganti layanan kunci dengan kelas anda (SimpleWarpService.class dalam contoh).