package buildcraft.robotics.ai; import java.util.ArrayList; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.world.WorldServer; import buildcraft.api.core.BlockIndex; import buildcraft.api.core.BuildCraftAPI; import buildcraft.api.crops.CropManager; import buildcraft.api.robots.AIRobot; import buildcraft.api.robots.EntityRobotBase; import buildcraft.core.lib.utils.BlockUtils; public class AIRobotHarvest extends AIRobot { private BlockIndex blockFound; private int delay = 0; public AIRobotHarvest(EntityRobotBase iRobot) { super(iRobot); } public AIRobotHarvest(EntityRobotBase iRobot, BlockIndex iBlockFound) { super(iRobot); blockFound = iBlockFound; } @Override public void update() { if (blockFound == null) { setSuccess(false); terminate(); return; } if (delay++ > 20) { if (!BuildCraftAPI.getWorldProperty("harvestable").get(robot.worldObj, blockFound.x, blockFound.y, blockFound.z)) { setSuccess(false); terminate(); return; } List<ItemStack> drops = new ArrayList<ItemStack>(); if (!CropManager.harvestCrop(robot.worldObj, blockFound.x, blockFound.y, blockFound.z, drops)) { setSuccess(false); terminate(); return; } for (ItemStack stack : drops) { BlockUtils.dropItem((WorldServer) robot.worldObj, MathHelper.floor_double(robot.posX), MathHelper.floor_double(robot.posY), MathHelper.floor_double(robot.posZ), 6000, stack); } } } @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")); } } }