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
*