diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java index c5a61810cb..5b33a9741e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java @@ -567,7 +567,7 @@ public void feature(Player player, LocalSession localSession, @Arg(desc = "The type of feature to use") ConfiguredFeatureType type) throws WorldEditException { setOperationBasedBrush(player, localSession, radius, - new Paint(new FeatureGeneratorFactory(type), density / 100), shape, "worldedit.brush.feature"); + new ApplyRegion(new FeatureGeneratorFactory(type, density / 100)), shape, "worldedit.brush.feature"); } @Command( @@ -650,6 +650,7 @@ public void biome(Player player, LocalSession localSession, setOperationBasedBrush(player, localSession, radius, new ApplyRegion(new BiomeFactory(biomeType)), shape, "worldedit.brush.biome"); player.printInfo(TranslatableComponent.of("worldedit.setbiome.warning")); + ToolCommands.sendUnbindInstruction(player, UNBIND_COMMAND_COMPONENT); } @Command( @@ -677,6 +678,7 @@ public void morph(Player player, LocalSession session, tool.setSize(brushSize); player.printInfo(TranslatableComponent.of("worldedit.brush.morph.equip", TextComponent.of((int) brushSize))); + ToolCommands.sendUnbindInstruction(player, UNBIND_COMMAND_COMPONENT); } @Command( @@ -696,6 +698,7 @@ public void erode(Player player, LocalSession session, tool.setSize(brushSize); player.printInfo(TranslatableComponent.of("worldedit.brush.morph.equip", TextComponent.of((int) brushSize))); + ToolCommands.sendUnbindInstruction(player, UNBIND_COMMAND_COMPONENT); } @Command( @@ -715,6 +718,7 @@ public void dilate(Player player, LocalSession session, tool.setSize(brushSize); player.printInfo(TranslatableComponent.of("worldedit.brush.morph.equip", TextComponent.of((int) brushSize))); + ToolCommands.sendUnbindInstruction(player, UNBIND_COMMAND_COMPONENT); } static void setOperationBasedBrush(Player player, LocalSession session, double radius, diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/factory/FeatureGeneratorFactory.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/factory/FeatureGeneratorFactory.java index 6434f016bb..78a0e2a6f1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/factory/FeatureGeneratorFactory.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/factory/FeatureGeneratorFactory.java @@ -22,19 +22,27 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.function.Contextual; import com.sk89q.worldedit.function.EditContext; +import com.sk89q.worldedit.function.RegionMaskingFilter; import com.sk89q.worldedit.function.generator.FeatureGenerator; +import com.sk89q.worldedit.function.mask.NoiseFilter; +import com.sk89q.worldedit.math.noise.RandomNoise; import com.sk89q.worldedit.world.generation.ConfiguredFeatureType; -public final class FeatureGeneratorFactory implements Contextual { +public final class FeatureGeneratorFactory implements Contextual { private final ConfiguredFeatureType type; + private final double density; - public FeatureGeneratorFactory(ConfiguredFeatureType type) { + public FeatureGeneratorFactory(ConfiguredFeatureType type, double density) { this.type = type; + this.density = density; } @Override - public FeatureGenerator createFromContext(EditContext input) { - return new FeatureGenerator((EditSession) input.getDestination(), type); + public RegionMaskingFilter createFromContext(EditContext input) { + return new RegionMaskingFilter( + new NoiseFilter(new RandomNoise(), this.density), + new FeatureGenerator((EditSession) input.getDestination(), this.type) + ); } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FeatureGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FeatureGenerator.java index 6c49138db9..7ccc5d2e64 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FeatureGenerator.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FeatureGenerator.java @@ -26,8 +26,7 @@ import com.sk89q.worldedit.world.generation.ConfiguredFeatureType; /** - * Generates forests by searching for the ground starting from the given upper Y - * coordinate for every column given. + * Attempt to generate features for every location in the given region. */ public class FeatureGenerator implements RegionFunction {