diff --git a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java index 678dfd33a..127cbeba7 100644 --- a/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java +++ b/Core/src/main/java/com/plotsquared/core/command/DebugRoadRegen.java @@ -90,7 +90,7 @@ public class DebugRoadRegen extends SubCommand { } public boolean regenPlot(PlotPlayer> player) { - PlotArea area = player.getCurrentPlot().getArea(); + PlotArea area = player.getContextualPlotArea(); if (area == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); return false; @@ -145,9 +145,10 @@ public class DebugRoadRegen extends SubCommand { return false; } - PlotArea area = player.getCurrentPlot().getArea(); + PlotArea area = player.getContextualPlotArea(); if (area == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); + return false; } Plot plot = player.getCurrentPlot(); PlotManager manager = area.getPlotManager(); diff --git a/Core/src/main/java/com/plotsquared/core/command/ListCmd.java b/Core/src/main/java/com/plotsquared/core/command/ListCmd.java index 2766721ff..586c1cf97 100644 --- a/Core/src/main/java/com/plotsquared/core/command/ListCmd.java +++ b/Core/src/main/java/com/plotsquared/core/command/ListCmd.java @@ -150,8 +150,8 @@ public class ListCmd extends SubCommand { page = 0; } - String world = player.getCurrentPlot().getWorldName(); - PlotArea area = player.getCurrentPlot().getArea(); + PlotArea area = player.getContextualPlotArea(); + String world = area != null ? area.getWorldName() : ""; String arg = args[0].toLowerCase(); final boolean[] sort = new boolean[]{true}; diff --git a/Core/src/main/java/com/plotsquared/core/command/Load.java b/Core/src/main/java/com/plotsquared/core/command/Load.java index cf4936211..e3fc9b9b6 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Load.java +++ b/Core/src/main/java/com/plotsquared/core/command/Load.java @@ -68,11 +68,6 @@ public class Load extends SubCommand { @Override public boolean onCommand(final PlotPlayer> player, final String[] args) { - final String world = player.getCurrentPlot().getWorldName(); - if (!this.plotAreaManager.hasPlotArea(world)) { - player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world")); - return false; - } final Plot plot = player.getCurrentPlot(); if (plot == null) { player.sendMessage(TranslatableCaption.of("errors.not_in_plot")); diff --git a/Core/src/main/java/com/plotsquared/core/command/Set.java b/Core/src/main/java/com/plotsquared/core/command/Set.java index 52c32c997..efdd5adca 100644 --- a/Core/src/main/java/com/plotsquared/core/command/Set.java +++ b/Core/src/main/java/com/plotsquared/core/command/Set.java @@ -78,7 +78,7 @@ public class Set extends SubCommand { @Override public boolean set(PlotPlayer> player, final Plot plot, String value) { - final PlotArea plotArea = player.getCurrentPlot().getArea(); + final PlotArea plotArea = player.getContextualPlotArea(); if (plotArea == null) { return false; } diff --git a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java index b0692aa2f..e2c9dd854 100644 --- a/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java +++ b/Core/src/main/java/com/plotsquared/core/player/PlotPlayer.java @@ -290,8 +290,7 @@ public abstract class PlotPlayer
implements CommandCaller, OfflinePlotPlayer,
*
* @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea}
*/
- @Nullable
- public Plot getCurrentPlot() {
+ public @Nullable Plot getCurrentPlot() {
try (final MetaDataAccess implements CommandCaller, OfflinePlotPlayer,
*/
public int getPlotCount() {
if (!Settings.Limit.GLOBAL) {
- return getPlotCount(getCurrentPlot().getWorldName());
+ return getPlotCount(getContextualWorldName());
}
final AtomicInteger count = new AtomicInteger(0);
final UUID uuid = getUUID();
@@ -340,7 +339,7 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer,
public int getClusterCount() {
if (!Settings.Limit.GLOBAL) {
- return getClusterCount(getCurrentPlot().getWorldName());
+ return getClusterCount(getContextualWorldName());
}
final AtomicInteger count = new AtomicInteger(0);
this.plotAreaManager.forEachPlotArea(value -> {
@@ -353,6 +352,34 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer,
return count.get();
}
+ /**
+ * {@return the world name at the player's contextual position}
+ * The contextual position can be affected when using a command with
+ * an explicit plot override, e.g., `/plot <id> info`.
+ */
+ private @NonNull String getContextualWorldName() {
+ Plot current = getCurrentPlot();
+ if (current != null) {
+ return current.getWorldName();
+ }
+ return getLocation().getWorldName();
+ }
+
+ /**
+ * {@return the plot area at the player's contextual position}
+ * The contextual position can be affected when using a command with
+ * an explicit plot override, e.g., `/plot <id> info`.
+ *
+ * @since TODO
+ */
+ public @Nullable PlotArea getContextualPlotArea() {
+ Plot current = getCurrentPlot();
+ if (current != null) {
+ return current.getArea();
+ }
+ return getLocation().getPlotArea();
+ }
+
/**
* Get the number of plots this player owns in the world.
*
@@ -683,86 +710,87 @@ public abstract class PlotPlayer implements CommandCaller, OfflinePlotPlayer,
public void populatePersistentMetaMap() {
if (Settings.Enabled_Components.PERSISTENT_META) {
- DBFunc.getPersistentMeta(getUUID(), new RunnableVal<>() {
- @Override
- public void run(Map implements CommandCaller, OfflinePlotPlayer,
}
@SuppressWarnings("unchecked")
- @Nullable implements CommandCaller, OfflinePlotPlayer,
if (throwable != null) {
sendMessage(
TranslatableCaption.of("errors.error"),
- TagResolver.resolver("value", Tag.inserting(
- Component.text("Failed to resolve asynchronous caption replacements")
- ))
+ TagResolver.resolver(
+ "value", Tag.inserting(
+ Component.text("Failed to resolve asynchronous caption replacements")
+ )
+ )
);
LOGGER.error("Failed to resolve asynchronous tagresolver(s) for " + caption, throwable);
} else {
diff --git a/Core/src/main/java/com/plotsquared/core/plot/Plot.java b/Core/src/main/java/com/plotsquared/core/plot/Plot.java
index 655dc6d3f..1206e98bd 100644
--- a/Core/src/main/java/com/plotsquared/core/plot/Plot.java
+++ b/Core/src/main/java/com/plotsquared/core/plot/Plot.java
@@ -541,7 +541,7 @@ public class Plot {
*
* @return World name
*/
- public @Nullable String getWorldName() {
+ public @NonNull String getWorldName() {
return area.getWorldName();
}
diff --git a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlot.java b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlot.java
index eaf660455..eacca8988 100644
--- a/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlot.java
+++ b/Core/src/main/java/com/plotsquared/core/plot/world/SinglePlot.java
@@ -58,7 +58,7 @@ public class SinglePlot extends Plot {
}
@Override
- public String getWorldName() {
+ public @NonNull String getWorldName() {
return getId().toUnderscoreSeparatedString();
}