WorldGeneratorModifiers

Sponge’da Dünya Nesilleri sürecine kısa bir bakış için, lütfen şunu okuyun Dünya oluşturma. Şimdi, dünya nesillerinde nasıl iz bırakmaya başlayabileceğinizi gösterelim.

Bir dünya jeneratöründe değişiklik yapmak isteyen tüm eklentiler bir WorldGeneratorModifier a kaydolmak zorundadır. Bu değiştiriciler küresel olarak benzersiz bir kimlik ile kaydedilir, bu, bir sunucunun yöneticisi tarafından bir dünyanın yapılandırmasına eklenmelidir. Dünya konfigürasyonunda belirtilen kimlik ile, o dünya için jeneratör kurulduğunda WorldGeneratorModifier otomatik olarak çağrılır ve jeneratörde değişiklikler yapılmasına izin verilir.

Bir WorldGeneratorModifier yaratma

Bir dosya biçimi olan WorldGeneratorModifier ile başlayalım. İlk önce, `` WorldGeneratorModifier`` arayüzünü sağlayan bir sınıfa ihtiyacınız var:

import org.spongepowered.api.world.storage.WorldProperties;

private class MyModifier implements WorldGeneratorModifier {

    @Override
    public String getId() {
        return "pluginid:mymodifier";
    }

    @Override
    public String getName() {
        return "My Modifier";
    }

    @Override
    public void modifyWorldGenerator(WorldProperties world, DataContainer settings, WorldGenerator worldGenerator) {

    }

}

Gördüğünüz gibi, WorldGeneratorModifier geçersiz kıldığımız üç yöntem var. WorldGeneratorModifier için sabit ve benzersiz bir tanımlayıcı döndürmek için CatalogType#getId() geçersiz kılınmalıdır, bu, değiştiricinizin hangi dünyalara uygulanacağını belirlemek için dünya yapılandırmasında kullanılacak tanımlayıcıdır. CatalogType#getName() , değiştirici için sürekli ve basit bir şekilde insan tarafından okunabilen bir adla geçersiz kılınmalıdır.

Geçersiz kılınmış olan üçüncü yöntem, dünya jeneratöründe yaptığınız değişikliklerdir. Bu yöntem, WorldGeneratorModifier uygulanması gerektiğini belirttiği bir dünya için dünya jeneratörü oluştururken, uygulama tarafından çağrılır.

Değişikliklerinize bağlam vermek için, dünya için ek özelliklerin bulunduğu WorldProperties ve bir DataContainer bu yöntemle geçirilir. Örneğin, `` WorldProperties`` i sadece jeneratörlerdeki değişiklikleri uygulamak için nether dünyalarını kullanabilirsiniz.

Bir WorldGeneratorModifier kaydolmak

Değiştiricimizi oluşturduğunuza göre, onu kaydettirmeniz gerekir. Bu sırada INITIALIZATION için iyi bir zaman belirtir. Bunu kaydetmek için GameRegistry#register(Class, T) ile birlikte WorldGeneratorModifier.class argümanı ilk olarak ve değiştiriciyi ikinci olarak kullanın.

@Listener
public void onGameInitialization(GameInitializationEvent event) {
    Sponge.getRegistry().register(WorldGeneratorModifier.class , new MyModifier());
}

WorldGeneratorModifier’ınızı bir dünyaya uygulamak için onu config/sponge/worlds/[dimension]/[worldName]/world.conf da bulunan dünya yapılandırma dosyası içindeki world-generation-modifiers dizisine eklemelisiniz. Örneğin, skylands WorldGeneratorModifier’ı bir dünyaya uygulamak için, skylands değiştiricisinin kimliğini değiştiriciler listesine ekleyeceksiniz.

# WorldGenerationModifiers to apply to the world
world-generation-modifiers=[
"sponge:skylands"
]

Dikkat edin, varsayılan olarak, bir dünyaya uygulanan değiştiriciler yoktur ve bu nedenle yapılandırma dosyası oluşturulduğunda değer oluşturulmadığından world-generation-modifiers listesinin olmayabileceğini unutmayın.

Bir sonraki yazımızda WorldGeneratorModifier mizde yapabileceğiniz değişiklikleri daha yakından inceleyeceğiz.