From a8fc6662e05bbc36cd3b08f0539cc93e4d0a7ee0 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sun, 22 Aug 2021 16:26:49 +0100 Subject: [PATCH] Allow visit to work when players are not the owner of the base plot --- .../com/plotsquared/core/command/Visit.java | 8 +++- .../core/configuration/Settings.java | 2 + .../core/util/query/OwnersIncludeFilter.java | 47 +++++++++++++++++++ .../core/util/query/PlotQuery.java | 22 +++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 Core/src/main/java/com/plotsquared/core/util/query/OwnersIncludeFilter.java diff --git a/Core/src/main/java/com/plotsquared/core/command/Visit.java b/Core/src/main/java/com/plotsquared/core/command/Visit.java index 4eb08a2d6..dbd8cea61 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Visit.java +++ b/Core/src/main/java/com/plotsquared/core/command/Visit.java @@ -239,9 +239,15 @@ public class Visit extends Command { ); } else { final UUID uuid = uuids.toArray(new UUID[0])[0]; + PlotQuery query = PlotQuery.newQuery(); + if (Settings.Teleport.VISIT_MERGED_OWNERS) { + query.ownersInclude(uuid); + } else { + query.whereBasePlot().ownedBy(uuid); + } this.visit( player, - PlotQuery.newQuery().ownedBy(uuid).whereBasePlot(), + query, finalSortByArea, confirm, whenDone, diff --git a/Core/src/main/java/com/plotsquared/core/configuration/Settings.java b/Core/src/main/java/com/plotsquared/core/configuration/Settings.java index aef5ce312..3810987b2 100644 --- a/Core/src/main/java/com/plotsquared/core/configuration/Settings.java +++ b/Core/src/main/java/com/plotsquared/core/configuration/Settings.java @@ -567,6 +567,8 @@ public class Settings extends Config { public static boolean ON_DELETE = false; @Comment("The visit command is ordered by world instead of globally") public static boolean PER_WORLD_VISIT = false; + @Comment("Search merged plots for having multiple owners when using the visit command") + public static boolean VISIT_MERGED_OWNERS = true; } diff --git a/Core/src/main/java/com/plotsquared/core/util/query/OwnersIncludeFilter.java b/Core/src/main/java/com/plotsquared/core/util/query/OwnersIncludeFilter.java new file mode 100644 index 000000000..9a55e4205 --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/util/query/OwnersIncludeFilter.java @@ -0,0 +1,47 @@ +/* + * _____ _ _ _____ _ + * | __ \| | | | / ____| | | + * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | + * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | + * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | + * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| + * | | + * |_| + * PlotSquared plot management system for Minecraft + * Copyright (C) 2021 IntellectualSites + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.plotsquared.core.util.query; + +import com.plotsquared.core.plot.Plot; +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.util.Objects; +import java.util.UUID; + +class OwnersIncludeFilter implements PlotFilter { + + private final UUID owner; + + OwnersIncludeFilter(final @NonNull UUID owner) { + this.owner = owner; + } + + @Override + public boolean accepts(final @NonNull Plot plot) { + return plot.isBasePlot() && plot.getOwners().size() > 0 && plot.getOwners().contains(owner); + } + +} diff --git a/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java b/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java index e31c7c861..d399940bd 100644 --- a/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java +++ b/Core/src/main/java/com/plotsquared/core/util/query/PlotQuery.java @@ -202,6 +202,28 @@ public final class PlotQuery implements Iterable { return this.addFilter(new OwnerFilter(owner.getUUID())); } + /** + * Query for base plots where one of the merged plots is owned by a specific player + * + * @param owner Owner UUID + * @return The query instance + */ + public @NonNull PlotQuery ownersInclude(final @NonNull UUID owner) { + Preconditions.checkNotNull(owner, "Owner may not be null"); + return this.addFilter(new OwnersIncludeFilter(owner)); + } + + /** + * Query for base plots where one of the merged plots is owned by a specific player + * + * @param owner Owner + * @return The query instance + */ + public @NonNull PlotQuery ownersInclude(final @NonNull PlotPlayer owner) { + Preconditions.checkNotNull(owner, "Owner may not be null"); + return this.addFilter(new OwnersIncludeFilter(owner.getUUID())); + } + /** * Query for plots with a specific alias *