private void cmdLoot(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, "arena.admin"))
            {
                return;
            }

            if (args.Length == 0)
            {
                SendReply(player, "<color=#939393>Start by navigating to a zone then type <color=#ce422b>/loot edit <zone ID></color>\nNow you are editing a zone. You can add new loot containers or remove existing ones using the commands provided below. If it is a existing loot zone all your previous loot containers will spawn in temporarily\nYou can edit the loot of any container by looking at the container and pressing <color=#ce422b>USE</color>\nWhen you are done editing type <color=#ce422b>/loot save</color> to save what you have done or <color=#ce422b>/loot cancel</color> to forget any changes you have made. All the loot will despawn until a event is played in this zone</color>");
                SendReply(player, "<color=#ce422b>/loot types</color> - Displays all spawnable types and their ID numbers in the ingame console");
                SendReply(player, "<color=#ce422b>/loot edit <zone ID></color> - Start creating, or edit existing, loot spawns for this zone");
                SendReply(player, "<color=#ce422b>/loot add <ID></color> - Create a new loot spawn");
                SendReply(player, "<color=#ce422b>/loot remove</color> - Removes the loot spawn you are looking at");
                SendReply(player, "<color=#ce422b>/loot save</color> - Save the edits you have made");
                SendReply(player, "<color=#ce422b>/loot cancel</color> - Cancel editing a zone");
                return;
            }

            switch (args[0].ToLower())
            {
            case "types":
            {
                int i = 0;
                foreach (var lootType in spawnableTypes)
                {
                    SendEchoConsole(player.net.connection, string.Format("ID: {0} - {1} - Skin: {2}", i, lootType.Key, lootType.Value));
                    i++;
                }
                SendReply(player, "Check your ingame console for a list of loot types");
            }
            break;

            case "save":
            {
                ZoneEditor editor = player.GetComponent <ZoneEditor>();
                if (editor == null)
                {
                    SendReply(player, "You are not currently editing a zone");
                    return;
                }

                storedData.lootSpawns[editor.zoneId] = new List <StoredData.LootSpawn>();

                foreach (BaseEntity entity in editor.zoneEntities)
                {
                    storedData.lootSpawns[editor.zoneId].Add(new StoredData.LootSpawn(entity));
                }

                zoneEditors.Remove(editor);
                UnityEngine.Object.Destroy(editor);
                SaveData();
                SendReply(player, "Zone loot has been saved!");
            }
            break;

            case "cancel":
            {
                ZoneEditor editor = player.GetComponent <ZoneEditor>();
                if (editor == null)
                {
                    SendReply(player, "You are not currently editing a zone");
                    return;
                }

                zoneEditors.Remove(editor);
                UnityEngine.Object.Destroy(editor);
                SendReply(player, "Zone editing has been cancelled!");
            }
            break;

            case "edit":
            {
                if (player.GetComponent <ZoneEditor>())
                {
                    SendReply(player, "You are already editing a zone");
                    return;
                }

                if (args.Length != 2)
                {
                    SendReply(player, "Invalid syntax! <color=#ce422b>/loot edit <zone ID></color>");
                    return;
                }

                if (!ZoneManager)
                {
                    SendReply(player, "ZoneManager is not installed!");
                    return;
                }

                string zoneId  = args[1];
                object success = ZoneManager?.Call("CheckZoneID", zoneId);
                if (success == null)
                {
                    SendReply(player, "You have entered a invalid zone ID");
                    return;
                }

                ZoneEditor editor = player.gameObject.AddComponent <ZoneEditor>();
                editor.zoneId = zoneId;
                zoneEditors.Add(editor);
                if (storedData.lootSpawns.ContainsKey(zoneId))
                {
                    foreach (StoredData.LootSpawn lootSpawn in storedData.lootSpawns[zoneId])
                    {
                        BaseEntity entity = InstantiateEntity(lootSpawn.prefabName, lootSpawn.Position(), Quaternion.Euler(lootSpawn.Rotation()));
                        entity.enableSaving = false;
                        entity.skinID       = lootSpawn.skinId;
                        if (entity is LootContainer)
                        {
                            (entity as LootContainer).BlockPlayerItemInput = false;
                            (entity as LootContainer).onlyAcceptCategory   = ItemCategory.All;
                        }
                        entity.Spawn();

                        if (lootSpawn.lootItems.Length > 0 && entity.GetComponent <StorageContainer>())
                        {
                            ClearContainer(entity);
                            NextTick(() => FillContainer(lootSpawn.lootItems, entity.GetComponent <StorageContainer>()));
                        }
                        editor.zoneEntities.Add(entity);
                    }
                }
                SendReply(player, $"You are now editing the loot for zone: <color=#ce422b>{zoneId}</color>\nBe sure to disable culling whilst your are in edit mode by typing <color=#ce422b>culling.toggle false</color> in the ingame console!");
            }
            break;

            case "add":
            {
                ZoneEditor editor = player.GetComponent <ZoneEditor>();
                if (editor == null)
                {
                    SendReply(player, "You need to start editing a zone before you can add loot");
                    return;
                }

                if (args.Length != 2)
                {
                    SendReply(player, "Invalid syntax! <color=#ce422b>/loot add <ID></color>");
                    return;
                }

                int lootId;
                if (!int.TryParse(args[1], out lootId))
                {
                    SendReply(player, "You must enter a loot ID number as shown in the ingame console");
                    return;
                }

                if (lootId < 0 || lootId > spawnableTypes.Count - 1)
                {
                    SendReply(player, "You have entered a loot ID number that is out of range!");
                    return;
                }

                var spawnableType = spawnableTypes.ElementAt(lootId);
                editor.PlaceNewEntity(spawnableType.Key, spawnableType.Value);
            }
            break;

            case "remove":
            {
                ZoneEditor editor = player.GetComponent <ZoneEditor>();
                if (editor == null)
                {
                    SendReply(player, "You need to start editing a zone before you can remove loot");
                    return;
                }

                BaseEntity entity = FindEntityFromRay(player);
                if (entity == null)
                {
                    SendReply(player, "You need to look at the entity you want to remove from the loot spawns");
                    return;
                }

                editor.RemoveEntity(entity);
            }
            break;

            default:
                break;
            }
        }