Project Worlds - World Manager

World management is a pretty important feature, so I’m very glad you’re developing this. Do you plan to add support for third-party WGen plugins or mods (for example, the forge version of Terrain Control)?

I’d like to. I’m still working on the best way to handle world creations . As it currently stands, it does accept third party world generator modifiers, allowing for other plugins to add custom world gen. It’s a simple concept but functional. As far as tapping into forge mods, I’ll probably need some help with that. Not sure how to handle all that.

1 Like

Yeah, I can see there will be some issues. The Terrain Control dev team aren’t keen on a port to Sponge (it means supporting 3 implementations, amongst other issues), but we may yet be lucky. I do foresee some demand for this, as there are many multiworld servers with worlds that rely on Terrain Control. So far it’s the only example I can think of, as the other classy WGens I know (eg. CityWorld) are bukkit only.

I’m sure that you’ll get help on this, thanks for all the work so far :smile:

You may notice the latest changes removed a couple commands. For missing commands check /gamerule

1 Like

Version
forge-1.8-11.14.4.1577
spongeforge-1.8-1577-2.1-DEV-907
ProjectWorlds V0.5.18

[18:58:46] [Server thread/ERROR] [Sponge]: Could not pass FMLInitializationEvent to Plugin{id=Project Worlds, name=Project Worlds, version=0.5.18}
java.lang.NoClassDefFoundError: org/spongepowered/api/world/gen/GenerationPopulator
        at com.gmail.trentech.pjw.Main.onInitialization(Main.java:57) ~[Main.class:?]
        at org.spongepowered.common.event.listener.GameInitializationEventListener_Main_onInitialization15.handle(Unknown Source) ~[?:?]
        at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:86) ~[RegisteredListener.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.common.event.SpongeEventManager.post(SpongeEventManager.java:247) [SpongeEventManager.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:272) [SpongeModEventManager.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:175) [SpongeMod.class:1.8-1577-2.1-DEV-907]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190) [LoadController.class:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.onPost(LoadController.java:49) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:119) [LoadController.class:?]
        at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:731) [Loader.class:?]
        at net.minecraftforge.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:97) [FMLServerHandler.class:?]
        at net.minecraftforge.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:360) [FMLCommonHandler.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:210) [po.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:438) [MinecraftServer.class:?]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_66]
Caused by: java.lang.ClassNotFoundException: org.spongepowered.api.world.gen.GenerationPopulator
        at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        ... 34 more

update SpongeForge

EDIT: Ok I take that back. Game breaking changes occured last night. I Think Dev-924 should work until I update

1 Like

OK updates pushed. Update to SpongeForge 934 and re-download Project Worlds. Besides for fixing the errors I haven’t tested anything so let me know if something breaks.

1 Like

I installed the new version but I still have a message.

[20:36:31] [Server thread/ERROR] [Sponge]: Could not pass FMLInitializationEvent to Plugin{id=Project Worlds, name=Project Worlds, version=0.5.19}
java.lang.NoClassDefFoundError: org/spongepowered/api/event/entity/living/humanoid/player/RespawnPlayerEvent
        at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_66]
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_66]
        at java.lang.Class.privateGetPublicMethods(Unknown Source) ~[?:1.8.0_66]
        at java.lang.Class.getMethods(Unknown Source) ~[?:1.8.0_66]
        at org.spongepowered.common.event.SpongeEventManager.registerListener(SpongeEventManager.java:146) ~[SpongeEventManager.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.common.event.SpongeEventManager.registerListeners(SpongeEventManager.java:189) ~[SpongeEventManager.class:1.8-1577-2.1-DEV-907]
        at com.gmail.trentech.pjw.Main.onInitialization(Main.java:48) ~[Main.class:?]
        at org.spongepowered.common.event.listener.GameInitializationEventListener_Main_onInitialization17.handle(Unknown Source) ~[?:?]
        at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:86) ~[RegisteredListener.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.common.event.SpongeEventManager.post(SpongeEventManager.java:247) [SpongeEventManager.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:272) [SpongeModEventManager.class:1.8-1577-2.1-DEV-907]
        at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:175) [SpongeMod.class:1.8-1577-2.1-DEV-907]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190) [LoadController.class:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.onPost(LoadController.java:49) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:119) [LoadController.class:?]
        at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:731) [Loader.class:?]
        at net.minecraftforge.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:97) [FMLServerHandler.class:?]
        at net.minecraftforge.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:360) [FMLCommonHandler.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:210) [po.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:438) [MinecraftServer.class:?]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_66]
Caused by: java.lang.ClassNotFoundException: org.spongepowered.api.event.entity.living.humanoid.player.RespawnPlayerEvent
        at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        ... 40 more

Can you send me the entire log?

1 Like

fml-junk-earlystartup.log

fml-server-latest.log

latest.log

Your still running SpongeForge-Dev-907. As I said update to latest Dev-934

1 Like

@TrenTech

I’d love to work with you personally on making changes to better this plugin. I have created a World using SpongeAPI only that uses a TerrainControl generator (without relying on using any dependencies on it).

I’d love to help you out with this and other stuff for this plugin.

2 Likes

I actually lament forget to replace thank you. :sweat:

Hey that’s great. I’m sure there’s plenty to be improved here, and once Sponge takes off, and my employment status changes I probably won’t be able to keep up on my own. Any help is more than welcome.

1 Like

Alrighty, I kinda broke your plugin to pieces this evening @TrenTech but here is the changes you’ll need:

        final WorldCreationSettings.Builder builder = WorldCreationSettings.builder();

        builder
                .name("end")
                .enabled(true)
                .loadsOnStartup(true)
                .keepsSpawnLoaded(true)
                .dimension(DimensionTypes.THE_END)
                .generator(GeneratorTypes.THE_END)
                .gameMode(GameModes.CREATIVE);

and

        final Optional<WorldProperties> optWorldProperties = this.game.getServer().createWorldProperties(settings);
        if (optWorldProperties.isPresent()) {
            this.game.getServer().loadWorld(optWorldProperties.get());
        }

Basically, with my changes, I fixed the fact that the builder didn’t give you the freedom of actually CREATING settings and then only LATER loading a World (if you desire…).

Just in-case terms are confusing:

  • WorldCreationSettings: Settings that CAN generate a World
  • WorldProperties: Properties of a World that exists in the server’s data folder. Could be the properties of an already loaded world
  • World: Should be obvious :stuck_out_tongue:

No confusion here. I didn’t know WorldCreationSettings had a builder available. That’s convenient. My original thought was to create the world and than let the admin/user decide when to load it, which this will allow.

Does setting game mode actually work? I haven’t tried setting it while building the world but when trying to change it later I got UnsupportedOperationException errors, which is why the plugin currently using a custom game rule to manage world specific game modes. I assumed it wasn’t implemented yet as are some other things I’ve had to work around. That one doesn’t bother me as bad as my super hacky work around for importing worlds, but at least I have a ticket open for that.

As a side note I’m excited to see some of the changes you can bring to the table. This project can go a long way with experienced programmers involved and I’d like to see it thrive.

2 Likes

Version
forge-1.8-11.14.4.1577
spongeforge-1.8-1577-2.1-DEV-941
ProjectWorlds V0.5.19

[12:04:29] [Server thread/ERROR] [Sponge]: Could not pass FMLInitializationEvent to Plugin{id=Project Worlds, name=Project Worlds, version=0.5.19}
java.lang.NoClassDefFoundError: org/spongepowered/api/world/WorldBuilder
        at com.gmail.trentech.pjw.commands.CMDCreate.<init>(CMDCreate.java:36) ~[CMDCreate.class:?]
        at com.gmail.trentech.pjw.commands.CommandManager.<init>(CommandManager.java:17) ~[CommandManager.class:?]
        at com.gmail.trentech.pjw.Main.onInitialization(Main.java:54) ~[Main.class:?]
        at org.spongepowered.common.event.listener.GameInitializationEventListener_Main_onInitialization17.handle(Unknown Source) ~[?:?]
        at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:86) ~[RegisteredListener.class:1.8-1577-2.1-DEV-941]
        at org.spongepowered.common.event.SpongeEventManager.post(SpongeEventManager.java:247) [SpongeEventManager.class:1.8-1577-2.1-DEV-941]
        at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:274) [SpongeModEventManager.class:1.8-1577-2.1-DEV-941]
        at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:171) [SpongeMod.class:1.8-1577-2.1-DEV-941]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:190) [LoadController.class:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
        at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) [minecraft_server.1.8.jar:?]
        at com.google.common.eventbus.EventBus.post(EventBus.java:275) [minecraft_server.1.8.jar:?]
        at net.minecraftforge.fml.common.LoadController.onPost(LoadController.java:49) [LoadController.class:?]
        at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:119) [LoadController.class:?]
        at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:731) [Loader.class:?]
        at net.minecraftforge.fml.server.FMLServerHandler.finishServerLoading(FMLServerHandler.java:97) [FMLServerHandler.class:?]
        at net.minecraftforge.fml.common.FMLCommonHandler.onServerStarted(FMLCommonHandler.java:360) [FMLCommonHandler.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:210) [po.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:438) [MinecraftServer.class:?]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_66]
Caused by: java.lang.ClassNotFoundException: org.spongepowered.api.world.WorldBuilder
        at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_66]
        ... 36 more

@Geant

Of course it won’t work…he hasn’t updated for my changes to WorldBuilder (its now WorldCreationSettings.Builder)

@TrenTech

Absolutely. I’ll do my best to make changes to Sponge so you can get your work done here.

I plan to start working on the Bukkit world migrator for Sponge and then I’ll fix the GameMode attribute on the builder.

I probably won’t get to this today. I need a break. For now stick with build 934 or whatever the newest that doesn’t break stuff.

1 Like