Skip to content

Custom Worlds

FoundryEngine lets you create dimensions at runtime with custom rules, chunk generators, and clock behavior.

Two types of custom worlds

TypeBehaviorUse case
TemporaryCreated at runtime, deleted on server stopDungeons, arenas, minigames
PersistentSurvives restarts, saves all dataHub worlds, persistent zones

Creating a temporary world

groovy
import de.luckymcdev.foundryengine.common.world.level.EngineLevels
import de.luckymcdev.foundryengine.common.world.level.runtime.RuntimeLevelConfig
import de.luckymcdev.foundryengine.common.world.level.util.VoidChunkGenerator

def server = MinecraftServer.getServer()
def config = new RuntimeLevelConfig()
        .setGenerator(new VoidChunkGenerator(server, "minecraft:plains"))
        .setShouldTickTime(true)
        .setGameRule(GameRules.DO_MOB_SPAWNING, false)

def handle = EngineLevels.get(server).openTemporaryLevel(
        Common.id("my_dungeon"), config)

// Teleport a player there
player.teleport(new TeleportTransition(
        handle.asLevel(), new Vec3(0, 100, 0), Vec3.ZERO, 0, 0,
        TeleportTransition.DO_NOTHING))

Creating a persistent world

groovy
def persistent = EngineLevels.get(server).getOrOpenPersistentLevel(
        Common.id("my_world"), config)

World configuration

The RuntimeLevelConfig lets you control everything:

MethodWhat it does
setGenerator(ChunkGenerator)Set chunk generator (void, overworld copy, custom)
setSeed(long)Custom world seed
setDifficulty(Difficulty)Override difficulty
setGameRule(GameRule, value)Set individual game rules
setShouldTickTime(boolean)Enable/disable time
setFlat(boolean)Flat world lighting

Chunk generators

VoidChunkGenerator

An empty void — good for arenas, boss rooms, sky-based levels:

groovy
new VoidChunkGenerator(server, "minecraft:plains")

Copy the overworld generator

groovy
config.setGenerator(server.overworld().getChunkSource().getGenerator())

Deleting worlds

groovy
// Permanently delete (removes all data)
handle.delete()

// Unload only (saves if persistent)
handle.unload()

Use cases

  • Dungeons: Temporary instanced dungeons per player
  • Minigames: Self-contained arenas with custom rules
  • Hub worlds: Persistent lobby dimensions
  • Skyblock: Void worlds with custom generators
  • Testing: Isolated dimensions for development

Next

  • Game Stages — gate dimension access with progression
  • Areas — trigger dimension travel with zones

FoundryEngine is a work-in-progress. Documentation may change.