0

我正在fabric中创建一个mod,它需要每x滴答对当前服务器中的所有玩家进行迭代,但是我还没有找到一种在没有当前存在实体的情况下访问MinecraftServer实例的方法。这是代码:

private void onServerTick() {
    MinecraftServer server = null; // Placeholder
    assert server != null;
    for (ServerPlayerEntity player : PlayerLookup.all(server)) {
        // Stuff goes here
    }
}

我尝试获取服务器登录网络处理程序,因为它具有 getServer() 函数,但无济于事。代码应该完全在服务器端运行,因此不允许播放器实体。

有什么好主意吗?

4

2 回答 2

1

经过一番修改后,我找到了解决方案。

所以只是一个显然返回 MinecraftServer 实例的侦听器 <.<"

public class ServerTickListener implements ServerTickEvents.EndTick{
     @Override
     public void onEndTick(MinecraftServer minecraftServer){
          OverchantedMain.onServerTick(minecraftServer);
     }
}

并在 Main 中初始化

@Override
public void onInitialize(){
     {...}
     ServerTickEvents.END_SERVER_TICK.register(new ServerTickListener());
}

不确定这是否是最有效的解决方案,但嘿,它有效!

于 2022-02-10T02:30:01.920 回答
0

您可以使用 ServerCommandSource 类中的 getMinecraftServer() 方法。

MinecraftServer server = ServerCommandSource.getMinecraftServer();
于 2022-02-27T18:53:27.860 回答