From 0818f971fe565b46b9efe0ddadfbd38ae6b0b14f Mon Sep 17 00:00:00 2001 From: tanticle <113810920+Tanticle@users.noreply.github.com> Date: Wed, 28 Sep 2022 02:40:52 +0200 Subject: [PATCH] Added #816: Whitelist and blacklist for decorators. --- .../iris/engine/decorator/IrisSurfaceDecorator.java | 10 +++++++++- .../com/volmit/iris/engine/object/IrisDecorator.java | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/engine/decorator/IrisSurfaceDecorator.java b/src/main/java/com/volmit/iris/engine/decorator/IrisSurfaceDecorator.java index dcc102c94..a7b1143fa 100644 --- a/src/main/java/com/volmit/iris/engine/decorator/IrisSurfaceDecorator.java +++ b/src/main/java/com/volmit/iris/engine/decorator/IrisSurfaceDecorator.java @@ -62,8 +62,16 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator { } } - if(decorator.getForceBlock() != null) + if(decorator.getForceBlock() != null) { data.set(x, height, z, fixFaces(decorator.getForceBlock().getBlockData(getData()), x, height, z)); + } else if(!decorator.isForcePlace()) { + if(decorator.getWhitelist() != null && decorator.getWhitelist().stream().noneMatch(d -> d.getBlockData(getData()).equals(bdx))) { + return; + } + if(decorator.getBlacklist() != null && decorator.getWhitelist().stream().anyMatch(d -> d.getBlockData(getData()).equals(bdx))) { + return; + } + } if(bd instanceof Bisected) { bd = bd.clone(); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java b/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java index 07373dbdb..51b7c70dd 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisDecorator.java @@ -55,6 +55,12 @@ public class IrisDecorator { private boolean forcePlace = false; @Desc("Forced the surface block of this decorant to be the specified block. Assumes forcePlace.") private IrisBlockData forceBlock; + @ArrayType(min = 1, type = IrisBlockData.class) + @Desc("When set, the decorator can only place onto any of these blocks.") + private KList whitelist; + @ArrayType(min = 1, type = IrisBlockData.class) + @Desc("When set, the decorator will never place onto any of these blocks.") + private KList blacklist; @DependsOn({"scaleStack", "stackMin", "stackMax"}) @Desc("If stackMax is set to true, use this to limit its max height for large caverns") private int absoluteMaxStack = 30;