Состояние не обновляется должно быть для Турнира Minecraft - PullRequest
1 голос
/ 28 апреля 2019

У меня есть функциональный интерфейс, который возвращает строку при выполнении. В этом функциональном интерфейсе я прохожу через экземпляр класса, который при вызове должен ссылаться на этот экземпляр и получать текущее значение в этом классе (это значение обновляется в другом месте). Таким образом, это значение изменяется, и оно также должно обновляться каждый раз, когда я выполняю свой функциональный интерфейс, поскольку оно ссылается на этот класс и переменную.

Существует достаточное количество кода, поэтому для простоты ...

Мой интерфейс LineExecution:

@FunctionalInterface
public interface LineExecution {

    String execute(Player p);

}

Класс моего табло: https://pastebin.com/0aHa81eA

Я обновляю значение state#getReferencedTime здесь:

@Override
public void run() {
    Logger.debug("setting referenced time");
    Logger.debug("EXECUTIONA: " + execution.execute(a.getPlayers().stream().findFirst().orElse(null).getPlayer()));
    state.setReferencedTime(i);
    Logger.debug("getting referenced time: " + state.getReferencedTime());
    a.getPlayers().forEach(p -> {
        Logger.debug("updating... state: " + state.getReferencedTime());
        GameBoard g = state.getGameBoard(p.getPlayer());
        g.update(p.getPlayer());
    });
    i--;
}

Вот что напечатано в консоли: https://pastebin.com/bUC5sBQj

А это мой класс GameBoard:

public class GameBoard extends Scoreboard {

    public GameBoard(GameBoardType type, GameStateManager state) {
        super(type.getTitle());

        addLine(p -> {
            return "stateRef: " + state.getReferencedTime();
        }, Bukkit.getOfflinePlayer("Realmm").getPlayer());
    }

}

Итак, я просто хочу иметь возможность обновить state.getReferencedTime, что я делаю в run(), а затем, когда я снова запускаю этот функциональный интерфейс, вызывая GameBoard#update(Player), он должен показать 9, считая до 0. Но он всегда показывает 10, независимо от того, изменяю я значение или нет.

...