Extendiendo los Efectos

package me.leo_s.featheredelection.objects.effect.types;

import me.leo_s.featheredelection.annotations.EffectName;
import me.leo_s.featheredelection.objects.effect.Effect;
import me.leo_s.featheredelection.objects.trigger.TriggerData;
import org.bukkit.Particle;
import org.bukkit.entity.Player;

@EffectName(name = "spawn_particles")
public class SpawnParticlesEffect extends Effect {
    private final Particle particle;
    private final int amount;
    public SpawnParticlesEffect(String particle, int amount) {
        this.particle = Particle.valueOf(particle);
        this.amount = amount;
    }

    @Override
    public void dispatch(Player player, TriggerData data) {
        if(player != null) {
            player.getWorld().spawnParticle(particle, player.getLocation(), amount);
        }
    }
}

Clase Effect

public abstract class Effect {
    protected Set<Condition> conditions;
    protected Filter<?> filter;

    public Effect(Set<Condition> conditions, Filter<?> filter){
        this.conditions = conditions;
        this.filter = filter;
    }

    public Effect(){}

    public abstract void dispatch(Player player, TriggerData data);

    public boolean isMet(Player player){
        return this.conditions.stream().allMatch(c -> c.isMet(player));
    }
}

La clase Effect tiene parámetros como sus condiciones y el filtro que esta llevara, puedes crear tus propios filtros al igual que condiciones o si no directamente pasarle un filtro o condiciones ya predefinidas.

Paquetes e Importaciones

package me.leo_s.featheredelection.objects.effect.types;

import me.leo_s.featheredelection.annotations.EffectName;
import me.leo_s.featheredelection.objects.effect.Effect;
import me.leo_s.featheredelection.objects.trigger.TriggerData;
import org.bukkit.Particle;
import org.bukkit.entity.Player;

Anotación @EffectName:

@EffectName(name = "spawn_particles")

La clase SpawnParticlesEffect está anotada con @EffectName, con un parámetro name igual a "spawn_particles". Esto sugiere que la instancia de esta clase representa un efecto que implica la generación de partículas en el juego.

Declaración de la Clase:

public class SpawnParticlesEffect extends Effect {

SpawnParticlesEffect extiende la clase Effect, lo que implica que hereda su funcionalidad y puede tener comportamiento específico adicional.

Atributos de la Clase:

private final Particle particle;
private final int amount;

La clase tiene dos atributos privados y finales (final) llamados particle y amount. particle es del tipo Particle (enum) y amount es un entero que representa la cantidad de partículas que se generarán. Tu puedes implementar tus propios atributos dependiendo del uso que le daras a este efecto.

Constructor:

public SpawnParticlesEffect(String particle, int amount) {
    this.particle = Particle.valueOf(particle);
    this.amount = amount;
}

La clase tiene un constructor que toma un nombre de partícula como cadena (particle) y la cantidad de partículas (amount). Convierte la cadena particle en un valor de enumeración Particle y asigna los valores correspondientes a los atributos particle y amount.

Método dispatch:

@Override
public void dispatch(Player player, TriggerData data) {
    if(player != null) {
        player.getWorld().spawnParticle(particle, player.getLocation(), amount);
    }
}

Este método anulado (@Override) pertenece a la clase base Effect. Se encarga de la ejecución del efecto. Si el jugador (player) no es nulo, invoca el método spawnParticle en el mundo del jugador, generando partículas del tipo y cantidad especificados en los atributos de la clase.

En resumen, esta clase representa un efecto que genera partículas en la ubicación de un jugador en el juego cuando se activa. La información específica sobre el tipo y la cantidad de partículas se establece mediante el constructor al crear una instancia de la clase.

Last updated