blob: 9f03938353db3ad762b7f991e7790d394bb28a20 [file] [log] [blame] [raw]
package li.cil.oc.api.prefab;
import li.cil.oc.api.nanomachines.Behavior;
import li.cil.oc.api.nanomachines.BehaviorProvider;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
/**
* Example base implementation of nanomachine behavior provider.
* <p/>
* This class takes care of handling the unique identifier used to tell
* if a behavior is its own when loading from NBT.
*/
public abstract class AbstractProvider implements BehaviorProvider {
/**
* Unique identifier used to tell if a behavior is ours when asked to load it.
*/
protected final String id;
/**
* For the ID passed in here, it is suggested to use a one-time generated
* UUID that is hard-coded into your provider implementation. Take care to
* use a different one for each provider you create!
*
* @param id the unique identifier for this provider.
*/
protected AbstractProvider(String id) {
if (id == null) throw new NullPointerException("id must not be null");
this.id = id;
}
/**
* Called when saving a behavior created using this behavior to NBT.
* <p/>
* The ID will already have been written, don't overwrite it. Store
* any additional data you need to restore the behavior here, if any.
*
* @param behavior the behavior to persist.
* @param nbt the NBT tag to persist it to.
*/
protected void writeBehaviorToNBT(Behavior behavior, NBTTagCompound nbt) {
}
/**
* Called when loading a behavior from NBT.
* <p/>
* Use the data written in {@link #writeBehaviorToNBT} to restore the behavior
* to its previous state, then return it.
*
* @param player the player to restore the behavior for.
* @param nbt the NBT tag to load restore the behavior from.
* @return the restored behavior.
*/
protected abstract Behavior readBehaviorFromNBT(EntityPlayer player, NBTTagCompound nbt);
// ----------------------------------------------------------------------- //
@Override
public NBTTagCompound writeToNBT(Behavior behavior) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setString("provider", id);
writeBehaviorToNBT(behavior, nbt);
return nbt;
}
@Override
public Behavior readFromNBT(EntityPlayer player, NBTTagCompound nbt) {
if (id.equals(nbt.getString("provider"))) {
return readBehaviorFromNBT(player, nbt);
} else {
return null;
}
}
}