Hasil
Dengan menggunakan API efek dalam Sponge, kita dapat membuat efek istimewa untuk digunakan pada sebuah server. Dengan menggunakan Viewer, kita dapat memutar suara atau menciptakan partikel pada server.
Memainkan Suara
Dengan diberikan Viewer
, kita bisa memainkan suara yang sederhana di sebuah lokasi:
import org.spongepowered.api.effect.Viewer;
import org.spongepowered.api.effect.sound.SoundTypes;
import com.flowpowered.math.vector.Vector3d;
viewer.playSound(SoundTypes.ENTITY_CREEPER_PRIMED, new Vector3d(1, 65, 1), 1);
Now let's break this down. First, the SoundType specifies the sound that will be
played. Next, we have a Vector3d
position. This position can be constructed, or it can be retrieved from a
Location
using the Location#getPosition() method. In the example above, the sound will be played at the
coordinates 1, 65, 1
. Lastly, we have the volume that the sound will be played at. The volume is a double that
ranges from zero to two.
Sekarang kita dapat memutar suara dasar, kita dapat melangkah lebih jauh dengan suara kita. Katakanlah kita ingin memutar suara kita pada nada yang ditetapkan. Kita dapat menggunakan kelas PitchModulation untuk memodulasi nada ke sebuah not tertentu. Kita dapat juga menggunakan SoundCategory untuk menetapkan kategori suara apa yang sedang diputar. Contoh ini ditunjukkan di bawah ini:
import org.spongepowered.api.effect.sound.PitchModulation;
import org.spongepowered.api.effect.sound.SoundCategories;
viewer.playSound(SoundTypes.ENTITY_CREEPER_PRIMED, SoundCategories.HOSTILE,
new Vector3d(1, 65, 1), 1, PitchModulation.AFLAT0);
Jika ``SoundCategory``tidak ditentukan ketika memainkan sebuah suara, SoundCategories#MASTER akan digunakan.
Partikel pemijahan
Demikian pula dengan suara, kita bisa menggunakan Viewer
kelas untuk menelurkan partikel di dunia:
import org.spongepowered.api.effect.particle.ParticleEffect;
import org.spongepowered.api.effect.particle.ParticleTypes;
ParticleEffect effect = ParticleEffect.builder()
.type(ParticleTypes.LAVA)
.quantity(50)
.build();
viewer.spawnParticles(effect, position);
Menggunakan ParticleEffect.Builder, kita dapat menetapkan tipe partikel yang kita ingin hasilkan. Dengan begitu, kita juga menetapkan lima puluh partikel akan berada dalam efek partikel.
Now if we wanted to make a more specific particle, say the particle of a block, then we can use one of the several types found in the ParticleTypes class. For example, let's say we wanted to spawn particles of a cracking block of sand, ParticleTypes#BLOCK_CRACK. We would need to use the ParticleOptions#BLOCK_STATE option and specify that we would like to use a sand block. This can be done like so:
import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.effect.particle.ParticleOptions;
ParticleEffect particle = ParticleEffect.builder()
.type(ParticleTypes.BLOCK_CRACK)
.option(ParticleOptions.BLOCK_STATE, BlockTypes.SAND.getDefaultState())
.build();
viewer.spawnParticles(particle, position);
Potion Effects
Demikian pula untuk partikel dan suara, kita perlu menggunakan pembangun untuk menciptakan efek ramuan kami:
import org.spongepowered.api.effect.potion.PotionEffect;
import org.spongepowered.api.effect.potion.PotionEffectTypes;
PotionEffect potion = PotionEffect.builder()
.potionType(PotionEffectTypes.HASTE)
.duration(10)
.amplifier(5)
.build();
Dengan menggunakan ini, kita dapat membuat PotionEffect dengan cepat yang akan berlangsung selama sepuluh detik dan memiliki sebuah pengeras dari lima pengeras. Tidak seperti partikel dan suara, potion tidak dapat diterapkan pada sebuah Viewer
. Sebagai gantinya, kita membutuhkan sebuah entitas yang mendukung PotionEffectData, seperti sebuah pemutar.
import org.spongepowered.api.data.manipulator.mutable.PotionEffectData;
import org.spongepowered.api.entity.living.player.Player;
PotionEffectData effects = player.getOrCreate(PotionEffectData.class).get();
effects.addElement(potion);
player.offer(effects);
Ini akan mendapatkan atau membuat `` PotionEffectData`` dari pemain. kami kemudian menambahkan efek ramuannya ke daftar dan menawarkannya ke pemain.