Search in sources :

Example 16 with BlockType

use of com.sk89q.worldedit.world.block.BlockType in project FastAsyncWorldEdit by IntellectualSites.

the class BlockCategoryPatternParser method parseFromInput.

@Override
public Pattern parseFromInput(String input, ParserContext context) throws InputParseException {
    if (!input.startsWith("##")) {
        return null;
    }
    String tag = input.substring(2).toLowerCase(Locale.ROOT);
    boolean anyState = false;
    if (tag.startsWith("*")) {
        tag = tag.substring(1);
        anyState = true;
    }
    BlockCategory category = BlockCategory.REGISTRY.get(tag);
    if (category == null) {
        throw new InputParseException(Caption.of("worldedit.error.unknown-tag", TextComponent.of(tag)));
    }
    RandomPattern randomPattern = new RandomPattern();
    Set<BlockType> blocks = category.getAll();
    if (blocks.isEmpty()) {
        throw new InputParseException(Caption.of("worldedit.error.empty-tag", TextComponent.of(category.getId())));
    }
    if (anyState) {
        blocks.stream().flatMap(blockType -> blockType.getAllStates().stream()).forEach(state -> randomPattern.add(state, 1.0));
    } else {
        for (BlockType blockType : blocks) {
            randomPattern.add(blockType.getDefaultState(), 1.0);
        }
    }
    return randomPattern;
}
Also used : BlockType(com.sk89q.worldedit.world.block.BlockType) TextComponent(com.sk89q.worldedit.util.formatting.text.TextComponent) Set(java.util.Set) RandomPattern(com.sk89q.worldedit.function.pattern.RandomPattern) Caption(com.fastasyncworldedit.core.configuration.Caption) BlockCategory(com.sk89q.worldedit.world.block.BlockCategory) ParserContext(com.sk89q.worldedit.extension.input.ParserContext) AliasedParser(com.fastasyncworldedit.core.extension.factory.parser.AliasedParser) List(java.util.List) Stream(java.util.stream.Stream) InputParser(com.sk89q.worldedit.internal.registry.InputParser) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) Locale(java.util.Locale) WorldEdit(com.sk89q.worldedit.WorldEdit) SuggestionHelper(com.sk89q.worldedit.command.util.SuggestionHelper) Pattern(com.sk89q.worldedit.function.pattern.Pattern) Collections(java.util.Collections) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) BlockType(com.sk89q.worldedit.world.block.BlockType) RandomPattern(com.sk89q.worldedit.function.pattern.RandomPattern) BlockCategory(com.sk89q.worldedit.world.block.BlockCategory)

Example 17 with BlockType

use of com.sk89q.worldedit.world.block.BlockType in project FastAsyncWorldEdit by IntellectualSites.

the class DefaultBlockParser method parseProperties.

// FAWE start - make public
public static Map<Property<?>, Object> parseProperties(// FAWE end
BlockType type, String[] stateProperties, ParserContext context, // FAWE start - if null should be returned instead of throwing an error
boolean nullNotError) throws // FAWE end
NoMatchException {
    Map<Property<?>, Object> blockStates = new HashMap<>();
    // FAWE start - disallowed states
    if (context != null && context.getActor() != null && !context.getActor().getLimit().isUnlimited()) {
        for (String input : context.getActor().getLimit().DISALLOWED_BLOCKS) {
            if (input.indexOf('[') == -1 && input.indexOf(']') == -1) {
                continue;
            }
            if (!type.getId().equalsIgnoreCase(input.substring(0, input.indexOf('[')))) {
                continue;
            }
            String[] properties = input.substring(input.indexOf('[') + 1, input.indexOf(']')).split(",");
            Set<String> blocked = Arrays.stream(properties).filter(s -> {
                for (String in : stateProperties) {
                    if (in.equalsIgnoreCase(s)) {
                        return true;
                    }
                }
                return false;
            }).collect(Collectors.toSet());
            if (!blocked.isEmpty()) {
                throw new DisallowedUsageException(Caption.of("fawe.error.limit.disallowed-block", TextComponent.of(input)));
            }
        }
    }
    if (stateProperties.length > 0) {
        // Parse the block data (optional)
        for (String parseableData : stateProperties) {
            try {
                String[] parts = parseableData.split("=");
                if (parts.length != 2) {
                    // FAWE start - if null should be returned instead of throwing an error
                    if (nullNotError) {
                        return null;
                    }
                    // FAWE end
                    throw new InputParseException(Caption.of("worldedit.error.parser.bad-state-format", TextComponent.of(parseableData)));
                }
                @SuppressWarnings("unchecked") Property<Object> propertyKey = (Property<Object>) type.getPropertyMap().get(parts[0]);
                if (propertyKey == null) {
                    // FAWE start - nullable context
                    if (context != null && context.getActor() != null) {
                        // FAWE start - if null should be returned instead of throwing an error
                        if (nullNotError) {
                            return null;
                        }
                        // FAWE end
                        throw new NoMatchException(Caption.of("worldedit.error.parser.unknown-property", TextComponent.of(parts[0]), TextComponent.of(type.getId())));
                    } else {
                        WorldEdit.logger.debug("Unknown property " + parts[0] + " for block " + type.getId());
                    }
                    return Maps.newHashMap();
                }
                if (blockStates.containsKey(propertyKey)) {
                    // FAWE start - if null should be returned instead of throwing an error
                    if (nullNotError) {
                        return null;
                    }
                    // FAWE end
                    throw new InputParseException(Caption.of("worldedit.error.parser.duplicate-property", TextComponent.of(parts[0])));
                }
                Object value;
                try {
                    value = propertyKey.getValueFor(parts[1]);
                } catch (IllegalArgumentException e) {
                    // FAWE start - if null should be returned instead of throwing an error
                    if (nullNotError) {
                        return null;
                    }
                    // FAWE end
                    throw new NoMatchException(Caption.of("worldedit.error.parser.unknown-value", TextComponent.of(parts[1]), TextComponent.of(propertyKey.getName())));
                }
                // FAWE start - blocked states
                if (context != null && context.getActor() != null && !context.getActor().getLimit().isUnlimited()) {
                    if (context.getActor().getLimit().REMAP_PROPERTIES != null && !context.getActor().getLimit().REMAP_PROPERTIES.isEmpty()) {
                        for (PropertyRemap remap : context.getActor().getLimit().REMAP_PROPERTIES) {
                            Object newValue = remap.apply(type, value);
                            if (newValue != value) {
                                value = newValue;
                                break;
                            }
                        }
                    }
                }
                // FAWE end
                blockStates.put(propertyKey, value);
            } catch (NoMatchException | DisallowedUsageException e) {
                // Pass-through
                throw e;
            } catch (Exception e) {
                // FAWE start - if null should be returned instead of throwing an error
                if (nullNotError) {
                    return null;
                }
                // FAWE end
                throw new InputParseException(Caption.of("worldedit.error.parser.bad-state-format", TextComponent.of(parseableData)));
            }
        }
    }
    return blockStates;
}
Also used : Property(com.sk89q.worldedit.registry.state.Property) Arrays(java.util.Arrays) SignBlock(com.sk89q.worldedit.blocks.SignBlock) BlockTypes(com.sk89q.worldedit.world.block.BlockTypes) BlockVector3(com.sk89q.worldedit.math.BlockVector3) Player(com.sk89q.worldedit.entity.Player) World(com.sk89q.worldedit.world.World) Caption(com.fastasyncworldedit.core.configuration.Caption) SkullBlock(com.sk89q.worldedit.blocks.SkullBlock) EntityType(com.sk89q.worldedit.world.entity.EntityType) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) JSON2NBT(com.fastasyncworldedit.core.jnbt.JSON2NBT) Locale(java.util.Locale) DisallowedUsageException(com.sk89q.worldedit.extension.input.DisallowedUsageException) Map(java.util.Map) NoMatchException(com.sk89q.worldedit.extension.input.NoMatchException) BlockStateHolder(com.sk89q.worldedit.world.block.BlockStateHolder) BlockType(com.sk89q.worldedit.world.block.BlockType) BaseItem(com.sk89q.worldedit.blocks.BaseItem) Set(java.util.Set) Collectors(java.util.stream.Collectors) BlockBag(com.sk89q.worldedit.extent.inventory.BlockBag) MathMan(com.fastasyncworldedit.core.util.MathMan) NotABlockException(com.sk89q.worldedit.NotABlockException) Stream(java.util.stream.Stream) InputParser(com.sk89q.worldedit.internal.registry.InputParser) LegacyMapper(com.sk89q.worldedit.world.registry.LegacyMapper) CompoundTag(com.sk89q.jnbt.CompoundTag) BaseBlock(com.sk89q.worldedit.world.block.BaseBlock) SuggestionHelper(com.sk89q.worldedit.command.util.SuggestionHelper) BlockCategories(com.sk89q.worldedit.world.block.BlockCategories) HashMap(java.util.HashMap) BlanketBaseBlock(com.fastasyncworldedit.core.world.block.BlanketBaseBlock) PropertyRemap(com.fastasyncworldedit.core.limit.PropertyRemap) ParserContext(com.sk89q.worldedit.extension.input.ParserContext) StringMan(com.fastasyncworldedit.core.util.StringMan) FuzzyBlockState(com.sk89q.worldedit.world.block.FuzzyBlockState) WorldEditException(com.sk89q.worldedit.WorldEditException) MobSpawnerBlock(com.sk89q.worldedit.blocks.MobSpawnerBlock) WorldEdit(com.sk89q.worldedit.WorldEdit) HandSide(com.sk89q.worldedit.util.HandSide) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) TextComponent(com.sk89q.worldedit.util.formatting.text.TextComponent) NBTException(com.fastasyncworldedit.core.jnbt.NBTException) FaweLimit(com.fastasyncworldedit.core.limit.FaweLimit) Maps(com.google.common.collect.Maps) Actor(com.sk89q.worldedit.extension.platform.Actor) EntityTypes(com.sk89q.worldedit.world.entity.EntityTypes) SlottableBlockBag(com.fastasyncworldedit.core.extent.inventory.SlottableBlockBag) Capability(com.sk89q.worldedit.extension.platform.Capability) BlockState(com.sk89q.worldedit.world.block.BlockState) HashMap(java.util.HashMap) PropertyRemap(com.fastasyncworldedit.core.limit.PropertyRemap) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) DisallowedUsageException(com.sk89q.worldedit.extension.input.DisallowedUsageException) NoMatchException(com.sk89q.worldedit.extension.input.NoMatchException) NotABlockException(com.sk89q.worldedit.NotABlockException) WorldEditException(com.sk89q.worldedit.WorldEditException) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) NBTException(com.fastasyncworldedit.core.jnbt.NBTException) DisallowedUsageException(com.sk89q.worldedit.extension.input.DisallowedUsageException) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) NoMatchException(com.sk89q.worldedit.extension.input.NoMatchException) Property(com.sk89q.worldedit.registry.state.Property)

Example 18 with BlockType

use of com.sk89q.worldedit.world.block.BlockType in project FastAsyncWorldEdit by IntellectualSites.

the class DefaultBlockParser method parseLogic.

private BaseBlock parseLogic(String input, ParserContext context) throws InputParseException {
    // FAWE start
    String[] blockAndExtraData = input.trim().split("\\|", 2);
    blockAndExtraData[0] = woolMapper(blockAndExtraData[0]);
    Map<Property<?>, Object> blockStates = new HashMap<>();
    // FAWE end
    BlockState state = null;
    // Legacy matcher
    if (context.isTryingLegacy()) {
        try {
            String[] split = blockAndExtraData[0].split(":", 2);
            if (split.length == 0) {
                throw new InputParseException(Caption.of("worldedit.error.parser.invalid-colon"));
            } else if (split.length == 1) {
                state = LegacyMapper.getInstance().getBlockFromLegacy(Integer.parseInt(split[0]));
            } else if (MathMan.isInteger(split[0])) {
                int id = Integer.parseInt(split[0]);
                int data = Integer.parseInt(split[1]);
                // FAWE start
                if (data < 0 || data >= 16) {
                    throw new InputParseException(Caption.of("fawe.error.parser.invalid-data", TextComponent.of(data)));
                }
                state = LegacyMapper.getInstance().getBlockFromLegacy(id, data);
            } else {
                BlockType type = BlockTypes.get(split[0].toLowerCase(Locale.ROOT));
                if (type != null) {
                    int data = Integer.parseInt(split[1]);
                    if (data < 0 || data >= 16) {
                        throw new InputParseException(Caption.of("fawe.error.parser.invalid-data", TextComponent.of(data)));
                    }
                    state = LegacyMapper.getInstance().getBlockFromLegacy(type.getLegacyCombinedId() >> 4, data);
                }
            }
        } catch (NumberFormatException ignored) {
        }
    }
    CompoundTag nbt = null;
    // FAWE end
    if (state == null) {
        String typeString;
        String stateString = null;
        int stateStart = blockAndExtraData[0].indexOf('[');
        if (stateStart == -1) {
            typeString = blockAndExtraData[0];
        } else {
            typeString = blockAndExtraData[0].substring(0, stateStart);
            if (stateStart + 1 >= blockAndExtraData[0].length()) {
                throw new InputParseException(Caption.of("worldedit.error.parser.hanging-lbracket", TextComponent.of(stateStart)));
            }
            int stateEnd = blockAndExtraData[0].lastIndexOf(']');
            if (stateEnd < 0) {
                throw new InputParseException(Caption.of("worldedit.error.parser.missing-rbracket"));
            }
            stateString = blockAndExtraData[0].substring(stateStart + 1, blockAndExtraData[0].length() - 1);
        }
        String[] stateProperties = EMPTY_STRING_ARRAY;
        if (stateString != null) {
            stateProperties = stateString.split(",");
        }
        if (typeString.isEmpty()) {
            throw new InputParseException(Caption.of("worldedit.error.parser.bad-state-format", TextComponent.of(blockAndExtraData[0])));
        }
        if ("hand".equalsIgnoreCase(typeString)) {
            // Get the block type from the item in the user's hand.
            final BaseBlock blockInHand = getBlockInHand(context.requireActor(), HandSide.MAIN_HAND);
            // FAWE start
            state = blockInHand.toBlockState();
            nbt = blockInHand.getNbtData();
        // FAWE end
        } else if ("offhand".equalsIgnoreCase(typeString)) {
            // Get the block type from the item in the user's off hand.
            final BaseBlock blockInHand = getBlockInHand(context.requireActor(), HandSide.OFF_HAND);
            // FAWE start
            state = blockInHand.toBlockState();
            nbt = blockInHand.getNbtData();
        // FAWE end
        } else if (typeString.matches("pos[0-9]+")) {
            int index = Integer.parseInt(typeString.replaceAll("[a-z]+", ""));
            // Get the block type from the "primary position"
            final World world = context.requireWorld();
            final BlockVector3 primaryPosition;
            try {
                primaryPosition = context.requireSession().getRegionSelector(world).getVertices().get(index - 1);
            } catch (IncompleteRegionException e) {
                throw new InputParseException(Caption.of("worldedit.error.incomplete-region"));
            }
            state = world.getBlock(primaryPosition);
            nbt = state.getNbtData();
        // FAWE start
        } else if (typeString.matches("slot[0-9]+")) {
            int slot = Integer.parseInt(typeString.substring(4)) - 1;
            Actor actor = context.requireActor();
            if (!(actor instanceof Player)) {
                throw new InputParseException(Caption.of("worldedit.command.player-only"));
            }
            Player player = (Player) actor;
            BlockBag bag = player.getInventoryBlockBag();
            if (!(bag instanceof SlottableBlockBag)) {
                throw new InputParseException(Caption.of("fawe.error.unsupported"));
            }
            SlottableBlockBag slottable = (SlottableBlockBag) bag;
            BaseItem item = slottable.getItem(slot);
            if (!item.getType().hasBlockType()) {
                throw new InputParseException(Caption.of("worldedit.error.not-a-block"));
            }
            state = item.getType().getBlockType().getDefaultState();
            nbt = item.getNbtData();
        } else {
            BlockType type = BlockTypes.parse(typeString.toLowerCase(Locale.ROOT));
            if (type != null) {
                state = type.getDefaultState();
            }
            if (state == null) {
                throw new NoMatchException(Caption.of("fawe.error.invalid-block-type", TextComponent.of(input)));
            }
        }
        // FAWE end
        // FAWE start -  Not null if nullNotError false.
        blockStates.putAll(parseProperties(state.getBlockType(), stateProperties, context, false));
        // FAWE end
        if (context.isPreferringWildcard()) {
            if (stateString == null || stateString.isEmpty()) {
                state = new FuzzyBlockState(state);
            } else {
                FuzzyBlockState.Builder fuzzyBuilder = FuzzyBlockState.builder();
                fuzzyBuilder.type(state.getBlockType());
                for (Map.Entry<Property<?>, Object> blockState : blockStates.entrySet()) {
                    @SuppressWarnings("unchecked") Property<Object> objProp = (Property<Object>) blockState.getKey();
                    fuzzyBuilder.withProperty(objProp, blockState.getValue());
                }
                state = fuzzyBuilder.build();
            }
        } else {
            for (Map.Entry<Property<?>, Object> blockState : blockStates.entrySet()) {
                @SuppressWarnings("unchecked") Property<Object> objProp = (Property<Object>) blockState.getKey();
                state = state.with(objProp, blockState.getValue());
            }
        }
    }
    // this should be impossible but IntelliJ isn't that smart
    if (state == null) {
        throw new NoMatchException(Caption.of("worldedit.error.unknown-block", TextComponent.of(input)));
    }
    // FAWE start
    if (blockAndExtraData.length > 1 && blockAndExtraData[1].startsWith("{")) {
        String joined = StringMan.join(Arrays.copyOfRange(blockAndExtraData, 1, blockAndExtraData.length), "|");
        try {
            nbt = JSON2NBT.getTagFromJson(joined);
        } catch (NBTException e) {
            throw new NoMatchException(TextComponent.of(e.getMessage()));
        }
    }
    // FAWE end
    // Check if the item is allowed
    BlockType blockType = state.getBlockType();
    if (context.isRestricted()) {
        Actor actor = context.requireActor();
        // FAWE start - per-limit disallowed blocks
        if (actor != null) {
            if (!actor.hasPermission("worldedit.anyblock") && worldEdit.getConfiguration().disallowedBlocks.contains(blockType.getId().toLowerCase(Locale.ROOT))) {
                throw new DisallowedUsageException(Caption.of("worldedit.error.disallowed-block", TextComponent.of(blockType.getId())));
            }
            FaweLimit limit = actor.getLimit();
            if (!limit.isUnlimited()) {
                // during contains.
                if (limit.DISALLOWED_BLOCKS.contains(blockType.getId().toLowerCase(Locale.ROOT))) {
                    throw new DisallowedUsageException(Caption.of("fawe.error.limit.disallowed-block", TextComponent.of(blockType.getId())));
                }
            }
        }
    // FAWE end
    }
    if (nbt != null) {
        BaseBlock result = blockStates.size() > 0 ? state.toBaseBlock(nbt) : new BlanketBaseBlock(state, nbt);
        return validate(context, result);
    }
    if (blockType == BlockTypes.SIGN || blockType == BlockTypes.WALL_SIGN || BlockCategories.SIGNS.contains(blockType)) {
        // Allow special sign text syntax
        String[] text = new String[4];
        text[0] = blockAndExtraData.length > 1 ? blockAndExtraData[1] : "";
        text[1] = blockAndExtraData.length > 2 ? blockAndExtraData[2] : "";
        text[2] = blockAndExtraData.length > 3 ? blockAndExtraData[3] : "";
        text[3] = blockAndExtraData.length > 4 ? blockAndExtraData[4] : "";
        return validate(context, new SignBlock(state, text));
    } else if (blockType == BlockTypes.SPAWNER) {
        // Allow setting mob spawn type
        if (blockAndExtraData.length > 1) {
            String mobName = blockAndExtraData[1];
            EntityType ent = EntityTypes.get(mobName.toLowerCase(Locale.ROOT));
            if (ent == null) {
                throw new NoMatchException(Caption.of("worldedit.error.unknown-entity", TextComponent.of(mobName)));
            }
            mobName = ent.getId();
            if (!worldEdit.getPlatformManager().queryCapability(Capability.USER_COMMANDS).isValidMobType(mobName)) {
                throw new NoMatchException(Caption.of("worldedit.error.unknown-mob", TextComponent.of(mobName)));
            }
            return validate(context, new MobSpawnerBlock(state, mobName));
        } else {
            // noinspection ConstantConditions
            return validate(context, new MobSpawnerBlock(state, EntityTypes.PIG.getId()));
        }
    } else if (blockType == BlockTypes.PLAYER_HEAD || blockType == BlockTypes.PLAYER_WALL_HEAD) {
        // allow setting type/player/rotation
        if (blockAndExtraData.length <= 1) {
            return validate(context, new SkullBlock(state));
        }
        String type = blockAndExtraData[1];
        // valid MC usernames
        return validate(context, new SkullBlock(state, type.replace(" ", "_")));
    } else {
        // FAWE start
        nbt = state.getNbtData();
        BaseBlock result;
        if (nbt != null) {
            result = blockStates.size() > 0 ? state.toBaseBlock(nbt) : new BlanketBaseBlock(state, nbt);
        } else {
            result = blockStates.size() > 0 ? new BaseBlock(state) : state.toBaseBlock();
        }
        return validate(context, result);
    // FAWE end
    }
}
Also used : SkullBlock(com.sk89q.worldedit.blocks.SkullBlock) HashMap(java.util.HashMap) SignBlock(com.sk89q.worldedit.blocks.SignBlock) IncompleteRegionException(com.sk89q.worldedit.IncompleteRegionException) World(com.sk89q.worldedit.world.World) BlanketBaseBlock(com.fastasyncworldedit.core.world.block.BlanketBaseBlock) BaseBlock(com.sk89q.worldedit.world.block.BaseBlock) BlanketBaseBlock(com.fastasyncworldedit.core.world.block.BlanketBaseBlock) InputParseException(com.sk89q.worldedit.extension.input.InputParseException) FaweLimit(com.fastasyncworldedit.core.limit.FaweLimit) MobSpawnerBlock(com.sk89q.worldedit.blocks.MobSpawnerBlock) Actor(com.sk89q.worldedit.extension.platform.Actor) Property(com.sk89q.worldedit.registry.state.Property) BaseItem(com.sk89q.worldedit.blocks.BaseItem) CompoundTag(com.sk89q.jnbt.CompoundTag) Player(com.sk89q.worldedit.entity.Player) BlockBag(com.sk89q.worldedit.extent.inventory.BlockBag) SlottableBlockBag(com.fastasyncworldedit.core.extent.inventory.SlottableBlockBag) FuzzyBlockState(com.sk89q.worldedit.world.block.FuzzyBlockState) BlockVector3(com.sk89q.worldedit.math.BlockVector3) EntityType(com.sk89q.worldedit.world.entity.EntityType) DisallowedUsageException(com.sk89q.worldedit.extension.input.DisallowedUsageException) FuzzyBlockState(com.sk89q.worldedit.world.block.FuzzyBlockState) BlockState(com.sk89q.worldedit.world.block.BlockState) BlockType(com.sk89q.worldedit.world.block.BlockType) SlottableBlockBag(com.fastasyncworldedit.core.extent.inventory.SlottableBlockBag) NoMatchException(com.sk89q.worldedit.extension.input.NoMatchException) Map(java.util.Map) HashMap(java.util.HashMap) NBTException(com.fastasyncworldedit.core.jnbt.NBTException)

Example 19 with BlockType

use of com.sk89q.worldedit.world.block.BlockType in project FastAsyncWorldEdit by IntellectualSites.

the class PaperweightAdapter method getProperties.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public Map<String, ? extends Property<?>> getProperties(BlockType blockType) {
    Map<String, Property<?>> properties = Maps.newTreeMap(String::compareTo);
    Block block = getBlockFromType(blockType);
    StateDefinition<Block, net.minecraft.world.level.block.state.BlockState> blockStateList = block.getStateDefinition();
    for (net.minecraft.world.level.block.state.properties.Property state : blockStateList.getProperties()) {
        Property property;
        if (state instanceof net.minecraft.world.level.block.state.properties.BooleanProperty) {
            property = new BooleanProperty(state.getName(), ImmutableList.copyOf(state.getPossibleValues()));
        } else if (state instanceof DirectionProperty) {
            property = new DirectionalProperty(state.getName(), (List<Direction>) state.getPossibleValues().stream().map(e -> Direction.valueOf(((StringRepresentable) e).getSerializedName().toUpperCase(Locale.ROOT))).collect(Collectors.toList()));
        } else if (state instanceof net.minecraft.world.level.block.state.properties.EnumProperty) {
            property = new EnumProperty(state.getName(), (List<String>) state.getPossibleValues().stream().map(e -> ((StringRepresentable) e).getSerializedName()).collect(Collectors.toList()));
        } else if (state instanceof net.minecraft.world.level.block.state.properties.IntegerProperty) {
            property = new IntegerProperty(state.getName(), ImmutableList.copyOf(state.getPossibleValues()));
        } else {
            throw new IllegalArgumentException("FastAsyncWorldEdit needs an update to support " + state.getClass().getSimpleName());
        }
        properties.put(property.getName(), property);
    }
    return properties;
}
Also used : Property(com.sk89q.worldedit.registry.state.Property) LoadingCache(com.google.common.cache.LoadingCache) DirectionalProperty(com.sk89q.worldedit.registry.state.DirectionalProperty) StringRepresentable(net.minecraft.util.StringRepresentable) Item(net.minecraft.world.item.Item) CraftItemStack(org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack) BaseItemStack(com.sk89q.worldedit.blocks.BaseItemStack) BiomeTypes(com.sk89q.worldedit.world.biome.BiomeTypes) Constants(com.sk89q.worldedit.internal.Constants) Component(com.sk89q.worldedit.util.formatting.text.Component) MinecraftServer(net.minecraft.server.MinecraftServer) Location(org.bukkit.Location) SideEffect(com.sk89q.worldedit.util.SideEffect) LongArrayBinaryTag(com.sk89q.worldedit.util.nbt.LongArrayBinaryTag) Map(java.util.Map) Path(java.nio.file.Path) BlockStateHolder(com.sk89q.worldedit.world.block.BlockStateHolder) BlockStateIdAccess(com.sk89q.worldedit.internal.block.BlockStateIdAccess) BlockData(org.bukkit.block.data.BlockData) LongBinaryTag(com.sk89q.worldedit.util.nbt.LongBinaryTag) Set(java.util.Set) InteractionResult(net.minecraft.world.InteractionResult) BlockEntity(net.minecraft.world.level.block.entity.BlockEntity) InvocationTargetException(java.lang.reflect.InvocationTargetException) BinaryTag(com.sk89q.worldedit.util.nbt.BinaryTag) WorldEditPlugin(com.sk89q.worldedit.bukkit.WorldEditPlugin) CraftBlockData(org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData) StringBinaryTag(com.sk89q.worldedit.util.nbt.StringBinaryTag) BaseBlock(com.sk89q.worldedit.world.block.BaseBlock) ItemStack(net.minecraft.world.item.ItemStack) Extent(com.sk89q.worldedit.extent.Extent) BiomeType(com.sk89q.worldedit.world.biome.BiomeType) IntBinaryTag(com.sk89q.worldedit.util.nbt.IntBinaryTag) LevelChunk(net.minecraft.world.level.chunk.LevelChunk) ChunkHolder(net.minecraft.server.level.ChunkHolder) EntityType(net.minecraft.world.entity.EntityType) WorldGenSettings(net.minecraft.world.level.levelgen.WorldGenSettings) CraftServer(org.bukkit.craftbukkit.v1_18_R1.CraftServer) IntArrayBinaryTag(com.sk89q.worldedit.util.nbt.IntArrayBinaryTag) LazyReference(com.sk89q.worldedit.util.concurrency.LazyReference) SpigotConfig(org.spigotmc.SpigotConfig) Biome(net.minecraft.world.level.biome.Biome) TranslatableComponent(com.sk89q.worldedit.util.formatting.text.TranslatableComponent) ArrayList(java.util.ArrayList) OptionalLong(java.util.OptionalLong) WorldEditException(com.sk89q.worldedit.WorldEditException) CraftMagicNumbers(org.bukkit.craftbukkit.v1_18_R1.util.CraftMagicNumbers) RegenOptions(com.sk89q.worldedit.world.RegenOptions) ShortBinaryTag(com.sk89q.worldedit.util.nbt.ShortBinaryTag) UseOnContext(net.minecraft.world.item.context.UseOnContext) Nullable(javax.annotation.Nullable) WorldNativeAccess(com.sk89q.worldedit.internal.wna.WorldNativeAccess) DataFixer(com.sk89q.worldedit.world.DataFixer) Files(java.nio.file.Files) Lifecycle(com.mojang.serialization.Lifecycle) Field(java.lang.reflect.Field) ChunkPos(net.minecraft.world.level.ChunkPos) ExecutionException(java.util.concurrent.ExecutionException) Futures(com.google.common.util.concurrent.Futures) ForkJoinPool(java.util.concurrent.ForkJoinPool) ByteArrayBinaryTag(com.sk89q.worldedit.util.nbt.ByteArrayBinaryTag) LevelStem(net.minecraft.world.level.dimension.LevelStem) BlockState(com.sk89q.worldedit.world.block.BlockState) InteractionHand(net.minecraft.world.InteractionHand) ChunkStatus(net.minecraft.world.level.chunk.ChunkStatus) ListBinaryTag(com.sk89q.worldedit.util.nbt.ListBinaryTag) Watchdog(com.sk89q.worldedit.extension.platform.Watchdog) ResourceLocation(net.minecraft.resources.ResourceLocation) Either(com.mojang.datafixers.util.Either) BlockVector2(com.sk89q.worldedit.math.BlockVector2) BlockTypes(com.sk89q.worldedit.world.block.BlockTypes) BlockVector3(com.sk89q.worldedit.math.BlockVector3) ClientboundEntityEventPacket(net.minecraft.network.protocol.game.ClientboundEntityEventPacket) Player(org.bukkit.entity.Player) ChunkGenerator(org.bukkit.generator.ChunkGenerator) Registry(net.minecraft.core.Registry) CraftPlayer(org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer) BooleanProperty(com.sk89q.worldedit.registry.state.BooleanProperty) Locale(java.util.Locale) Refraction(com.sk89q.worldedit.bukkit.adapter.Refraction) DedicatedServer(net.minecraft.server.dedicated.DedicatedServer) CompoundBinaryTag(com.sk89q.worldedit.util.nbt.CompoundBinaryTag) Method(java.lang.reflect.Method) Bukkit(org.bukkit.Bukkit) StateDefinition(net.minecraft.world.level.block.state.StateDefinition) SafeFiles(com.sk89q.worldedit.util.io.file.SafeFiles) BlockType(com.sk89q.worldedit.world.block.BlockType) ChunkProgressListener(net.minecraft.server.level.progress.ChunkProgressListener) PrimaryLevelData(net.minecraft.world.level.storage.PrimaryLevelData) BaseItem(com.sk89q.worldedit.blocks.BaseItem) BlockHitResult(net.minecraft.world.phys.BlockHitResult) ClientboundBlockEntityDataPacket(net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket) BlockableEventLoop(net.minecraft.util.thread.BlockableEventLoop) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) BukkitImplAdapter(com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter) Blocks(net.minecraft.world.level.block.Blocks) ChunkAccess(net.minecraft.world.level.chunk.ChunkAccess) Preconditions.checkState(com.google.common.base.Preconditions.checkState) CacheLoader(com.google.common.cache.CacheLoader) Objects(java.util.Objects) Util(net.minecraft.Util) List(java.util.List) EnumProperty(com.sk89q.worldedit.registry.state.EnumProperty) BlockPos(net.minecraft.core.BlockPos) BukkitAdapter(com.sk89q.worldedit.bukkit.BukkitAdapter) CacheBuilder(com.google.common.cache.CacheBuilder) ServerChunkCache(net.minecraft.server.level.ServerChunkCache) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ServerLevel(net.minecraft.server.level.ServerLevel) OptionalInt(java.util.OptionalInt) Level(java.util.logging.Level) EndBinaryTag(com.sk89q.worldedit.util.nbt.EndBinaryTag) Environment(org.bukkit.World.Environment) ImmutableList(com.google.common.collect.ImmutableList) DoubleBinaryTag(com.sk89q.worldedit.util.nbt.DoubleBinaryTag) FloatBinaryTag(com.sk89q.worldedit.util.nbt.FloatBinaryTag) ByteBinaryTag(com.sk89q.worldedit.util.nbt.ByteBinaryTag) Direction(com.sk89q.worldedit.util.Direction) SpawnReason(org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason) WeakReference(java.lang.ref.WeakReference) BaseEntity(com.sk89q.worldedit.entity.BaseEntity) LevelStorageSource(net.minecraft.world.level.storage.LevelStorageSource) CraftWorld(org.bukkit.craftbukkit.v1_18_R1.CraftWorld) Region(com.sk89q.worldedit.regions.Region) PaperweightFaweAdapter(com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_18_R1.PaperweightFaweAdapter) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) Maps(com.google.common.collect.Maps) ResourceKey(net.minecraft.resources.ResourceKey) StructureBlockEntity(net.minecraft.world.level.block.entity.StructureBlockEntity) LevelSettings(net.minecraft.world.level.LevelSettings) Entity(net.minecraft.world.entity.Entity) CraftEntity(org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity) Vec3(net.minecraft.world.phys.Vec3) IntegerProperty(com.sk89q.worldedit.registry.state.IntegerProperty) DirectionProperty(net.minecraft.world.level.block.state.properties.DirectionProperty) WatchdogThread(org.spigotmc.WatchdogThread) Block(net.minecraft.world.level.block.Block) ItemType(com.sk89q.worldedit.world.item.ItemType) Clearable(net.minecraft.world.Clearable) Direction(com.sk89q.worldedit.util.Direction) EnumProperty(com.sk89q.worldedit.registry.state.EnumProperty) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) DirectionProperty(net.minecraft.world.level.block.state.properties.DirectionProperty) Property(com.sk89q.worldedit.registry.state.Property) DirectionalProperty(com.sk89q.worldedit.registry.state.DirectionalProperty) BooleanProperty(com.sk89q.worldedit.registry.state.BooleanProperty) EnumProperty(com.sk89q.worldedit.registry.state.EnumProperty) IntegerProperty(com.sk89q.worldedit.registry.state.IntegerProperty) DirectionProperty(net.minecraft.world.level.block.state.properties.DirectionProperty) IntegerProperty(com.sk89q.worldedit.registry.state.IntegerProperty) BooleanProperty(com.sk89q.worldedit.registry.state.BooleanProperty) BlockState(com.sk89q.worldedit.world.block.BlockState) StringRepresentable(net.minecraft.util.StringRepresentable) BaseBlock(com.sk89q.worldedit.world.block.BaseBlock) Block(net.minecraft.world.level.block.Block) DirectionalProperty(com.sk89q.worldedit.registry.state.DirectionalProperty)

Example 20 with BlockType

use of com.sk89q.worldedit.world.block.BlockType in project FastAsyncWorldEdit by IntellectualSites.

the class TextureUtil method fromMask.

public static TextureUtil fromMask(Mask mask) throws FileNotFoundException {
    HashSet<BlockType> blocks = new HashSet<>();
    SingleFilterBlock extent = new SingleFilterBlock();
    new MaskTraverser(mask).reset(extent);
    TextureUtil tu = Fawe.instance().getTextureUtil();
    for (int typeId : tu.getValidBlockIds()) {
        BlockType block = BlockTypes.get(typeId);
        extent.init(0, 0, 0, block.getDefaultState().toBaseBlock());
        if (mask.test(extent)) {
            blocks.add(block);
        }
    }
    return fromBlocks(blocks);
}
Also used : SingleFilterBlock(com.fastasyncworldedit.core.extent.filter.block.SingleFilterBlock) BlockType(com.sk89q.worldedit.world.block.BlockType) HashSet(java.util.HashSet)

Aggregations

BlockType (com.sk89q.worldedit.world.block.BlockType)63 BlockState (com.sk89q.worldedit.world.block.BlockState)20 BlockVector3 (com.sk89q.worldedit.math.BlockVector3)18 Map (java.util.Map)12 HashMap (java.util.HashMap)9 BaseBlock (com.sk89q.worldedit.world.block.BaseBlock)8 ArrayList (java.util.ArrayList)8 TextureUtil (com.fastasyncworldedit.core.util.TextureUtil)7 World (com.sk89q.worldedit.world.World)7 List (java.util.List)7 CompoundTag (com.sk89q.jnbt.CompoundTag)5 Tag (com.sk89q.jnbt.Tag)5 EditSession (com.sk89q.worldedit.EditSession)5 Property (com.sk89q.worldedit.registry.state.Property)5 Direction (com.sk89q.worldedit.util.Direction)5 IOException (java.io.IOException)5 Locale (java.util.Locale)5 Set (java.util.Set)5 MutableBlockVector3 (com.fastasyncworldedit.core.math.MutableBlockVector3)4 CuboidRegion (com.sk89q.worldedit.regions.CuboidRegion)4