Memodifikasi suatu Entitas

Tentu, pembuatan entitas lama bagus, tetapi apakah harus ada sesuatu yang lebih menarik dari itu? Inilah dimana DataManipulators ikut bermain. Sebuah Entity merupakan sebuah DataHolder, yang berarti bahwa Entity kita dapat menampung data. Lebih lanjut tentang DataHolders dapat ditemukan di dalam data documentation.

DataManipulator` yang berlaku untuk` Entity` adalah hal-hal seperti : javadoc: ` FoodData` atau : javadoc: HealthData. Daftar "DataManipulator` yang sesuai dapat ditemukan di : javadoc: ` org.spongepowered.api.data.manipulator.mutable` dan : javadoc: org.spongepowered.api.data.manipulator.mutable.entity . Perhatikan bahwa tidak semua DataManipulator` yang ditemukan mungkin berlaku untuk semua entitas.

Tipe Entitas

Sebelum kita bisa melompat di belakang kemudi dengan kami Entitas, kita harus memeriksa apa jenis dari Entitas hal ini, seperti yang kita mungkin menerima sebuah Entitas kami tidak membuat dan dengan demikian, tidak tahu itu jenis. Melakukan hal ini adalah sederhana cek kesetaraan. Berikut ini contoh untuk memeriksa jika kita Badan adalah creeper:

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

Badan Data Manipulator

Sekarang bahwa kita yakin bahwa kita Entitas yang menjalar, kita dapat menerapkan menjalar tertentu DataManipulators itu. Misalnya, ExplosionRadiusData adalah DataManipulator yang merambat dapat memiliki, tapi tidak semua Entitass. Contoh mengubah sebuah Entitass ledak radius 50 dapat dilihat di bawah ini:

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

Ini akan mendapatkan ExplosiveRadiusData kami Entitas untuk kami gunakan. Kami kemudian menggunakan data tersebut untuk mengatur radius ledakan dari kami menjalar ke 50. Kita kemudian harus memberikan data kembali ke menjalar, karena data yang kami terima dari kami Entitas hanya salinan data hidup.

Mungkin kita ingin memberikan Entitas nama untuk menyesuaikan sedikit! Ini akan dilakukan dengan menggunakan DisplayNameData. Contoh dari hal ini dalam tindakan dapat dilihat di bawah ini:

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

Lain, cara yang lebih singkat untuk melakukan hal ini adalah dengan hanya menggunakan :javadoc:`Kunci` pada kami Entitas alih-alih menggunakan DataManipulators. Ini akan dilakukan seperti:

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

Ini akan merapikan kode kita dan akan lebih mudah untuk melakukan. Lihat data dokumentasi pada spesifik manfaat baik menggunakan DataManipulators atau hanya Kunci.