Servisler

Neredeyse her şey (etkinlikler, izinler, vb.) servisler tarafından yürütülür. Bütün servislere, servis yöneticisi yoluyla erişilir:

import org.spongepowered.api.Sponge;

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

Bir şeye bir nesne referansını girmeniz gerekiyorsa, servis yöneticisinden çıkarın.

Servis Klavuzları

  • Hizmetler en geç “POST_INITIALIZATION” oyun sırasında kaydedilmelidir.
  • Hizmetler, `` SERVER_ABOUT_TO_START`` oyun durumu tarafından tam olarak çalışabilir olmalıdır.

Oyun durumları hakkında daha fazla bilgi için: doc: lifecycle sayfasını okuyabilirsiniz.

Not

Diğer eklentilerin servisin sağlanacağına dikkat edebilmesi için hizmetleri mümkün olan en kısa sürede kaydetmeniz iyi bir uygulamadır.

Kendi Servisiniz Sağlanıyor

Eklentiniz, aşağıdaki gibi bir çekirdek arayüz için uygulamanın sağlayabileceğini gibi PermissionService veya Sponge API’sinin parçası olmayan özel bir arayüz için de sağlayabilir (ör. Ekonomi, web sunucusu):

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

`` Provider`` nesnesi `` service`` arayüzünü veya sınıfını uygulamak zorundadır.

Bu şekilde API tasarlamak, Sponge’u son derece modüler hale getirir.

Not

Eklenti tek bir işleve ayrılmış değilse, eklentiler sağlayıcılarını yüklememek için seçenekler sağlamalıdır.

Örnek: Basit bir çözgü servisinin sağlanması

İlk adım isteğe bağlı, ancak önerilir. Bir arayüzde hizmet sınıfınızın genel yöntemlerini belirtirsiniz:

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);
}

Artık arayüzü uygulayan sınıfı yazabilirsiniz:

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);
    }
}

Artık sınıfın yeni bir örneğini hizmet yöneticisinde kaydedebiliriz. `` Servis `` tuşu olarak “WarpService.class” arayüzünü kullanıyoruz.

Bu, diğer eklenti geliştiricilerin hizmetinizin kendi uygulamasını (arayüzü uygular) oluşturmalarını ve sürümünüzü değiştirmelerini sağlar.

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

Diğer eklentiler artık hizmet yöneticiniz aracılığıyla hizmetinize erişebilir:

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

Tüyo

Arabirim kullanmak istemiyorsanız, sadece `` service`` anahtarını sınıfınızda değiştirin (örnekte `` SimpleWarpService.class``).