Added system for removing consumers in JSON

This commit is contained in:
Anuken 2024-02-01 15:59:29 -05:00
parent 2ebe8c9f94
commit 01d875da04
2 changed files with 19 additions and 0 deletions

View File

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

View File

@ -956,6 +956,14 @@ public class Block extends UnlockableContent implements Senseable{
consumeBuilder.remove(cons);
}
public void removeConsumers(Boolf<Consume> 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));
}