From c745b99922a88e6c93fe6924eff0a5cec9c3113a Mon Sep 17 00:00:00 2001 From: Timon Date: Thu, 6 Aug 2020 12:01:43 +0200 Subject: [PATCH 1/2] Added UseFlag check at Roads --- .../com/plotsquared/core/util/EventDispatcher.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java b/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java index 23d5dd15f..b495fb212 100644 --- a/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java +++ b/Core/src/main/java/com/plotsquared/core/util/EventDispatcher.java @@ -279,6 +279,12 @@ public class EventDispatcher { return true; case INTERACT_BLOCK: { if (plot == null) { + final List use = area.getRoadFlag(UseFlag.class); + for(final BlockTypeWrapper blockTypeWrapper : use) { + if (blockTypeWrapper.accepts(BlockTypes.AIR) || blockTypeWrapper.accepts(blockType)) { + return true; + } + } return Permissions.hasPermission(player, Captions.PERMISSION_ADMIN_INTERACT_ROAD.getTranslated(), notifyPerms); } @@ -301,6 +307,12 @@ public class EventDispatcher { } case TRIGGER_PHYSICAL: { if (plot == null) { + final List use = area.getRoadFlag(UseFlag.class); + for(final BlockTypeWrapper blockTypeWrapper : use) { + if (blockTypeWrapper.accepts(BlockTypes.AIR) || blockTypeWrapper.accepts(blockType)) { + return true; + } + } return Permissions.hasPermission(player, Captions.PERMISSION_ADMIN_INTERACT_ROAD.getTranslated(), false); } From b46a19f5ca7255c6d6f4fef9cabbb4493b158930 Mon Sep 17 00:00:00 2001 From: EinDev Date: Sat, 8 Aug 2020 18:07:49 +0200 Subject: [PATCH 2/2] 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 --- .../com/plotsquared/core/command/Add.java | 39 +++++++++++-------- .../com/plotsquared/core/command/Deny.java | 30 +++++++------- .../com/plotsquared/core/command/Kick.java | 8 ++-- .../com/plotsquared/core/command/Remove.java | 36 ++++++++--------- .../com/plotsquared/core/command/Trust.java | 34 ++++++++-------- .../com/plotsquared/core/util/MainUtil.java | 27 ++++++------- 6 files changed, 88 insertions(+), 86 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/command/Add.java b/Core/src/main/java/com/plotsquared/core/command/Add.java index 6d86f7532..f3e5015ca 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Add.java +++ b/Core/src/main/java/com/plotsquared/core/command/Add.java @@ -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 iterator = uuids.iterator(); + + Iterator 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); diff --git a/Core/src/main/java/com/plotsquared/core/command/Deny.java b/Core/src/main/java/com/plotsquared/core/command/Deny.java index 1cb862304..e1b2536f1 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Deny.java +++ b/Core/src/main/java/com/plotsquared/core/command/Deny.java @@ -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 diff --git a/Core/src/main/java/com/plotsquared/core/command/Kick.java b/Core/src/main/java/com/plotsquared/core/command/Kick.java index 911ea9810..810051a4c 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Kick.java +++ b/Core/src/main/java/com/plotsquared/core/command/Kick.java @@ -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> 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); } diff --git a/Core/src/main/java/com/plotsquared/core/command/Remove.java b/Core/src/main/java/com/plotsquared/core/command/Remove.java index 871bd2b60..1c2797941 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Remove.java +++ b/Core/src/main/java/com/plotsquared/core/command/Remove.java @@ -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++; } } diff --git a/Core/src/main/java/com/plotsquared/core/command/Trust.java b/Core/src/main/java/com/plotsquared/core/command/Trust.java index 1c4064543..066a02278 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Trust.java +++ b/Core/src/main/java/com/plotsquared/core/command/Trust.java @@ -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 iterator = uuids.iterator(); + Iterator 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); diff --git a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java index 9f79f3273..a56e3e1b2 100644 --- a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java @@ -748,10 +748,9 @@ public class MainUtil { return ratings; } - public static void getUUIDsFromString(final String list, final BiConsumer, Throwable> consumer) { + public static void getUUIDsFromString(final String list, final BiConsumer, Throwable> consumer) { String[] split = list.split(","); - - final Set result = new HashSet<>(); + final Set result = new HashSet<>(); final List 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); + } + }); } }