From 7198c03cd3cb19754871da1f656d32e6ccf2b194 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Mon, 13 Jul 2020 02:25:30 +0200 Subject: [PATCH] Reimplement angle mask parsing --- .../extension/factory/MaskFactory.java | 1 + .../factory/parser/mask/AngleMaskParser.java | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/AngleMaskParser.java diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/MaskFactory.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/MaskFactory.java index 21c495ad4..40a7c0a3b 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/MaskFactory.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/MaskFactory.java @@ -70,6 +70,7 @@ public final class MaskFactory extends AbstractFactory { register(new YAxisMaskParser(worldEdit)); register(new ZAxisMaskParser(worldEdit)); register(new SimplexMaskParser(worldEdit)); + register(new AngleMaskParser(worldEdit)); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/AngleMaskParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/AngleMaskParser.java new file mode 100644 index 000000000..e150d836a --- /dev/null +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/AngleMaskParser.java @@ -0,0 +1,46 @@ +package com.sk89q.worldedit.extension.factory.parser.mask; + +import com.boydti.fawe.object.mask.AngleMask; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.extension.factory.parser.RichParser; +import com.sk89q.worldedit.extension.input.InputParseException; +import com.sk89q.worldedit.extension.input.ParserContext; +import com.sk89q.worldedit.function.mask.Mask; +import org.jetbrains.annotations.NotNull; + +import java.util.stream.Stream; + +public class AngleMaskParser extends RichParser { + + public AngleMaskParser(WorldEdit worldEdit) { + super(worldEdit, "/"); + } + + @Override + protected Stream getSuggestions(String argumentInput, int index) { + return null; + } + + @Override + protected Mask parseFromInput(@NotNull String[] arguments, ParserContext context) throws InputParseException { + if (arguments.length != 2) return null; + String minArg = arguments[0]; + String maxArg = arguments[1]; + boolean degree = minArg.endsWith("d"); + if (degree ^ maxArg.endsWith("d")) { + throw new InputParseException("Cannot combine degree with block-step"); + } + double min, max; + if (degree) { + double minDeg = Double.parseDouble(minArg.substring(0, minArg.length() - 1)); + double maxDeg = Double.parseDouble(maxArg.substring(0, maxArg.length() - 1)); + min = (Math.tan(minDeg * (Math.PI / 180))); + max = (Math.tan(maxDeg * (Math.PI / 180))); + } else { + min = Double.parseDouble(minArg); + max = Double.parseDouble(maxArg); + } + + return new AngleMask(context.getExtent(), min, max, false, 1); + } +}