* Fix WorldReloader * horrible if * Update WorldReloader.java Co-authored-by: Anuken <arnukren@gmail.com>
62 lines
1.6 KiB
Java
62 lines
1.6 KiB
Java
package mindustry.net;
|
|
|
|
import arc.struct.*;
|
|
import arc.struct.Seq.*;
|
|
import mindustry.gen.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
/** Handles player state for sending to every connected player*/
|
|
public class WorldReloader{
|
|
Seq<Player> players = new Seq<>();
|
|
boolean wasServer = false;
|
|
boolean began = false;
|
|
|
|
/** Begins reloading the world. Sends world begin packets to each user and stores player state.
|
|
* If the current client is not a server, this resets state and disconnects. */
|
|
public void begin(){
|
|
//don't begin twice
|
|
if(began) return;
|
|
|
|
if(wasServer = net.server()){
|
|
players.clear();
|
|
|
|
for(Player p : Groups.player){
|
|
if(p.isLocal()) continue;
|
|
|
|
players.add(p);
|
|
p.clearUnit();
|
|
}
|
|
|
|
logic.reset();
|
|
|
|
Call.worldDataBegin();
|
|
}else{
|
|
if(net.client()){
|
|
net.reset();
|
|
}
|
|
logic.reset();
|
|
}
|
|
|
|
began = true;
|
|
}
|
|
|
|
/** Ends reloading the world. Sends world data to each player.
|
|
* If the current client was not a server, does nothing.*/
|
|
public void end(){
|
|
if(wasServer){
|
|
for(Player p : players){
|
|
if(p.con == null) continue;
|
|
|
|
boolean wasAdmin = p.admin;
|
|
p.reset();
|
|
p.admin = wasAdmin;
|
|
if(state.rules.pvp){
|
|
p.team(netServer.assignTeam(p, new SeqIterable<>(players)));
|
|
}
|
|
netServer.sendWorldData(p);
|
|
}
|
|
}
|
|
}
|
|
}
|