use of mods.railcraft.api.signals.IControllerTile in project Railcraft by Railcraft.
the class ItemSignalLabel method onItemUse.
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if (Game.isHost(worldIn) && playerIn.isSneaking() && stack.hasDisplayName()) {
TileEntity tile = worldIn.getTileEntity(pos);
Set<AbstractPair> pairs = new HashSet<AbstractPair>();
if (tile instanceof IReceiverTile) {
pairs.add(((IReceiverTile) tile).getReceiver());
}
if (tile instanceof IControllerTile) {
pairs.add(((IControllerTile) tile).getController());
}
if (tile instanceof ISignalBlockTile) {
pairs.add(((ISignalBlockTile) tile).getSignalBlock());
}
if (!pairs.isEmpty()) {
String newName = stack.getDisplayName();
boolean done = false;
for (AbstractPair pair : pairs) {
if (!newName.equals(pair.getName())) {
pair.setName(newName);
done = true;
}
}
if (done) {
--stack.stackSize;
PlayerPlugin.swingArm(playerIn, hand);
IBlockState state = WorldPlugin.getBlockState(worldIn, pos);
worldIn.notifyBlockUpdate(pos, state, state, 3);
return EnumActionResult.SUCCESS;
}
}
}
return super.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ);
}
use of mods.railcraft.api.signals.IControllerTile in project Railcraft by Railcraft.
the class ItemSignalTuner method onItemUse.
//TODO: Add chat name highlighting formatting styles
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if (actionCleanPairing(stack, playerIn, worldIn, IControllerTile.class, IControllerTile::getController)) {
return EnumActionResult.SUCCESS;
}
TileEntity tile = worldIn.getTileEntity(pos);
if (tile != null) {
WorldCoordinate previousTarget = getPairData(stack);
if (tile instanceof IReceiverTile && previousTarget != null) {
if (Game.isHost(worldIn)) {
SignalReceiver receiver = ((IReceiverTile) tile).getReceiver();
if (!Objects.equals(pos, previousTarget.getPos())) {
tile = worldIn.getTileEntity(previousTarget.getPos());
if (tile instanceof IControllerTile) {
SignalController controller = ((IControllerTile) tile).getController();
if (receiver.getTile() != controller.getTile()) {
controller.registerReceiver(receiver);
controller.endPairing();
ChatPlugin.sendLocalizedChatFromServer(playerIn, LOC_PREFIX + "success", controller.getLocalizationTag(), receiver.getLocalizationTag());
clearPairData(stack);
return EnumActionResult.SUCCESS;
}
} else if (WorldPlugin.isBlockLoaded(worldIn, previousTarget.getPos())) {
ChatPlugin.sendLocalizedChatFromServer(playerIn, LOC_PREFIX + "abandon.gone");
clearPairData(stack);
} else {
ChatPlugin.sendLocalizedChatFromServer(playerIn, LOC_PREFIX + "abandon.chunk");
clearPairData(stack);
}
}
}
} else if (tile instanceof IControllerTile) {
if (Game.isHost(worldIn)) {
SignalController controller = ((IControllerTile) tile).getController();
if (previousTarget == null || !Objects.equals(pos, previousTarget.getPos())) {
ChatPlugin.sendLocalizedChatFromServer(playerIn, LOC_PREFIX + "start", controller.getLocalizationTag());
setPairData(stack, tile);
controller.startPairing();
} else {
ChatPlugin.sendLocalizedChatFromServer(playerIn, LOC_PREFIX + "stop", controller.getLocalizationTag());
controller.endPairing();
clearPairData(stack);
}
}
} else
return EnumActionResult.PASS;
return EnumActionResult.SUCCESS;
}
return EnumActionResult.PASS;
}
Aggregations