From 939506ffae7de54be45b4f7f5b6d354a1756aeac Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Tue, 4 Feb 2025 11:38:01 -0800 Subject: [PATCH] Fix multi-item boosters displaying multiple times (#10297) --- .../world/blocks/defense/ForceProjector.java | 2 +- .../world/blocks/defense/MendProjector.java | 2 +- .../blocks/defense/OverdriveProjector.java | 2 +- .../world/blocks/defense/RegenProjector.java | 2 +- core/src/mindustry/world/meta/StatValues.java | 33 ++++++++++--------- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 0013d4c2ff..9611bf2e2b 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -105,7 +105,7 @@ public class ForceProjector extends Block{ if(consItems && itemConsumer instanceof ConsumeItems coni){ stats.remove(Stat.booster); - stats.add(Stat.booster, StatValues.itemBoosters("+{0} " + StatUnit.shieldHealth.localized(), stats.timePeriod, phaseShieldBoost, phaseRadiusBoost, coni.items, this::consumesItem)); + stats.add(Stat.booster, StatValues.itemBoosters("+{0} " + StatUnit.shieldHealth.localized(), stats.timePeriod, phaseShieldBoost, phaseRadiusBoost, coni.items)); stats.add(Stat.booster, StatValues.speedBoosters("", coolantConsumption, Float.MAX_VALUE, true, this::consumesLiquid)); } } diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index 369d0eecea..ff4696bbf4 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -59,7 +59,7 @@ public class MendProjector extends Block{ stats.add(Stat.booster, StatValues.itemBoosters( "{0}" + StatUnit.timesSpeed.localized(), stats.timePeriod, (phaseBoost + healPercent) / healPercent, phaseRangeBoost, - cons.items, this::consumesItem) + cons.items) ); } } diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index 423462318a..d5261b0604 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -71,7 +71,7 @@ public class OverdriveProjector extends Block{ if(hasBoost && findConsumer(f -> f instanceof ConsumeItems) instanceof ConsumeItems items){ stats.remove(Stat.booster); - stats.add(Stat.booster, StatValues.itemBoosters("+{0}%", stats.timePeriod, speedBoostPhase * 100f, phaseRangeBoost, items.items, this::consumesItem)); + stats.add(Stat.booster, StatValues.itemBoosters("+{0}%", stats.timePeriod, speedBoostPhase * 100f, phaseRangeBoost, items.items)); } } diff --git a/core/src/mindustry/world/blocks/defense/RegenProjector.java b/core/src/mindustry/world/blocks/defense/RegenProjector.java index 69bbb61116..5d05295de8 100644 --- a/core/src/mindustry/world/blocks/defense/RegenProjector.java +++ b/core/src/mindustry/world/blocks/defense/RegenProjector.java @@ -97,7 +97,7 @@ public class RegenProjector extends Block{ stats.add(Stat.booster, StatValues.itemBoosters( "{0}" + StatUnit.timesSpeed.localized(), stats.timePeriod, optionalMultiplier, 0f, - cons.items, this::consumesItem) + cons.items) ); } } diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index e896dd5966..8bf34567a2 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -484,35 +484,38 @@ public class StatValues{ }; } - public static StatValue itemBoosters(String unit, float timePeriod, float speedBoost, float rangeBoost, ItemStack[] items, Boolf filter){ + public static StatValue itemBoosters(String unit, float timePeriod, float speedBoost, float rangeBoost, ItemStack[] items){ return table -> { table.row(); table.table(c -> { - for(Item item : content.items()){ - if(!filter.get(item)) continue; - - c.table(Styles.grayPanel, b -> { + c.table(Styles.grayPanel, b -> { + b.table(it -> { for(ItemStack stack : items){ if(timePeriod < 0){ - b.add(displayItem(stack.item, stack.amount, true)).pad(20f).left(); + it.add(displayItem(stack.item, stack.amount, true)).pad(10f).padLeft(15f).left(); }else{ - b.add(displayItem(stack.item, stack.amount, timePeriod, true)).pad(20f).left(); + it.add(displayItem(stack.item, stack.amount, timePeriod, true)).pad(10f).padLeft(15f).left(); } - if(items.length > 1) b.row(); + it.row(); } + }).left(); - b.table(bt -> { - bt.right().defaults().padRight(3).left(); - if(rangeBoost != 0) bt.add("[lightgray]+[stat]" + Strings.autoFixed(rangeBoost / tilesize, 2) + "[lightgray] " + StatUnit.blocks.localized()).row(); - if(speedBoost != 0) bt.add("[lightgray]" + unit.replace("{0}", "[stat]" + Strings.autoFixed(speedBoost, 2) + "[lightgray]")); - }).right().grow().pad(10f).padRight(15f); - }).growX().pad(5).padBottom(-5).row(); - } + b.table(bt -> { + bt.right().defaults().padRight(3).left(); + if(rangeBoost != 0) bt.add("[lightgray]+[stat]" + Strings.autoFixed(rangeBoost / tilesize, 2) + "[lightgray] " + StatUnit.blocks.localized()).row(); + if(speedBoost != 0) bt.add("[lightgray]" + unit.replace("{0}", "[stat]" + Strings.autoFixed(speedBoost, 2) + "[lightgray]")); + }).right().top().grow().pad(10f).padRight(15f); + }).growX().pad(5).padBottom(-5).row(); }).growX().colspan(table.getColumns()); table.row(); }; } + /** @deprecated Filter is no longer used. */ + public static StatValue itemBoosters(String unit, float timePeriod, float speedBoost, float rangeBoost, ItemStack[] items, Boolf filter){ + return itemBoosters(unit, timePeriod, speedBoost, rangeBoost, items); + } + public static StatValue weapons(UnitType unit, Seq weapons){ return table -> { table.row();