mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-25 15:43:44 +02:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			fix/contex
			...
			renovate/w
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ![renovate[bot]](/assets/img/avatar_default.png)  | 6469bca876 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 1f32909ffd | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 1785693fe4 | ||
|   | df738b279d | 
| @@ -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(); | ||||
|   | ||||
| @@ -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}; | ||||
|  | ||||
|   | ||||
| @@ -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")); | ||||
|   | ||||
| @@ -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; | ||||
|                 } | ||||
|   | ||||
| @@ -290,8 +290,7 @@ public abstract class PlotPlayer<P> 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<Plot> lastPlotAccess = | ||||
|                      this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { | ||||
|             if (lastPlotAccess.get().orElse(null) == null && !Settings.Enabled_Components.EVENTS) { | ||||
| @@ -320,7 +319,7 @@ public abstract class PlotPlayer<P> 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<P> 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<P> 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<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|  | ||||
|     public void populatePersistentMetaMap() { | ||||
|         if (Settings.Enabled_Components.PERSISTENT_META) { | ||||
|             DBFunc.getPersistentMeta(getUUID(), new RunnableVal<>() { | ||||
|                 @Override | ||||
|                 public void run(Map<String, byte[]> value) { | ||||
|                     try { | ||||
|                         PlotPlayer.this.metaMap = value; | ||||
|                         if (value.isEmpty()) { | ||||
|                             return; | ||||
|                         } | ||||
|  | ||||
|                         if (PlotPlayer.this.getAttribute("debug")) { | ||||
|                             debugModeEnabled.add(PlotPlayer.this); | ||||
|                         } | ||||
|  | ||||
|                         if (!Settings.Teleport.ON_LOGIN) { | ||||
|                             return; | ||||
|                         } | ||||
|                         PlotAreaManager manager = PlotPlayer.this.plotAreaManager; | ||||
|  | ||||
|                         if (!(manager instanceof SinglePlotAreaManager)) { | ||||
|                             return; | ||||
|                         } | ||||
|                         PlotArea area = ((SinglePlotAreaManager) manager).getArea(); | ||||
|                         boolean V2 = false; | ||||
|                         byte[] arr = PlotPlayer.this.getPersistentMeta("quitLoc"); | ||||
|                         if (arr == null) { | ||||
|                             arr = PlotPlayer.this.getPersistentMeta("quitLocV2"); | ||||
|                             if (arr == null) { | ||||
|                                 return; | ||||
|                             } | ||||
|                             V2 = true; | ||||
|                             removePersistentMeta("quitLocV2"); | ||||
|                         } else { | ||||
|                             removePersistentMeta("quitLoc"); | ||||
|                         } | ||||
|  | ||||
|                         if (!getMeta("teleportOnLogin", true)) { | ||||
|                             return; | ||||
|                         } | ||||
|                         ByteBuffer quitWorld = ByteBuffer.wrap(arr); | ||||
|                         final int plotX = quitWorld.getShort(); | ||||
|                         final int plotZ = quitWorld.getShort(); | ||||
|                         PlotId id = PlotId.of(plotX, plotZ); | ||||
|                         int x = quitWorld.getInt(); | ||||
|                         int y = V2 ? quitWorld.getShort() : (quitWorld.get() & 0xFF); | ||||
|                         int z = quitWorld.getInt(); | ||||
|                         Plot plot = area.getOwnedPlot(id); | ||||
|  | ||||
|                         if (plot == null) { | ||||
|                             return; | ||||
|                         } | ||||
|  | ||||
|                         final Location location = Location.at(plot.getWorldName(), x, y, z); | ||||
|                         if (plot.isLoaded()) { | ||||
|                             TaskManager.runTask(() -> { | ||||
|                                 if (getMeta("teleportOnLogin", true)) { | ||||
|                                     teleport(location, TeleportCause.LOGIN); | ||||
|                                     sendMessage( | ||||
|                                             TranslatableCaption.of("teleport.teleported_to_plot")); | ||||
|             DBFunc.getPersistentMeta( | ||||
|                     getUUID(), new RunnableVal<>() { | ||||
|                         @Override | ||||
|                         public void run(Map<String, byte[]> value) { | ||||
|                             try { | ||||
|                                 PlotPlayer.this.metaMap = value; | ||||
|                                 if (value.isEmpty()) { | ||||
|                                     return; | ||||
|                                 } | ||||
|                             }); | ||||
|                         } else if (!PlotSquared.get().isMainThread(Thread.currentThread())) { | ||||
|                             if (getMeta("teleportOnLogin", true)) { | ||||
|                                 plot.teleportPlayer( | ||||
|                                         PlotPlayer.this, | ||||
|                                         result -> TaskManager.runTask(() -> { | ||||
|                                             if (getMeta("teleportOnLogin", true)) { | ||||
|                                                 if (plot.isLoaded()) { | ||||
|                                                     teleport(location, TeleportCause.LOGIN); | ||||
|                                                     sendMessage(TranslatableCaption | ||||
|                                                             .of("teleport.teleported_to_plot")); | ||||
|                                                 } | ||||
|                                             } | ||||
|                                         }) | ||||
|                                 ); | ||||
|  | ||||
|                                 if (PlotPlayer.this.getAttribute("debug")) { | ||||
|                                     debugModeEnabled.add(PlotPlayer.this); | ||||
|                                 } | ||||
|  | ||||
|                                 if (!Settings.Teleport.ON_LOGIN) { | ||||
|                                     return; | ||||
|                                 } | ||||
|                                 PlotAreaManager manager = PlotPlayer.this.plotAreaManager; | ||||
|  | ||||
|                                 if (!(manager instanceof SinglePlotAreaManager)) { | ||||
|                                     return; | ||||
|                                 } | ||||
|                                 PlotArea area = ((SinglePlotAreaManager) manager).getArea(); | ||||
|                                 boolean V2 = false; | ||||
|                                 byte[] arr = PlotPlayer.this.getPersistentMeta("quitLoc"); | ||||
|                                 if (arr == null) { | ||||
|                                     arr = PlotPlayer.this.getPersistentMeta("quitLocV2"); | ||||
|                                     if (arr == null) { | ||||
|                                         return; | ||||
|                                     } | ||||
|                                     V2 = true; | ||||
|                                     removePersistentMeta("quitLocV2"); | ||||
|                                 } else { | ||||
|                                     removePersistentMeta("quitLoc"); | ||||
|                                 } | ||||
|  | ||||
|                                 if (!getMeta("teleportOnLogin", true)) { | ||||
|                                     return; | ||||
|                                 } | ||||
|                                 ByteBuffer quitWorld = ByteBuffer.wrap(arr); | ||||
|                                 final int plotX = quitWorld.getShort(); | ||||
|                                 final int plotZ = quitWorld.getShort(); | ||||
|                                 PlotId id = PlotId.of(plotX, plotZ); | ||||
|                                 int x = quitWorld.getInt(); | ||||
|                                 int y = V2 ? quitWorld.getShort() : (quitWorld.get() & 0xFF); | ||||
|                                 int z = quitWorld.getInt(); | ||||
|                                 Plot plot = area.getOwnedPlot(id); | ||||
|  | ||||
|                                 if (plot == null) { | ||||
|                                     return; | ||||
|                                 } | ||||
|  | ||||
|                                 final Location location = Location.at(plot.getWorldName(), x, y, z); | ||||
|                                 if (plot.isLoaded()) { | ||||
|                                     TaskManager.runTask(() -> { | ||||
|                                         if (getMeta("teleportOnLogin", true)) { | ||||
|                                             teleport(location, TeleportCause.LOGIN); | ||||
|                                             sendMessage( | ||||
|                                                     TranslatableCaption.of("teleport.teleported_to_plot")); | ||||
|                                         } | ||||
|                                     }); | ||||
|                                 } else if (!PlotSquared.get().isMainThread(Thread.currentThread())) { | ||||
|                                     if (getMeta("teleportOnLogin", true)) { | ||||
|                                         plot.teleportPlayer( | ||||
|                                                 PlotPlayer.this, | ||||
|                                                 result -> TaskManager.runTask(() -> { | ||||
|                                                     if (getMeta("teleportOnLogin", true)) { | ||||
|                                                         if (plot.isLoaded()) { | ||||
|                                                             teleport(location, TeleportCause.LOGIN); | ||||
|                                                             sendMessage(TranslatableCaption | ||||
|                                                                     .of("teleport.teleported_to_plot")); | ||||
|                                                         } | ||||
|                                                     } | ||||
|                                                 }) | ||||
|                                         ); | ||||
|                                     } | ||||
|                                 } | ||||
|                             } catch (Throwable e) { | ||||
|                                 LOGGER.error("Error populating persistent meta for player {}", PlotPlayer.this.getName(), e); | ||||
|                             } | ||||
|                         } | ||||
|                     } catch (Throwable e) { | ||||
|                         LOGGER.error("Error populating persistent meta for player {}", PlotPlayer.this.getName(), e); | ||||
|                     } | ||||
|                 } | ||||
|                     } | ||||
|             ); | ||||
|         } | ||||
| @@ -832,7 +860,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|     } | ||||
|  | ||||
|     @SuppressWarnings("unchecked") | ||||
|     @Nullable <T> T getPersistentMeta(final @NonNull MetaDataKey<T> key) { | ||||
|     @Nullable | ||||
|     <T> T getPersistentMeta(final @NonNull MetaDataKey<T> key) { | ||||
|         final byte[] value = this.getPersistentMeta(key.toString()); | ||||
|         if (value == null) { | ||||
|             return null; | ||||
| @@ -1002,9 +1031,11 @@ public abstract class PlotPlayer<P> 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 { | ||||
|   | ||||
| @@ -541,7 +541,7 @@ public class Plot { | ||||
|      * | ||||
|      * @return World name | ||||
|      */ | ||||
|     public @Nullable String getWorldName() { | ||||
|     public @NonNull String getWorldName() { | ||||
|         return area.getWorldName(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -58,7 +58,7 @@ public class SinglePlot extends Plot { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getWorldName() { | ||||
|     public @NonNull String getWorldName() { | ||||
|         return getId().toUnderscoreSeparatedString(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| # Platform expectations | ||||
| paper = "1.20.4-R0.1-SNAPSHOT" | ||||
| guice = "7.0.0" | ||||
| spotbugs = "4.9.6" | ||||
| spotbugs = "4.9.8" | ||||
| checkerqual = "3.51.1" | ||||
| gson = "2.10" | ||||
| guava = "31.1-jre" | ||||
| @@ -12,8 +12,8 @@ adventure-bukkit = "4.4.1" | ||||
| log4j = "2.19.0" | ||||
|  | ||||
| # Plugins | ||||
| worldedit = "7.2.20" | ||||
| fawe = "2.13.2" | ||||
| worldedit = "7.3.16" | ||||
| fawe = "2.14.0" | ||||
| placeholderapi = "2.11.6" | ||||
| luckperms = "5.5" | ||||
| essentialsx = "2.21.2" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user