Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Правильная проверка аргументов

swat1x

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
swat1x
Я хочу сделать команду /pay для своего сервера.


Код:
package me.ryfi.CoreCommands;


import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import me.ryfi.sql.MysqlGets;
import me.ryfi.sql.helpers;



public class PayCommand implements CommandExecutor{

        
        @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        if(sender != null) {
            if (!(args.length < 2)) {
            int summa = Integer.parseInt(args[1]);


                
            Player player = ((Player) sender).getPlayer();
            
            String name = args[0];
            
            
            int targetBalance = MysqlGets.getCoins(args[0]);
            int senderMoney = MysqlGets.getCoins(player.getName());
            
            
            if(name == sender.getName()) {
                sender.sendMessage("§c§l<X> §fВы не можете перевести деньги самому себе");
            }else {
            
            if(Bukkit.getPlayer(args[0]) == null) {
                sender.sendMessage("§c§l<X> §fПолучатель не найден");
            } else {
            
            if(senderMoney < summa) {
                sender.sendMessage("§c§l<X> §fНедостаточно средств");
            }else {
            if(summa < 10) {
                sender.sendMessage("§c§l<X> §fМинимальная сумма для перевода §e10$");
            }else
            if (!helpers.isNumber(args[1])) {
                sender.sendMessage("§c§l<X> §fСумма введена неверно");
            }
            else {
                Player p = Bukkit.getPlayer(args[0]);
                int senderResult = senderMoney - summa;
                int targetResult = targetBalance + summa;
                MysqlGets.updateCoins( name , targetResult);
                MysqlGets.updateCoins( player.getName() , senderResult);
                sender.sendMessage("§c§l<$> §fВы отправили §e" + summa + "$ §fигроку §e" +name);
                
                    
                p.sendMessage("§c§l<$> §fВы получили §e" + summa + "$ §fот игрока §e" + sender.getName());
                
            }
            }
            }
            }
            }
            
            } else {sender.sendMessage("§aИспользуйте: /pay (Ник) (Сумма)");}

        return true;    }
        }

Методы MysqlGets.updateCoins мои, они берут данные из бд.

ПРОБЛЕМА!!!
Нужно сделать так, чтобы проверялись все аргументы:
Отправитель != получатель
Получатель != null
Сумма == Целое число
Сумма > 10
Деньги отправителя >= Сумма

Но при этом всё чекается, но всё равно, когда что-то одно идёт неправильно по условию (Получатель не найден или сумма не целочисленное число)
Как выполнить условие того, что все аргументы плавильные, а уже только после этого выполнить перевод бабла
 
Чёт не то тебе кинул комментатор выше, видимо не вник в вопрос.

Ну, а для тебя есть два решения, которые работают абсолютно одинаково:

PHP:
void example1() {
    if (condition1 && condition2) {
        //TODO
    }
}

void example2() {
    if (!condition1) return;
    if (!condition2) return;
    //TODO
}

condition'ы - это твои условия по типу "Отправитель != получатель"
Их может быть любое количество.

Второй вариант я считаю более читабельным, но это уже больше вопрос вкуса.

Конкретно в твоём случае я бы просто добавил return true; после каждого сообщения об ошибке.

Ну а в целом тебе стоит подтянуть основы Java. Почитай что-то или видосики посмотри, чтобы ещё тонны подобных вопросов не задавать
 

Поделиться этой страницей

Назад
Верх