MovingBlocks / Terasology

Terasology - open source voxel world
http://terasology.org
Apache License 2.0
3.68k stars 1.34k forks source link

Got NPE when tried to "Configure" world with Island World generator #3402

Closed ar0ne closed 6 months ago

ar0ne commented 6 years ago

What you were trying to do

Tried to "Configure" new world with "Island World" generator. This generator is from PolyWorld module.

What actually happened

Got NPE.

How to reproduce

Single Player -> Create -> Advanced -> Activate PolyWorld module -> Continue -> Choose IslandWorld generator -> Add -> Configure

To be honest, I tried it few times and looks like sometimes, not sure why. I can't find Island World generator in the list of generators 0_o.

Log details and game version

Last develop version.

18:54:02.903 [main] WARN o.t.engine.internal.TimeBase - Delta too great (4177), capping to 1000 18:54:17.968 [main] ERROR o.t.e.event.internal.EventSystemImpl - Failed to invoke event java.lang.NullPointerException: null at org.terasology.world.generation.WorldBuilder.addPlugins(WorldBuilder.java:77) at org.terasology.polyworld.IslandWorldGenerator.createWorld(IslandWorldGenerator.java:87) at org.terasology.world.generation.BaseFacetedWorldGenerator.getWorldBuilder(BaseFacetedWorldGenerator.java:101) at org.terasology.world.generation.BaseFacetedWorldGenerator.getConfigurator(BaseFacetedWorldGenerator.java:81) at org.terasology.rendering.nui.layers.mainMenu.WorldSetupScreen.configureProperties(WorldSetupScreen.java:119) at org.terasology.rendering.nui.layers.mainMenu.WorldSetupScreen.setWorld(WorldSetupScreen.java:103) at org.terasology.rendering.nui.layers.mainMenu.UniverseSetupScreen.lambda$initialise$1(UniverseSetupScreen.java:186) at org.terasology.rendering.nui.widgets.UIButton.activate(UIButton.java:203) at org.terasology.rendering.nui.widgets.UIButton.access$100(UIButton.java:41) at org.terasology.rendering.nui.widgets.UIButton$1.onMouseRelease(UIButton.java:99) at org.terasology.rendering.nui.internal.CanvasImpl.processMouseRelease(CanvasImpl.java:247) at org.terasology.rendering.nui.internal.NUIManagerInternal.mouseButtonEvent(NUIManagerInternal.java:576) at org.terasology.rendering.nui.internal.NUIManagerInternalMethodAccess.invoke(Unknown Source) at org.terasology.entitySystem.event.internal.EventSystemImpl$ByteCodeEventHandlerInfo.invoke(EventSystemImpl.java:516) at org.terasology.entitySystem.event.internal.EventSystemImpl.sendConsumableEvent(EventSystemImpl.java:289) at org.terasology.entitySystem.event.internal.EventSystemImpl.send(EventSystemImpl.java:268) at org.terasology.entitySystem.entity.internal.BaseEntityRef.send(BaseEntityRef.java:204) at org.terasology.input.InputSystem.send(InputSystem.java:367) at org.terasology.input.InputSystem.sendMouseEvent(InputSystem.java:354) at org.terasology.input.InputSystem.processMouseButtonInput(InputSystem.java:184) at org.terasology.input.InputSystem.processMouseInput(InputSystem.java:169) at org.terasology.input.InputSystem.update(InputSystem.java:129) at org.terasology.engine.modes.StateMainMenu.handleInput(StateMainMenu.java:193) at org.terasology.engine.subsystem.lwjgl.LwjglInput.postUpdate(LwjglInput.java:55) at org.terasology.engine.TerasologyEngine.tick(TerasologyEngine.java:455) at org.terasology.engine.TerasologyEngine.mainLoop(TerasologyEngine.java:409) at org.terasology.engine.TerasologyEngine.run(TerasologyEngine.java:385) at org.terasology.engine.Terasology.main(Terasology.java:154)

Cervator commented 6 years ago

Can confirm. Both the config issue and the world generator being a bit hard to get to show up. Usually it is because the module holding the generator isn't fully built but this persisted even after I rebuilt PolyWorld. However after I also made sure its dependency CommonWorld was built then it showed up normally.

I suspect the issue has something to do with world plugins and configurable properties affecting the plugin-based world content. Another example is the "Caves" module which adds configurable caves. I just tried adding that to a plain Perlin world then configuring it and while I didn't get a crash I'm pretty sure I'm missing the cave-related configurators.

Poking @TheFlash98 to check this out sometime :-)

Cervator commented 5 years ago

Retested and still valid (even after forcibly compoling CommonWorld + PolyWorld first):

00:39:51.570 [main] ERROR o.t.e.event.internal.EventSystemImpl - Failed to invoke event
java.lang.NullPointerException: null
    at org.terasology.world.generation.WorldBuilder.addPlugins(WorldBuilder.java:77)
    at org.terasology.polyworld.IslandWorldGenerator.createWorld(IslandWorldGenerator.java:87)
    at org.terasology.world.generation.BaseFacetedWorldGenerator.getWorldBuilder(BaseFacetedWorldGenerator.java:101)
    at org.terasology.world.generation.BaseFacetedWorldGenerator.getConfigurator(BaseFacetedWorldGenerator.java:81)
    at org.terasology.rendering.nui.layers.mainMenu.WorldSetupScreen.configureProperties(WorldSetupScreen.java:119)
    at org.terasology.rendering.nui.layers.mainMenu.WorldSetupScreen.setWorld(WorldSetupScreen.java:103)
    at org.terasology.rendering.nui.layers.mainMenu.UniverseSetupScreen.lambda$initialise$1(UniverseSetupScreen.java:186)
    at org.terasology.rendering.nui.ActivatableWidget.activateWidget(ActivatableWidget.java:46)
    at org.terasology.rendering.nui.widgets.UIButton.access$100(UIButton.java:41)
    at org.terasology.rendering.nui.widgets.UIButton$1.onMouseRelease(UIButton.java:94)
    at org.terasology.rendering.nui.internal.CanvasImpl.processMouseRelease(CanvasImpl.java:266)
    at org.terasology.rendering.nui.internal.NUIManagerInternal.mouseButtonEvent(NUIManagerInternal.java:610)
    at org.terasology.rendering.nui.internal.NUIManagerInternalMethodAccess.invoke(Unknown Source)
    at org.terasology.entitySystem.event.internal.EventSystemImpl$ByteCodeEventHandlerInfo.invoke(EventSystemImpl.java:531)
    at org.terasology.entitySystem.event.internal.EventSystemImpl.sendConsumableEvent(EventSystemImpl.java:301)
    at org.terasology.entitySystem.event.internal.EventSystemImpl.send(EventSystemImpl.java:280)
    at org.terasology.entitySystem.entity.internal.BaseEntityRef.send(BaseEntityRef.java:204)
    at org.terasology.input.InputSystem.send(InputSystem.java:496)
    at org.terasology.input.InputSystem.sendMouseEvent(InputSystem.java:469)
    at org.terasology.input.InputSystem.processMouseButtonInput(InputSystem.java:212)
    at org.terasology.input.InputSystem.processMouseInput(InputSystem.java:191)
    at org.terasology.input.InputSystem.update(InputSystem.java:134)
    at org.terasology.engine.modes.StateMainMenu.handleInput(StateMainMenu.java:196)
    at org.terasology.engine.subsystem.lwjgl.LwjglInput.postUpdate(LwjglInput.java:55)
    at org.terasology.engine.TerasologyEngine.tick(TerasologyEngine.java:467)
    at org.terasology.engine.TerasologyEngine.mainLoop(TerasologyEngine.java:421)
    at org.terasology.engine.TerasologyEngine.run(TerasologyEngine.java:397)
    at org.terasology.engine.Terasology.main(Terasology.java:156)
jdrueckert commented 6 months ago

Just tested this and it does work. If I have the PolyWorld module present, I can successfully select the island world generator, configure it, and start a game with it.