Java 为什么赢了';if语句是否检测到我的游戏状态
我是Java新手,在我的代码中遇到了一个“bug”,我在理解/修复它时遇到了困难。为了让您了解一些背景知识,我设置了一个枚举,其中列出了所有游戏状态(如下所示) 在我的Java 为什么赢了';if语句是否检测到我的游戏状态,java,plugins,enums,listeners,Java,Plugins,Enums,Listeners,我是Java新手,在我的代码中遇到了一个“bug”,我在理解/修复它时遇到了困难。为了让您了解一些背景知识,我设置了一个枚举,其中列出了所有游戏状态(如下所示) 在我的main.java类中,我在onEnable方法中指定将游戏状态设置为 基本上,我要做的是在BlockBreakEvent侦听器中,我想说的是 if (GameState.isState(GameState.IN_LOBBY)) { Location bLoc = block.getLocation(); Chat
main.java
类中,我在onEnable
方法中指定将游戏状态设置为
基本上,我要做的是在BlockBreakEvent侦听器中,我想说的是
if (GameState.isState(GameState.IN_LOBBY)) {
Location bLoc = block.getLocation();
ChatUtilties.errorPlayer("You may not break blocks at this time.", player);
bLoc.getBlock().setType(Material.type);
}
换句话说,我试图检测游戏状态是否在休息室中,
,如果是这样的话,那么就让玩家不能打破方块。但目前出现了两个问题
由于某种原因,当游戏状态是在_lobble
时,插件甚至不会注意到。它只是忽略了if语句。它甚至不会发送消息,就好像游戏状态不在大厅中一样
我不知道如何根据玩家打破的块动态更改材质
你的二传手错了:
public static void setState(GameState state) {
GameState currentState = state;
}
您正在此处创建一个新的局部变量currentState,而不是使用现有字段。发生这种情况是因为您在前面编写了变量类型,并创建了一个新的初始化语句
而是使用:
public static void setState(GameState state) {
currentState = state;
}
(因为currentState是一个静态字段GameState.currentState=state;
在这种情况下也可以使用)
编辑:
另一个问题是canJoin方法
public boolean canJoin() {
return canJoin();
}
这个方法递归地调用自己,没有任何结束条件。因此,如果您尝试调用StackOverflowException,您将得到一个StackOverflowException
相反,您可能打算返回canJoin字段:
public boolean canJoin() {
return canJoin;
}
你的二传手错了:
public static void setState(GameState state) {
GameState currentState = state;
}
您正在此处创建一个新的局部变量currentState,而不是使用现有字段。发生这种情况是因为您在前面编写了变量类型,并创建了一个新的初始化语句
而是使用:
public static void setState(GameState state) {
currentState = state;
}
(因为currentState是一个静态字段GameState.currentState=state;
在这种情况下也可以使用)
编辑:
另一个问题是canJoin方法
public boolean canJoin() {
return canJoin();
}
这个方法递归地调用自己,没有任何结束条件。因此,如果您尝试调用StackOverflowException,您将得到一个StackOverflowException
相反,您可能打算返回canJoin字段:
public boolean canJoin() {
return canJoin;
}
对于他的isState方法,也要提到同样的事情,他应该使用return currentState==state@RAZ_Muh_Taz:他的currentState字段是静态的。所以通过GameState.currentState
引用它应该不会引起任何问题。当然,将当前状态保存在静态字段中是否好是另一个问题,但我觉得解决这个问题将超出这个问题的范围。谢谢!你知道怎么做吗?当玩家打破一个方块时,它会把它换回来?很明显,我做错了。我猜这是一些与雷击相关的东西(断块)。Sry,但我对Minecraft的编程了解还不够,无法帮助您解决这个特定问题。@OhGodSpiders我终于找到了解决方案!显然正在执行event.setCancelled(true)代码>会成功的!对于他的isState方法,也要提到同样的事情,他应该使用return currentState==state@RAZ_Muh_Taz:他的currentState字段是静态的。所以通过GameState.currentState
引用它应该不会引起任何问题。当然,将当前状态保存在静态字段中是否好是另一个问题,但我觉得解决这个问题将超出这个问题的范围。谢谢!你知道怎么做吗?当玩家打破一个方块时,它会把它换回来?很明显,我做错了。我猜这是一些与雷击相关的东西(断块)。Sry,但我对Minecraft的编程了解还不够,无法帮助您解决这个特定问题。@OhGodSpiders我终于找到了解决方案!显然正在执行event.setCancelled(true)代码>会成功的!