Tags
Creators
Details
All versions
1.4.0
Release
World Switcher 1.4.03 weeks ago 33
Compatibility
Minecraft: Java Edition
1.21–1.21.1
Platform
NeoForge
Supported environments
Server-side
Singleplayer
Changes
World Switcher 1.4.0
Second Modrinth release. Since the initial public 1.0.0, this version bundles
everything from 1.1.0, 1.2.0, 1.3.0 and 1.4.0 — the headline feature is the
new command-hook system.
1.4.0 – Command Hooks
- Command hooks (
enableCommandHooks, on by default): define per-world and global command lists inserverconfig/worldswitcher-hooks.jsonthat run automatically on:firstPlayerJoin– a world goes from 0 → 1 playerslastPlayerLeave– a world goes from 1 → 0 playersplayerMoved– a player switches world Variables{{worldName}},{{worldId}},{{playerName}},{{playerUuid}}are substituted in every command. Each hook runsas: server(OP 4, output suppressed, positioned at the world) oras: player; without anas,hookDefaultRunAs(defaultserver) applies. Global hooks run before per-world hooks. Failing commands are logged and never interrupt the switch/login/logout. Live-reload with/wsc hooks reload(inspect via/wsc hooks status). Great for pausingdoDaylightCycle/doWeatherCycle(and Serene Seasons'doSeasonCycle) while a world is empty – see the README for a ready-made example.
- Clickable switch announcement (
announceSwitches, on by default): when a player switches world, everyone else sees a chat message whose world name is a clickable/ws <world>link to follow along. - Per-world shared inventory (
/wsc shareinventory <world> [true|false]): mark a world as "keep-inventory" so it uses thedefaultinventory group instead of its own. - Changed:
persistentDataExcludesnow defaults to empty.
1.2.0 – Modded player state & per-world difficulty
- Modded player state per world (part of
separateInventories), with no mod dependencies:- NeoForge data attachments (
swapModAttachments) – e.g. Curios slots swap per world. - Persistent data (
swapPersistentData) – player NBT underNeoForgeData. - Tough As Nails (
swapToughAsNails) – thirst + temperature per world (via reflection).
- NeoForge data attachments (
- Per-world difficulty (
perWorldDifficulty):/difficultyonly affects the managed world; new/wsc difficulty <world> [value]. Imports adopt difficulty fromlevel.dat. - Safe relog after a world was unloaded: players offline in a removed/unloaded world are teleported to their last default position/spawn instead of unsafe old coordinates.
- Fixed: modded player data (e.g. Curios) previously leaked between worlds.
1.1.0 – Per-world gamerules, time & weather
- Per-world gamerules (
perWorldGameRules): each managed world has its own gamerules (also works with modded rules like Serene Seasons'doSeasonCycle). - Per-world time & weather (
perWorldTimeAndWeather): own clock and weather per world (eternal night, permanent rain, frozen time). Sleeping only skips your own world's night. - Context-sensitive vanilla commands:
/gamerule,/time,/weatheraffect only the managed world you're in;/execute in worldswitcher:<id> run …targets a world from anywhere; new/wsc gamerule <world> [<rule> [value]]. - Client-side rules (
doImmediateRespawn,reducedDebugInfo,doLimitedCrafting) are re-synced to the client on every switch/respawn. - Bare
/wsshows the (clickable) world list with a "you are here" marker; bare/wscshows an action overview. - Changed:
swapGamemodeis now on by default. - Fixed:
/wsc listnow includes thedefaultworld; correct item handling on cross-world death with differingkeepInventory.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:4JiVuE1B:ZCZrktyq"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4JiVuE1B:ZCZrktyq"
}

