+0

Usar partículas y crear animaciones en Minecraft con Spigot



Vamos a ver como usar las partículas de Minecraft en Spigot, y como crear animaciones con ellas.

¿Qué es una partícula?

Una partícula en Minecraft es un efecto visual que tiene movimiento e incluso puede interactuar con el mundo.

Ejemplo de partícula al matar un monstruo de Minecraft

Ejemplo de partícula al matar un monstruo de Minecraft

Una partícula por sí sola no es muy útil para programar, pero cuando juntamos muchas y encima creamos animaciones que dependan también del tiempo, podemos crear cosas muy chulas.

Ejemplo de efecto de tornado con partículas

Ejemplo de efecto de tornado con partículas

¿Quieres aprender a hacer todo esto? Pues quédate leyendo.

Añadir partículas con Spigot

Para hacer aparecer partículas dentro del mundo de Minecraft con Spigot necesitaremos llamar al método spawnParticle que se encuentra por un objeto World o un objeto Player.

Hay muchas formas diferentes de llamar al método, ya que dependiendo de los argumentos que pasemos necesitaremos un método u otro. Lo que sí que es común es saber el tipo de partícula, en este caso en una instancia de objeto Particle, saber la ubicación donde queremos que aparezca y saber la cuenta de partículas que queremos que aparezcan. También podemos especificar opcionalmente la velocidad a la que las partículas se moverán.

Aparte, unos pocos tipos de partículas tienen lo que se llama un particle data, como por ejemplo la partícula de polvo (Particle.DustOptions).

Para ver un ejemplo, vamos a crear unas partículas de fuego que se muevan aleatoriamente.

world.spawnParticle(Particle.FLAME, player.getLocation(), 10, 2, 2, 2, 5);

Animación de partículas

En la clase anterior hemos visto cómo funcionan los Runnables y el Bukkit Scheduler. Podemos aprovechar esto para hacer animaciones con partículas. Por ejemplo, si queremos hacer una animación de las partículas que vayan hacia arriba, pondremos el Scheduler con un bucle que lentamente vaya creando partículas hasta llegar arriba del todo.

for (int i = 0; i < 10; i++) {  
    Location loc = player.getLocation().clone().add(0, i, 0);  
      
    Bukkit.getScheduler().runTaskLater(CursoSpigot.getInstance(), () -> {
	    world.spawnParticle(Particle.FLAME, loc, 5);  
    }, (long) i);  
}