103 lines
3.7 KiB
Java
103 lines
3.7 KiB
Java
|
package resonantinduction.electrical.armbot.command;
|
||
|
|
||
|
import net.minecraft.block.Block;
|
||
|
import net.minecraft.entity.item.EntityItem;
|
||
|
import net.minecraft.item.ItemBlock;
|
||
|
import net.minecraft.item.ItemStack;
|
||
|
import net.minecraftforge.common.ForgeDirection;
|
||
|
import net.minecraftforge.common.IPlantable;
|
||
|
import resonantinduction.electrical.armbot.TaskBaseArmbot;
|
||
|
import resonantinduction.electrical.armbot.TaskBaseProcess;
|
||
|
import resonantinduction.old.api.IArmbot;
|
||
|
import universalelectricity.api.vector.Vector3;
|
||
|
|
||
|
/**
|
||
|
* Used by arms to break a specific block in a position.
|
||
|
*
|
||
|
* @author Calclavia
|
||
|
*/
|
||
|
public class TaskPlace extends TaskBaseArmbot
|
||
|
{
|
||
|
int PLACE_TIME = 30;
|
||
|
|
||
|
public TaskPlace()
|
||
|
{
|
||
|
super("Place");
|
||
|
// TODO Auto-generated constructor stub
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public ProcessReturn onUpdate()
|
||
|
{
|
||
|
if (super.onUpdate() == ProcessReturn.CONTINUE)
|
||
|
{
|
||
|
Vector3 serachPosition = ((IArmbot) this.program.getMachine()).getHandPos();
|
||
|
|
||
|
Block block = Block.blocksList[serachPosition.getBlockID(this.program.getMachine().getLocation().left())];
|
||
|
|
||
|
if (block == null && ticks >= this.PLACE_TIME)
|
||
|
{
|
||
|
Object entity = ((IArmbot) this.program.getMachine()).getHeldObject();
|
||
|
ItemStack itemStack = null;
|
||
|
if (entity instanceof EntityItem)
|
||
|
{
|
||
|
itemStack = ((EntityItem) entity).getEntityItem();
|
||
|
}
|
||
|
if (entity instanceof ItemStack)
|
||
|
{
|
||
|
itemStack = (ItemStack) entity;
|
||
|
}
|
||
|
if (itemStack != null)
|
||
|
{
|
||
|
if (itemStack.getItem() instanceof ItemBlock)
|
||
|
{
|
||
|
((ItemBlock) itemStack.getItem()).placeBlockAt(itemStack, null, this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ(), 0, 0.5f, 0.5f, 0.5f, itemStack.getItemDamage());
|
||
|
|
||
|
((IArmbot) this.program.getMachine()).clear(entity);
|
||
|
return ProcessReturn.DONE;
|
||
|
}
|
||
|
else if (itemStack.getItem() instanceof IPlantable)
|
||
|
{
|
||
|
IPlantable plantable = ((IPlantable) itemStack.getItem());
|
||
|
Block blockBelow = Block.blocksList[Vector3.translate(serachPosition, new Vector3(0, -1, 0)).getBlockID(this.program.getMachine().getLocation().left())];
|
||
|
|
||
|
if (blockBelow != null)
|
||
|
{
|
||
|
if (blockBelow.canSustainPlant(this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ(), ForgeDirection.UP, plantable))
|
||
|
{
|
||
|
int blockID = plantable.getPlantID(this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ());
|
||
|
int blockMetadata = plantable.getPlantMetadata(this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ());
|
||
|
|
||
|
if (this.program.getMachine().getLocation().left().setBlock(serachPosition.intX(), serachPosition.intY(), serachPosition.intZ(), blockID, blockMetadata, 3))
|
||
|
{
|
||
|
if (this.program.getMachine().getLocation().left().getBlockId(serachPosition.intX(), serachPosition.intY(), serachPosition.intZ()) == blockID)
|
||
|
{
|
||
|
Block.blocksList[blockID].onBlockPlacedBy(this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ(), null, itemStack);
|
||
|
Block.blocksList[blockID].onPostBlockPlaced(this.program.getMachine().getLocation().left(), serachPosition.intX(), serachPosition.intY(), serachPosition.intZ(), blockMetadata);
|
||
|
((IArmbot) this.program.getMachine()).clear(entity);
|
||
|
return ProcessReturn.DONE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return ProcessReturn.DONE;
|
||
|
}
|
||
|
return ProcessReturn.GENERAL_ERROR;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString()
|
||
|
{
|
||
|
return "PLACE";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public TaskBaseProcess clone()
|
||
|
{
|
||
|
return new TaskPlace();
|
||
|
}
|
||
|
}
|