package tc.oc.pgm.filters.matcher.block; import tc.oc.pgm.fallingblocks.FallingBlocksMatchModule; import tc.oc.pgm.filters.matcher.TypedFilter; import tc.oc.pgm.filters.query.IBlockQuery; /** * NOTE: this is potentially a very EXPENSIVE filter to apply, so XML authors should take * care to avoid evaluating it whenever possible, by placing other filters above it. They * should be particularly careful not to apply it to any events that modify large amounts * of blocks all at once, such as explosions. * * The XML documentation should note all of this. */ public class StructuralLoadFilter extends TypedFilter.Impl<IBlockQuery> { private final @Inspect int threshold; public StructuralLoadFilter(int threshold) { this.threshold = threshold; } @Override public boolean matches(IBlockQuery query) { return query.module(FallingBlocksMatchModule.class) .map(fbmm -> fbmm.countUnsupportedNeighbors(query.getBlock().getBlock(), threshold) >= threshold) .orElseGet(() -> 0 >= threshold); } }