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;