package buildcraft.robotics.statements; import net.minecraft.item.ItemStack; import buildcraft.api.boards.RedstoneBoardRobotNBT; import buildcraft.api.items.IList; import buildcraft.api.robots.EntityRobotBase; import buildcraft.api.statements.IStatement; import buildcraft.api.statements.IStatementContainer; import buildcraft.api.statements.IStatementParameter; import buildcraft.api.statements.StatementMouseClick; import buildcraft.api.statements.StatementParameterItemStack; import buildcraft.core.lib.inventory.StackHelper; import buildcraft.robotics.EntityRobot; import buildcraft.robotics.ItemRobot; import buildcraft.robotics.RobotUtils; public class StatementParameterRobot extends StatementParameterItemStack { @Override public void onClick(IStatementContainer source, IStatement stmt, ItemStack stack, StatementMouseClick mouse) { if (stack == null && (this.stack == null || this.stack.getItem() instanceof ItemRobot)) { RedstoneBoardRobotNBT nextBoard = RobotUtils.getNextBoard(this.stack, mouse.getButton() > 0); if (nextBoard != null) { this.stack = ItemRobot.createRobotStack(nextBoard, 0); } else { this.stack = null; } } else { super.onClick(source, stmt, stack, mouse); } } @Override public String getUniqueTag() { return "buildcraft:robot"; } public static boolean matches(IStatementParameter param, EntityRobotBase robot) { ItemStack stack = param.getItemStack(); if (stack != null) { if (stack.getItem() instanceof IList) { IList list = (IList) stack.getItem(); if (list.matches(stack, ItemRobot.createRobotStack(robot.getBoard().getNBTHandler(), robot.getEnergy()))) { return true; } for (ItemStack target : ((EntityRobot) robot).getWearables()) { if (target != null && list.matches(stack, target)) { return true; } } } else if (stack.getItem() instanceof ItemRobot) { if (ItemRobot.getRobotNBT(stack) == robot.getBoard().getNBTHandler()) { return true; } } else if (robot instanceof EntityRobot) { for (ItemStack target : ((EntityRobot) robot).getWearables()) { if (target != null && StackHelper.isMatchingItem(stack, target, true, true)) { return true; } } } } return false; } }