首页 > 解决方案 > 状态不更新应该是 Minecraft 记分牌

问题描述

我有一个功能接口,在执行时返回一个字符串。在这个功能接口中,我通过一个类的实例,在调用时应该引用该实例并获取该类中的当前值(该值在别处更新)。所以这个值会改变,每次我执行我的功能接口时它也应该更新,因为它引用了这个类和变量。

有相当多的代码,所以为了简单起见......

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

这是我的“游戏板”课程:

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,无论我是否更改值。

标签: javaminecraftbukkit

解决方案


推荐阅读