package buildcraft.robotics.ai; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.world.WorldServer; import buildcraft.api.core.BlockIndex; import buildcraft.api.crops.CropManager; import buildcraft.api.robots.AIRobot; import buildcraft.api.robots.EntityRobotBase; import buildcraft.core.lib.utils.BlockUtils; import buildcraft.core.proxy.CoreProxy; public class AIRobotPlant extends AIRobot { private BlockIndex blockFound; private int delay = 0; public AIRobotPlant(EntityRobotBase iRobot) { super(iRobot); } public AIRobotPlant(EntityRobotBase iRobot, BlockIndex iBlockFound) { this(iRobot); blockFound = iBlockFound; } @Override public void start() { robot.aimItemAt(blockFound.x, blockFound.y, blockFound.z); robot.setItemActive(true); } @Override public void update() { if (blockFound == null) { setSuccess(false); terminate(); } if (delay++ > 40) { EntityPlayer player = CoreProxy.proxy.getBuildCraftPlayer((WorldServer) robot.worldObj) .get(); if (CropManager.plantCrop(robot.worldObj, player, robot.getHeldItem(), blockFound.x, blockFound.y, blockFound.z)) { } else { setSuccess(false); } if (robot.getHeldItem().stackSize > 0) { BlockUtils.dropItem((WorldServer) robot.worldObj, MathHelper.floor_double(robot.posX), MathHelper.floor_double(robot.posY), MathHelper.floor_double(robot.posZ), 6000, robot.getHeldItem()); } robot.setItemInUse(null); terminate(); } } @Override public void end() { robot.setItemActive(false); } @Override public boolean canLoadFromNBT() { return true; } @Override public void writeSelfToNBT(NBTTagCompound nbt) { super.writeSelfToNBT(nbt); if (blockFound != null) { NBTTagCompound sub = new NBTTagCompound(); blockFound.writeTo(sub); nbt.setTag("blockFound", sub); } } @Override public void loadSelfFromNBT(NBTTagCompound nbt) { super.loadSelfFromNBT(nbt); if (nbt.hasKey("blockFound")) { blockFound = new BlockIndex(nbt.getCompoundTag("blockFound")); } } }