From 53d4f4417872cb54ba62cdd66fd7b69ce277b7d3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 26 Sep 2019 19:51:41 -0400 Subject: [PATCH] Crash fixes --- core/src/io/anuke/mindustry/core/NetServer.java | 2 +- core/src/io/anuke/mindustry/entities/Units.java | 4 ++++ .../src/io/anuke/mindustry/entities/effect/ItemTransfer.java | 4 ++-- core/src/io/anuke/mindustry/input/InputHandler.java | 4 ++-- .../anuke/mindustry/ui/fragments/BlockInventoryFragment.java | 3 ++- .../mindustry/world/blocks/distribution/ItemBridge.java | 5 +++-- .../mindustry/world/blocks/distribution/MassDriver.java | 2 +- .../io/anuke/mindustry/world/blocks/distribution/Sorter.java | 3 ++- .../io/anuke/mindustry/world/blocks/logic/MessageBlock.java | 3 ++- .../src/io/anuke/mindustry/world/blocks/power/PowerNode.java | 5 +++-- .../io/anuke/mindustry/world/blocks/sandbox/ItemSource.java | 3 ++- .../anuke/mindustry/world/blocks/sandbox/LiquidSource.java | 3 ++- .../io/anuke/mindustry/world/blocks/storage/Unloader.java | 3 ++- .../io/anuke/mindustry/world/blocks/units/CommandCenter.java | 2 +- 14 files changed, 29 insertions(+), 17 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 96a8ebb12b..cc65655b88 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -447,7 +447,7 @@ public class NetServer implements ApplicationListener{ long elapsed = Time.timeSinceMillis(connection.lastRecievedClientTime); float maxSpeed = boosting && !player.mech.flying ? player.mech.compoundSpeedBoost : player.mech.compoundSpeed; - float maxMove = elapsed / 1000f * 60f * Math.min(maxSpeed, player.mech.maxSpeed) * 1.1f; + float maxMove = elapsed / 1000f * 60f * Math.min(maxSpeed, player.mech.maxSpeed) * 1.2f; player.pointerX = pointerX; player.pointerY = pointerY; diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 0b412a8c98..a624282042 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -20,6 +20,10 @@ public class Units{ private static float cdist; private static boolean boolResult; + public static boolean canInteract(Player player, Tile tile){ + return player == null || tile == null || tile.interactable(player.getTeam()); + } + /** * Validates a target. * @param target The target to validate diff --git a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java index 574f8e9712..69bf90833a 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java +++ b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java @@ -9,7 +9,7 @@ import io.anuke.arc.math.geom.Position; import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.util.Time; import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.entities.EntityGroup; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.TimedEntity; import io.anuke.mindustry.entities.traits.DrawTrait; import io.anuke.mindustry.entities.type.Unit; @@ -47,7 +47,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{ @Remote(called = Loc.server) public static void transferItemTo(Item item, int amount, float x, float y, Tile tile){ if(tile == null || tile.entity == null || tile.entity.items == null) return; - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){ Time.run(i * 3, () -> create(item, x, y, tile, () -> { })); diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index a49ab8366e..caa89ffc56 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -60,7 +60,7 @@ public abstract class InputHandler implements InputProcessor{ @Remote(targets = Loc.both, forward = true, called = Loc.server) public static void transferInventory(Player player, Tile tile){ if(player == null || player.timer == null || !player.timer.get(Player.timerTransfer, 40)) return; - if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !tile.interactable(player.getTeam()))){ + if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !Units.canInteract(player, tile))){ throw new ValidateException(player, "Player cannot transfer an item."); } @@ -110,7 +110,7 @@ public abstract class InputHandler implements InputProcessor{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void onTileTapped(Player player, Tile tile){ if(tile == null || player == null) return; - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; tile.block().tapped(tile, player); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index b8ad0379af..44f063b6e4 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -20,6 +20,7 @@ import io.anuke.arc.scene.ui.layout.Stack; import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; @@ -41,7 +42,7 @@ public class BlockInventoryFragment extends Fragment{ @Remote(called = Loc.server, targets = Loc.both, forward = true) public static void requestItem(Player player, Tile tile, Item item, int amount){ if(player == null || tile == null || !player.timer.get(Player.timerTransfer, 20) || !tile.interactable(player.getTeam())) return; - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; int removed = tile.block().removeStack(tile, item, amount); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java index 4985bb249e..417e067ecd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -9,6 +9,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; @@ -44,7 +45,7 @@ public class ItemBridge extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void linkItemBridge(Player player, Tile tile, Tile other){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; ItemBridgeEntity entity = tile.entity(); ItemBridgeEntity oe = other.entity(); entity.link = other.pos(); @@ -53,7 +54,7 @@ public class ItemBridge extends Block{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void unlinkItemBridge(Player player, Tile tile, Tile other){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; ItemBridgeEntity entity = tile.entity(); entity.link = -1; if(other != null){ diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java index 93aab9ef87..060f6562b8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -47,7 +47,7 @@ public class MassDriver extends Block{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void linkMassDriver(Player player, Tile tile, int position){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; MassDriverEntity entity = tile.entity(); entity.link = position; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java index ef297ab663..962ad03841 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -5,6 +5,7 @@ import io.anuke.arc.Core; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.Mathf; import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.type.Item; @@ -41,7 +42,7 @@ public class Sorter extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setSorterItem(Player player, Tile tile, Item item){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; SorterEntity entity = tile.entity(); if(entity != null){ entity.sortItem = item; diff --git a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java index 08abe7b44c..0c21c5db15 100644 --- a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java @@ -11,6 +11,7 @@ import io.anuke.arc.scene.ui.TextField.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.*; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.net.Net; @@ -36,7 +37,7 @@ public class MessageBlock extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setMessageBlockText(Player player, Tile tile, String text){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; if(net.server() && text.length() > maxTextLength){ throw new ValidateException(player, "Player has gone above text limit."); } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 4e07b2565b..6cf2d7a41e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -9,6 +9,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; @@ -40,7 +41,7 @@ public class PowerNode extends PowerBlock{ public static void linkPowerNodes(Player player, Tile tile, Tile other){ if(tile.entity == null || other == null || tile.entity.power == null || !((PowerNode)tile.block()).linkValid(tile, other) || tile.entity.power.links.size >= ((PowerNode)tile.block()).maxNodes) return; - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; TileEntity entity = tile.entity(); @@ -61,7 +62,7 @@ public class PowerNode extends PowerBlock{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void unlinkPowerNodes(Player player, Tile tile, Tile other){ if(tile.entity.power == null || other.entity == null || other.entity.power == null) return; - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; TileEntity entity = tile.entity(); diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java index f9a4355b27..793bfb8442 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java @@ -5,6 +5,7 @@ import io.anuke.annotations.Annotations.Remote; import io.anuke.arc.Core; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.gen.Call; @@ -32,7 +33,7 @@ public class ItemSource extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setItemSourceItem(Player player, Tile tile, Item item){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; ItemSourceEntity entity = tile.entity(); if(entity != null){ entity.outputItem = item; diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java index e54d6946ff..f9ea932a90 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java @@ -9,6 +9,7 @@ import io.anuke.arc.scene.style.TextureRegionDrawable; import io.anuke.arc.scene.ui.ButtonGroup; import io.anuke.arc.scene.ui.ImageButton; import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.gen.*; @@ -108,7 +109,7 @@ public class LiquidSource extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setLiquidSourceLiquid(Player player, Tile tile, Liquid liquid){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; LiquidSourceEntity entity = tile.entity(); if(entity != null) entity.source = liquid; } diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java index 4e640f5a66..0adf1fdc8f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -5,6 +5,7 @@ import io.anuke.arc.Core; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.type.Item; @@ -48,7 +49,7 @@ public class Unloader extends Block{ @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setSortedUnloaderItem(Player player, Tile tile, Item item){ - if(!tile.interactable(player.getTeam())) return; + if(!Units.canInteract(player, tile)) return; SortedUnloaderEntity entity = tile.entity(); entity.items.clear(); entity.sortItem = item; diff --git a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java index a6da31e553..a748a20a5e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java @@ -105,7 +105,7 @@ public class CommandCenter extends Block{ @Remote(called = Loc.server, forward = true, targets = Loc.both) public static void onCommandCenterSet(Player player, Tile tile, UnitCommand command){ - if(player == null || tile == null || !tile.interactable(player.getTeam())) return; + if(player == null || tile == null || !Units.canInteract(player, tile)) return; Effects.effect(((CommandCenter)tile.block()).effect, tile);