From 4a626bc920b93fcaaecddfd8c21cfa8bb3e9dfde Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 3 Jul 2018 13:13:02 -0400 Subject: [PATCH] Various net crashes fixed --- core/src/io/anuke/mindustry/core/NetServer.java | 2 +- core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java | 4 +++- core/src/io/anuke/mindustry/input/InputHandler.java | 4 +++- core/src/io/anuke/mindustry/type/Weapon.java | 2 ++ core/src/io/anuke/mindustry/world/blocks/BuildBlock.java | 4 +++- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index c15e2649e7..9c08b12020 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -169,7 +169,7 @@ public class NetServer extends Module{ NetConnection connection = Net.getConnection(id); if(player == null || connection == null || packet.snapid < connection.lastRecievedClientSnapshot) return; - boolean verifyPosition = !player.isDead() && !debug && headless && !player.isMobile; + boolean verifyPosition = !player.isDead() && !debug && headless && !player.mech.flying; if(connection.lastRecievedClientTime == 0) connection.lastRecievedClientTime = TimeUtils.millis() - 16; diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index 65d7cfcf52..8b8d2cd19b 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -99,7 +99,9 @@ public interface BuilderTrait { /**Return the build requests currently active, or the one at the top of the queue. * May return null.*/ default BuildRequest getCurrentRequest(){ - return getPlaceQueue().size == 0 ? null : getPlaceQueue().first(); + synchronized (getPlaceQueue()) { + return getPlaceQueue().size == 0 ? null : getPlaceQueue().first(); + } } /**Update building mechanism for this unit. diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 7180d94c61..c935930e22 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -279,10 +279,12 @@ public abstract class InputHandler extends InputAdapter{ @Remote(targets = Loc.both, forward = true, called = Loc.server, in = In.blocks) public static void transferInventory(Player player, Tile tile){ - if(Net.server() && (!player.inventory.hasItem() || player.isTransferring)){ + if(Net.server() && (!player.inventory.hasItem() || player.isTransferring)) { throw new ValidateException(player, "Player cannot transfer an item."); } + if(player == null) return; + player.isTransferring = true; ItemStack stack = player.inventory.getItem(); diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index 0830110f9e..cfb8f8eeb1 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -163,6 +163,8 @@ public class Weapon extends Upgrade { AmmoType type = shooter.getInventory().getAmmo(); + if(type == null) return; + weapon.tr.trns(rotation + 180f, type.recoil); shooter.getVelocity().add(weapon.tr); diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index f382115ac1..2465861d7b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -151,7 +151,7 @@ public class BuildBlock extends Block { @Remote(called = Loc.server, in = In.blocks) public static void onBuildFinish(Tile tile, Player lastBuilder){ - if(tile.entity == null) return; + if(tile.entity == null || !(tile.entity instanceof BuildEntity)) return; BuildEntity entity = tile.entity(); Team team = tile.getTeam(); @@ -179,6 +179,8 @@ public class BuildBlock extends Block { @Remote(called = Loc.server, targets = Loc.both, in = In.blocks, forward = true) public static void onBuildDeselect(Player player){ + if(player == null) return; + player.getPlaceQueue().clear(); }