package net.geforcemods.securitycraft.items; import java.util.ArrayList; import java.util.List; import net.geforcemods.securitycraft.api.IOwnable; import net.geforcemods.securitycraft.entity.EntitySecurityCamera; import net.geforcemods.securitycraft.gui.GuiHandler; import net.geforcemods.securitycraft.main.mod_SecurityCraft; import net.geforcemods.securitycraft.misc.CameraView; import net.geforcemods.securitycraft.network.packets.PacketCUpdateNBTTag; import net.geforcemods.securitycraft.util.BlockUtils; import net.geforcemods.securitycraft.util.PlayerUtils; import net.geforcemods.securitycraft.util.Utils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemCameraMonitor extends Item { @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(!worldIn.isRemote){ if(BlockUtils.getBlock(worldIn, pos) == mod_SecurityCraft.securityCamera){ if(!((IOwnable) worldIn.getTileEntity(pos)).getOwner().isOwner(playerIn)){ PlayerUtils.sendMessageToPlayer(playerIn, I18n.translateToLocal("item.cameraMonitor.name"), I18n.translateToLocal("messages.cameraMonitor.cannotView"), TextFormatting.RED); return EnumActionResult.SUCCESS; } if(playerIn.inventory.getCurrentItem().getTagCompound() == null){ playerIn.inventory.getCurrentItem().setTagCompound(new NBTTagCompound()); } CameraView view = new CameraView(pos, playerIn.dimension); if(isCameraAdded(playerIn.inventory.getCurrentItem().getTagCompound(), view)){ playerIn.inventory.getCurrentItem().getTagCompound().removeTag(getTagNameFromPosition(playerIn.inventory.getCurrentItem().getTagCompound(), view)); PlayerUtils.sendMessageToPlayer(playerIn, I18n.translateToLocal("item.cameraMonitor.name"), I18n.translateToLocal("messages.cameraMonitor.unbound").replace("#", Utils.getFormattedCoordinates(pos)), TextFormatting.RED); return EnumActionResult.SUCCESS; } for(int i = 1; i <= 30; i++){ if (!playerIn.inventory.getCurrentItem().getTagCompound().hasKey("Camera" + i)){ playerIn.inventory.getCurrentItem().getTagCompound().setString("Camera" + i, view.toNBTString()); PlayerUtils.sendMessageToPlayer(playerIn, I18n.translateToLocal("item.cameraMonitor.name"), I18n.translateToLocal("messages.cameraMonitor.bound").replace("#", Utils.getFormattedCoordinates(pos)), TextFormatting.GREEN); break; } } mod_SecurityCraft.network.sendTo(new PacketCUpdateNBTTag(stack), (EntityPlayerMP)playerIn); return EnumActionResult.SUCCESS; } }else if(worldIn.isRemote && BlockUtils.getBlock(worldIn, pos) != mod_SecurityCraft.securityCamera){ if(playerIn.getRidingEntity() != null && playerIn.getRidingEntity() instanceof EntitySecurityCamera) return EnumActionResult.SUCCESS; if(stack.getTagCompound() == null || stack.getTagCompound().hasNoTags()) { PlayerUtils.sendMessageToPlayer(playerIn, I18n.translateToLocal("item.cameraMonitor.name"), I18n.translateToLocal("messages.cameraMonitor.rightclickToView"), TextFormatting.RED); return EnumActionResult.SUCCESS; } playerIn.openGui(mod_SecurityCraft.instance, GuiHandler.CAMERA_MONITOR_GUI_ID, worldIn, pos.getX(), pos.getY(), pos.getZ()); return EnumActionResult.SUCCESS; } return EnumActionResult.SUCCESS; } @SideOnly(Side.CLIENT) @Override public ActionResult<ItemStack> onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn, EnumHand hand) { if (worldIn.isRemote) { if(playerIn.getRidingEntity() != null && playerIn.getRidingEntity() instanceof EntitySecurityCamera) return ActionResult.newResult(EnumActionResult.PASS, itemStackIn);; if(!itemStackIn.hasTagCompound() || !hasCameraAdded(itemStackIn.getTagCompound())) { PlayerUtils.sendMessageToPlayer(playerIn, I18n.translateToLocal("item.cameraMonitor.name"), I18n.translateToLocal("messages.cameraMonitor.rightclickToView"), TextFormatting.RED); return ActionResult.newResult(EnumActionResult.PASS, itemStackIn); } playerIn.openGui(mod_SecurityCraft.instance, GuiHandler.CAMERA_MONITOR_GUI_ID, worldIn, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); } return ActionResult.newResult(EnumActionResult.PASS, itemStackIn); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List, boolean par4) { if(par1ItemStack.getTagCompound() == null){ return; } par3List.add(I18n.translateToLocal("tooltip.cameraMonitor") + " " + getNumberOfCamerasBound(par1ItemStack.getTagCompound()) + "/30"); } public String getTagNameFromPosition(NBTTagCompound nbt, CameraView view) { for(int i = 1; i <= 30; i++){ if(nbt.hasKey("Camera" + i)){ String[] coords = nbt.getString("Camera" + i).split(" "); if(view.checkCoordinates(coords)){ return "Camera" + i; } } } return ""; } public int getSlotFromPosition(NBTTagCompound nbt, CameraView view) { for(int i = 1; i <= 30; i++){ if(nbt.hasKey("Camera" + i)){ String[] coords = nbt.getString("Camera" + i).split(" "); if(view.checkCoordinates(coords)){ return i; } } } return -1; } public boolean hasCameraAdded(NBTTagCompound nbt){ if(nbt == null) return false; for(int i = 1; i <= 30; i++) { if(nbt.hasKey("Camera" + i)) { return true; } } return false; } public boolean isCameraAdded(NBTTagCompound nbt, CameraView view){ for(int i = 1; i <= 30; i++){ if(nbt.hasKey("Camera" + i)){ String[] coords = nbt.getString("Camera" + i).split(" "); if(view.checkCoordinates(coords)) { return true; } } } return false; } public ArrayList<CameraView> getCameraPositions(NBTTagCompound nbt){ ArrayList<CameraView> list = new ArrayList<CameraView>(); for(int i = 1; i <= 30; i++){ if(nbt != null && nbt.hasKey("Camera" + i)){ String[] coords = nbt.getString("Camera" + i).split(" "); list.add(new CameraView(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2]), (coords.length == 4 ? Integer.parseInt(coords[3]) : 0))); } else list.add(null); } return list; } public int getNumberOfCamerasBound(NBTTagCompound nbt) { if(nbt == null) return 0; for(int i = 1; i <= 31; i++) { if(nbt.hasKey("Camera" + i)) { continue; } else { return i - 1; } } return 0; } }