Search in sources :

Example 1 with BlockMask

use of com.sk89q.worldedit.function.mask.BlockMask in project FastAsyncWorldEdit by IntellectualSites.

the class BlocksMaskParser method parseFromInput.

@Override
public Mask parseFromInput(String component, ParserContext context) throws InputParseException {
    ParserContext tempContext = new ParserContext(context);
    tempContext.setRestricted(false);
    tempContext.setPreferringWildcard(true);
    try {
        Set<BaseBlock> holders = worldEdit.getBlockFactory().parseFromListInput(component, tempContext);
        if (holders.isEmpty()) {
            return null;
        }
        return new BlockMask(context.requireExtent(), holders);
    } catch (InputParseException e) {
        return null;
    }
}
Also used : InputParseException(com.sk89q.worldedit.extension.input.InputParseException) BlockMask(com.sk89q.worldedit.function.mask.BlockMask) ParserContext(com.sk89q.worldedit.extension.input.ParserContext) BaseBlock(com.sk89q.worldedit.world.block.BaseBlock)

Example 2 with BlockMask

use of com.sk89q.worldedit.function.mask.BlockMask 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)

Aggregations

BlockMask (com.sk89q.worldedit.function.mask.BlockMask)2 AdjacentAnyMask (com.fastasyncworldedit.core.function.mask.AdjacentAnyMask)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 InputParseException (com.sk89q.worldedit.extension.input.InputParseException)1 ParserContext (com.sk89q.worldedit.extension.input.ParserContext)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 BaseBlock (com.sk89q.worldedit.world.block.BaseBlock)1 BlockState (com.sk89q.worldedit.world.block.BlockState)1 BlockTypes (com.sk89q.worldedit.world.block.BlockTypes)1