我目前正在尝试从单独的线程修改特定块的BlockState(在已知位置),该线程正在监视并等待外部事件的发生(与Minecraft不相关)。为此,我将需要获取世界通用实例并调用IWorld类的setBlockState
方法。由于此单独的线程未传递任何Server或World参数,因此我需要以某种方式手动获取实例(可能是通过public static
变量或getter方法)
是否有一种简单的方法可以从类中获取当前Overworld的IWorld实例(替代不可用的MinecraftServer.getServer()方法?
通过遵循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);