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.