use of buildcraft.robotics.ItemRobot 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;
}
use of buildcraft.robotics.ItemRobot in project LogisticsPipes by RS485.
the class BuildCraftProxy method handleBCClickOnPipe.
@Override
public IBCClickResult handleBCClickOnPipe(World world, int x, int y, int z, EntityPlayer player, int side, float xOffset, float yOffset, float zOffset, CoreUnroutedPipe pipe) {
boolean result = BuildCraftTransport.genericPipeBlock.onBlockActivated(world, x, y, z, player, side, xOffset, yOffset, zOffset);
//Again because not all changes have been applied before the call inside the BC method is made.
world.notifyBlocksOfNeighborChange(x, y, z, LogisticsPipes.LogisticsPipeBlock);
boolean block = false;
if (!result) {
ItemStack currentItem = player.getCurrentEquippedItem();
if (currentItem != null) {
if (currentItem.getItem() == Items.sign) {
block = true;
} else if (currentItem.getItem() instanceof ItemPipe) {
block = true;
} else if (currentItem.getItem() instanceof ItemGateCopier) {
block = true;
} else if (currentItem.getItem() instanceof ItemMapLocation) {
block = true;
} else if (currentItem.getItem() instanceof ItemRobot) {
result = checkRobot(world, x, y, z, player, currentItem);
}
}
}
final boolean fResult = result;
final boolean fBlock = block;
return new IBCClickResult() {
@Override
public boolean handled() {
return fResult;
}
@Override
public boolean blocked() {
return fBlock;
}
};
}
Aggregations