From 2a8b8d040b9daeceaf9fecfe92c6aa1debb373e4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 13 Jun 2019 20:17:48 -0400 Subject: [PATCH] Fixed deconstruction exploit --- core/src/io/anuke/mindustry/world/blocks/BuildBlock.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index e1205b465e..f1fb275894 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -220,14 +220,17 @@ public class BuildBlock extends Block{ setDeconstruct(previous); } + //make sure you take into account that you can't deconstruct more than there is deconstructed + float clampedAmount = Math.min(amount, progress); + for(int i = 0; i < requirements.length; i++){ int reqamount = Math.round(state.rules.buildCostMultiplier * requirements[i].amount); - accumulator[i] += Math.min(amount * deconstructMultiplier * reqamount, deconstructMultiplier * reqamount - totalAccumulator[i]); //add scaled amount progressed to the accumulator - totalAccumulator[i] = Math.min(totalAccumulator[i] + reqamount * amount * deconstructMultiplier, reqamount); + accumulator[i] += Math.min(clampedAmount * deconstructMultiplier * reqamount, deconstructMultiplier * reqamount - totalAccumulator[i]); //add scaled amount progressed to the accumulator + totalAccumulator[i] = Math.min(totalAccumulator[i] + reqamount * clampedAmount * deconstructMultiplier, reqamount); int accumulated = (int)(accumulator[i]); //get amount - if(amount > 0 && accumulated > 0){ //if it's positive, add it to the core + if(clampedAmount > 0 && accumulated > 0){ //if it's positive, add it to the core if(core != null){ int accepting = core.tile.block().acceptStack(requirements[i].item, accumulated, core.tile, builder); core.tile.block().handleStack(requirements[i].item, accepting, core.tile, builder);