From a0d6ada6c0c9f362e3b5b7f69fa6ed660a8698c9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 2 Feb 2018 10:21:37 -0500 Subject: [PATCH] Made client queue packets while loading, changed reactor explode code --- core/src/io/anuke/mindustry/core/NetClient.java | 7 ++++++- core/src/io/anuke/mindustry/net/Net.java | 12 ++++++++++++ .../blocks/types/production/NuclearReactor.java | 4 +--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index ebc092b18e..db43e15a7d 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -17,6 +17,7 @@ import io.anuke.mindustry.net.NetworkIO; import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.world.Map; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.BaseBulletType; import io.anuke.ucore.entities.Entities; @@ -252,6 +253,10 @@ public class NetClient extends Module { }); Net.handleClient(GameOverPacket.class, packet -> { + if(world.getCore().block() != ProductionBlocks.core && + world.getCore().entity != null){ + world.getCore().entity.onDeath(true); + } kicked = true; ui.restart.show(); }); @@ -287,10 +292,10 @@ public class NetClient extends Module { private void finishConnecting(){ Net.send(new ConnectConfirmPacket(), SendMode.tcp); state.set(State.playing); - Net.setClientLoaded(true); connecting = false; ui.loadfrag.hide(); ui.join.hide(); + Net.setClientLoaded(true); } public void beginConnecting(){ diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 8b6538a824..4927a7a2c0 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -26,6 +26,7 @@ public class Net{ private static boolean server; private static boolean active; private static boolean clientLoaded; + private static Array packetQueue = new Array<>(); private static ObjectMap, Consumer> listeners = new ObjectMap<>(); private static ObjectMap, Consumer> clientListeners = new ObjectMap<>(); private static ObjectMap, BiConsumer> serverListeners = new ObjectMap<>(); @@ -46,6 +47,16 @@ public class Net{ /**Sets the client loaded status, or whether it will recieve normal packets from the server.*/ public static void setClientLoaded(boolean loaded){ clientLoaded = loaded; + + if(loaded){ + //handle all packets that were skipped while loading + for(int i = 0; i < packetQueue.size; i ++){ + Log.info("Processing {0} packet post-load.", ClassReflection.getSimpleName(packetQueue.get(i).getClass())); + handleClientReceived(packetQueue.get(i)); + } + } + //clear inbound packet queue + packetQueue.clear(); } /**Connect to an address.*/ @@ -173,6 +184,7 @@ public class Net{ if(clientListeners.get(object.getClass()) != null) clientListeners.get(object.getClass()).accept(object); if(listeners.get(object.getClass()) != null) listeners.get(object.getClass()).accept(object); }else{ + packetQueue.add(object); Log.info("Recieved {0}, but ignoring data, as client is not loaded.", ClassReflection.getSimpleName(object.getClass())); } }else{ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java index ff002ee84f..e9d549f2ef 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/NuclearReactor.java @@ -89,9 +89,7 @@ public class NuclearReactor extends LiquidPowerGenerator{ } if(entity.heat >= 1f){ - onDestroyed(tile); - world.removeBlock(tile); - + entity.damage((int)entity.health); }else{ distributeLaserPower(tile); }