Search in sources :

Example 1 with AdjacentAnyMask

use of com.fastasyncworldedit.core.function.mask.AdjacentAnyMask in project FastAsyncWorldEdit by IntellectualSites.

the class LayerBrush method build.

@Override
public void build(EditSession editSession, BlockVector3 position, Pattern ignore, double size) throws MaxChangedBlocksException {
    final AdjacentAnyMask adjacent = new AdjacentAnyMask(new BlockMask(editSession).add(BlockTypes.AIR, BlockTypes.CAVE_AIR, BlockTypes.VOID_AIR), editSession.getMinY(), editSession.getMaxY());
    final SolidBlockMask solid = new SolidBlockMask(editSession);
    final RadiusMask radius = new RadiusMask(0, (int) size);
    visitor = new RecursiveVisitor(new MaskIntersection(adjacent, solid, radius), funcion -> true, Integer.MAX_VALUE, editSession.getMinY(), editSession.getMaxY());
    visitor.visit(position);
    visitor.setDirections(Arrays.asList(BreadthFirstSearch.DIAGONAL_DIRECTIONS));
    Operations.completeBlindly(visitor);
    BlockVectorSet visited = visitor.getVisited();
    visitor = new RecursiveVisitor(new LayerBrushMask(editSession, visitor, layers, adjacent), pos -> {
        int depth = visitor.getDepth();
        Pattern currentPattern = layers[depth];
        return currentPattern.apply(editSession, pos, pos);
    }, layers.length - 1, editSession.getMinY(), editSession.getMaxY());
    for (BlockVector3 pos : visited) {
        visitor.visit(pos);
    }
    Operations.completeBlindly(visitor);
    visitor = null;
}
Also used : BlockVectorSet(com.fastasyncworldedit.core.math.BlockVectorSet) EditSession(com.sk89q.worldedit.EditSession) Arrays(java.util.Arrays) BlockTypes(com.sk89q.worldedit.world.block.BlockTypes) BlockVector3(com.sk89q.worldedit.math.BlockVector3) RecursiveVisitor(com.sk89q.worldedit.function.visitor.RecursiveVisitor) SolidBlockMask(com.sk89q.worldedit.function.mask.SolidBlockMask) MaxChangedBlocksException(com.sk89q.worldedit.MaxChangedBlocksException) AdjacentAnyMask(com.fastasyncworldedit.core.function.mask.AdjacentAnyMask) BlockMask(com.sk89q.worldedit.function.mask.BlockMask) RadiusMask(com.fastasyncworldedit.core.function.mask.RadiusMask) BreadthFirstSearch(com.sk89q.worldedit.function.visitor.BreadthFirstSearch) LayerBrushMask(com.fastasyncworldedit.core.function.mask.LayerBrushMask) MaskIntersection(com.sk89q.worldedit.function.mask.MaskIntersection) Brush(com.sk89q.worldedit.command.tool.brush.Brush) Operations(com.sk89q.worldedit.function.operation.Operations) BlockState(com.sk89q.worldedit.world.block.BlockState) Pattern(com.sk89q.worldedit.function.pattern.Pattern) Pattern(com.sk89q.worldedit.function.pattern.Pattern) MaskIntersection(com.sk89q.worldedit.function.mask.MaskIntersection) SolidBlockMask(com.sk89q.worldedit.function.mask.SolidBlockMask) BlockMask(com.sk89q.worldedit.function.mask.BlockMask) RadiusMask(com.fastasyncworldedit.core.function.mask.RadiusMask) LayerBrushMask(com.fastasyncworldedit.core.function.mask.LayerBrushMask) SolidBlockMask(com.sk89q.worldedit.function.mask.SolidBlockMask) RecursiveVisitor(com.sk89q.worldedit.function.visitor.RecursiveVisitor) BlockVector3(com.sk89q.worldedit.math.BlockVector3) AdjacentAnyMask(com.fastasyncworldedit.core.function.mask.AdjacentAnyMask) BlockVectorSet(com.fastasyncworldedit.core.math.BlockVectorSet)

Example 2 with AdjacentAnyMask

use of com.fastasyncworldedit.core.function.mask.AdjacentAnyMask in project FastAsyncWorldEdit by IntellectualSites.

the class AdjacentMaskParser method parseFromInput.

@Override
protected Mask parseFromInput(@Nonnull String[] arguments, ParserContext context) throws InputParseException {
    if (arguments.length == 0) {
        return null;
    }
    Mask subMask = worldEdit.getMaskFactory().parseFromInput(arguments[0], context);
    int min = arguments.length > 1 ? Integer.parseInt(arguments[1]) : -1;
    int max = arguments.length > 2 ? Integer.parseInt(arguments[2]) : -1;
    if (min == -1 && max == -1) {
        min = 1;
        max = 8;
    } else if (max == -1) {
        max = min;
    }
    if (max >= 8 && min == 1) {
        return new AdjacentAnyMask(subMask, context.getMinY(), context.getMaxY());
    }
    return new AdjacentMask(subMask, min, max);
}
Also used : AdjacentMask(com.fastasyncworldedit.core.function.mask.AdjacentMask) Mask(com.sk89q.worldedit.function.mask.Mask) AdjacentAnyMask(com.fastasyncworldedit.core.function.mask.AdjacentAnyMask) AdjacentMask(com.fastasyncworldedit.core.function.mask.AdjacentMask) AdjacentAnyMask(com.fastasyncworldedit.core.function.mask.AdjacentAnyMask)

Aggregations

AdjacentAnyMask (com.fastasyncworldedit.core.function.mask.AdjacentAnyMask)2 AdjacentMask (com.fastasyncworldedit.core.function.mask.AdjacentMask)1 LayerBrushMask (com.fastasyncworldedit.core.function.mask.LayerBrushMask)1 RadiusMask (com.fastasyncworldedit.core.function.mask.RadiusMask)1 BlockVectorSet (com.fastasyncworldedit.core.math.BlockVectorSet)1 EditSession (com.sk89q.worldedit.EditSession)1 MaxChangedBlocksException (com.sk89q.worldedit.MaxChangedBlocksException)1 Brush (com.sk89q.worldedit.command.tool.brush.Brush)1 BlockMask (com.sk89q.worldedit.function.mask.BlockMask)1 Mask (com.sk89q.worldedit.function.mask.Mask)1 MaskIntersection (com.sk89q.worldedit.function.mask.MaskIntersection)1 SolidBlockMask (com.sk89q.worldedit.function.mask.SolidBlockMask)1 Operations (com.sk89q.worldedit.function.operation.Operations)1 Pattern (com.sk89q.worldedit.function.pattern.Pattern)1 BreadthFirstSearch (com.sk89q.worldedit.function.visitor.BreadthFirstSearch)1 RecursiveVisitor (com.sk89q.worldedit.function.visitor.RecursiveVisitor)1 BlockVector3 (com.sk89q.worldedit.math.BlockVector3)1 BlockState (com.sk89q.worldedit.world.block.BlockState)1 BlockTypes (com.sk89q.worldedit.world.block.BlockTypes)1 Arrays (java.util.Arrays)1