From 01d875da0472e9f6b7f8aaccef05129ab492c795 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 1 Feb 2024 15:59:29 -0500 Subject: [PATCH] Added system for removing consumers in JSON --- core/src/mindustry/mod/ContentParser.java | 11 +++++++++++ core/src/mindustry/world/Block.java | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 0cf60c79e6..58c0c65089 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -445,6 +445,17 @@ public class ContentParser{ if(value.has("consumes") && value.get("consumes").isObject()){ for(JsonValue child : value.get("consumes")){ switch(child.name){ + case "remove" -> { + String[] values = child.isString() ? new String[]{child.asString()} : child.asStringArray(); + for(String type : values){ + Class consumeType = resolve("Consume" + Strings.capitalize(type), Consume.class); + if(consumeType != Consume.class){ + block.removeConsumers(b -> consumeType.isAssignableFrom(b.getClass())); + }else{ + Log.warn("Unknown consumer type '@' in consume: remove.", type); + } + } + } case "item" -> block.consumeItem(find(ContentType.item, child.asString())); case "itemCharged" -> block.consume((Consume)parser.readValue(ConsumeItemCharged.class, child)); case "itemFlammable" -> block.consume((Consume)parser.readValue(ConsumeItemFlammable.class, child)); diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 05f064cbaf..3f8a1fdc22 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -956,6 +956,14 @@ public class Block extends UnlockableContent implements Senseable{ consumeBuilder.remove(cons); } + public void removeConsumers(Boolf b){ + consumeBuilder.removeAll(b); + //the power was removed, unassign it + if(!consumeBuilder.contains(c -> c instanceof ConsumePower)){ + consPower = null; + } + } + public ConsumeLiquid consumeLiquid(Liquid liquid, float amount){ return consume(new ConsumeLiquid(liquid, amount)); }