我是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());
}
}
}
答案 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