Allow visit to work when players are not the owner of the base plot

This commit is contained in:
dordsor21 2021-08-22 16:26:49 +01:00
parent fb8e749411
commit a8fc6662e0
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B
4 changed files with 78 additions and 1 deletions

View File

@ -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,

View File

@ -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;
}

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
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);
}
}

View File

@ -202,6 +202,28 @@ public final class PlotQuery implements Iterable<Plot> {
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
*