我是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