Search in sources :

Example 1 with RedstoneBoardRobotNBT

use of buildcraft.api.boards.RedstoneBoardRobotNBT in project LogisticsPipes by RS485.

the class BuildCraftProxy method checkRobot.

/**
	 * @see buildcraft.robotics.ItemRobot#onItemUse(ItemStack, EntityPlayer,
	 *      World, int, int, int, int, float, float, float)
	 */
private boolean checkRobot(World world, int x, int y, int z, EntityPlayer player, ItemStack currentItem) {
    if (!world.isRemote) {
        Pipe<?> bcPipe = BlockGenericPipe.getPipe(world, x, y, z);
        if (bcPipe == null) {
            return false;
        }
        BlockGenericPipe pipeBlock = BuildCraftTransport.genericPipeBlock;
        BlockGenericPipe.RaytraceResult rayTraceResult = pipeBlock.doRayTrace(world, x, y, z, player);
        if (rayTraceResult != null && rayTraceResult.hitPart == BlockGenericPipe.Part.Pluggable && bcPipe.container.getPipePluggable(rayTraceResult.sideHit) instanceof RobotStationPluggable) {
            RobotStationPluggable pluggable = (RobotStationPluggable) bcPipe.container.getPipePluggable(rayTraceResult.sideHit);
            DockingStation station = pluggable.getStation();
            if (!station.isTaken()) {
                RedstoneBoardRobotNBT robotNBT = ItemRobot.getRobotNBT(currentItem);
                if (robotNBT == RedstoneBoardRegistry.instance.getEmptyRobotBoard()) {
                    return true;
                }
                EntityRobot robot = ((ItemRobot) currentItem.getItem()).createRobot(currentItem, world);
                RobotEvent.Place robotEvent = new RobotEvent.Place(robot, player);
                FMLCommonHandler.instance().bus().post(robotEvent);
                if (robotEvent.isCanceled()) {
                    return true;
                }
                if (robot != null && robot.getRegistry() != null) {
                    robot.setUniqueRobotId(robot.getRegistry().getNextRobotId());
                    float px = x + 0.5F + rayTraceResult.sideHit.offsetX * 0.5F;
                    float py = y + 0.5F + rayTraceResult.sideHit.offsetY * 0.5F;
                    float pz = z + 0.5F + rayTraceResult.sideHit.offsetZ * 0.5F;
                    robot.setPosition(px, py, pz);
                    station.takeAsMain(robot);
                    robot.dock(robot.getLinkedStation());
                    world.spawnEntityInWorld(robot);
                    if (!player.capabilities.isCreativeMode) {
                        player.getCurrentEquippedItem().stackSize--;
                    }
                }
            }
            return true;
        }
    }
    return false;
}
Also used : RobotStationPluggable(buildcraft.robotics.RobotStationPluggable) DockingStation(buildcraft.api.robots.DockingStation) EntityRobot(buildcraft.robotics.EntityRobot) BlockGenericPipe(buildcraft.transport.BlockGenericPipe) RedstoneBoardRobotNBT(buildcraft.api.boards.RedstoneBoardRobotNBT) ItemRobot(buildcraft.robotics.ItemRobot) RobotEvent(buildcraft.api.events.RobotEvent)

Aggregations

RedstoneBoardRobotNBT (buildcraft.api.boards.RedstoneBoardRobotNBT)1 RobotEvent (buildcraft.api.events.RobotEvent)1 DockingStation (buildcraft.api.robots.DockingStation)1 EntityRobot (buildcraft.robotics.EntityRobot)1 ItemRobot (buildcraft.robotics.ItemRobot)1 RobotStationPluggable (buildcraft.robotics.RobotStationPluggable)1 BlockGenericPipe (buildcraft.transport.BlockGenericPipe)1