Finished implementing CC API for armbots
This commit is contained in:
parent
189fc9b857
commit
86fd779608
5 changed files with 113 additions and 54 deletions
|
@ -21,6 +21,7 @@ import net.minecraft.network.INetworkManager;
|
||||||
import net.minecraft.network.packet.Packet;
|
import net.minecraft.network.packet.Packet;
|
||||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import universalelectricity.core.electricity.ElectricityConnections;
|
import universalelectricity.core.electricity.ElectricityConnections;
|
||||||
import universalelectricity.core.implement.IJouleStorage;
|
import universalelectricity.core.implement.IJouleStorage;
|
||||||
|
@ -60,6 +61,7 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
public double wattsReceived = 0;
|
public double wattsReceived = 0;
|
||||||
private int playerUsing = 0;
|
private int playerUsing = 0;
|
||||||
private int computersAttached = 0;
|
private int computersAttached = 0;
|
||||||
|
private List<IComputerAccess> connectedComputers = new ArrayList<IComputerAccess>();
|
||||||
/**
|
/**
|
||||||
* The rotation of the arms. In Degrees.
|
* The rotation of the arms. In Degrees.
|
||||||
*/
|
*/
|
||||||
|
@ -175,13 +177,28 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
{
|
{
|
||||||
float speed;
|
float speed;
|
||||||
if (this.renderYaw > this.rotationYaw)
|
if (this.renderYaw > this.rotationYaw)
|
||||||
speed = -this.ROTATION_SPEED;
|
if (Math.abs(this.renderYaw - this.rotationYaw) > 180)
|
||||||
|
speed = this.ROTATION_SPEED;
|
||||||
|
else
|
||||||
|
speed = -this.ROTATION_SPEED;
|
||||||
else
|
else
|
||||||
speed = this.ROTATION_SPEED;
|
if (Math.abs(this.renderYaw - this.rotationYaw) > 180)
|
||||||
// System.out.println("Speed: " + speed);
|
speed = -this.ROTATION_SPEED;
|
||||||
// System.out.println("Yaw: [" + this.rotationYaw + ", " + this.renderYaw + "]");
|
else
|
||||||
|
speed = this.ROTATION_SPEED;
|
||||||
|
|
||||||
this.renderYaw += speed;
|
this.renderYaw += speed;
|
||||||
if (this.ticks % 5 == 0) //sound is 0.5 seconds long (20 ticks/second)
|
|
||||||
|
if (this.renderYaw <= -360)
|
||||||
|
{
|
||||||
|
this.renderYaw += 360;
|
||||||
|
}
|
||||||
|
if (this.renderYaw >= 360)
|
||||||
|
{
|
||||||
|
this.renderYaw -= 360;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.ticks % 5 == 0) // sound is 0.5 seconds long (20 ticks/second)
|
||||||
Minecraft.getMinecraft().sndManager.playSound("assemblyline.conveyor", this.xCoord, this.yCoord, this.zCoord, 2f, 1.7f);
|
Minecraft.getMinecraft().sndManager.playSound("assemblyline.conveyor", this.xCoord, this.yCoord, this.zCoord, 2f, 1.7f);
|
||||||
if (Math.abs(this.renderYaw - this.rotationYaw) < this.ROTATION_SPEED + 0.1f)
|
if (Math.abs(this.renderYaw - this.rotationYaw) < this.ROTATION_SPEED + 0.1f)
|
||||||
{
|
{
|
||||||
|
@ -225,7 +242,7 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
{
|
{
|
||||||
NBTTagCompound nbt = new NBTTagCompound();
|
NBTTagCompound nbt = new NBTTagCompound();
|
||||||
writeToNBT(nbt);
|
writeToNBT(nbt);
|
||||||
return PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.powerTransferRange, this.commandManager.getCurrentTask(), nbt);
|
return PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.powerTransferRange, nbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -246,7 +263,6 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
y = dis.readInt();
|
y = dis.readInt();
|
||||||
z = dis.readInt();
|
z = dis.readInt();
|
||||||
this.powerTransferRange = dis.readInt();
|
this.powerTransferRange = dis.readInt();
|
||||||
this.commandManager.setCurrentTask(dis.readInt());
|
|
||||||
NBTTagCompound tag = Packet.readNBTTagCompound(dis);
|
NBTTagCompound tag = Packet.readNBTTagCompound(dis);
|
||||||
readFromNBT(tag);
|
readFromNBT(tag);
|
||||||
}
|
}
|
||||||
|
@ -512,6 +528,11 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.commandManager.addCommand(this, Command.getCommand("DROP"));
|
||||||
|
this.commandManager.addCommand(this, Command.getCommand("RETURN"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -538,7 +559,7 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
@Override
|
@Override
|
||||||
public String[] getMethodNames()
|
public String[] getMethodNames()
|
||||||
{
|
{
|
||||||
return new String[] { "rotateBy", "rotateTo", "grab", "drop", "reset", "isWorking" };
|
return new String[] { "rotate", "grab", "drop", "reset", "isWorking", "touchingEntity" };
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -555,10 +576,6 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
{
|
{
|
||||||
double angle = (Double) arguments[0];
|
double angle = (Double) arguments[0];
|
||||||
this.commandManager.addCommand(this, CommandRotate.class, new String[] { Double.toString(angle) });
|
this.commandManager.addCommand(this, CommandRotate.class, new String[] { Double.toString(angle) });
|
||||||
while (this.commandManager.hasTasks())
|
|
||||||
{
|
|
||||||
Thread.sleep(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -572,49 +589,42 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1: // rotateTo: rotates to an absolute angle (0 is idle position, increases clockwise)
|
case 1: // grab: grabs an item
|
||||||
{
|
|
||||||
if (arguments.length > 0)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
double angle = (Double) arguments[0];
|
|
||||||
double diff = angle - this.rotationYaw;
|
|
||||||
this.commandManager.addCommand(this, CommandRotate.class, new String[] { Double.toString(diff) });
|
|
||||||
while (this.commandManager.hasTasks())
|
|
||||||
;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
ex.printStackTrace();
|
|
||||||
throw new IllegalArgumentException("expected number");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("expected number");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2: // grab: grabs an item
|
|
||||||
{
|
{
|
||||||
this.commandManager.addCommand(this, CommandGrab.class);
|
this.commandManager.addCommand(this, CommandGrab.class);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: // drop: drops an item
|
case 2: // drop: drops an item
|
||||||
{
|
{
|
||||||
this.commandManager.addCommand(this, CommandDrop.class);
|
this.commandManager.addCommand(this, CommandDrop.class);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4: // reset: calls the RETURN command
|
case 3: // reset: clears the queue and calls the RETURN command
|
||||||
{
|
{
|
||||||
|
this.commandManager.clear();
|
||||||
this.commandManager.addCommand(this, CommandReturn.class);
|
this.commandManager.addCommand(this, CommandReturn.class);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5: // isWorking: returns whether or not the ArmBot is executing commands
|
case 4: // isWorking: returns whether or not the ArmBot is executing commands
|
||||||
{
|
{
|
||||||
return new Object[] { this.commandManager.hasTasks() };
|
return new Object[] { this.commandManager.hasTasks() };
|
||||||
}
|
}
|
||||||
|
case 5: // touchingEntity: returns whether or not the ArmBot is touching an entity it is able to pick up
|
||||||
|
{
|
||||||
|
Vector3 serachPosition = this.getHandPosition();
|
||||||
|
List<Entity> found = this.worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(serachPosition.x - 0.5f, serachPosition.y - 0.5f, serachPosition.z - 0.5f, serachPosition.x + 0.5f, serachPosition.y + 0.5f, serachPosition.z + 0.5f));
|
||||||
|
|
||||||
|
if (found != null && found.size() > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < found.size(); i++)
|
||||||
|
{
|
||||||
|
if (found.get(i) != null && !(found.get(i) instanceof EntityPlayer) && found.get(i).ridingEntity == null) // isn't null, isn't a player, and isn't riding anything
|
||||||
|
{ return new Object[] { true }; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Object[] { false };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -629,12 +639,20 @@ public class TileEntityArmbot extends TileEntityAssemblyNetwork implements IMult
|
||||||
public void attach(IComputerAccess computer)
|
public void attach(IComputerAccess computer)
|
||||||
{
|
{
|
||||||
computersAttached++;
|
computersAttached++;
|
||||||
|
synchronized (connectedComputers)
|
||||||
|
{
|
||||||
|
connectedComputers.add(computer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void detach(IComputerAccess computer)
|
public void detach(IComputerAccess computer)
|
||||||
{
|
{
|
||||||
computersAttached--;
|
computersAttached--;
|
||||||
|
synchronized (connectedComputers)
|
||||||
|
{
|
||||||
|
connectedComputers.remove(computer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,40 @@ public abstract class Command
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Double getDoubleArg(int i)
|
||||||
|
{
|
||||||
|
if (getArg(i) != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Double.parseDouble(getArg(i));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Float getFloatArg(int i)
|
||||||
|
{
|
||||||
|
if (getArg(i) != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Float.parseFloat(getArg(i));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
public void writeToNBT(NBTTagCompound taskCompound)
|
public void writeToNBT(NBTTagCompound taskCompound)
|
||||||
{
|
{
|
||||||
NBTTagCompound tileEntityNBT = new NBTTagCompound();
|
NBTTagCompound tileEntityNBT = new NBTTagCompound();
|
||||||
|
|
|
@ -48,16 +48,6 @@ public class CommandGrab extends Command
|
||||||
this.tileEntity.worldObj.removeEntity(found.get(i)); //items don't move right, so we render them manually
|
this.tileEntity.worldObj.removeEntity(found.get(i)); //items don't move right, so we render them manually
|
||||||
Minecraft.getMinecraft().sndManager.playSound("random.pop", this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord, 0.2F, ((this.tileEntity.worldObj.rand.nextFloat() - this.tileEntity.worldObj.rand.nextFloat()) * 0.7F + 1.0F) * 1.0F);
|
Minecraft.getMinecraft().sndManager.playSound("random.pop", this.tileEntity.xCoord, this.tileEntity.yCoord, this.tileEntity.zCoord, 0.2F, ((this.tileEntity.worldObj.rand.nextFloat() - this.tileEntity.worldObj.rand.nextFloat()) * 0.7F + 1.0F) * 1.0F);
|
||||||
found.get(i).isDead = false;
|
found.get(i).isDead = false;
|
||||||
/*if (found.get(i).riddenByEntity != null)
|
|
||||||
{
|
|
||||||
found.get(i).riddenByEntity.ridingEntity = null;
|
|
||||||
found.get(i).riddenByEntity = null;
|
|
||||||
}
|
|
||||||
if (found.get(i).ridingEntity != null)
|
|
||||||
{
|
|
||||||
found.get(i).ridingEntity.riddenByEntity = null;
|
|
||||||
found.get(i).ridingEntity = null;
|
|
||||||
}*/
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class CommandManager
|
||||||
if (this.currentTask < 0)
|
if (this.currentTask < 0)
|
||||||
{
|
{
|
||||||
this.currentTask = 0;
|
this.currentTask = 0;
|
||||||
|
this.lastTask = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Command task = this.tasks.get(this.currentTask);
|
Command task = this.tasks.get(this.currentTask);
|
||||||
|
@ -43,6 +44,8 @@ public class CommandManager
|
||||||
task.onTaskStart();
|
task.onTaskStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//System.out.print(Command.getCommandName(task.getClass()) + "|");
|
||||||
|
|
||||||
if (!task.doTask())
|
if (!task.doTask())
|
||||||
{
|
{
|
||||||
// End the task and reinitiate it into a new class to make sure it is fresh.
|
// End the task and reinitiate it into a new class to make sure it is fresh.
|
||||||
|
@ -51,6 +54,18 @@ public class CommandManager
|
||||||
task.onTaskEnd();
|
task.onTaskEnd();
|
||||||
this.tasks.set(tempCurrentTask, this.getNewCommand(task.tileEntity, task.getClass(), task.getArgs()));
|
this.tasks.set(tempCurrentTask, this.getNewCommand(task.tileEntity, task.getClass(), task.getArgs()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*for (Command command : this.tasks)
|
||||||
|
{
|
||||||
|
System.out.print(Command.getCommandName(command.getClass()));
|
||||||
|
System.out.print("; ");
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(this.currentTask);*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,7 +125,7 @@ public class CommandManager
|
||||||
*/
|
*/
|
||||||
public boolean hasTasks()
|
public boolean hasTasks()
|
||||||
{
|
{
|
||||||
return !tasks.isEmpty();
|
return tasks.size() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Command> getCommands()
|
public List<Command> getCommands()
|
||||||
|
|
|
@ -16,13 +16,15 @@ public class CommandRotate extends Command
|
||||||
{
|
{
|
||||||
super.onTaskStart();
|
super.onTaskStart();
|
||||||
|
|
||||||
|
this.ticks = 0;
|
||||||
|
|
||||||
if (this.getArg(0) == null)
|
if (this.getArg(0) == null)
|
||||||
{
|
{
|
||||||
this.targetRotation = this.tileEntity.rotationYaw + 90;
|
this.targetRotation = this.tileEntity.rotationYaw + 90;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.targetRotation = this.tileEntity.rotationYaw + this.getIntArg(0);
|
this.targetRotation = this.tileEntity.rotationYaw + this.getFloatArg(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (this.targetRotation >= 360)
|
while (this.targetRotation >= 360)
|
||||||
|
|
Loading…
Reference in a new issue