diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java index c21371e6e..62abf2d76 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java @@ -47,7 +47,7 @@ public class PatternCommands extends MethodCommands { public PatternCommands(WorldEdit worldEdit) { super(worldEdit); } - + @Command( aliases = {"#existing", "#*", "*", ".*"}, desc = "Use the block that is already there", @@ -268,7 +268,7 @@ public class PatternCommands extends MethodCommands { min = 1, max = 1 ) - public Pattern data(Actor actor, LocalSession session, Extent extent, BaseBiome biome) { + public Pattern biome(Actor actor, LocalSession session, Extent extent, BaseBiome biome) { return new BiomePattern(extent, biome); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/PatternFactory.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/PatternFactory.java index 5a24e5f79..7b93c0d61 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/PatternFactory.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/PatternFactory.java @@ -20,6 +20,7 @@ package com.sk89q.worldedit.extension.factory; import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.extension.factory.parser.pattern.BlockCategoryPatternParser; import com.sk89q.worldedit.extension.factory.parser.pattern.ClipboardPatternParser; import com.sk89q.worldedit.extension.factory.parser.pattern.DefaultPatternParser; import com.sk89q.worldedit.extension.factory.parser.pattern.RandomPatternParser; @@ -47,6 +48,7 @@ public final class PatternFactory extends AbstractFactory { // register(new ClipboardPatternParser(worldEdit)); // register(new SingleBlockPatternParser(worldEdit)); // register(new RandomPatternParser(worldEdit)); + register(new BlockCategoryPatternParser(worldEdit)); register(new DefaultPatternParser(worldEdit)); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/pattern/BlockCategoryPatternParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/pattern/BlockCategoryPatternParser.java new file mode 100644 index 000000000..40b715ffc --- /dev/null +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/pattern/BlockCategoryPatternParser.java @@ -0,0 +1,63 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.extension.factory.parser.pattern; + +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.extension.input.InputParseException; +import com.sk89q.worldedit.extension.input.ParserContext; +import com.sk89q.worldedit.function.pattern.BlockPattern; +import com.sk89q.worldedit.function.pattern.Pattern; +import com.sk89q.worldedit.function.pattern.RandomPattern; +import com.sk89q.worldedit.internal.registry.InputParser; +import com.sk89q.worldedit.world.block.BlockCategory; +import com.sk89q.worldedit.world.block.BlockType; + +import java.util.List; +import java.util.stream.Collectors; + +public class BlockCategoryPatternParser extends InputParser { + + public BlockCategoryPatternParser(WorldEdit worldEdit) { + super(worldEdit); + } + + @Override + public List getSuggestions() { + return BlockCategory.REGISTRY.keySet().stream().map(str -> "##" + str).collect(Collectors.toList()); + } + + @Override + public Pattern parseFromInput(String input, ParserContext context) throws InputParseException { + if(!input.startsWith("##")) { + return null; + } + BlockCategory category = BlockCategory.REGISTRY.get(input.substring(2).toLowerCase()); + if (category == null) { + throw new InputParseException("Unknown block tag: " + input.substring(2)); + } + RandomPattern randomPattern = new RandomPattern(); + + for (BlockType blockType : category.getAll()) { + randomPattern.add(new BlockPattern(blockType.getDefaultState()), 1.0 / category.getAll().size()); + } + + return randomPattern; + } +} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/ChunkLoadingExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/ChunkLoadingExtent.java index f7be704e2..31ff6f840 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/ChunkLoadingExtent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/ChunkLoadingExtent.java @@ -63,6 +63,9 @@ public class ChunkLoadingExtent extends AbstractDelegateExtent { @Override public > boolean setBlock(BlockVector3 location, B block) throws WorldEditException { world.checkLoadedChunk(location); + if (enabled) { + world.checkLoadedChunk(location); + } return super.setBlock(location, block); } }