Search in sources :

Example 1 with ISignalTile

use of mods.railcraft.api.signals.ISignalTile in project Railcraft by Railcraft.

the class ItemSignalBlockSurveyor method onItemUse.

// TODO: Add chat name highlighting formatting styles
// TODO: This function could probably be picked apart and pulled into the super class, but meh...
@Override
public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    // System.out.println("click");
    ItemStack stack = playerIn.getHeldItem(hand);
    if (actionCleanPairing(stack, playerIn, worldIn, ISignalTileBlock.class, ISignalTileBlock::getSignalBlock)) {
        return EnumActionResult.SUCCESS;
    }
    TileEntity tile = worldIn.getTileEntity(pos);
    if (tile != null)
        if (tile instanceof ISignalTile) {
            // System.out.println("target found");
            if (Game.isHost(worldIn)) {
                ISignalTile signalTile = (ISignalTile) tile;
                IPair signalBlock = signalTile.getPair();
                WorldCoordinate signalPos = getPairData(stack);
                TrackLocator.Status trackStatus = signalTile.getTrackLocator().getTrackStatus();
                if (trackStatus == TrackLocator.Status.INVALID)
                    ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.track", signalTile.getDisplayName());
                else if (signalPos == null) {
                    ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.begin");
                    setPairData(stack, tile);
                    signalBlock.startPairing();
                } else if (!Objects.equals(pos, signalPos.getPos())) {
                    // System.out.println("attempt pairing");
                    tile = WorldPlugin.getBlockTile(worldIn, signalPos.getPos());
                    if (tile instanceof ISignalTile) {
                        if (signalBlock.createPair(tile)) {
                            ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.success");
                            clearPairData(stack);
                        } else
                            ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.invalid");
                    } else if (WorldPlugin.isBlockLoaded(worldIn, signalPos.getPos())) {
                        ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.lost");
                        signalBlock.endPairing();
                        clearPairData(stack);
                    } else
                        ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.unloaded");
                } else {
                    ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.abandon");
                    signalBlock.endPairing();
                    clearPairData(stack);
                }
            }
            return EnumActionResult.SUCCESS;
        } else if (Game.isHost(worldIn))
            ChatPlugin.sendLocalizedChatFromServer(playerIn, "gui.railcraft.surveyor.wrong");
    return EnumActionResult.PASS;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ISignalTile(mods.railcraft.api.signals.ISignalTile) WorldCoordinate(mods.railcraft.api.core.WorldCoordinate) IPair(mods.railcraft.api.signals.IPair) ItemStack(net.minecraft.item.ItemStack) ISignalTileBlock(mods.railcraft.api.signals.ISignalTileBlock)

Aggregations

WorldCoordinate (mods.railcraft.api.core.WorldCoordinate)1 IPair (mods.railcraft.api.signals.IPair)1 ISignalTile (mods.railcraft.api.signals.ISignalTile)1 ISignalTileBlock (mods.railcraft.api.signals.ISignalTileBlock)1 ItemStack (net.minecraft.item.ItemStack)1 TileEntity (net.minecraft.tileentity.TileEntity)1