2017-01-30 7 views
2

私はMinecraftサーバーのための簡単なコード償還プラグインを作っています。奇妙なのは、入力/償還(有効なコード)ですが、何も起こりません。有効なコードは、ユーザーがプラグイン設定に入力したコードです。Java Minecraft Pluginの問題 - 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の文字列を比較するにはどうすればよいですか?](0120-18753) – rmlan

答えて

1

文字列を比較するときは、equals()を必ず使用してください。 commandChosen1 == "xp"を使用すると、値ではなく文字列参照が比較されます。 commandChosen1.equals("xp")を使用するか、または"xp".equals(commandChosen1)を使用してください。

にスペースが含まれているキー値でthis.getConfig().getString()を使用することは可能ですがまた、

すると、それは設定が読みにくいと雑然とファイルを作ることができます。私はプラグインを設計するたびに、私は、このような

VoteGUI: 
    message: 'hello' 

としての私のconfig.ymlを設計し、私はこの

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

のようなものをお勧めしたいあなたのためにthis.getConfig().getString("VoteGUI.message");

を実行し、これをあげますよ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