package mcjty.rftools.blocks.security; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mcjty.lib.entity.GenericTileEntity; import mcjty.lib.varia.Logging; import mcjty.lib.varia.SecurityTools; import mcjty.rftools.RFTools; import mcjty.rftools.network.RFToolsMessages; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.world.World; import org.lwjgl.input.Keyboard; import java.util.List; public class SecurityCardItem extends Item { private IIcon activeIcon; public static String channelNameFromServer = ""; private static long lastTime = 0; public SecurityCardItem() { setMaxStackSize(1); } @Override public int getMaxItemUseDuration(ItemStack stack) { return 1; } @Override public void registerIcons(IIconRegister iconRegister) { super.registerIcons(iconRegister); activeIcon = iconRegister.registerIcon(RFTools.MODID + ":securityCardItem_linked"); } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean whatIsThis) { super.addInformation(itemStack, player, list, whatIsThis); NBTTagCompound tagCompound = itemStack.getTagCompound(); int channel = -1; if (tagCompound != null && tagCompound.hasKey("channel")) { channel = tagCompound.getInteger("channel"); } if (channel != -1) { if (System.currentTimeMillis() - lastTime > 250) { lastTime = System.currentTimeMillis(); RFToolsMessages.INSTANCE.sendToServer(new PacketGetSecurityName(channel)); } list.add(EnumChatFormatting.YELLOW + "Channel: " + channel + " (" + channelNameFromServer + ")"); } else { list.add(EnumChatFormatting.YELLOW + "Channel is not set!"); } if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) { list.add(EnumChatFormatting.WHITE + "Manage security channels in the Security Manager"); list.add(EnumChatFormatting.WHITE + "and link this card to a channel. Sneak right-click"); list.add(EnumChatFormatting.WHITE + "a block to link the channel to that block."); list.add(EnumChatFormatting.WHITE + "If you want to copy the channel from a block to"); list.add(EnumChatFormatting.WHITE + "a card you can right click with an unlinked card"); } else { list.add(EnumChatFormatting.WHITE + RFTools.SHIFT_MESSAGE); } } @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float sx, float sy, float sz) { if (!world.isRemote) { TileEntity te = world.getTileEntity(x, y, z); if (te instanceof GenericTileEntity) { GenericTileEntity genericTileEntity = (GenericTileEntity) te; if (genericTileEntity.getOwnerUUID() == null) { Logging.message(player, EnumChatFormatting.RED + "This block has no owner!"); } else { if (SecurityTools.isAdmin(player) || isOwner(player, genericTileEntity)) { NBTTagCompound tagCompound = stack.getTagCompound(); if (tagCompound == null || !tagCompound.hasKey("channel")) { int blockSecurity = genericTileEntity.getSecurityChannel(); if (blockSecurity == -1) { Logging.message(player, EnumChatFormatting.RED + "This security card is not setup correctly!"); } else { if (tagCompound == null) { tagCompound = new NBTTagCompound(); stack.setTagCompound(tagCompound); } tagCompound.setInteger("channel", blockSecurity); Logging.message(player, EnumChatFormatting.RED + "Copied security channel from block to card!"); } } else { int channel = tagCompound.getInteger("channel"); toggleSecuritySettings(player, genericTileEntity, channel); } } else { Logging.message(player, EnumChatFormatting.RED + "You cannot change security settings of a block you don't own!"); } } } else { Logging.message(player, EnumChatFormatting.RED + "Security is not supported on this block!"); } return true; } return true; } private boolean isOwner(EntityPlayer player, GenericTileEntity genericTileEntity) { return genericTileEntity.getOwnerUUID().equals(player.getPersistentID()); } @SideOnly(Side.CLIENT) @Override public IIcon getIconIndex(ItemStack stack) { NBTTagCompound tagCompound = stack.getTagCompound(); if (tagCompound != null && tagCompound.hasKey("channel")) { return activeIcon; } else { return itemIcon; } } private void toggleSecuritySettings(EntityPlayer player, GenericTileEntity genericTileEntity, int channel) { int sec = genericTileEntity.getSecurityChannel(); if (sec == channel) { genericTileEntity.setSecurityChannel(-1); Logging.message(player, "Security settings cleared from block!"); } else { genericTileEntity.setSecurityChannel(channel); Logging.message(player, "Security settings applied on block!"); } } }