/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.signals; import cpw.mods.fml.common.Optional; import ic2.api.item.IBoxable; import mods.railcraft.api.core.WorldCoordinate; import mods.railcraft.api.signals.ISignalBlockTile; import mods.railcraft.api.signals.SignalBlock; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.items.IActivationBlockingItem; import mods.railcraft.common.items.ItemRailcraft; import mods.railcraft.common.plugins.forge.*; import mods.railcraft.common.util.misc.Game; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; @Optional.Interface(iface = "ic2.api.item.IBoxable", modid = "IC2") public class ItemSignalBlockSurveyor extends ItemRailcraft implements IBoxable, IActivationBlockingItem { private static Item item; private ItemSignalBlockSurveyor() { setMaxDamage(0); setHasSubtypes(true); setMaxStackSize(1); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); } public static void registerItem() { if (item == null) { String tag = "railcraft.tool.surveyor"; if (RailcraftConfig.isItemEnabled(tag)) { item = new ItemSignalBlockSurveyor().setUnlocalizedName(tag); RailcraftRegistry.register(item); CraftingPlugin.addShapedRecipe(new ItemStack(item), " C ", "BGB", " R ", 'G', "paneGlassColorless", 'C', Items.compass, 'B', Blocks.stone_button, 'R', "dustRedstone"); LootPlugin.addLootWorkshop(new ItemStack(item), 1, 1, "tool.surveyor"); } } } public static ItemStack getItem() { if (item == null) return null; return new ItemStack(item); } @Override public boolean onItemUse(ItemStack item, EntityPlayer player, World world, int x, int y, int z, int side, float par8, float par9, float par10) { // System.out.println("click"); if (Game.isHost(world) && item.hasTagCompound() && player.isSneaking()) { WorldCoordinate pos = getSignalData(item); if (pos != null) { TileEntity tile = DimensionManager.getWorld(pos.dimension).getTileEntity(pos.x, pos.y, pos.z); if (tile instanceof ISignalBlockTile) { ((ISignalBlockTile) tile).getSignalBlock().endPairing(); } } ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.abandon"); item.setTagCompound(null); return false; } TileEntity tile = world.getTileEntity(x, y, z); if (tile != null) if (tile instanceof ISignalBlockTile) { // System.out.println("target found"); if (Game.isHost(world)) { ISignalBlockTile signalTile = (ISignalBlockTile) tile; SignalBlock signalBlock = signalTile.getSignalBlock(); WorldCoordinate pos = getSignalData(item); SignalBlock.Status trackStatus = signalBlock.getTrackStatus(); if (trackStatus == SignalBlock.Status.INVALID) ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.track", signalTile.getLocalizationTag()); else if (pos == null) { ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.begin"); setSignalData(item, tile); signalBlock.startPairing(); } else if (x != pos.x || y != pos.y || z != pos.z) { // System.out.println("attempt pairing"); tile = world.getTileEntity(pos.x, pos.y, pos.z); if (tile != null && tile instanceof ISignalBlockTile) { ISignalBlockTile otherTile = (ISignalBlockTile) tile; SignalBlock otherSignal = otherTile.getSignalBlock(); if (signalBlock.createSignalBlock(otherSignal)) { ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.success"); item.setTagCompound(null); } else ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.invalid"); } else if (world.blockExists(pos.x, pos.y, pos.z)) { ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.lost"); signalBlock.endPairing(); item.setTagCompound(null); } else ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.unloaded"); } else { ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.abandon"); signalBlock.endPairing(); item.setTagCompound(null); } } return true; } else if (Game.isHost(world)) ChatPlugin.sendLocalizedChatFromServer(player, "railcraft.gui.surveyor.wrong"); return false; } private WorldCoordinate getSignalData(ItemStack item) { WorldCoordinate pos = null; NBTTagCompound data = item.getTagCompound(); if (data != null) { int sDim = data.getInteger("signalDim"); int sx = data.getInteger("signalX"); int sy = data.getInteger("signalY"); int sz = data.getInteger("signalZ"); pos = new WorldCoordinate(sDim, sx, sy, sz); } return pos; } private void setSignalData(ItemStack item, TileEntity tile) { NBTTagCompound data = new NBTTagCompound(); data.setInteger("signalDim", tile.getWorldObj().provider.dimensionId); data.setInteger("signalX", tile.xCoord); data.setInteger("signalY", tile.yCoord); data.setInteger("signalZ", tile.zCoord); item.setTagCompound(data); } @Override public boolean canBeStoredInToolbox(ItemStack itemstack) { return true; } }