package noppes.npcs.controllers.data; import cpw.mods.fml.common.eventhandler.Event; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.constants.EnumScriptType; import noppes.npcs.janino.JaninoScript; import java.util.Collections; import java.util.List; import java.util.function.Supplier; /** * Reusable IScriptHandler implementation for objects that own an optional single JaninoScript unit. *
* This is meant for "function provider" scripts (not EnumScriptType driven). Execution is typically * initiated by the owning system calling script.call(...) directly. *
* NBT storage is kept under the parent compound key "Script" (same convention as JaninoScriptable).
*/
public class JaninoScriptHandler> extends ScriptHandler {
protected S script;
private final Supplier factory;
private final Class scriptClass;
public JaninoScriptHandler(Supplier factory, Class scriptClass) {
this.factory = factory;
this.scriptClass = scriptClass;
scriptLanguage = "Java";
}
// -------------------- Script ownership (JaninoScriptable) --------------------
public boolean hasScript() {
return script != null;
}
public S getScript() {
return script;
}
public JaninoScript createScript() {
if (script == null)
script = factory.get();
return script;
}
public void deleteScript() {
script = null;
}
// -------------------- NBT helpers --------------------
public void readFromNBT(NBTTagCompound compound) {
// JaninoScriptable's helper generics assume JaninoScript