getSaveFolder is incorrectly being called when the world is a single player world, but this is only allowed on server worlds
Update:
KaptainWutax on the vault hunters discord had this to add: About your 1.18 suggestion with distant horizons. The vault uses a custom VirtualWorld extends ServerWorld
for multithreading purposes. Distant horizon's WorldWrapper
checks world.getClass() == ServerWorld.class
instead of world instanceof ServerWorld
. Some interesting info if you wanna add that to the ticket.
https://gitlab.com/jeseibel/minecraft-lod-mod/-/blob/1.6.5a/common/src/main/java/com/seibel/lod/common/wrappers/world/WorldWrapper.java#L60
What I found out by looking at the code:
When entering another mod's custom dimension, LodUtil::getWorldId() is eventually called, which (because it is single player) calls LodUtil::getDimensionIdFromWorld().
This function retrieves the world wrapper, which implements IWorldWrapper
, and (if single player), calls serverWorld.getSaveFolder()
.
But, looking at the interface IWorldWrapper and the implementation WorldWrapper, this is not allowed to be called and causes an UnsupportedOperationException
.
Environment:
Minecraft: 1.18.2
Forge: 40.1.61
Java: 17.0.1
OS: Windows 11
Mod version: 1.18.2 Alpha 1.6.5
Modpack: Vault Hunters 3rd edition
In addition to the modpack's mods, I added the distant horizons mod, this does not come with the pack, and no further changes were made.
Steps to reproduce:
- Open curseforge
- Download the Vault Hunters 3rd edition modpack
- Go to the distant horizons curseforge page
- click files
- click "install with curseforge" on the version for 1.18.2
- select the vault hunters 3rd edition profile
- launch the game
- Create a vault portal, this is the shape of a nether portal but made of "Polished vault stone"
- Right click this portal with a "Vault crystal"
- Enter the portal
Logs:
I have attached the logs but here is the part where it crashes:
[23:27:43] [Server thread/ERROR]: Exception caught during firing event: getSaveFolder can only be called for ServerWorlds.
Index: 13
Listeners:
0: HIGH
1: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@710b417f
2: ASM: class dev.architectury.event.forge.EventHandlerImplClient event(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
3: ASM: class dev.architectury.event.forge.EventHandlerImplCommon event(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
4: NORMAL
5: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@61655529
6: ASM: class ironfurnaces.Config onWorldLoad(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
7: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@7981086a
8: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@495f804
9: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@2fbe5150
10: ASM: class com.simibubi.create.events.CommonEvents onLoadWorld(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
11: ASM: class com.simibubi.create.events.ClientEvents onLoadWorld(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
12: ASM: mekanism.common.CommonWorldTickHandler@1a5094ab worldLoadEvent(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
13: ASM: com.seibel.lod.forge.ForgeClientProxy@692aef39 worldLoadEvent(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
java.lang.UnsupportedOperationException: getSaveFolder can only be called for ServerWorlds.
at TRANSFORMER/lod@1.6.5a/forge.com.seibel.lod.common.wrappers.world.WorldWrapper.getSaveFolder(WorldWrapper.java:153)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.util.LodUtil.getDimensionIDFromWorld(LodUtil.java:242)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.util.LodUtil.getWorldID(LodUtil.java:208)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.api.EventApi.worldLoadEvent(EventApi.java:142)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.forge.ForgeClientProxy.worldLoadEvent(ForgeClientProxy.java:82)
at net.minecraftforge.eventbus.ASMEventHandler_1432_ForgeClientProxy_worldLoadEvent_Load.invoke(.dynamic)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.EventBus.post(EventBus.java:302)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.EventBus.post(EventBus.java:283)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.VirtualWorlds.load(VirtualWorlds.java:91)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.VirtualWorlds.register(VirtualWorlds.java:103)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.ServerVaults.add(ServerVaults.java:80)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.block.VaultPortalBlock.m_7892_(VaultPortalBlock.java:115)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60682_(BlockBehaviour.java:685)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_20101_(Entity.java:902)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_146872_(Entity.java:696)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_6478_(Entity.java:668)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.network.ServerGamePacketListenerImpl.m_7185_(ServerGamePacketListenerImpl.java:839)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.m_5797_(ServerboundMovePlayerPacket.java:114)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos.m_5797_(ServerboundMovePlayerPacket.java:42)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:22)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.TickTask.run(TickTask.java:18)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:799)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:164)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:782)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:776)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:762)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:689)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:261)
at java.base/java.lang.Thread.run(Thread.java:833)
[23:27:43] [Server thread/ERROR]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos@121e27ca, suppressing error
net.minecraft.ReportedException: Colliding entity with block
at net.minecraft.world.entity.Entity.m_146872_(Entity.java:701) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.world.entity.Entity.m_6478_(Entity.java:668) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.m_7185_(ServerGamePacketListenerImpl.java:839) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.m_5797_(ServerboundMovePlayerPacket.java:114) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos.m_5797_(ServerboundMovePlayerPacket.java:42) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:22) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:157) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:799) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:164) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:131) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:782) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:776) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:140) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:762) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:689) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:261) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.UnsupportedOperationException: getSaveFolder can only be called for ServerWorlds.
at forge.com.seibel.lod.common.wrappers.world.WorldWrapper.getSaveFolder(WorldWrapper.java:153) ~[DistantHorizons-1.6.5a-1.18.2.jar%2395!/:?]
at com.seibel.lod.core.util.LodUtil.getDimensionIDFromWorld(LodUtil.java:242) ~[DistantHorizons-1.6.5a-1.18.2.jar%2395!/:?]
at com.seibel.lod.core.util.LodUtil.getWorldID(LodUtil.java:208) ~[DistantHorizons-1.6.5a-1.18.2.jar%2395!/:?]
at com.seibel.lod.core.api.EventApi.worldLoadEvent(EventApi.java:142) ~[DistantHorizons-1.6.5a-1.18.2.jar%2395!/:?]
at com.seibel.lod.forge.ForgeClientProxy.worldLoadEvent(ForgeClientProxy.java:82) ~[DistantHorizons-1.6.5a-1.18.2.jar%2395!/:?]
at net.minecraftforge.eventbus.ASMEventHandler_1432_ForgeClientProxy_worldLoadEvent_Load.invoke(.dynamic) ~[?:?]
at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.3.jar%232!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.3.jar%232!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.3.jar%232!/:?]
at iskallia.vault.world.data.VirtualWorlds.load(VirtualWorlds.java:91) ~[the_vault-1.18.2-2.0.14.952.jar%23180!/:1.18.2-2.0.14.952]
at iskallia.vault.world.data.VirtualWorlds.register(VirtualWorlds.java:103) ~[the_vault-1.18.2-2.0.14.952.jar%23180!/:1.18.2-2.0.14.952]
at iskallia.vault.world.data.ServerVaults.add(ServerVaults.java:80) ~[the_vault-1.18.2-2.0.14.952.jar%23180!/:1.18.2-2.0.14.952]
at iskallia.vault.block.VaultPortalBlock.m_7892_(VaultPortalBlock.java:115) ~[the_vault-1.18.2-2.0.14.952.jar%23180!/:1.18.2-2.0.14.952]
at net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60682_(BlockBehaviour.java:685) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.world.entity.Entity.m_20101_(Entity.java:902) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
at net.minecraft.world.entity.Entity.m_146872_(Entity.java:696) ~[client-1.18.2-20220404.173914-srg.jar%23194!/:?]
... 18 more
[23:27:43] [Server thread/WARN]: WorldLoadEvent called on serverLevel while another world is loaded!
[23:27:43] [Server thread/ERROR]: Exception caught during firing event: getSaveFolder can only be called for ServerWorlds.
Index: 13
Listeners:
0: HIGH
1: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@710b417f
2: ASM: class dev.architectury.event.forge.EventHandlerImplClient event(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
3: ASM: class dev.architectury.event.forge.EventHandlerImplCommon event(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
4: NORMAL
5: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@61655529
6: ASM: class ironfurnaces.Config onWorldLoad(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
7: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@7981086a
8: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@495f804
9: net.minecraftforge.eventbus.EventBus$$Lambda$4858/0x0000000800e9db00@2fbe5150
10: ASM: class com.simibubi.create.events.CommonEvents onLoadWorld(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
11: ASM: class com.simibubi.create.events.ClientEvents onLoadWorld(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
12: ASM: mekanism.common.CommonWorldTickHandler@1a5094ab worldLoadEvent(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
13: ASM: com.seibel.lod.forge.ForgeClientProxy@692aef39 worldLoadEvent(Lnet/minecraftforge/event/world/WorldEvent$Load;)V
java.lang.UnsupportedOperationException: getSaveFolder can only be called for ServerWorlds.
at TRANSFORMER/lod@1.6.5a/forge.com.seibel.lod.common.wrappers.world.WorldWrapper.getSaveFolder(WorldWrapper.java:153)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.util.LodUtil.getDimensionIDFromWorld(LodUtil.java:242)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.util.LodUtil.getWorldID(LodUtil.java:208)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.core.api.EventApi.worldLoadEvent(EventApi.java:142)
at TRANSFORMER/lod@1.6.5a/com.seibel.lod.forge.ForgeClientProxy.worldLoadEvent(ForgeClientProxy.java:82)
at net.minecraftforge.eventbus.ASMEventHandler_1432_ForgeClientProxy_worldLoadEvent_Load.invoke(.dynamic)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.EventBus.post(EventBus.java:302)
at MC-BOOTSTRAP/eventbus@5.0.3/net.minecraftforge.eventbus.EventBus.post(EventBus.java:283)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.VirtualWorlds.load(VirtualWorlds.java:91)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.VirtualWorlds.register(VirtualWorlds.java:103)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.world.data.ServerVaults.add(ServerVaults.java:80)
at TRANSFORMER/the_vault@1.18.2-2.0.14.952/iskallia.vault.block.VaultPortalBlock.m_7892_(VaultPortalBlock.java:115)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase.m_60682_(BlockBehaviour.java:685)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_20101_(Entity.java:902)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_146872_(Entity.java:696)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.Entity.m_6478_(Entity.java:668)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.LivingEntity.m_21074_(LivingEntity.java:2155)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.LivingEntity.m_7023_(LivingEntity.java:2112)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.player.Player.m_7023_(Player.java:1403)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.LivingEntity.m_8107_(LivingEntity.java:2544)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.player.Player.m_8107_(Player.java:492)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.LivingEntity.m_8119_(LivingEntity.java:2253)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.world.entity.player.Player.m_8119_(Player.java:235)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.level.ServerPlayer.m_9240_(ServerPlayer.java:439)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.network.ServerGamePacketListenerImpl.m_9933_(ServerGamePacketListenerImpl.java:207)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.network.Connection.m_129483_(Connection.java:245)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.network.ServerConnectionListener.m_9721_(ServerConnectionListener.java:142)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:916)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:842)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.client.server.IntegratedServer.m_5705_(IntegratedServer.java:84)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:685)
at TRANSFORMER/minecraft@1.18.2/net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:261)
at java.base/java.lang.Thread.run(Thread.java:833)
Please let me know if any more information is needed, or if this is some other issue that I looked over.
Thanks for the great mod!