From b322b1165f47251628f5d64ae338d409ab40d0eb Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Sun, 2 Apr 2023 16:53:19 -0700 Subject: [PATCH] Parse singular consumes (#8466) * Parse singular `Consume`s * Proper coolant parsing * Temporary manual update of ClassMap Does not include all consume types. I don't know what gradle command to run to update `ClassMap`. I've tried `tools:updateScripts` but that just cleared everything. --- core/src/mindustry/mod/ClassMap.java | 2 ++ core/src/mindustry/mod/ContentParser.java | 14 ++++++++++++++ core/src/mindustry/world/Block.java | 4 ++++ .../world/blocks/defense/turrets/BaseTurret.java | 3 +++ 4 files changed, 23 insertions(+) diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 078f3c8f48..934b72a019 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -459,6 +459,8 @@ public class ClassMap{ classes.put("DrawTurret", mindustry.world.draw.DrawTurret.class); classes.put("DrawWarmupRegion", mindustry.world.draw.DrawWarmupRegion.class); classes.put("DrawWeave", mindustry.world.draw.DrawWeave.class); + classes.put("ConsumeCoolant", mindustry.world.consumers.ConsumeCoolant.class); + classes.put("ConsumeLiquidFlammable", mindustry.world.consumers.ConsumeLiquidFlammable.class); classes.put("Block", mindustry.world.Block.class); } } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 69e250e5b6..60a1c1c8f5 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -296,6 +296,20 @@ public class ContentParser{ weapon.name = currentMod.name + "-" + weapon.name; return weapon; }); + put(Consume.class, (type, data) -> { + var oc = resolve(data.getString("type", ""), Consume.class); + data.remove("type"); + var consume = make(oc); + readFields(consume, data); + return consume; + }); + put(ConsumeLiquidBase.class, (type, data) -> { + var oc = resolve(data.getString("type", ""), ConsumeLiquidBase.class); + data.remove("type"); + var consume = make(oc); + readFields(consume, data); + return consume; + }); }}; /** Stores things that need to be parsed fully, e.g. reading fields of content. * This is done to accommodate binding of content names first.*/ diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 5c09601aa1..27fa9d2321 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -925,6 +925,10 @@ public class Block extends UnlockableContent implements Senseable{ return consumers.length == 0 ? (T)consumeBuilder.find(filter) : (T)Structs.find(consumers, filter); } + public boolean hasConsumer(Consume cons){ + return consumeBuilder.contains(cons); + } + public void removeConsumer(Consume cons){ if(consumers.length > 0){ throw new IllegalStateException("You can only remove consumers before init(). After init(), all consumers have already been initialized."); diff --git a/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java index a7e69007e4..916be9f4dc 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java @@ -51,6 +51,9 @@ public class BaseTurret extends Block{ coolant.update = false; coolant.booster = true; coolant.optional = true; + + //json parsing does not add to consumes + if(!hasConsumer(coolant)) consume(coolant); } placeOverlapRange = Math.max(placeOverlapRange, range + placeOverlapMargin);