diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index 9fa3884..65a82b2 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -421,9 +421,19 @@ public EntityPlayerMP respawnPlayer(EntityPlayerMP p_72368_1_, int p_72368_2_, boolean p_72368_3_) { int oldDim = p_72368_1_.dimension; + WorldServer oldWorld = mcServer.getMultiWorld().getWorldByID(oldDim); boolean respawnOnBed = (getServerInstance().isSinglePlayer() || ConfigurationHandler.getServerConfig().settings.spawnLocations.respawnOnBed); - WarpLocation spawnWarp = getDataLoader().getWarp(getServerInstance().isSinglePlayer() ? "spawn" : ConfigurationHandler.getServerConfig().settings.spawnLocations.deathSpawn); - WarpLocation spawn = (spawnWarp != null ? spawnWarp : getDataLoader().getWarp("spawn")).randomize(); + WarpLocation spawn = null; + if(oldWorld.getConfig().settings.respawnOnWarp != null) + spawn = getDataLoader().getWarp(oldWorld.getConfig().settings.respawnOnWarp); + + if(spawn == null) + { + WarpLocation spawnWarp = getDataLoader().getWarp(getServerInstance().isSinglePlayer() ? "spawn" : ConfigurationHandler.getServerConfig().settings.spawnLocations.deathSpawn); + spawn = (spawnWarp != null ? spawnWarp : getDataLoader().getWarp("spawn")); + } + + spawn = spawn.randomize(); World world = mcServer.worldServerForDimension(p_72368_2_); if (world == null) diff --git a/src/main/java/org/ultramine/server/WorldsConfig.java b/src/main/java/org/ultramine/server/WorldsConfig.java index 9e30f57..0b566e6 100644 --- a/src/main/java/org/ultramine/server/WorldsConfig.java +++ b/src/main/java/org/ultramine/server/WorldsConfig.java @@ -41,6 +41,8 @@ public WorldTime time = WorldTime.NORMAL; public Weather weather = Weather.NORMAL; public boolean useIsolatedPlayerData = false; + public String respawnOnWarp = null; + public String reconnectOnWarp = null; public enum WorldTime { diff --git a/src/main/java/org/ultramine/server/data/ServerDataLoader.java b/src/main/java/org/ultramine/server/data/ServerDataLoader.java index fbcc0a3..8dec083 100644 --- a/src/main/java/org/ultramine/server/data/ServerDataLoader.java +++ b/src/main/java/org/ultramine/server/data/ServerDataLoader.java @@ -215,10 +215,21 @@ } mgr.addStatFile(player.getGameProfile(), stats); player.setStatisticsFile(stats); + WarpLocation spawn = null; if(nbt == null) //first login { WarpLocation spawnWarp = getWarp(isClient ? "spawn" : ConfigurationHandler.getServerConfig().settings.spawnLocations.firstSpawn); - WarpLocation spawn = (spawnWarp != null ? spawnWarp : getWarp("spawn")).randomize(); + spawn = (spawnWarp != null ? spawnWarp : getWarp("spawn")); + } + else + { + String warpName = mgr.getServerInstance().getMultiWorld().getWorldByID(player.dimension).getConfig().settings.reconnectOnWarp; + if(warpName != null) + spawn = getWarp(warpName); + } + if(spawn != null) + { + spawn = spawn.randomize(); player.setLocationAndAngles(spawn.x, spawn.y, spawn.z, spawn.yaw, spawn.pitch); } ForgeEventFactory.firePlayerLoadingEvent(player, ((SaveHandler)mgr.getPlayerNBTLoader()).getPlayerSaveDir(), player.getUniqueID().toString()); diff --git a/src/main/resources/org/ultramine/defaults/defaultworlds.yml b/src/main/resources/org/ultramine/defaults/defaultworlds.yml index f386829..0853afc 100644 --- a/src/main/resources/org/ultramine/defaults/defaultworlds.yml +++ b/src/main/resources/org/ultramine/defaults/defaultworlds.yml @@ -17,6 +17,8 @@ time: NORMAL weather: NORMAL useIsolatedPlayerData: false + respawnOnWarp: null + reconnectOnWarp: null chunkLoading: &global_cl viewDistance: 10 chunkUpdateRadius: 7