public void Execute(IRocketPlayer caller, string[] command)
        {
            UnturnedPlayer player = (UnturnedPlayer)caller;
            if (command.Length == 0 || command.Length > 2)
            {
                UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter"));
                throw new WrongUsageOfCommandException(caller, this);
            }

            byte amount = 1;

            string itemString = command[0].ToString();

            if (!ushort.TryParse(itemString, out ushort id))
            {
                List<ItemAsset> sortedAssets = new List<ItemAsset>(SDG.Unturned.Assets.find(EAssetType.ITEM).Cast<ItemAsset>());
                ItemAsset asset = sortedAssets.Where(i => i.itemName != null).OrderBy(i => i.itemName.Length).Where(i => i.itemName.ToLower().Contains(itemString.ToLower())).FirstOrDefault();
                if (asset != null) id = asset.id;
                if (String.IsNullOrEmpty(itemString.Trim()) || id == 0)
                {
                    UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter"));
                    throw new WrongUsageOfCommandException(caller, this);
                }
            }

            Asset a = SDG.Unturned.Assets.find(EAssetType.ITEM, id);

            if (command.Length == 2 && !byte.TryParse(command[1].ToString(), out amount) || a == null)
            {
                UnturnedChat.Say(player, U.Translate("command_generic_invalid_parameter"));
                throw new WrongUsageOfCommandException(caller, this);
            }

            string assetName = ((ItemAsset)a).itemName;

            if (U.Settings.Instance.EnableItemBlacklist && !player.HasPermission("itemblacklist.bypass." + id))
            {
                if (UnturnedItems.isBlacklisted(id))
                {
                    UnturnedChat.Say(player, U.Translate("command_i_blacklisted"));
                    return;
                }
            }

            if (U.Settings.Instance.EnableItemSpawnLimit && !player.HasPermission("itemspawnlimit.bypass." + id))
            {
                if (amount > U.Settings.Instance.MaxSpawnAmount)
                {
                    UnturnedChat.Say(player, U.Translate("command_i_too_much", U.Settings.Instance.MaxSpawnAmount));
                    return;
                }
                if (U.Instance.PlayerSpawnInfo != null && U.Instance.PlayerSpawnInfo.ContainsKey(player))
                {
                    if (amount + U.Instance.PlayerSpawnInfo[player].RecentSpawnAmount > U.Settings.Instance.MaxRecentSpawnAmount)
                    {
                        player.Kick("You have spawned too many items recently.");
                        ItemManager.askClearAllItems();
                    }
                }
            }

            if (player.GiveItem(id, amount))
            {
                Logger.Log(U.Translate("command_i_giving_console", player.DisplayName, id, amount));
                UnturnedChat.Say(player, U.Translate("command_i_giving_private", amount, assetName, id));
                if (U.Instance.PlayerSpawnInfo == null)
                    U.Instance.PlayerSpawnInfo = new Dictionary<UnturnedPlayer, PlayerSpawnInfo>();
                if (!U.Instance.PlayerSpawnInfo.ContainsKey(player))
                    U.Instance.PlayerSpawnInfo.Add(player, new PlayerSpawnInfo(player.CSteamID, amount, amount, DateTime.Now));
                else
                {
                    if ((DateTime.Now - U.Instance.PlayerSpawnInfo[player].LastSpawnTime).TotalMinutes >= 1)
                    {
                        U.Instance.PlayerSpawnInfo.Remove(player);
                        U.Instance.PlayerSpawnInfo.Add(player, new PlayerSpawnInfo(player.CSteamID, amount, amount, DateTime.Now));
                    }
                    else
                    {
                        int Amount = U.Instance.PlayerSpawnInfo[player].RecentSpawnAmount;
                        U.Instance.PlayerSpawnInfo.Remove(player);
                        U.Instance.PlayerSpawnInfo.Add(player, new PlayerSpawnInfo(player.CSteamID, amount, amount + Amount, DateTime.Now));
                    }
                }
            }
            else
            {
                UnturnedChat.Say(player, U.Translate("command_i_giving_failed_private", amount, assetName, id));
            }
        }