diff --git a/src/main/java/org/ultramine/commands/basic/TechCommands.java b/src/main/java/org/ultramine/commands/basic/TechCommands.java index 382dbeb..cd2b128 100644 --- a/src/main/java/org/ultramine/commands/basic/TechCommands.java +++ b/src/main/java/org/ultramine/commands/basic/TechCommands.java @@ -9,9 +9,12 @@ import static net.minecraft.util.EnumChatFormatting.*; import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.DimensionManager; import org.ultramine.commands.Command; import org.ultramine.commands.CommandContext; +import org.ultramine.server.MultiWorld; +import org.ultramine.server.Teleporter; public class TechCommands { @@ -106,4 +109,60 @@ ctx.sendMessage("Heap total: %sm", Runtime.getRuntime().totalMemory() >> 20); ctx.sendMessage("Heap free: %sm", Runtime.getRuntime().freeMemory() >> 20); } + + @Command( + name = "multiworld", + aliases = {"mw", "mv"}, + group = "technical", + permissions = {"command.multiworld"}, + syntax = { + "[list]", + "[load unload goto] <%world>" //No world validation + } + ) + public static void multiworld(CommandContext ctx) + { + MultiWorld mw = ctx.getServer().getMultiWorld(); + + if(ctx.getAction().equals("list")) + { + ctx.sendMessage("command.warplist.head=Warp list:"); + for(int dim : DimensionManager.getStaticDimensionIDs()) + { + String name = mw.getNameByID(dim); + ctx.sendMessage(GOLD, " - %s - %s - %s", dim, name != null ? name : "unnamed", mw.getWorldByID(dim) != null ? "loaded" : "unloaded"); + } + return; + } + + int dim = ctx.get("world").asInt(); + + if(!DimensionManager.isDimensionRegistered(dim)) + ctx.failure("command.multiworld.notregistered"); + + if(ctx.getAction().equals("load")) + { + if(mw.getWorldByID(dim) != null) + ctx.failure("command.multiworld.alreadyloaded"); + + DimensionManager.initDimension(dim); + ctx.sendMessage("command.multiworld.load"); + } + else if(ctx.getAction().equals("unload")) + { + if(mw.getWorldByID(dim) == null) + ctx.failure("command.multiworld.notloaded"); + + DimensionManager.unloadWorld(dim); + ctx.sendMessage("command.multiworld.unload"); + } + else if(ctx.getAction().equals("goto")) + { + WorldServer world = mw.getWorldByID(dim); + if(world == null) + ctx.failure("command.multiworld.notloaded"); + + Teleporter.tpNow(ctx.getSenderAsPlayer(), dim, world.getWorldInfo().getSpawnX(), world.getWorldInfo().getSpawnY(), world.getWorldInfo().getSpawnZ()); + } + } } diff --git a/src/main/java/org/ultramine/server/MultiWorld.java b/src/main/java/org/ultramine/server/MultiWorld.java index 1f18929..f5a7952 100644 --- a/src/main/java/org/ultramine/server/MultiWorld.java +++ b/src/main/java/org/ultramine/server/MultiWorld.java @@ -291,6 +291,11 @@ return nameToWorldMap.keySet(); } + public String getNameByID(int id) + { + return dimToNameMap.get(id); + } + public Set getDirsForBackup() { return backupDirs; diff --git a/src/main/resources/assets/ultramine/lang/en_US.lang b/src/main/resources/assets/ultramine/lang/en_US.lang index f536fbb..af3a7ca 100644 --- a/src/main/resources/assets/ultramine/lang/en_US.lang +++ b/src/main/resources/assets/ultramine/lang/en_US.lang @@ -153,3 +153,12 @@ command.memstat.usage=/memstat command.memstat.description=Displays max, current allocated and free memory + +command.multiworld.usage=/multiworld or /multiworld list +command.multiworld.description=All multiworld commands +command.multiworld.alreadyloaded=Dimension is already loaded +command.multiworld.notregistered=Dimension is not registered (not exists) +command.multiworld.notloaded=Dimension is not loaded +command.multiworld.load.success=Dimension successfuly loaded +command.multiworld.unload.success=Dimension successfuly unloaded +command.warplist.list.head=Dimension list: