如何从单独的类访问当前的IWorld实例

问题描述 投票:1回答:1

我目前正在尝试从单独的线程修改特定块的BlockState(在已知位置),该线程正在监视并等待外部事件的发生(与Minecraft不相关)。为此,我将需要获取世界通用实例并调用IWorld类的setBlockState方法。由于此单独的线程未传递任何Server或World参数,因此我需要以某种方式手动获取实例(可能是通过public static变量或getter方法)

是否有一种简单的方法可以从类中获取当前Overworld的IWorld实例(替代不可用的MinecraftServer.getServer()方法?

java minecraft minecraft-forge
1个回答
0
投票

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

然后,您可以存储服务器实例,或立即在服务器实例上调用getWorld(DimensionType dimension)方法以获得任何世界的引用。此函数返回MinecraftServer类型,该类型扩展了IWorld类型,并可根据需要使用。一个示例实现如下,分别获得Overworld,Nether和End world:

MinecraftServer currentServer = ServerLifecycleHooks.getCurrentServer();

IWorld currentOverworld = currentServer.getWorld(DimensionType.OVERWORLD);
IWorld currentNether = currentServer.getWorld(DimensionType.THE_NETHER);
IWorld currentEnd = currentServer.getWorld(DimensionType.THE_END);
© www.soinside.com 2019 - 2024. All rights reserved.