Fix issue where numbers were sometimes parsed as usernames when they shouldn't be. This commit also fixes an issue where "Not a valid plot ID" was sent twice.

This commit is contained in:
Alexander Söderberg 2020-06-24 08:31:23 +02:00
parent 159b35c717
commit f6f26c6102
No known key found for this signature in database
GPG Key ID: C0207FF7EA146678
7 changed files with 63 additions and 7 deletions

View File

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>com.plotsquared</groupId> <groupId>com.plotsquared</groupId>
<artifactId>PlotSquared-Core</artifactId> <artifactId>PlotSquared-Core</artifactId>
<version>5.12.0</version> <version>5.12.2</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -40,6 +40,7 @@ import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.query.SortingStrategy; import com.plotsquared.core.util.query.SortingStrategy;
import com.plotsquared.core.util.task.RunnableVal2; import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3; import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.uuid.UUIDMapping;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Collection; import java.util.Collection;
@ -193,7 +194,18 @@ public class Visit extends Command {
case 1: case 1:
final String[] finalArgs = args; final String[] finalArgs = args;
int finalPage = page; int finalPage = page;
if (args[0].length() >= 2 && !args[0].contains(";") && !args[0].contains(",")) { // Try to determine whether the given argument is a username
// or an ordinal
boolean isNumber = false;
if (args[0].length() < 2) {
isNumber = true;
} else if (args[0].length() <= 4 && MathMan.isInteger(args[0])) {
// Check if it's an all-digit username that is stored in cache
final UUIDMapping mapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(args[0]);
// If no UUID could be found, then we assume it's a number and not a username
isNumber = mapping == null;
}
if (!isNumber && args[0].length() >= 2 && !args[0].contains(";") && !args[0].contains(",")) {
PlotSquared.get().getImpromptuUUIDPipeline().getSingle(args[0], (uuid, throwable) -> { PlotSquared.get().getImpromptuUUIDPipeline().getSingle(args[0], (uuid, throwable) -> {
if (throwable instanceof TimeoutException) { if (throwable instanceof TimeoutException) {
// The request timed out // The request timed out
@ -240,9 +252,7 @@ public class Visit extends Command {
} else { } else {
// Try to parse a plot // Try to parse a plot
final Plot plot = MainUtil.getPlotFromString(player, finalArgs[0], true); final Plot plot = MainUtil.getPlotFromString(player, finalArgs[0], true);
if (plot == null) { if (plot != null) {
MainUtil.sendMessage(player, Captions.NOT_VALID_PLOT_ID);
} else {
this.visit(player, PlotQuery.newQuery().withPlot(plot), null, confirm, whenDone, 1); this.visit(player, PlotQuery.newQuery().withPlot(plot), null, confirm, whenDone, 1);
} }
} }

View File

@ -55,6 +55,7 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -515,7 +516,7 @@ public class MainUtil {
* @param message If a message should be sent to the player if a plot cannot be found * @param message If a message should be sent to the player if a plot cannot be found
* @return The plot if only 1 result is found, or null * @return The plot if only 1 result is found, or null
*/ */
public static Plot getPlotFromString(PlotPlayer player, String arg, boolean message) { @Nullable public static Plot getPlotFromString(PlotPlayer player, String arg, boolean message) {
if (arg == null) { if (arg == null) {
if (player == null) { if (player == null) {
if (message) { if (message) {

View File

@ -28,9 +28,11 @@ package com.plotsquared.core.uuid;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -81,4 +83,20 @@ public class CacheUUIDService implements UUIDService, Consumer<List<UUIDMapping>
@Override public boolean canBeSynchronous() { @Override public boolean canBeSynchronous() {
return true; return true;
} }
@Override @Nullable public UUIDMapping getImmediately(@NotNull final Object object) {
final List<UUIDMapping> list;
if (object instanceof String) {
list = getUUIDs(Collections.singletonList((String) object));
} else if (object instanceof UUID) {
list = getNames(Collections.singletonList((UUID) object));
} else {
list = Collections.emptyList();
}
if (list.isEmpty()) {
return null;
}
return list.get(0);
}
} }

View File

@ -405,4 +405,20 @@ public class UUIDPipeline {
return mappings; return mappings;
} }
/**
* Get a single UUID mapping immediately, if possible
*
* @param object Username ({@link String}) or {@link UUID}
* @return Mapping, if it could be found immediately
*/
@Nullable public final UUIDMapping getImmediately(@NotNull final Object object) {
for (final UUIDService uuidService : this.getServiceListInstance()) {
final UUIDMapping mapping = uuidService.getImmediately(object);
if (mapping != null) {
return mapping;
}
}
return null;
}
} }

View File

@ -26,6 +26,7 @@
package com.plotsquared.core.uuid; package com.plotsquared.core.uuid;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -75,4 +76,14 @@ public interface UUIDService {
return false; return false;
} }
/**
* Get a single UUID mapping immediately, if possible
*
* @param object Username ({@link String}) or {@link UUID}
* @return Mapping, if it could be found immediately
*/
default @Nullable UUIDMapping getImmediately(@NotNull final Object object) {
return null;
}
} }

View File

@ -30,7 +30,7 @@ ext {
git = Grgit.open(dir: new File(rootDir.toString() + "/.git")) git = Grgit.open(dir: new File(rootDir.toString() + "/.git"))
} }
def ver = "5.12.1" def ver = "5.12.2"
def versuffix = "" def versuffix = ""
ext { ext {
if (project.hasProperty("versionsuffix")) { if (project.hasProperty("versionsuffix")) {