Boolean始终返回false

时间:2014-10-26 05:14:27

标签: java boolean minecraft bukkit

我是java新手,我正在尝试创建一个Minecraft插件。我想要一个调试模式,所以我决定创建一个我可以用命令切换的布尔值,但无论我做什么它返回false,除了最后的p.sendMessage总是说调试消息。这是我的代码:

package fr.davidp027.itemlogger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
    public class Main extends JavaPlugin implements Listener {

 public static Boolean debug = false;

 public void onEnable() {
  PluginManager pm = getServer().getPluginManager();
  pm.registerEvents(this, this);
 }

 public void onDiasble() {

 }

 public boolean onCommand(CommandSender sender, 
   Command cmd, String label, String[] args) {
  //Player player = (Player) sender;
  if (cmd.getLabel().equalsIgnoreCase("lping")) {
   sender.sendMessage("Command Working :D");
  } else if (cmd.getLabel().equalsIgnoreCase("ildebug")) {
   if (Main.debug = false) {
    sender.sendMessage("Debug mode turned ON. Type command again to disable.");
    Main.debug = true;
   } else if (Main.debug = true) {
    sender.sendMessage("Debug mode turned OFF. Type command again to enable.");
    Main.debug = false;
   }
  }
  return false;
 }

 @EventHandler
 public void Blockplace(BlockPlaceEvent e) {
  Player p = e.getPlayer();
  Material b = e.getBlock().getType();
  Location l = e.getBlock().getLocation();
  if (Main.debug = true) {
   p.sendMessage(ChatColor.RED + "You placed the following block: " + ChatColor.GOLD + b + 
     ChatColor.RED + " at the following location" + ChatColor.GOLD + " X: " + l.getBlockX() + " Y: " + 
     l.getBlockY() + " Z: " + l.getBlockZ() + ChatColor.RED + " and your name is: " + ChatColor.GOLD + p.getDisplayName());
  }
 }
}

3 个答案:

答案 0 :(得分:2)

if(Main.debug = false){

执行作业,而不是考试。你需要

if(Main.debug == false){

或只是

if (!Main.debug){

此外,

else if(Main.debug = true) 

应该是

else if(Main.debug == true) 

else if(Main.debug) 

或(在您的情况下)

else

答案 1 :(得分:2)

if(Main.debug = false){基本上是将false分配给Main.debug,然后评估该值,这是假的,因此它会进入下一个条件....

应该更像是......

if(!Main.debug){
    sender.sendMessage("Debug mode turned ON. Type command again to disable.");
    Main.debug = true;
} else { // Can't be anything else...
    sender.sendMessage("Debug mode turned OFF. Type command again to enable.");
    Main.debug = false;
}

最后但并非最不重要的是,该方法只会返回false ...

return false;

所以,我不知道你真正期待的是什么......

答案 2 :(得分:1)

参考Equality, Relational, and Conditional Operators

  

平等和关系运算符

     

相等和关系运算符确定一个操作数是否为   大于,小于,等于或不等于另一个操作数。   大多数这些操作员可能看起来很熟悉   好。 请记住,在测试时,您必须使用“==”而不是“=”   两个原始值相等。

     

==等于
   !=不等于
   >大于    > =大于或等于
   <少于
   < =小于或等于

在您的代码中,您使用的是赋值运算符=

if(Main.debug = false){

您应该使用等于运算符==

if(Main.debug == false){

} else if(Main.debug == true) {

此外,由于debug是一个布尔值(如Code-Apprentice指出的那样),您也可以简化代码:

if(!Main.debug){ // debug is false

} else { // debug is true