Varlıkları modifiye etme

Tabii ki, normal, eski bir varlık yumurtlamak güzel ve hepsinden daha ilginç bir şey olmalı? İşte burada :javadoc: DataManipulator’lar devreye giriyor. Bir :javadoc:’Entity’ :javadoc:’DataHolder’ dır; bu demektir ki, Entity``nin veri alabileceği anlamına gelir. ``DataHolder hakkında daha fazlası data documentation de bulunabilir.

DataManipulator lara uygulanan Varlıklar, FoodData veya HealthData gibi şeylerdir. Uygulanabilir DataManipulator’ların listesi şu adreste bulunabilir org.spongepowered.api.data.manipulator.mutable ve org.spongepowered.api.data.manipulator.mutable.entity. Burada bulunan tüm ``DataManipulator``lerin tüm varlıklara uygulanabileceğini unutmayın.

Varlık türü

Entity ile direksiyonun arkasına atlayabilmemiz için ne tür bir Entity olduğunu kontrol etmeliyiz, çünkü biz yaratmadığımız bir Entity alabilir ve böylece bu türü bilemeyebiliriz. Bunu yapmak basit bir eşitliğin kontrolüdür. İşte Entity’nin sarmaşık olup olmadığını kontrol etmeye bir örnek:

import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityTypes;

public boolean isCreeper(Entity entity) {
    if (entity.getType().equals(EntityTypes.CREEPER)) {
        return true;
    }
    return false;
}

Entity veri manipülatörleri

Şimdi,``Entity``’nin bir süpürge olduğuna emin olduğumuza göre, sarmaşıklara özel DataManipulator’lar uygulayabiliriz. Örneğin ExplosionRadiusData, sürüngençlerin tümü``Entity``anlamına gelmez. Entity ‘nin patlayıcı yarıçapını 50’ye değiştirmenin bir örneği aşağıda görülebilir:

import org.spongepowered.api.data.manipulator.mutable.entity.ExplosiveRadiusData;

public void explosionRadius50(Entity creeper) {
    ExplosiveRadiusData radiusData = creeper.get(ExplosiveRadiusData.class).get();
    creeper.offer(radiusData.explosiveRadius().set(50));
}

Bu, bizim Entity’nizin ExplosiveRadiusData’sını alacaktır. Daha sonra bu veriyi, sarmaşıkımızın patlayıcı yarıçapını 50’ye ayarlamak için kullanırız. Sonra, ``Entity``den aldığımız veriler canlı verilerin yalnızca bir kopyası olduğu için verileri sarmaşıklara geri getirmeliyiz.

Belki de Entity’i bir parça özelleştirmek için bir isim vermek istiyoruz! Bunu yapmak için DisplayNameData’yı kullanılır. Bu eylemde bir örnek aşağıda görülebilir:

import org.spongepowered.api.data.manipulator.mutable.DisplayNameData;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;

public void setDisplayName(Entity creeper) {
    DisplayNameData displayData = creeper.get(DisplayNameData.class).get();
    creeper.offer(displayData.displayName().set(Text.of(TextColors.DARK_AQUA,
                                                          "Inscrutable")));
}

Bunu yapmanın diğer bir yolu da DataManipulator yerine :javadoc:`Keys``’i kullanarak Varlık’ımızı kullanmaktır. Bu şekilde yapılır:

import org.spongepowered.api.data.key.Keys;

public void explosionRadius50(Entity creeper) {
    creeper.offer(Keys.EXPLOSIVE_RADIUS, 50);
    creeper.offer(Keys.DISPLAY_NAME, Text.of(TextColors.DARK_AQUA, "Inscrutable"));
}

Bu, kodumuzu düzeltir ve gerçekleştirilmesi daha kolaydır. DataManipulator veya sadece Keys kullanmanın faydaları hakkında :doc:`Data Documentation<../data/datamanipulators>`a bakın.