private void CraftItemCommandChat(BasePlayer player, string command, string[] args)
        {
            if (!player.IsAdmin)
            {
                SendChatMessage(player, NoPermission);
                return;
            }

            if (args.Length < 1)
            {
                SendChatMessage(player, NoItemRate);
                return;
            }

            var item = args.Any(arg => arg.All(c => char.IsDigit(c) || c == '.')) ? string.Join(" ", args.Take(args.Length - 1)) : string.Join(" ", args);

            if (!Items.Contains(item))
            {
                SendChatMessage(player, InvalidItem, item);
                return;
            }

            float rate = args.Any(arg => arg.All(c => char.IsDigit(c) || c == '.')) ? float.Parse(args.First(arg => arg.All(c => char.IsDigit(c) || c == '.'))) : -1f;

            if (rate == -1f)
            {
                if (IndividualRates.ContainsKey(item))
                {
                    SendChatMessage(player, string.Format(RemovedItem, item));
                    IndividualRates.Remove(item);
                    goto SCV_1;
                }
                else
                {
                    SendChatMessage(player, ModifyError);
                }
                return;
            }

            if (IndividualRates.ContainsKey(item))
            {
                IndividualRates[item] = rate;
            }
            else
            {
                IndividualRates.Add(item, rate);
            }

            SendChatMessage(player, ModifyCraftingRateItem, item, rate);
SCV_1:
            SetConfigValue("Options", "IndividualCraftingRates", IndividualRates);
            UpdateCraftingRate();
        }
        private void CraftItemCommandConsole(ConsoleSystem.Arg arg)
        {
            if (!arg.IsAdmin)
            {
                arg.ReplyWith(NoPermission);
                return;
            }

            if (!arg.HasArgs(1))
            {
                arg.ReplyWith(NoItemRate);
                return;
            }

            float rate = arg.Args.Any(x => x.All(c => char.IsDigit(c) || c == '.')) ? float.Parse(arg.Args.First(x => x.All(c => char.IsDigit(c) || c == '.'))) : -1f;
            var   item = arg.Args.Any(x => x.All(c => char.IsDigit(c) || c == '.')) ? string.Join(" ", arg.Args.Take(arg.Args.Length - 1)) : string.Join(" ", arg.Args);

            if (!Items.Contains(item))
            {
                arg.ReplyWith(string.Format(InvalidItem, item, rate));
                return;
            }

            if (rate == -1f)
            {
                if (IndividualRates.ContainsKey(item))
                {
                    arg.ReplyWith(string.Format(RemovedItem, item));
                    IndividualRates.Remove(item);
                    goto SCV_1;
                }
                else
                {
                    arg.ReplyWith(ModifyError);
                }
                return;
            }

            if (IndividualRates.ContainsKey(item))
            {
                IndividualRates[item] = rate;
            }
            else
            {
                IndividualRates.Add(item, rate);
            }

            arg.ReplyWith(string.Format(ModifyCraftingRateItem, item, rate));
SCV_1:
            SetConfigValue("Options", "IndividualCraftingRates", IndividualRates);
            UpdateCraftingRate();
        }
        private void CraftItemCommandChat(BasePlayer player, string command, string[] args)
        {
            if (!player.IsAdmin())
            {
                SendChatMessage(player, NoPermission);
                return;
            }

            if (args.Length == 0 || args.Length < 2)
            {
                SendChatMessage(player, NoItemRate);
                return;
            }

            float rate;

            if (!float.TryParse(args[args.Length - 1], out rate))
            {
                SendChatMessage(player, ModifyError);
                return;
            }

            var item = string.Empty;

            for (var i = 0; i < args.Length - 1; i++)
            {
                item += args[i] + " ";
            }
            item = item.Trim();

            if (!Items.Contains(item))
            {
                SendChatMessage(player, InvalidItem, item);
                return;
            }


            if (IndividualRates.ContainsKey(item))
            {
                IndividualRates[item] = rate;
            }
            else
            {
                IndividualRates.Add(item, rate);
            }

            SetConfigValue("Options", "IndividualCraftingRates", IndividualRates);
            SendChatMessage(player, ModifyCraftingRateItem, item, rate);
            UpdateCraftingRate();
        }
        private void CraftItemCommandConsole(ConsoleSystem.Arg arg)
        {
            if (arg.Player() != null && !arg.Player().IsAdmin())
            {
                arg.ReplyWith(NoPermission);
                return;
            }

            if (!arg.HasArgs(2))
            {
                arg.ReplyWith(NoItemRate);
                return;
            }

            var rate = arg.GetFloat(arg.Args.Length - 1, -1f);

            if (rate == -1f)
            {
                arg.ReplyWith(ModifyError);
                return;
            }

            var item = string.Empty;

            for (var i = 0; i < arg.Args.Length - 1; i++)
            {
                item += arg.Args[i] + " ";
            }
            item = item.Trim();

            if (!Items.Contains(item))
            {
                arg.ReplyWith(string.Format(InvalidItem, item, rate));
                return;
            }

            if (IndividualRates.ContainsKey(item))
            {
                IndividualRates[item] = rate;
            }
            else
            {
                IndividualRates.Add(item, rate);
            }

            SetConfigValue("Options", "IndividualCraftingRates", IndividualRates);
            arg.ReplyWith(string.Format(ModifyCraftingRateItem, item, rate));
            UpdateCraftingRate();
        }