Wrapper.java

package it.fulminazzo.yagl.testing;

import it.fulminazzo.fulmicollection.objects.Refl;
import org.jetbrains.annotations.NotNull;

/**
 * Represents a wrapper for an object.
 * This is required for Minecraft version 1.20.6+ tests since
 * many objects are not an abstract classes anymore.
 *
 * @param <O> the type parameter
 */
public abstract class Wrapper<O> {
    protected final Refl<O> internalObject;

    /**
     * Instantiates a new Wrapper.
     *
     * @param clazz      the clazz
     * @param parameters the parameters
     */
    public Wrapper(final @NotNull Class<O> clazz, final Object @NotNull ... parameters) {
        this(new Refl<>(clazz, parameters));
    }

    /**
     * Instantiates a new Wrapper.
     *
     * @param internalObject the internal object
     */
    public Wrapper(final @NotNull Refl<O> internalObject) {
        this.internalObject = internalObject;
    }

    /**
     * Gets the wrapped object.
     *
     * @param <T> the type to convert the internal object to
     * @return the object
     */
    @SuppressWarnings("unchecked")
    public @NotNull <T> T getWrapped() {
        return (T) this.internalObject.getObject();
    }

}