Worked on command system

This commit is contained in:
DarkGuardsman 2013-10-15 15:48:43 -04:00
parent d98f77dc7c
commit 7d8ba9cdc7
21 changed files with 284 additions and 112 deletions

View file

@ -9,6 +9,7 @@ import universalelectricity.core.vector.Vector2;
import universalelectricity.core.vector.Vector3;
import dan200.computer.api.IComputerAccess;
import dan200.computer.api.ILuaContext;
import dark.api.al.armbot.IArmbotTask.TaskType;
/** Basic command prefab used by machines like an armbot. You are not required to use this in order
* to make armbot commands but it does help. Delete this if you don't plan to use it. */
@ -20,6 +21,8 @@ public abstract class Command implements IArmbotTask, Cloneable
/** The amount of ticks this command has been running for. */
protected int ticks = 0;
protected TaskType taskType;
/** World current working in */
protected World worldObj;
/** Armbot instance */
@ -32,9 +35,10 @@ public abstract class Command implements IArmbotTask, Cloneable
/** The parameters this command */
private Object[] parameters;
public Command(String name)
public Command(String name, TaskType tasktype)
{
this.methodName = name;
this.taskType = tasktype;
}
@Override
@ -45,22 +49,20 @@ public abstract class Command implements IArmbotTask, Cloneable
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
this.worldObj = world;
this.armbot = armbot;
this.parameters = arguments;
this.armbotPos = location;
return true;
}
@Override
public Object[] onCCMethodCalled(World world, Vector3 location, IArmbot armbot, IComputerAccess computer, ILuaContext context, Object[] arguments) throws Exception
public Object[] onCCMethodCalled(World world, Vector3 location, IArmbot armbot, IComputerAccess computer, ILuaContext context) throws Exception
{
this.worldObj = world;
this.armbot = armbot;
this.parameters = arguments;
this.armbotPos = location;
return null;
@ -104,14 +106,6 @@ public abstract class Command implements IArmbotTask, Cloneable
this.pos = pos;
}
@Override
public Command readFromNBT(NBTTagCompound nbt)
{
this.ticks = nbt.getInteger("ticks");
this.pos = new Vector2(nbt.getDouble("xx"), nbt.getDouble("yy"));
return this;
}
public ItemStack getItem(String string, int ammount)
{
int id = 0;
@ -137,9 +131,36 @@ public abstract class Command implements IArmbotTask, Cloneable
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
public Command load(NBTTagCompound nbt)
{
nbt.setInteger("ticks", this.ticks);
NBTTagCompound parmTag = nbt.getCompoundTag("parms");
int parms = parmTag.getInteger("parms");
if (parms > 0)
{
Object[] args = new Object[parms];
for (int i = 0; i < parms; i++)
{
args[i] = nbt.getString("parm" + i);
}
}
this.pos = new Vector2(nbt.getDouble("xx"), nbt.getDouble("yy"));
return this;
}
@Override
public NBTTagCompound save(NBTTagCompound nbt)
{
if (this.parameters != null)
{
NBTTagCompound parmTag = new NBTTagCompound();
parmTag.setInteger("parms", this.parameters.length);
for (int i = 0; i < this.parameters.length; i++)
{
parmTag.setString("parm" + i, "" + this.parameters[i]);
}
nbt.setCompoundTag("parms", parmTag);
}
if (this.pos != null)
{
nbt.setDouble("xx", pos.x);
@ -148,6 +169,20 @@ public abstract class Command implements IArmbotTask, Cloneable
return nbt;
}
@Override
public IArmbotTask loadProgress(NBTTagCompound nbt)
{
this.ticks = nbt.getInteger("ticks");
return this;
}
@Override
public NBTTagCompound saveProgress(NBTTagCompound nbt)
{
nbt.setInteger("ticks", this.ticks);
return nbt;
}
@Override
public String toString()
{
@ -166,6 +201,26 @@ public abstract class Command implements IArmbotTask, Cloneable
return this.methodName;
}
@Override
public Object[] getCurrentParms()
{
return this.parameters;
}
@Override
public void setParms(Object... arguments)
{
this.parameters = arguments;
}
@Override
public TaskType getType()
{
return this.taskType;
}
@Override
public abstract Command clone();
}

View file

@ -25,34 +25,50 @@ public interface IArmbotTask
/** Should be the same as getMethodName() but can be different */
public String getCCMethod();
public Object[] getCurrentParms();
public void setParms(Object... arguments);
/** Passed in from both the armbot to the program manager then here after a Computer craft
* machine calls a this commands method name. {@IPeripheral #callMethod()} */
public Object[] onCCMethodCalled(World world, Vector3 location, IArmbot armbot, IComputerAccess computer, ILuaContext context, Object[] arguments) throws Exception;
public Object[] onCCMethodCalled(World world, Vector3 location, IArmbot armbot, IComputerAccess computer, ILuaContext context) throws Exception;
/** Update the current segment of the task */
public boolean onUpdate();
/** Called when the task is being run by the armbot. Used mainly to setup the task before actually doing the task.
/** Called when the task is being run by the armbot. Used mainly to setup the task before
* actually doing the task.
*
* @param world - current world
* @param location - current location
* @param armbot - armbot instance
* @param arguments - arguments for command
* @return should task be continued */
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments);
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot);
/** Called when the task is finish and then cleared */
public void terminated();
/** Read the command from the armbot save. Mainly only the current task is saved. */
public IArmbotTask readFromNBT(NBTTagCompound nbt);
/** Read the command from the armbot save. */
public IArmbotTask load(NBTTagCompound nbt);
/** Writes the command to the armbot save. Mainly only the current task is saved. */
public NBTTagCompound writeToNBT(NBTTagCompound nbt);
/** Writes the command to the armbot save. Should only be used to save the data used to recreate
* a new version of this command */
public NBTTagCompound save(NBTTagCompound nbt);
/** Saves the current progress of the current command */
public IArmbotTask loadProgress(NBTTagCompound nbt);
/** Reads the progress of the command if it was saved mid process */
public NBTTagCompound saveProgress(NBTTagCompound nbt);
public TaskType getType();
/** Used mainly for display purposes in the encoder */
public static enum TaskType
{
DATA(), PROCESS(), DECISION()
DATA(),
DEFINEDPROCESS(),
DECISION()
}
}

View file

@ -23,4 +23,7 @@ public interface IProgram
/** Gets a task at the given x y location in the program */
public IArmbotTask getTaskAt(Vector2 vector2);
/** Return this program to its starting conditions */
public void reset();
}

View file

@ -1,25 +1,72 @@
package dark.api.al.armbot;
import java.util.Arrays;
import java.util.HashMap;
/** Basic class to handle a armbot like program for any object that uses the IArmbot class
import net.minecraft.world.World;
import universalelectricity.core.vector.Vector3;
/** Basic class to handle a armbot like programs for any object that uses the IArmbot class
*
* @author DarkGuardsman */
public class ProgramHandler
public class ProgramHelper
{
/** Current Program */
protected IProgram program;
protected IArmbot bot;
/** Current task in program */
protected IArmbotTask currentTask;
/** Do we have a memory to store values */
boolean hasMemory = false;
/**Max memorySize */
boolean hasTaskBeenCalled = false, nextTask = false;
/** Max memorySize */
protected int memorySize = 0;
/** Array of values to remember between commands */
protected HashMap<String, Object> taskMemory = new HashMap<String, Object>();
public ProgramHandler(int varableLimit)
public ProgramHelper(IArmbot bot)
{
this.bot = bot;
}
/** Needs to be called by the armbot per tick.
*
* @return true if it is doing something */
public boolean onUpdate(World world, Vector3 botLocation)
{
if (program != null)
{
if (this.currentTask == null || this.nextTask)
{
this.nextTask();
}
if (this.currentTask != null)
{
if (!this.hasTaskBeenCalled && !this.currentTask.onMethodCalled(world, botLocation, bot))
{
this.nextTask = true;
}
else
{
if (!this.currentTask.onUpdate())
{
this.nextTask = true;
}
}
return true;
}
}
return false;
}
public void nextTask()
{
this.currentTask = program.getNextTask();
this.hasTaskBeenCalled = false;
this.nextTask = false;
}
public ProgramHelper(int varableLimit)
{
if (varableLimit > 0)
{
@ -32,7 +79,7 @@ public class ProgramHandler
}
}
public ProgramHandler setProgram(IProgram program)
public ProgramHelper setProgram(IProgram program)
{
this.program = program;
this.onProgramChanged();
@ -45,10 +92,11 @@ public class ProgramHandler
if (this.program != null)
{
HashMap<String, Object> memory = this.program.getDeclairedVarables();
if(memory.size() <= memorySize)
if (memory.size() <= memorySize)
{
//TODO load in memory and throw error stopping machine if there is not enough
}
this.program.init();
}
}

View file

@ -52,8 +52,8 @@ public class TileEntityArmbot extends TileEntityAssembly implements IMultiBlock,
/** The rotation of the arms. In Degrees. */
protected float rotationPitch = 0;
protected float rotationYaw = 0;
protected float actualPitch = 0;
protected float actualYaw = 0;
public float actualPitch = 0;
public float actualYaw = 0;
protected final float ROTATION_SPEED = 2.0f;
protected boolean hasTask = false;

View file

@ -7,6 +7,7 @@ import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import universalelectricity.core.vector.Vector3;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
import dark.core.prefab.helpers.ItemWorldHelper;
/** Used by arms to break a specific block in a position.
@ -16,12 +17,12 @@ public class CommandBreak extends Command
{
public CommandBreak()
{
super("break");
super("break", TaskType.DEFINEDPROCESS);
}
public CommandBreak(String name)
{
super(name);
super(name, TaskType.DEFINEDPROCESS);
}
int BREAK_TIME = 30;

View file

@ -1,12 +1,13 @@
package dark.assembly.common.armbot.command;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
public class CommandDrop extends Command
{
public CommandDrop()
{
super("drop");
super("drop", TaskType.DEFINEDPROCESS);
}
@Override

View file

@ -6,6 +6,7 @@ import com.builtbroken.common.science.units.UnitHelper;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbot;
import dark.api.al.armbot.IArmbotTask.TaskType;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
@ -29,13 +30,13 @@ public class CommandFire extends Command
public CommandFire()
{
super("throw");
super("throw", TaskType.DEFINEDPROCESS);
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
super.onMethodCalled(world, location, armbot, arguments);
super.onMethodCalled(world, location, armbot);
this.velocity = UnitHelper.tryToParseFloat("" + this.getArg(0));
if (this.velocity > 2.5f)
@ -140,9 +141,9 @@ public class CommandFire extends Command
}
@Override
public Command readFromNBT(NBTTagCompound taskCompound)
public Command loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.actualYaw = taskCompound.getFloat("fireYaw");
this.actualPitch = taskCompound.getFloat("firePitch");
this.velocity = taskCompound.getFloat("fireVelocity");
@ -154,9 +155,9 @@ public class CommandFire extends Command
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound taskCompound)
public NBTTagCompound saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setFloat("fireYaw", this.actualYaw);
taskCompound.setFloat("firePitch", this.actualPitch);
taskCompound.setFloat("fireVelocity", this.velocity);

View file

@ -4,17 +4,19 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.builtbroken.common.science.units.UnitHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.vector.Vector3;
import com.builtbroken.common.science.units.UnitHelper;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbot;
import dark.assembly.common.machine.InvInteractionHelper;
import dark.core.prefab.helpers.MathHelper;
public class CommandGive extends Command
{
@ -24,13 +26,13 @@ public class CommandGive extends Command
public CommandGive()
{
super("give");
super("give", TaskType.DEFINEDPROCESS);
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
super.onMethodCalled(world, location, armbot, arguments);
super.onMethodCalled(world, location, armbot);
if (this.getArgs().length > 1)
{
@ -53,28 +55,32 @@ public class CommandGive extends Command
if (targetTile != null && this.armbot.getGrabbedObjects().size() > 0)
{
ForgeDirection direction = this.tileEntity.getFacingDirectionFromAngle();
ForgeDirection direction = MathHelper.getFacingDirectionFromAngle((float) this.armbot.getRotation().x);
List<ItemStack> stacks = new ArrayList<ItemStack>();
if (this.stack != null)
{
stacks.add(stack);
}
InvInteractionHelper invEx = new InvInteractionHelper(this.tileEntity.worldObj, new Vector3(this.tileEntity), stacks, false);
InvInteractionHelper invEx = new InvInteractionHelper(this.worldObj, this.armbotPos, stacks, false);
Iterator<ItemStack> targetIt = this.tileEntity.getGrabbedItems().iterator();
Iterator<Object> targetIt = this.armbot.getGrabbedObjects().iterator();
boolean flag = true;
while (targetIt.hasNext())
{
ItemStack insertStack = targetIt.next();
if (insertStack != null)
Object object = targetIt.next();
if (object instanceof ItemStack)
{
ItemStack original = insertStack.copy();
insertStack = invEx.tryPlaceInPosition(insertStack, new Vector3(targetTile), direction.getOpposite());
flag = insertStack != null && insertStack.stackSize == original.stackSize;
if (insertStack == null || insertStack.stackSize <= 0)
ItemStack insertStack = (ItemStack) object;
if (insertStack != null)
{
targetIt.remove();
break;
ItemStack original = insertStack.copy();
insertStack = invEx.tryPlaceInPosition(insertStack, new Vector3(targetTile), direction.getOpposite());
flag = insertStack != null && insertStack.stackSize == original.stackSize;
if (insertStack == null || insertStack.stackSize <= 0)
{
targetIt.remove();
break;
}
}
}
}
@ -90,17 +96,17 @@ public class CommandGive extends Command
}
@Override
public Command readFromNBT(NBTTagCompound taskCompound)
public Command loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.stack = ItemStack.loadItemStackFromNBT(taskCompound.getCompoundTag("item"));
return this;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound taskCompound)
public NBTTagCompound saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
if (stack != null)
{
NBTTagCompound tag = new NBTTagCompound();

View file

@ -13,6 +13,7 @@ import net.minecraft.world.World;
import universalelectricity.core.vector.Vector3;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbot;
import dark.api.al.armbot.IArmbotTask.TaskType;
import dark.assembly.common.armbot.GrabDictionary;
import dark.assembly.common.machine.belt.TileEntityConveyorBelt;
@ -33,13 +34,13 @@ public class CommandGrab extends Command
public CommandGrab()
{
super("Grab");
super("Grab", TaskType.DEFINEDPROCESS);
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
super.onMethodCalled(world, location, armbot, arguments);
super.onMethodCalled(world, location, armbot);
this.entityToInclude = Entity.class;
if (this.getArgs() != null && this.getArgs().length > 0 && this.getArgs()[0] != null)
{
@ -110,18 +111,18 @@ public class CommandGrab extends Command
}
@Override
public Command readFromNBT(NBTTagCompound taskCompound)
public Command loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.child = taskCompound.getBoolean("child");
this.entityToInclude = GrabDictionary.get(taskCompound.getString("name")).getEntityClass();
return this;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound taskCompound)
public NBTTagCompound saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setBoolean("child", child);
taskCompound.setString("name", ((this.entityToInclude != null) ? GrabDictionary.get(this.entityToInclude).getName() : ""));
return taskCompound;

View file

@ -3,6 +3,7 @@ package dark.assembly.common.armbot.command;
import net.minecraft.world.World;
import universalelectricity.core.vector.Vector3;
import dark.api.al.armbot.IArmbot;
import dark.api.al.armbot.IArmbotTask.TaskType;
/** Used by arms to break a specific block in a position.
*
@ -17,9 +18,9 @@ public class CommandHarvest extends CommandBreak
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
this.keep = true;
return super.onMethodCalled(world, location, armbot, arguments);
return super.onMethodCalled(world, location, armbot);
}
}

View file

@ -15,7 +15,7 @@ public class CommandIF extends Command implements ISplitArmbotTask
public CommandIF()
{
super("IF");
super("IF", TaskType.DECISION);
}
public CommandIF(IArmbotTask entryPoint, IArmbotTask trueExit, IArmbotTask falseExit)
@ -70,9 +70,9 @@ public class CommandIF extends Command implements ISplitArmbotTask
}
@Override
public Command readFromNBT(NBTTagCompound nbt)
public Command loadProgress(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
super.loadProgress(nbt);
this.entryPoint = this.program.getTaskAt(new Vector2(nbt.getDouble("entryX"), (nbt.getDouble("entryY"))));
this.exitFalsePoint = this.program.getTaskAt(new Vector2(nbt.getDouble("exitFalseX"), (nbt.getDouble("exitFalseY"))));
this.exitTruePoint = this.program.getTaskAt(new Vector2(nbt.getDouble("exitTrueX"), (nbt.getDouble("exitTrueY"))));
@ -80,9 +80,9 @@ public class CommandIF extends Command implements ISplitArmbotTask
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
public NBTTagCompound saveProgress(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
super.saveProgress(nbt);
if (this.entryPoint != null)
{
nbt.setDouble("entryX", this.entryPoint.getPosition().x);

View file

@ -5,6 +5,7 @@ import com.builtbroken.common.science.units.UnitHelper;
import universalelectricity.core.vector.Vector3;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbot;
import dark.api.al.armbot.IArmbotTask.TaskType;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
@ -17,14 +18,14 @@ public class CommandIdle extends Command
public CommandIdle()
{
super("wait");
super("wait", TaskType.DEFINEDPROCESS);
// TODO Auto-generated constructor stub
}
@Override
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot, Object[] arguments)
public boolean onMethodCalled(World world, Vector3 location, IArmbot armbot)
{
super.onMethodCalled(world, location, armbot, arguments);
super.onMethodCalled(world, location, armbot);
if (UnitHelper.tryToParseInt("" + this.getArg(0)) > 0)
{
@ -51,18 +52,18 @@ public class CommandIdle extends Command
}
@Override
public Command readFromNBT(NBTTagCompound taskCompound)
public Command loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.idleTime = taskCompound.getInteger("idleTime");
this.totalIdleTime = taskCompound.getInteger("idleTotal");
return this;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound taskCompound)
public NBTTagCompound saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setInteger("idleTime", this.idleTime);
taskCompound.setInteger("idleTotal", this.totalIdleTime);
return taskCompound;

View file

@ -1,6 +1,7 @@
package dark.assembly.common.armbot.command;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
@ -11,12 +12,18 @@ import net.minecraftforge.common.IPlantable;
import universalelectricity.core.vector.Vector3;
/** Used by arms to break a specific block in a position.
*
*
* @author Calclavia */
public class CommandPlace extends Command
{
int PLACE_TIME = 30;
public CommandPlace()
{
super("Place", TaskType.DEFINEDPROCESS);
// TODO Auto-generated constructor stub
}
@Override
public void onStart()
{

View file

@ -1,19 +1,27 @@
package dark.assembly.common.armbot.command;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
import net.minecraft.nbt.NBTTagCompound;
/** This task resets all previous tasks and does them again in a loop.
*
*
* @author Calclavia */
public class CommandRepeat extends Command
{
/** The amount of tasks above this task to repeat. */
private int tasksToRepeat;
private int numReps;
private int curReps;
private boolean initialized = false;
public CommandRepeat()
{
super("repeat", TaskType.DEFINEDPROCESS);
// TODO Auto-generated constructor stub
}
@Override
public void onStart()
{
@ -49,9 +57,9 @@ public class CommandRepeat extends Command
}
@Override
public void readFromNBT(NBTTagCompound taskCompound)
public void loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.initialized = taskCompound.getBoolean("repInitialized");
this.tasksToRepeat = taskCompound.getInteger("repTasks");
this.curReps = taskCompound.getInteger("repCur");
@ -59,9 +67,9 @@ public class CommandRepeat extends Command
}
@Override
public void writeToNBT(NBTTagCompound taskCompound)
public void saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setBoolean("repInitialized", this.initialized);
taskCompound.setInteger("repTasks", this.tasksToRepeat);
taskCompound.setInteger("repCur", this.curReps);

View file

@ -1,6 +1,7 @@
package dark.assembly.common.armbot.command;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
public class CommandReturn extends Command
{
@ -11,7 +12,7 @@ public class CommandReturn extends Command
public CommandReturn()
{
super("Return");
super("Return", TaskType.DEFINEDPROCESS);
}
@Override

View file

@ -1,18 +1,25 @@
package dark.assembly.common.armbot.command;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
import net.minecraft.nbt.NBTTagCompound;
/** Rotates the armbot to a specific direction. If not specified, it will turn right.
*
*
* @author Calclavia */
public class CommandRotateBy extends Command
{
float targetRotationYaw = 0;
float targetRotationPitch = 0;
float deltaPitch = 0, deltaYaw = 90;
float totalTicks = 0f;
public CommandRotateBy()
{
super("RotateBy", TaskType.DEFINEDPROCESS);
}
@Override
public void onStart()
{
@ -60,7 +67,7 @@ public class CommandRotateBy extends Command
super.onUpdate();
/*
* float rotationalDifference = Math.abs(this.tileEntity.rotationYaw - this.targetRotation);
*
*
* if (rotationalDifference < ROTATION_SPEED) { this.tileEntity.rotationYaw =
* this.targetRotation; } else { if (this.tileEntity.rotationYaw > this.targetRotation) {
* this.tileEntity.rotationYaw -= ROTATION_SPEED; } else { this.tileEntity.rotationYaw +=
@ -89,17 +96,17 @@ public class CommandRotateBy extends Command
}
@Override
public void readFromNBT(NBTTagCompound taskCompound)
public void loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.targetRotationPitch = taskCompound.getFloat("rotPitch");
this.targetRotationYaw = taskCompound.getFloat("rotYaw");
}
@Override
public void writeToNBT(NBTTagCompound taskCompound)
public void saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setFloat("rotPitch", this.targetRotationPitch);
taskCompound.setFloat("rotYaw", this.targetRotationYaw);
}

View file

@ -6,6 +6,7 @@ import com.builtbroken.common.science.units.UnitHelper;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbot;
import dark.api.al.armbot.IArmbotTask.TaskType;
import dark.core.prefab.helpers.MathHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
@ -17,7 +18,7 @@ public class CommandRotateTo extends Command
{
public CommandRotateTo()
{
super("RotateTo");
super("RotateTo", TaskType.DEFINEDPROCESS);
}
float targetRotationYaw = 0, targetRotationPitch = 0, currentRotationYaw, currentRotationPitch;
@ -62,18 +63,18 @@ public class CommandRotateTo extends Command
}
@Override
public Command readFromNBT(NBTTagCompound taskCompound)
public Command loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.targetRotationPitch = taskCompound.getFloat("rotPitch");
this.targetRotationYaw = taskCompound.getFloat("rotYaw");
return this;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound taskCompound)
public NBTTagCompound saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setFloat("rotPitch", this.targetRotationPitch);
taskCompound.setFloat("rotYaw", this.targetRotationYaw);
return taskCompound;

View file

@ -9,12 +9,19 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.core.vector.Vector3;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotTask.TaskType;
import dark.assembly.common.machine.InvInteractionHelper;
public class CommandTake extends Command
{
private ItemStack stack;
public CommandTake()
{
super("Take", TaskType.DEFINEDPROCESS);
}
@Override
public void onStart()
{
@ -78,16 +85,16 @@ public class CommandTake extends Command
}
@Override
public void readFromNBT(NBTTagCompound taskCompound)
public void loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.stack = ItemStack.loadItemStackFromNBT(taskCompound.getCompoundTag("item"));
}
@Override
public void writeToNBT(NBTTagCompound taskCompound)
public void saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
if (stack != null)
{
NBTTagCompound tag = new NBTTagCompound();

View file

@ -5,12 +5,19 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import dark.api.al.armbot.Command;
import dark.api.al.armbot.IArmbotUseable;
import dark.api.al.armbot.IArmbotTask.TaskType;
public class CommandUse extends Command
{
private int times;
private int curTimes;
public CommandUse()
{
super("use", TaskType.DEFINEDPROCESS);
}
@Override
public void onStart()
{
@ -71,17 +78,17 @@ public class CommandUse extends Command
}
@Override
public void readFromNBT(NBTTagCompound taskCompound)
public void loadProgress(NBTTagCompound taskCompound)
{
super.readFromNBT(taskCompound);
super.loadProgress(taskCompound);
this.times = taskCompound.getInteger("useTimes");
this.curTimes = taskCompound.getInteger("useCurTimes");
}
@Override
public void writeToNBT(NBTTagCompound taskCompound)
public void saveProgress(NBTTagCompound taskCompound)
{
super.writeToNBT(taskCompound);
super.saveProgress(taskCompound);
taskCompound.setInteger("useTimes", this.times);
taskCompound.setInteger("useCurTimes", this.curTimes);
}

View file

@ -190,7 +190,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
}
/** Construct an InventoryCrafting Matrix on the fly.
*
*
* @return */
public InventoryCrafting getCraftingMatrix()
{
@ -393,7 +393,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
if (this.imprinterMatrix[craftingOutputSlot] != null)
{
armbot.grabItem(this.imprinterMatrix[craftingOutputSlot].copy());
armbot.grab(this.imprinterMatrix[craftingOutputSlot].copy());
this.onPickUpFromSlot(null, 2, this.imprinterMatrix[craftingOutputSlot]);
this.imprinterMatrix[craftingOutputSlot] = null;
return true;