Keep player names, so they don't have to be looked up again.

That way the lookup function MainUtil#getName won't get called which would throw an exception if called in the Bukkit Thread.
As the player enters the Name, we don't have to look it up again.

Fixes PS-96
This commit is contained in:
EinDev 2020-08-08 18:07:49 +02:00
parent c745b99922
commit b46a19f5ca
6 changed files with 88 additions and 86 deletions

View File

@ -35,11 +35,11 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.uuid.UUIDMapping;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeoutException;
@ -79,44 +79,49 @@ public class Add extends Command {
} else {
try {
checkTrue(!uuids.isEmpty(), Captions.INVALID_PLAYER, args[0]);
Iterator<UUID> iterator = uuids.iterator();
Iterator<UUIDMapping> iterator = uuids.iterator();
int size = plot.getTrusted().size() + plot.getMembers().size();
while (iterator.hasNext()) {
UUID uuid = iterator.next();
if (uuid == DBFunc.EVERYONE && !(
UUIDMapping uuidMapping = iterator.next();
if (uuidMapping.getUuid() == DBFunc.EVERYONE && !(
Permissions.hasPermission(player, Captions.PERMISSION_TRUST_EVERYONE) || Permissions
.hasPermission(player, Captions.PERMISSION_ADMIN_COMMAND_TRUST))) {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, MainUtil.getName(uuid));
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername());
iterator.remove();
continue;
}
if (plot.isOwner(uuid)) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, MainUtil.getName(uuid));
if (plot.isOwner(uuidMapping.getUuid())) {
new Thread(() ->
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername())
).start();
iterator.remove();
continue;
}
if (plot.getMembers().contains(uuid)) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, MainUtil.getName(uuid));
if (plot.getMembers().contains(uuidMapping.getUuid())) {
new Thread(() ->
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername())
).start();
iterator.remove();
continue;
}
size += plot.getTrusted().contains(uuid) ? 0 : 1;
size += plot.getTrusted().contains(uuidMapping.getUuid()) ? 0 : 1;
}
checkTrue(!uuids.isEmpty(), null);
checkTrue(size <= plot.getArea().getMaxPlotMembers() || Permissions.hasPermission(player, Captions.PERMISSION_ADMIN_COMMAND_TRUST),
Captions.PLOT_MAX_MEMBERS);
// Success
confirm.run(this, () -> {
for (UUID uuid : uuids) {
if (uuid != DBFunc.EVERYONE) {
if (!plot.removeTrusted(uuid)) {
if (plot.getDenied().contains(uuid)) {
plot.removeDenied(uuid);
for (UUIDMapping uuidMapping : uuids) {
if (uuidMapping.getUuid() != DBFunc.EVERYONE) {
if (!plot.removeTrusted(uuidMapping.getUuid())) {
if (plot.getDenied().contains(uuidMapping.getUuid())) {
plot.removeDenied(uuidMapping.getUuid());
}
}
}
plot.addMember(uuid);
PlotSquared.get().getEventDispatcher().callMember(player, plot, uuid, true);
plot.addMember(uuidMapping.getUuid());
PlotSquared.get().getEventDispatcher().callMember(player, plot, uuidMapping.getUuid(), true);
MainUtil.sendMessage(player, Captions.MEMBER_ADDED);
}
}, null);

View File

@ -35,11 +35,11 @@ import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.uuid.UUIDMapping;
import com.sk89q.worldedit.world.gamemode.GameModes;
import java.util.Collection;
import java.util.Collections;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
@CommandDeclaration(command = "deny",
@ -77,26 +77,26 @@ public class Deny extends SubCommand {
} else if (throwable != null || uuids.isEmpty()) {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, args[0]);
} else {
for (UUID uuid : uuids) {
if (uuid == DBFunc.EVERYONE && !(
for (UUIDMapping uuidMapping : uuids) {
if (uuidMapping.getUuid() == DBFunc.EVERYONE && !(
Permissions.hasPermission(player, Captions.PERMISSION_DENY_EVERYONE) || Permissions
.hasPermission(player, Captions.PERMISSION_ADMIN_COMMAND_DENY))) {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, MainUtil.getName(uuid));
} else if (plot.isOwner(uuid)) {
MainUtil.sendMessage(player, Captions.CANT_REMOVE_OWNER, MainUtil.getName(uuid));
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, uuidMapping.getUsername());
} else if (plot.isOwner(uuidMapping.getUuid())) {
MainUtil.sendMessage(player, Captions.CANT_REMOVE_OWNER, uuidMapping.getUsername());
return;
} else if (plot.getDenied().contains(uuid)) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, MainUtil.getName(uuid));
} else if (plot.getDenied().contains(uuidMapping.getUuid())) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername());
return;
} else {
if (uuid != DBFunc.EVERYONE) {
plot.removeMember(uuid);
plot.removeTrusted(uuid);
if (uuidMapping.getUuid() != DBFunc.EVERYONE) {
plot.removeMember(uuidMapping.getUuid());
plot.removeTrusted(uuidMapping.getUuid());
}
plot.addDenied(uuid);
PlotSquared.get().getEventDispatcher().callDenied(player, plot, uuid, true);
if (!uuid.equals(DBFunc.EVERYONE)) {
handleKick(PlotSquared.imp().getPlayerManager().getPlayerIfExists(uuid), plot);
plot.addDenied(uuidMapping.getUuid());
PlotSquared.get().getEventDispatcher().callDenied(player, plot, uuidMapping.getUuid(), true);
if (!uuidMapping.equals(DBFunc.EVERYONE)) {
handleKick(PlotSquared.imp().getPlayerManager().getPlayerIfExists(uuidMapping.getUuid()), plot);
} else {
for (PlotPlayer plotPlayer : plot.getPlayersInPlot()) {
// Ignore plot-owners

View File

@ -35,12 +35,12 @@ import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.uuid.UUIDMapping;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
@CommandDeclaration(command = "kick",
@ -75,8 +75,8 @@ public class Kick extends SubCommand {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, args[0]);
} else {
Set<PlotPlayer<?>> players = new HashSet<>();
for (UUID uuid : uuids) {
if (uuid == DBFunc.EVERYONE) {
for (UUIDMapping uuidMapping : uuids) {
if (uuidMapping.getUuid() == DBFunc.EVERYONE) {
for (PlotPlayer<?> pp : plot.getPlayersInPlot()) {
if (pp == player || Permissions
.hasPermission(pp, Captions.PERMISSION_ADMIN_ENTRY_DENIED)) {
@ -86,7 +86,7 @@ public class Kick extends SubCommand {
}
continue;
}
PlotPlayer<?> pp = PlotSquared.imp().getPlayerManager().getPlayerIfExists(uuid);
PlotPlayer<?> pp = PlotSquared.imp().getPlayerManager().getPlayerIfExists(uuidMapping.getUuid());
if (pp != null) {
players.add(pp);
}

View File

@ -34,10 +34,10 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.MainUtil;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.uuid.UUIDMapping;
import java.util.Collection;
import java.util.Collections;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
@CommandDeclaration(command = "remove",
@ -78,37 +78,37 @@ public class Remove extends SubCommand {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, args[0]);
return;
} else if (!uuids.isEmpty()) {
for (UUID uuid : uuids) {
if (plot.getTrusted().contains(uuid)) {
if (plot.removeTrusted(uuid)) {
for (UUIDMapping uuidMapping : uuids) {
if (plot.getTrusted().contains(uuidMapping.getUuid())) {
if (plot.removeTrusted(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callTrusted(player, plot, uuid, false);
.callTrusted(player, plot, uuidMapping.getUuid(), false);
count++;
}
} else if (plot.getMembers().contains(uuid)) {
if (plot.removeMember(uuid)) {
} else if (plot.getMembers().contains(uuidMapping.getUuid())) {
if (plot.removeMember(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callMember(player, plot, uuid, false);
.callMember(player, plot, uuidMapping.getUuid(), false);
count++;
}
} else if (plot.getDenied().contains(uuid)) {
if (plot.removeDenied(uuid)) {
} else if (plot.getDenied().contains(uuidMapping.getUuid())) {
if (plot.removeDenied(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callDenied(player, plot, uuid, false);
.callDenied(player, plot, uuidMapping.getUuid(), false);
count++;
}
} else if (uuid == DBFunc.EVERYONE) {
if (plot.removeTrusted(uuid)) {
} else if (uuidMapping.getUuid() == DBFunc.EVERYONE) {
if (plot.removeTrusted(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callTrusted(player, plot, uuid, false);
.callTrusted(player, plot, uuidMapping.getUuid(), false);
count++;
} else if (plot.removeMember(uuid)) {
} else if (plot.removeMember(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callMember(player, plot, uuid, false);
.callMember(player, plot, uuidMapping.getUuid(), false);
count++;
} else if (plot.removeDenied(uuid)) {
} else if (plot.removeDenied(uuidMapping.getUuid())) {
PlotSquared.get().getEventDispatcher()
.callDenied(player, plot, uuid, false);
.callDenied(player, plot, uuidMapping.getUuid(), false);
count++;
}
}

View File

@ -35,11 +35,11 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.uuid.UUIDMapping;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeoutException;
@ -81,28 +81,28 @@ public class Trust extends Command {
return;
} else {
checkTrue(!uuids.isEmpty(), Captions.INVALID_PLAYER, args[0]);
Iterator<UUID> iterator = uuids.iterator();
Iterator<UUIDMapping> iterator = uuids.iterator();
int size = currentPlot.getTrusted().size() + currentPlot.getMembers().size();
while (iterator.hasNext()) {
UUID uuid = iterator.next();
if (uuid == DBFunc.EVERYONE && !(
UUIDMapping uuidMapping = iterator.next();
if (uuidMapping.getUuid() == DBFunc.EVERYONE && !(
Permissions.hasPermission(player, Captions.PERMISSION_TRUST_EVERYONE) || Permissions
.hasPermission(player, Captions.PERMISSION_ADMIN_COMMAND_TRUST))) {
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, MainUtil.getName(uuid));
MainUtil.sendMessage(player, Captions.INVALID_PLAYER, uuidMapping.getUsername());
iterator.remove();
continue;
}
if (currentPlot.isOwner(uuid)) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, MainUtil.getName(uuid));
if (currentPlot.isOwner(uuidMapping.getUuid())) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername());
iterator.remove();
continue;
}
if (currentPlot.getTrusted().contains(uuid)) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, MainUtil.getName(uuid));
if (currentPlot.getTrusted().contains(uuidMapping.getUuid())) {
MainUtil.sendMessage(player, Captions.ALREADY_ADDED, uuidMapping.getUsername());
iterator.remove();
continue;
}
size += currentPlot.getMembers().contains(uuid) ? 0 : 1;
size += currentPlot.getMembers().contains(uuidMapping.getUuid()) ? 0 : 1;
}
checkTrue(!uuids.isEmpty(), null);
checkTrue(size <= currentPlot.getArea().getMaxPlotMembers() || Permissions
@ -110,16 +110,16 @@ public class Trust extends Command {
Captions.PLOT_MAX_MEMBERS);
// Success
confirm.run(this, () -> {
for (UUID uuid : uuids) {
if (uuid != DBFunc.EVERYONE) {
if (!currentPlot.removeMember(uuid)) {
if (currentPlot.getDenied().contains(uuid)) {
currentPlot.removeDenied(uuid);
for (UUIDMapping uuidMapping : uuids) {
if (uuidMapping.getUuid() != DBFunc.EVERYONE) {
if (!currentPlot.removeMember(uuidMapping.getUuid())) {
if (currentPlot.getDenied().contains(uuidMapping.getUuid())) {
currentPlot.removeDenied(uuidMapping.getUuid());
}
}
}
currentPlot.addTrusted(uuid);
PlotSquared.get().getEventDispatcher().callTrusted(player, currentPlot, uuid, true);
currentPlot.addTrusted(uuidMapping.getUuid());
PlotSquared.get().getEventDispatcher().callTrusted(player, currentPlot, uuidMapping.getUuid(), true);
MainUtil.sendMessage(player, Captions.TRUSTED_ADDED);
}
}, null);

View File

@ -748,10 +748,9 @@ public class MainUtil {
return ratings;
}
public static void getUUIDsFromString(final String list, final BiConsumer<Collection<UUID>, Throwable> consumer) {
public static void getUUIDsFromString(final String list, final BiConsumer<Collection<UUIDMapping>, Throwable> consumer) {
String[] split = list.split(",");
final Set<UUID> result = new HashSet<>();
final Set<UUIDMapping> result = new HashSet<>();
final List<String> request = new LinkedList<>();
for (final String name : split) {
@ -759,10 +758,10 @@ public class MainUtil {
consumer.accept(Collections.emptySet(), null);
return;
} else if ("*".equals(name)) {
result.add(DBFunc.EVERYONE);
result.add(new UUIDMapping(DBFunc.EVERYONE, "*"));
} else if (name.length() > 16) {
try {
result.add(UUID.fromString(name));
result.add(new UUIDMapping(UUID.fromString(name), name));
} catch (IllegalArgumentException ignored) {
consumer.accept(Collections.emptySet(), null);
return;
@ -776,16 +775,14 @@ public class MainUtil {
consumer.accept(result, null);
} else {
PlotSquared.get().getImpromptuUUIDPipeline().getUUIDs(request, Settings.UUID.NON_BLOCKING_TIMEOUT)
.whenComplete((uuids, throwable) -> {
if (throwable != null) {
consumer.accept(null, throwable);
} else {
for (final UUIDMapping uuid : uuids) {
result.add(uuid.getUuid());
}
consumer.accept(result, null);
}
});
.whenComplete((uuids, throwable) -> {
if (throwable != null) {
consumer.accept(null, throwable);
} else {
result.addAll(uuids);
consumer.accept(result, null);
}
});
}
}