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
This commit is contained in:
(G_H)
2019-09-27 07:07:31 +08:00
committed by Anuken
parent ecff04424d
commit 276b79a748
13 changed files with 16 additions and 1 deletions

View File

@@ -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, () -> {
}));

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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){

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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.");
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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)){

View File

@@ -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;
}