Improve mask parsing

- Fixes #1230
This commit is contained in:
dordsor21
2021-08-17 17:02:11 +01:00
parent f6676cf6a3
commit 46f6395279
9 changed files with 165 additions and 72 deletions

View File

@ -20,7 +20,10 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.configuration.Caption;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.fastasyncworldedit.core.util.StringMan;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.command.util.SuggestionHelper;
import com.sk89q.worldedit.extension.input.InputParseException;
@ -33,12 +36,18 @@ import com.sk89q.worldedit.util.formatting.text.TextComponent;
import com.sk89q.worldedit.world.biome.BiomeType;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class BiomeMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class BiomeMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of("$");
//FAWE end
public BiomeMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -70,8 +79,22 @@ public class BiomeMaskParser extends InputParser<Mask> {
return null;
}
//FAWE start - richer parsing
if (input.charAt(1) == '[') {
int end = input.lastIndexOf(']');
if (end == -1) {
return null;
}
input = input.substring(2, end);
} else {
input = input.substring(1);
}
//FAWE end
Set<BiomeType> biomes = new HashSet<>();
for (String biomeName : Splitter.on(",").split(input.substring(1))) {
//FAWE start - richer parsing
for (String biomeName : Splitter.on(",").split(input)) {
//FAWE end
BiomeType biome = BiomeType.REGISTRY.get(biomeName);
if (biome == null) {
throw new NoMatchException(Caption.of("worldedit.error.unknown-biome", TextComponent.of(biomeName)));
@ -82,4 +105,11 @@ public class BiomeMaskParser extends InputParser<Mask> {
return new BiomeMask(context.requireExtent(), biomes);
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}

View File

@ -20,7 +20,9 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.configuration.Caption;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
@ -29,9 +31,14 @@ import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.internal.registry.InputParser;
import com.sk89q.worldedit.util.formatting.text.TextComponent;
import java.util.List;
import java.util.stream.Stream;
public class BlockStateMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class BlockStateMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of("^", "^=");
//FAWE end
public BlockStateMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -67,4 +74,11 @@ public class BlockStateMaskParser extends InputParser<Mask> {
}
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}

View File

@ -20,6 +20,8 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.configuration.Caption;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
@ -33,10 +35,15 @@ import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
import com.sk89q.worldedit.session.SessionOwner;
import com.sk89q.worldedit.util.formatting.text.TextComponent;
import java.util.List;
import java.util.function.IntSupplier;
import java.util.stream.Stream;
public class ExpressionMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class ExpressionMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of("=");
//FAWE end
public ExpressionMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -56,8 +63,22 @@ public class ExpressionMaskParser extends InputParser<Mask> {
return null;
}
//FAWE start - richer parsing
if (input.charAt(1) == '[') {
int end = input.lastIndexOf(']');
if (end == -1) {
return null;
}
input = input.substring(2, end);
} else {
input = input.substring(1);
}
//FAWE end
try {
Expression exp = Expression.compile(input.substring(1), "x", "y", "z");
//FAWE start - richer parsing
Expression exp = Expression.compile(input, "x", "y", "z");
//FAWE end
WorldEditExpressionEnvironment env = new WorldEditExpressionEnvironment(
context.requireExtent(), Vector3.ONE, Vector3.ZERO);
exp.setEnvironment(env);
@ -75,4 +96,11 @@ public class ExpressionMaskParser extends InputParser<Mask> {
}
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}

View File

@ -20,6 +20,8 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.configuration.Caption;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
@ -27,9 +29,14 @@ import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.mask.Masks;
import com.sk89q.worldedit.internal.registry.InputParser;
import java.util.List;
import java.util.stream.Stream;
public class NegateMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class NegateMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of("!");
//FAWE end
public NegateMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -59,4 +66,11 @@ public class NegateMaskParser extends InputParser<Mask> {
}
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.input.ParserContext;
import com.sk89q.worldedit.function.mask.Mask;
@ -26,9 +28,14 @@ import com.sk89q.worldedit.function.mask.NoiseFilter;
import com.sk89q.worldedit.internal.registry.InputParser;
import com.sk89q.worldedit.math.noise.RandomNoise;
import java.util.List;
import java.util.stream.Stream;
public class NoiseMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class NoiseMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of("%");
//FAWE end
public NoiseMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -51,8 +58,28 @@ public class NoiseMaskParser extends InputParser<Mask> {
return null;
}
int i = Integer.parseInt(input.substring(1));
//FAWE start - richer parsing
if (input.charAt(1) == '[') {
int end = input.lastIndexOf(']');
if (end == -1) {
return null;
}
input = input.substring(2, end);
} else {
input = input.substring(1);
}
int i = Integer.parseInt(input);
//FAWE end
return new NoiseFilter(new RandomNoise(), ((double) i) / 100);
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}

View File

@ -19,6 +19,8 @@
package com.sk89q.worldedit.extension.factory.parser.mask;
import com.fastasyncworldedit.core.extension.factory.parser.AliasedParser;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
@ -28,9 +30,14 @@ import com.sk89q.worldedit.function.mask.OffsetMask;
import com.sk89q.worldedit.internal.registry.InputParser;
import com.sk89q.worldedit.math.BlockVector3;
import java.util.List;
import java.util.stream.Stream;
public class OffsetMaskParser extends InputParser<Mask> {
//FAWE start - aliased
public class OffsetMaskParser extends InputParser<Mask> implements AliasedParser {
private final List<String> aliases = ImmutableList.of(">", "<");
//FAWE end
public OffsetMaskParser(WorldEdit worldEdit) {
super(worldEdit);
@ -66,4 +73,11 @@ public class OffsetMaskParser extends InputParser<Mask> {
//FAWE end
}
//FAWE start - aliased
@Override
public List<String> getMatchedAliases() {
return aliases;
}
//FAWE end
}