Efekty

Ostrzeżenie

Ta dokumentacja została napisana dla SpongeAPI 7 i możliwe, że jest już przestarzała. Jeśli masz ochotę wspomóc w jej aktualizacji, prosimy, utwórz PR!

Używając API efektów w Sponge, możemy utworzyć specjalne efekty na naszym serwerze. Używając Viewer możemy odtworzyć dźwięk lub ze-spawnować partykułki na serwerze.

Odtwarzanie dźwięków

Przy pomocy jakiegokolwiek Viewer możemy odtworzyć dźwięk w danej lokacji:

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

Rozbijmy to teraz na czynniki pierwsze. Pierwszy, SoundType określa dźwięk jaki ma zostać odtworzony. Następnie, Vector3d określa pozycje. Ta pozycja może zostać skonstruowana lub może zostać wyciągnięta z Location używając metody Location#getPosition(). W przykładzie wyżej, dźwięk zostanie odtworzony na koordynatach 1, 65, 1. Na końcu mamy głośność odtwarzanego dźwięku. Głośność jest double-m, który mieści się w zakresie od zera do dwóch.

Teraz kiedy umiemy już uruchamiać podstawowe dźwięki, możemy pogłębić naszą wiedzę o dźwiękach. Powiedzmy że chcielibyśmy odtworzyć nasz dźwięk z określoną tonacją. Możemy użyć klasy PitchModulation aby zmodulować tonację. Możemy również użyć SoundCategory do określenia w jakiej kategori chcemy odtworzyć nasz dźwięk. Przykłady dla tych opcji są pokazane poniżej:

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

Jeśli SoundCategory nie jest określone podczas puszczania utworu, zostanie użyte SoundCategories#MASTER.

Spawning Partykuł

Podobnie jak z dźwiękami, możemy użyć klasy Viewer do spawn-owania partykuł na świecie:

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

Używając ParticleEffect.Builder, możemy określić typ partykuł, jakie chcielibyśmy utworzyć. Przy tym, również określamy, że pięćdziesiąt partykuł będzie w partykułowym efekcie.

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

Efekty mikstury

Similarly to particles and sounds, we need to use a builder to create our potion effect:

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

Using this, we can create a haste PotionEffect that will last for ten ticks and have an amplifier of five. Unlike particles and sounds, potions cannot be applied to a Viewer. Instead, we need an entity that supports PotionEffectData, such as a player.

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

This will get or create a PotionEffectData from a player. We then add our previous potion effect to the list and offer it back to the player.