Varlıkları modifiye etme

Uyarı

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

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ü

Before we can jump behind the wheel with our Entity, we should check what type of Entity it is, as we may receive an Entity we didn’t create and thus, do not know its type. Doing this is a simple equality check. Here is an example of checking if our Entity is a creeper:

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

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

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) {
    ExplosionRadiusData radiusData = creeper.get(ExplosionRadiusData.class).get();
    creeper.offer(radiusData.explosionRadius().setTo(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 net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.spongepowered.api.data.manipulator.mutable.DisplayNameData;

public void setDisplayName(Entity creeper) {
    DisplayNameData displayData = creeper.get(DisplayNameData.class).get();
    creeper.offer(displayData.displayName()
        .set(Component.text("Inscrutable", NamedTextColor.DARK_AQUA)));
}

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.EXPLOSION_RADIUS, Optional.of(50));
    creeper.offer(Keys.DISPLAY_NAME, Component.text("Inscrutable", NamedTextColor.DARK_AQUA));
}

This would neaten our code and is easier to perform. See the data documentation on the specific benefits of using either DataManipulators or just Keys.