diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index b8ad81a564..049053b9c0 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -66,7 +66,7 @@ public class Control implements ApplicationListener, Loadable{ Core.app.post(() -> Core.app.post(() -> { if(Net.active() && player.getClosestCore() != null){ //set to closest core since that's where the player will probably respawn; prevents camera jumps - Core.camera.position.set(player.getClosestCore()); + Core.camera.position.set(player.isDead() ? player.getClosestCore() : player); }else{ //locally, set to player position since respawning occurs immediately Core.camera.position.set(player); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 92a27aea18..36ac50ade2 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -320,6 +320,15 @@ public class NetServer implements ApplicationListener{ } } }); + + clientCommands.register("sync", "Re-synchronize world state.", (args, player) -> { + if(player.isLocal){ + player.sendMessage("[scarlet]Re-synchronizing as the host is pointless."); + }else{ + Call.onWorldDataBegin(player.con.id); + netServer.sendWorldData(player, player.con.id); + } + }); } public int votesRequired(){ diff --git a/server/src/io/anuke/mindustry/server/ServerLauncher.java b/server/src/io/anuke/mindustry/server/ServerLauncher.java index 06f842c418..5b35bdccf2 100644 --- a/server/src/io/anuke/mindustry/server/ServerLauncher.java +++ b/server/src/io/anuke/mindustry/server/ServerLauncher.java @@ -2,6 +2,8 @@ package io.anuke.mindustry.server; import io.anuke.arc.backends.headless.HeadlessApplication; +import io.anuke.mindustry.*; +import io.anuke.mindustry.core.*; import io.anuke.mindustry.net.*; public class ServerLauncher{ @@ -10,6 +12,7 @@ public class ServerLauncher{ try{ Net.setClientProvider(new ArcNetClient()); Net.setServerProvider(new ArcNetServer()); + Vars.platform = new Platform(){}; new HeadlessApplication(new MindustryServer(args), null, throwable -> CrashSender.send(throwable, f -> {})); }catch(Throwable t){ CrashSender.send(t, f -> {});