Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-11-03 01:50:07 +01:00
Make suggestions more robust.
And fix potential errors in the ^[] pattern parser.
Dieser Commit ist enthalten in:
Ursprung
a3ca670a32
Commit
a3afd9d5b3
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.extension.factory.parser.pattern;
|
package com.sk89q.worldedit.extension.factory.parser.pattern;
|
||||||
|
|
||||||
import com.google.common.base.Splitter;
|
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.command.util.SuggestionHelper;
|
import com.sk89q.worldedit.command.util.SuggestionHelper;
|
||||||
import com.sk89q.worldedit.extension.input.InputParseException;
|
import com.sk89q.worldedit.extension.input.InputParseException;
|
||||||
@ -32,6 +31,7 @@ import com.sk89q.worldedit.function.pattern.StateApplyingPattern;
|
|||||||
import com.sk89q.worldedit.function.pattern.TypeApplyingPattern;
|
import com.sk89q.worldedit.function.pattern.TypeApplyingPattern;
|
||||||
import com.sk89q.worldedit.internal.registry.InputParser;
|
import com.sk89q.worldedit.internal.registry.InputParser;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@ -82,10 +82,21 @@ public class TypeOrStateApplyingPatternParser extends InputParser<Pattern> {
|
|||||||
worldEdit.getBlockFactory().parseFromInput(type, context).getBlockType().getDefaultState());
|
worldEdit.getBlockFactory().parseFromInput(type, context).getBlockType().getDefaultState());
|
||||||
} else {
|
} else {
|
||||||
// states given
|
// states given
|
||||||
if (!parts[1].endsWith("]")) throw new InputParseException("Invalid state format.");
|
if (!parts[1].endsWith("]")) throw new InputParseException("State is missing trailing ']'");
|
||||||
Map<String, String> statesToSet = Splitter.on(',')
|
final String[] states = parts[1].substring(0, parts[1].length() - 1).split(",");
|
||||||
.omitEmptyStrings().trimResults().withKeyValueSeparator('=')
|
Map<String, String> statesToSet = new HashMap<>();
|
||||||
.split(parts[1].substring(0, parts[1].length() - 1));
|
for (String state : states) {
|
||||||
|
if (state.isEmpty()) throw new InputParseException("Empty part in state");
|
||||||
|
String[] propVal = state.split("=", 2);
|
||||||
|
if (propVal.length != 2) throw new InputParseException("Missing '=' separator");
|
||||||
|
final String prop = propVal[0];
|
||||||
|
if (prop.isEmpty()) throw new InputParseException("Empty property in state");
|
||||||
|
final String value = propVal[1];
|
||||||
|
if (value.isEmpty()) throw new InputParseException("Empty value in state");
|
||||||
|
if (statesToSet.put(prop, value) != null) {
|
||||||
|
throw new InputParseException("Duplicate properties in state");
|
||||||
|
}
|
||||||
|
}
|
||||||
if (type.isEmpty()) {
|
if (type.isEmpty()) {
|
||||||
return new StateApplyingPattern(extent, statesToSet);
|
return new StateApplyingPattern(extent, statesToSet);
|
||||||
} else {
|
} else {
|
||||||
|
@ -569,7 +569,16 @@ public final class PlatformCommandManager {
|
|||||||
.map(Substring::getSubstring)
|
.map(Substring::getSubstring)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
MemoizingValueAccess access = initializeInjectedValues(() -> arguments, event.getActor());
|
MemoizingValueAccess access = initializeInjectedValues(() -> arguments, event.getActor());
|
||||||
ImmutableSet<Suggestion> suggestions = commandManager.getSuggestions(access, argStrings);
|
ImmutableSet<Suggestion> suggestions;
|
||||||
|
try {
|
||||||
|
suggestions = commandManager.getSuggestions(access, argStrings);
|
||||||
|
} catch (Throwable t) { // catch errors which are *not* command exceptions generated by parsers/suggesters
|
||||||
|
if (!(t instanceof CommandException)) {
|
||||||
|
log.debug("Unexpected error occurred while generating suggestions for input: " + arguments, t);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw t;
|
||||||
|
}
|
||||||
|
|
||||||
event.setSuggestions(suggestions.stream()
|
event.setSuggestions(suggestions.stream()
|
||||||
.map(suggestion -> {
|
.map(suggestion -> {
|
||||||
@ -588,8 +597,6 @@ public final class PlatformCommandManager {
|
|||||||
if (e.getCondition() instanceof PermissionCondition) {
|
if (e.getCondition() instanceof PermissionCondition) {
|
||||||
event.setSuggestions(new ArrayList<>());
|
event.setSuggestions(new ArrayList<>());
|
||||||
}
|
}
|
||||||
} catch (CommandException e) {
|
|
||||||
event.getActor().printError(e.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren