我是Java新手,遇到我的代码中有一个“错误”,我无法理解/修复。给你一些背景知识,我成立了,指出所有的游戏状态(如下图)枚举为什么if语句不能检测到我的游戏状态
public enum GameState {
IN_LOBBY(true), IN_GAME(false), POST_GAME(false), RESETTING(false);
private boolean canJoin;
private static GameState currentState;
GameState(boolean canJoin) {
this.canJoin = canJoin;
}
public boolean canJoin() {
return canJoin();
}
public static void setState(GameState state) {
GameState currentState = state;
}
public static boolean isState(GameState state) {
return GameState.currentState == state;
}
public static GameState getState() {
return currentState;
}
}
在我main.java
类我在onEnable
方法将游戏状态设置为IN_LOBBY
指定。
基本上我所要做的是在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);
}
换句话说我想检测,如果游戏状态是IN_LOBBY
如果是的话让这个玩家可以不会破坏块。但是目前出现了两个问题。
出于某种原因,当游戏状态是
IN_LOBBY
插件甚至不会采取通知。它只是忽略了如果陈述。它甚至不会发送消息,就好像游戏状态不是IN_LOBBY
。我不知道如何动态地改变根据玩家爆出什么块的材料。
也提到同样的事情,他isState方法,他应该用回currentState ==状态 –
@RAZ_Muh_Taz:他currentState场是静态的。所以通过'GameState.currentState'引用它应该不会造成问题。当然,将现状保存在一个静态领域是一个很好的设计问题是另一个问题,但我觉得这样做会超出这个问题范围。 –
谢谢!你有没有机会知道如何做到这一点,以便当玩家破坏一个区块时将其替换回来?显然,我做错了。 – joeldesante