package io.github.lucaseasedup.logit.craftreflect;
import io.github.lucaseasedup.logit.LogItPlugin;
public abstract class ObjectWrapper
{
public ObjectWrapper(Object o)
{
this.holder = new Holder(o);
}
public final <T extends ObjectWrapper> T cast(Class<T> castTo)
throws ReflectiveOperationException
{
String bukkitVersion = LogItPlugin.getCraftBukkitVersion();
String wrapperCraftClassName = LogItPlugin.PACKAGE + ".craftreflect."
+ bukkitVersion + "." + castTo.getSimpleName();
Class<?> wrapperCraftClass = Class.forName(wrapperCraftClassName);
@SuppressWarnings("unchecked")
T newWrapper = (T) wrapperCraftClass.getConstructor().newInstance();
String objectCraftClassName = holder.get().getClass().getName().replace(
holder.get().getClass().getSimpleName(), castTo.getSimpleName()
);
Class<?> objectCraftClass = Class.forName(objectCraftClassName);
newWrapper.getHolder().set(objectCraftClass.cast(holder.get()));
return newWrapper;
}
public final Holder getHolder()
{
return holder;
}
public static final class Holder
{
private Holder(Object obj)
{
this.obj = obj;
}
public Object get()
{
return obj;
}
private void set(Object obj)
{
this.obj = obj;
}
private Object obj = null;
}
private final Holder holder;
}