Particle.java

package it.fulminazzo.yagl.particles;

import it.fulminazzo.fulmicollection.objects.FieldEquable;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
 * Represents a general particle with an associated {@link ParticleOption}.
 */
@Getter
public class Particle extends FieldEquable {
    private final String type;
    private final ParticleOption<?> option;

    /**
     * Instantiates a new Particle.
     *
     * @param type   the type
     * @param option the option
     */
    Particle(final @NotNull String type, final @Nullable ParticleOption<?> option) {
        this.type = type;
        this.option = option;
    }

    /**
     * Gets option using {@link ParticleOption#getOption()}.
     *
     * @param <O> the type parameter
     * @return the option
     */
    @SuppressWarnings("unchecked")
    public <O> O getOption() {
        return this.option == null ? null : (O) this.option.getOption();
    }
}