2017-01-30 4 views
2

Итак, я делаю простой плагин для исправления кода для сервера Minecraft. Что странно, когда я печатаю/выкупаю (действительный код), ничего не происходит, хотя и предполагается ... Правильный код - это код, введенный пользователем в конфигурацию плагинов.Проблема с плагином Java Minecraft - не отвечает на утверждение if?

Вот мой код ...

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) 
{ 


    //Assigns the commands chosen in config to strings 
    String commandChosen1 = this.getConfig().getString("Command for code 1"); 
    String commandChosen2 = this.getConfig().getString("Command for code 2"); 
    String commandChosen3 = this.getConfig().getString("Command for code 3"); 

    //Assigns the codes to strings 
    String validCode1 = this.getConfig().getString("Valid Code 1"); 
    String validCode2 = this.getConfig().getString("Valid Code 2"); 
    String validCode3 = this.getConfig().getString("Valid Code 3"); 

    //If the redeem command is sent from a player 
    if(cmd.getName().equalsIgnoreCase("redeem") && sender instanceof Player) 
    { 
     //Casts the sender to a new player. 
     Player player = (Player) sender; 

     //Creates object hasUSed to store whether or not the player has already redeemed a code 
     Object hasUsed = this.getConfig().get(player.getName()); 


     //Gives an error message of the arguments don't equal 1. 
     if(args.length != 1) 
     { 
      player.sendMessage(ChatColor.DARK_RED + "Please enter a valid promo code. Find them on our twitter!"); 
     } 



     if(args.length == 1) 
     { 
      //If the player hasn't used the code yet and the arguments given are equal to a code then give them the reward... 
      if(args[0] == validCode1 && hasUsed == null) 
      { 
       this.getConfig().set(player.getName(), 1); 
       player.sendMessage(ChatColor.GREEN + "Promo code successfully entered!"); 
       if(commandChosen1 == "xp") 
       { 
       Bukkit.dispatchCommand(player, commandChosen1 + getConfig().getString("XP Given") + "L" + " " + player.getName()); 
       } 
      } 

     } 

     return true; 

    } 
    return false; 
} 

Проблема возникает на "если (арг [0] == validCode1 & & hasUsed == NULL)". Код, который должен произойти, если обе эти вещи проверяются, не происходит, и я не знаю, почему.

+1

используйте '.equals()' вместо '=='. – IQV

+3

Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – rmlan

ответ

1

Обязательно используйте equals() при сравнении строк. Использование commandChosen1 == "xp" сравнивает ссылки на строки, а не значения; используйте commandChosen1.equals("xp") или, если хотите, "xp".equals(commandChosen1).

Кроме того,

Хотя можно использовать this.getConfig().getString() с ключевым значением, которое содержит пробелы, он может сделать конфигурационные файлы трудно читать и хаотичным. Всякий раз, когда я придумываю плагин я дизайн моего config.yml как такового

VoteGUI: 
    message: 'hello' 

, а затем запустить this.getConfig().getString("VoteGUI.message");

Для твоего я хотел бы предложить что-то вроде этого

Promo-Codes: 
    validCode1: 'insert code here' 
    validCode2: 'insert code here' 
    validCode3: 'insert code here' 

, а затем поставить это в вашем onCommand:

String validCode1 = this.getConfig().getString("Promo-Codes.validCode1"); 
    String validCode2 = this.getConfig().getString("Promo-Codes.validCode2"); 
    String validCode3 = this.getConfig().getString("Promo-Codes.validCode3"); 

Если это не решит проблема, скопируйте и вставьте исключение, которое выдается из консоли, и я могу оказать дополнительную помощь.

+0

Сравнение строк с '.equals() 'не является требованием Minecraft. Это справедливо для любого чистого кода Java. – rmlan

+0

Я знаю, я просто заявляю, что minecraft - это много пикеров с тем, что есть и не равным при использовании == –

+1

Это неточное утверждение, поскольку Minecraft не диктует равенство, _Java_ is. – rmlan