From 276b79a7484e86630b806fa7ea191398ad2ce3a6 Mon Sep 17 00:00:00 2001 From: "(G_H)" <33775693+CKHammer@users.noreply.github.com> Date: Fri, 27 Sep 2019 07:07:31 +0800 Subject: [PATCH] Partial Cross Team Interaction Exploit Fix (#722) * Delete Mindustry-64.zip * Delete core\src\io\anuke\mindustry\ui\dialogs\SaveDialog.java * It seems like... Exploit Patch? * 2nd * idk man --- core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java | 1 + core/src/io/anuke/mindustry/input/InputHandler.java | 1 + .../io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java | 1 + .../anuke/mindustry/world/blocks/distribution/ItemBridge.java | 2 ++ .../anuke/mindustry/world/blocks/distribution/MassDriver.java | 1 + .../io/anuke/mindustry/world/blocks/distribution/Sorter.java | 1 + .../src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java | 1 + core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java | 2 ++ .../src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java | 1 + .../io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java | 1 + core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java | 1 + .../io/anuke/mindustry/world/blocks/units/CommandCenter.java | 2 ++ core/src/io/anuke/mindustry/world/blocks/units/MechPad.java | 2 +- 13 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java index 888f7e7f60..574f8e9712 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java +++ b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java @@ -47,6 +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; 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 c976eb7570..a49ab8366e 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -110,6 +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; 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 63c4828f7e..b8ad0379af 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -41,6 +41,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; 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 782d94fdda..4985bb249e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -44,6 +44,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; ItemBridgeEntity entity = tile.entity(); ItemBridgeEntity oe = other.entity(); entity.link = other.pos(); @@ -52,6 +53,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; 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 60822e9f08..93aab9ef87 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -47,6 +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; 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 0243f3e8ee..ef297ab663 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -41,6 +41,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; 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 40a97e5dda..08abe7b44c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java @@ -36,6 +36,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(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 00c8ecd276..4e07b2565b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -40,6 +40,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; TileEntity entity = tile.entity(); @@ -60,6 +61,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; 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 3a6cc3cabe..f9a4355b27 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java @@ -32,6 +32,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; 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 86cf6e483d..e54d6946ff 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java @@ -108,6 +108,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; 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 52cefd9a19..4e640f5a66 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -48,6 +48,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; 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 4e5757c859..a6da31e553 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java @@ -105,6 +105,8 @@ 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; + Effects.effect(((CommandCenter)tile.block()).effect, tile); for(Tile center : indexer.getAllied(tile.getTeam(), BlockFlag.comandCenter)){ diff --git a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java index 1a498de817..9dfee5e827 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java @@ -82,7 +82,7 @@ public class MechPad extends Block{ protected static boolean checkValidTap(Tile tile, Player player){ MechFactoryEntity entity = tile.entity(); - return !player.isDead() && Math.abs(player.x - tile.drawx()) <= tile.block().size * tilesize && + return !player.isDead() && tile.interactable(player.getTeam()) && Math.abs(player.x - tile.drawx()) <= tile.block().size * tilesize && Math.abs(player.y - tile.drawy()) <= tile.block().size * tilesize && entity.cons.valid() && entity.player == null; }