如何从单独的 class 访问主世界的当前 IWorld 实例

How to access the current IWorld Instance of the Overworld from a seperate class

我目前正在尝试从一个正在监视和等待外部事件发生(与 Minecraft 无关)的单独线程修改特定块的 BlockState(在已知位置)。为此,我需要获取主世界世界实例并调用 IWorld class 的 setBlockState 方法。由于这个单独的线程没有传递任何服务器或世界参数,我需要以某种方式手动获取实例(可能来自 public static 变量或 getter 方法)

有没有简单的方法从 class 获取当前主世界的 IWorld 实例(不可用的 MinecraftServer.getServer() 方法的替代方法)?

通过遵循 MinecraftServer 参数的用法、实现和层次结构,我发现 ServerLifecycleHooks class 具有以下声明 private static MinecraftServer currentServer,其中包含对当前 运行 MinecraftServer 实例。这个变量有一个 getter 方法,可以通过 ServerLifecycleHooks.getCurrentServer().

调用

然后您可以存储服务器实例或立即对其调用 getWorld(DimensionType dimension) 方法以获取任何世界的引用。此函数 returns 是扩展 IWorld 类型的 MinecraftServer 类型,可以根据需要使用。一个示例实现如下,分别获取 Overworld、Nether 和 End worlds:

MinecraftServer currentServer = ServerLifecycleHooks.getCurrentServer();

IWorld currentOverworld = currentServer.getWorld(DimensionType.OVERWORLD);
IWorld currentNether = currentServer.getWorld(DimensionType.THE_NETHER);
IWorld currentEnd = currentServer.getWorld(DimensionType.THE_END);