001/* 002 * This file is part of Baritone. 003 * 004 * Baritone is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU Lesser General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * Baritone is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public License 015 * along with Baritone. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package baritone.api.schematic.mask; 019 020import baritone.api.schematic.mask.operator.BinaryOperatorMask; 021import baritone.api.schematic.mask.operator.NotMask; 022import baritone.api.utils.BooleanBinaryOperators; 023import net.minecraft.world.level.block.state.BlockState; 024 025/** 026 * @author Brady 027 */ 028public interface Mask { 029 030 /** 031 * @param x The relative x position of the block 032 * @param y The relative y position of the block 033 * @param z The relative z position of the block 034 * @param currentState The current state of that block in the world, may be {@code null} 035 * @return Whether the given position is included in this mask 036 */ 037 boolean partOfMask(int x, int y, int z, BlockState currentState); 038 039 int widthX(); 040 041 int heightY(); 042 043 int lengthZ(); 044 045 default Mask not() { 046 return new NotMask(this); 047 } 048 049 default Mask union(Mask other) { 050 return new BinaryOperatorMask(this, other, BooleanBinaryOperators.OR); 051 } 052 053 default Mask intersection(Mask other) { 054 return new BinaryOperatorMask(this, other, BooleanBinaryOperators.AND); 055 } 056 057 default Mask xor(Mask other) { 058 return new BinaryOperatorMask(this, other, BooleanBinaryOperators.XOR); 059 } 060}