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.