mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 01:23:44 +01:00 
			
		
		
		
	Compare commits
	
		
			10 Commits
		
	
	
		
			sponge
			...
			docs/v6/ja
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | d628aaba34 | ||
|   | ff5d79699d | ||
|   | a0594c19ee | ||
|   | da41c136fe | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 6a5859ee0f | ||
|   | 59e0b4b67a | ||
|   | 5fc153d896 | ||
|   | a003836dbc | ||
|   | 42bf413528 | ||
|   | 827f46566c | 
							
								
								
									
										2
									
								
								.github/workflows/release-drafter.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/release-drafter.yml
									
									
									
									
										vendored
									
									
								
							| @@ -13,6 +13,6 @@ jobs: | |||||||
|   update_release_draft: |   update_release_draft: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: release-drafter/release-drafter@v5.17.5 |       - uses: release-drafter/release-drafter@v5.17.6 | ||||||
|         env: |         env: | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.lift.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.lift.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | jdkVersion = "17" | ||||||
|  | build = "gradle clean build -x test" | ||||||
|  | tools = ["findsecbugs", "ErrorProne", "Semgrep", "Detekt", "Infer"] | ||||||
|  | ignoreRules = ["CatchAndPrintStackTrace", "ReferenceEquality", "FallThrough", "FutureReturnValueIgnored", "MixedMutabilityReturnType", "EmptyCatch", "MissingCasesInEnumSwitch", "OperatorPrecedence", "StaticAssignmentInConstructor", "ReferenceEquality", "EqualsHashCode", "EqualsGetClass", "TypeParameterUnusedInFormals", "StringSplitter", "InlineMeSuggester", "NULL_DEREFERENCE"] | ||||||
| @@ -95,9 +95,9 @@ tasks.named<ShadowJar>("shadowJar") { | |||||||
| tasks { | tasks { | ||||||
|     withType<Javadoc> { |     withType<Javadoc> { | ||||||
|         val opt = options as StandardJavadocDocletOptions |         val opt = options as StandardJavadocDocletOptions | ||||||
|         opt.links("https://papermc.io/javadocs/paper/1.17/") |         opt.links("https://papermc.io/javadocs/paper/1.18/") | ||||||
|         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.7/") |         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.8/") | ||||||
|         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.7/") |         opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/") | ||||||
|         opt.links("https://jd.adventure.kyori.net/api/4.9.3/") |         opt.links("https://jd.adventure.kyori.net/api/4.9.3/") | ||||||
|         opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/") |         opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/") | ||||||
|         opt.links("https://checkerframework.org/api/") |         opt.links("https://checkerframework.org/api/") | ||||||
|   | |||||||
| @@ -218,6 +218,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|     private PlatformWorldManager<World> worldManager; |     private PlatformWorldManager<World> worldManager; | ||||||
|     private Locale serverLocale; |     private Locale serverLocale; | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("StringSplitter") | ||||||
|     @Override |     @Override | ||||||
|     public int @NonNull [] serverVersion() { |     public int @NonNull [] serverVersion() { | ||||||
|         if (this.version == null) { |         if (this.version == null) { | ||||||
| @@ -323,8 +324,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|         // Comments |         // Comments | ||||||
|         CommentManager.registerDefaultInboxes(); |         CommentManager.registerDefaultInboxes(); | ||||||
|  |  | ||||||
|         plotSquared.startExpiryTasks(); |  | ||||||
|  |  | ||||||
|         // Do stuff that was previously done in PlotSquared |         // Do stuff that was previously done in PlotSquared | ||||||
|         // Kill entities |         // Kill entities | ||||||
|         if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) { |         if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) { | ||||||
| @@ -421,6 +420,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|             }, TaskTime.ticks(1L)); |             }, TaskTime.ticks(1L)); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         plotSquared.startExpiryTasks(); | ||||||
|  |  | ||||||
|         // Once the server has loaded force updating all generators known to P2 |         // Once the server has loaded force updating all generators known to P2 | ||||||
|         TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L)); |         TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L)); | ||||||
|  |  | ||||||
| @@ -970,7 +971,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                                 } |                                                 } | ||||||
|                                                 iterator.remove(); |                                                 iterator.remove(); | ||||||
|                                                 entity.remove(); |                                                 entity.remove(); | ||||||
|                                                 continue; |  | ||||||
|                                             } |                                             } | ||||||
|                                         } |                                         } | ||||||
|                                     } else { |                                     } else { | ||||||
| @@ -982,7 +982,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                             } |                                             } | ||||||
|                                             iterator.remove(); |                                             iterator.remove(); | ||||||
|                                             entity.remove(); |                                             entity.remove(); | ||||||
|                                             continue; |  | ||||||
|                                         } |                                         } | ||||||
|                                     } |                                     } | ||||||
|                                 } |                                 } | ||||||
| @@ -1223,7 +1222,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     @NonNull |     @NonNull | ||||||
|     @SuppressWarnings("ALL") |     @SuppressWarnings("unchecked") | ||||||
|     public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() { |     public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() { | ||||||
|         return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class); |         return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -461,6 +461,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper { | |||||||
|         this.tamed.tamed = tamed.isTamed(); |         this.tamed.tamed = tamed.isTamed(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // Paper deprecation | ||||||
|     @Override |     @Override | ||||||
|     public Entity spawn(World world, int xOffset, int zOffset) { |     public Entity spawn(World world, int xOffset, int zOffset) { | ||||||
|         Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset); |         Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset); | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ import org.bukkit.World; | |||||||
|  |  | ||||||
| public class WorldManagerModule extends AbstractModule { | public class WorldManagerModule extends AbstractModule { | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("removal") // Internal use only | ||||||
|     @Provides |     @Provides | ||||||
|     @Singleton |     @Singleton | ||||||
|     PlatformWorldManager<World> provideWorldManager() { |     PlatformWorldManager<World> provideWorldManager() { | ||||||
|   | |||||||
| @@ -60,7 +60,7 @@ import java.util.List; | |||||||
|  |  | ||||||
| public class EntitySpawnListener implements Listener { | public class EntitySpawnListener implements Listener { | ||||||
|  |  | ||||||
|     private final static String KEY = "P2"; |     private static final String KEY = "P2"; | ||||||
|     private static boolean ignoreTP = false; |     private static boolean ignoreTP = false; | ||||||
|     private static boolean hasPlotArea = false; |     private static boolean hasPlotArea = false; | ||||||
|     private static String areaName = null; |     private static String areaName = null; | ||||||
|   | |||||||
| @@ -36,7 +36,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager; | |||||||
| import net.kyori.adventure.text.minimessage.Template; | import net.kyori.adventure.text.minimessage.Template; | ||||||
| import org.bukkit.block.Banner; | import org.bukkit.block.Banner; | ||||||
| import org.bukkit.block.Beacon; | import org.bukkit.block.Beacon; | ||||||
| import org.bukkit.block.Bed; |  | ||||||
| import org.bukkit.block.BlockState; | import org.bukkit.block.BlockState; | ||||||
| import org.bukkit.block.CommandBlock; | import org.bukkit.block.CommandBlock; | ||||||
| import org.bukkit.block.Comparator; | import org.bukkit.block.Comparator; | ||||||
| @@ -51,6 +50,7 @@ import org.bukkit.block.Jukebox; | |||||||
| import org.bukkit.block.Sign; | import org.bukkit.block.Sign; | ||||||
| import org.bukkit.block.Skull; | import org.bukkit.block.Skull; | ||||||
| import org.bukkit.block.Structure; | import org.bukkit.block.Structure; | ||||||
|  | import org.bukkit.block.data.type.Bed; | ||||||
| import org.bukkit.event.EventHandler; | import org.bukkit.event.EventHandler; | ||||||
| import org.bukkit.event.block.BlockPlaceEvent; | import org.bukkit.event.block.BlockPlaceEvent; | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|   | |||||||
| @@ -154,7 +154,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; | |||||||
|  |  | ||||||
| import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Arrays; |  | ||||||
| import java.util.HashSet; | import java.util.HashSet; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Locale; | import java.util.Locale; | ||||||
| @@ -224,6 +223,7 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("StringSplitter") | ||||||
|     @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) |     @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) | ||||||
|     public void playerCommand(PlayerCommandPreprocessEvent event) { |     public void playerCommand(PlayerCommandPreprocessEvent event) { | ||||||
|         String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim(); |         String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim(); | ||||||
| @@ -379,6 +379,7 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|         this.eventDispatcher.doRespawnTask(pp); |         this.eventDispatcher.doRespawnTask(pp); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // We explicitly want #getHomeSynchronous here | ||||||
|     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) | ||||||
|     public void onTeleport(PlayerTeleportEvent event) { |     public void onTeleport(PlayerTeleportEvent event) { | ||||||
|         Player player = event.getPlayer(); |         Player player = event.getPlayer(); | ||||||
| @@ -1063,9 +1064,13 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|         if (area == null) { |         if (area == null) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         PlayerBlockEventType eventType = null; |         PlayerBlockEventType eventType; | ||||||
|         BlockType blocktype1; |         BlockType blocktype1; | ||||||
|         Block block = event.getClickedBlock(); |         Block block = event.getClickedBlock(); | ||||||
|  |         if (block == null) { | ||||||
|  |             // We do not care in this case, the player is likely interacting with air ("nothing"). | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         Location location = BukkitUtil.adapt(block.getLocation()); |         Location location = BukkitUtil.adapt(block.getLocation()); | ||||||
|         Action action = event.getAction(); |         Action action = event.getAction(); | ||||||
|         switch (action) { |         switch (action) { | ||||||
| @@ -1667,6 +1672,7 @@ public class PlayerEventListener extends PlotListener implements Listener { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility | ||||||
|     @EventHandler |     @EventHandler | ||||||
|     public void onLocaleChange(final PlayerLocaleChangeEvent event) { |     public void onLocaleChange(final PlayerLocaleChangeEvent event) { | ||||||
|         // The event is fired before the player is deemed online upon login |         // The event is fired before the player is deemed online upon login | ||||||
|   | |||||||
| @@ -43,7 +43,6 @@ import java.lang.reflect.Method; | |||||||
|  |  | ||||||
| import static com.plotsquared.core.util.ReflectionUtils.getRefClass; | import static com.plotsquared.core.util.ReflectionUtils.getRefClass; | ||||||
|  |  | ||||||
| @SuppressWarnings("unused") |  | ||||||
| public class SingleWorldListener implements Listener { | public class SingleWorldListener implements Listener { | ||||||
|  |  | ||||||
|     private final Method methodGetHandleChunk; |     private final Method methodGetHandleChunk; | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; | |||||||
|  * @deprecated Deprecated and scheduled for removal without replacement |  * @deprecated Deprecated and scheduled for removal without replacement | ||||||
|  *         in favor of the build in setup wizard. |  *         in favor of the build in setup wizard. | ||||||
|  */ |  */ | ||||||
| @Deprecated(forRemoval = true) | @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
| @Singleton | @Singleton | ||||||
| public class MultiverseWorldManager extends BukkitWorldManager { | public class MultiverseWorldManager extends BukkitWorldManager { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -162,6 +162,7 @@ public class BukkitPlayer extends PlotPlayer<Player> { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("StringSplitter") | ||||||
|     @Override |     @Override | ||||||
|     @NonNegative |     @NonNegative | ||||||
|     public int hasPermissionRange( |     public int hasPermissionRange( | ||||||
| @@ -319,7 +320,7 @@ public class BukkitPlayer extends PlotPlayer<Player> { | |||||||
|         if (id == ItemTypes.AIR) { |         if (id == ItemTypes.AIR) { | ||||||
|             // Let's just stop all the discs because why not? |             // Let's just stop all the discs because why not? | ||||||
|             for (final Sound sound : Arrays.stream(Sound.values()) |             for (final Sound sound : Arrays.stream(Sound.values()) | ||||||
|                     .filter(sound -> sound.name().contains("DISC")).collect(Collectors.toList())) { |                     .filter(sound -> sound.name().contains("DISC")).toList()) { | ||||||
|                 player.stopSound(sound); |                 player.stopSound(sound); | ||||||
|             } |             } | ||||||
|             // this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR); |             // this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR); | ||||||
| @@ -331,6 +332,7 @@ public class BukkitPlayer extends PlotPlayer<Player> { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // Needed for Spigot compatibility | ||||||
|     @Override |     @Override | ||||||
|     public void kick(final String message) { |     public void kick(final String message) { | ||||||
|         this.player.kickPlayer(message); |         this.player.kickPlayer(message); | ||||||
|   | |||||||
| @@ -51,7 +51,6 @@ import com.sk89q.worldedit.world.biome.BiomeType; | |||||||
| import com.sk89q.worldedit.world.block.BaseBlock; | import com.sk89q.worldedit.world.block.BaseBlock; | ||||||
| import com.sk89q.worldedit.world.block.BlockState; | import com.sk89q.worldedit.world.block.BlockState; | ||||||
| import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.Chunk; |  | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.block.Container; | import org.bukkit.block.Container; | ||||||
| import org.bukkit.block.data.BlockData; | import org.bukkit.block.data.BlockData; | ||||||
| @@ -199,7 +198,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator { | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 if (localChunk.getTiles().size() > 0) { |                 if (localChunk.getTiles().size() > 0) { | ||||||
|                     localChunk.getTiles().forEach(((blockVector3, tag) -> { |                     localChunk.getTiles().forEach((blockVector3, tag) -> { | ||||||
|                         try { |                         try { | ||||||
|                             BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag); |                             BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag); | ||||||
|                             getWorld().setBlock(blockVector3, block, noSideEffectSet); |                             getWorld().setBlock(blockVector3, block, noSideEffectSet); | ||||||
| @@ -207,7 +206,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator { | |||||||
|                             StateWrapper sw = new StateWrapper(tag); |                             StateWrapper sw = new StateWrapper(tag); | ||||||
|                             sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ()); |                             sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ()); | ||||||
|                         } |                         } | ||||||
|                     })); |                     }); | ||||||
|                 } |                 } | ||||||
|                 if (localChunk.getEntities().size() > 0) { |                 if (localChunk.getEntities().size() > 0) { | ||||||
|                     localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity)); |                     localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity)); | ||||||
| @@ -238,6 +237,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator { | |||||||
|     /** |     /** | ||||||
|      * Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails |      * Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unused") | ||||||
|     private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) { |     private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) { | ||||||
|         try { |         try { | ||||||
|             BlockVector3 loc = BlockVector3.at(x, y, z); |             BlockVector3 loc = BlockVector3.at(x, y, z); | ||||||
| @@ -266,9 +266,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator { | |||||||
|         } catch (WorldEditException ignored) { |         } catch (WorldEditException ignored) { | ||||||
|             // Fallback to not so nice method |             // Fallback to not so nice method | ||||||
|             BlockData blockData = BukkitAdapter.adapt(block); |             BlockData blockData = BukkitAdapter.adapt(block); | ||||||
|             Chunk chunk = getBukkitWorld().getChunkAt(blockVector2.getX(), blockVector2.getZ()); |             Block existing = getBukkitWorld().getBlockAt(x, y, z); | ||||||
|  |  | ||||||
|             Block existing = chunk.getBlock(x, y, z); |  | ||||||
|             final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData()); |             final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData()); | ||||||
|             if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) { |             if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) { | ||||||
|                 return; |                 return; | ||||||
|   | |||||||
| @@ -166,6 +166,7 @@ public class StateWrapper { | |||||||
|         return str; |         return str; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // #setLine is needed for Spigot compatibility | ||||||
|     public boolean restoreTag(String worldName, int x, int y, int z) { |     public boolean restoreTag(String worldName, int x, int y, int z) { | ||||||
|         if (this.tag == null) { |         if (this.tag == null) { | ||||||
|             return false; |             return false; | ||||||
|   | |||||||
| @@ -77,6 +77,7 @@ public class BukkitInventoryUtil extends InventoryUtil { | |||||||
|         return stack; |         return stack; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // Paper deprecation | ||||||
|     @Override |     @Override | ||||||
|     public void open(PlotInventory inv) { |     public void open(PlotInventory inv) { | ||||||
|         BukkitPlayer bp = (BukkitPlayer) inv.getPlayer(); |         BukkitPlayer bp = (BukkitPlayer) inv.getPlayer(); | ||||||
| @@ -113,6 +114,7 @@ public class BukkitInventoryUtil extends InventoryUtil { | |||||||
|         bp.player.updateInventory(); |         bp.player.updateInventory(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // Paper deprecation | ||||||
|     public PlotItemStack getItem(ItemStack item) { |     public PlotItemStack getItem(ItemStack item) { | ||||||
|         if (item == null) { |         if (item == null) { | ||||||
|             return null; |             return null; | ||||||
| @@ -145,6 +147,7 @@ public class BukkitInventoryUtil extends InventoryUtil { | |||||||
|                 .toArray(PlotItemStack[]::new); |                 .toArray(PlotItemStack[]::new); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") // #getTitle is needed for Spigot compatibility | ||||||
|     @Override |     @Override | ||||||
|     public boolean isOpen(PlotInventory plotInventory) { |     public boolean isOpen(PlotInventory plotInventory) { | ||||||
|         if (!plotInventory.isOpen()) { |         if (!plotInventory.isOpen()) { | ||||||
|   | |||||||
| @@ -61,6 +61,7 @@ public class UpdateUtility implements Listener { | |||||||
|         internalVersion = PlotSquared.get().getVersion(); |         internalVersion = PlotSquared.get().getVersion(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet | ||||||
|     public void updateChecker() { |     public void updateChecker() { | ||||||
|         task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> { |         task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> { | ||||||
|             try { |             try { | ||||||
| @@ -68,7 +69,7 @@ public class UpdateUtility implements Listener { | |||||||
|                         "https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506") |                         "https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506") | ||||||
|                         .openConnection(); |                         .openConnection(); | ||||||
|                 connection.setRequestMethod("GET"); |                 connection.setRequestMethod("GET"); | ||||||
|                 JsonObject result = (new JsonParser()) |                 JsonObject result = new JsonParser() | ||||||
|                         .parse(new JsonReader(new InputStreamReader(connection.getInputStream()))) |                         .parse(new JsonReader(new InputStreamReader(connection.getInputStream()))) | ||||||
|                         .getAsJsonObject(); |                         .getAsJsonObject(); | ||||||
|                 spigotVersion = result.get("current_version").getAsString(); |                 spigotVersion = result.get("current_version").getAsString(); | ||||||
| @@ -91,7 +92,7 @@ public class UpdateUtility implements Listener { | |||||||
|                 notify = false; |                 notify = false; | ||||||
|                 LOGGER.info("Congratulations! You are running the latest PlotSquared version"); |                 LOGGER.info("Congratulations! You are running the latest PlotSquared version"); | ||||||
|             } |             } | ||||||
|         }, 0L, Settings.UpdateChecker.POLL_RATE * 60 * 20); |         }, 0L, (long) Settings.UpdateChecker.POLL_RATE * 60 * 20); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void cancelTask() { |     private void cancelTask() { | ||||||
|   | |||||||
| @@ -75,6 +75,7 @@ public class FaweSchematicHandler extends SchematicHandler { | |||||||
|         return delegate.save(tag, path); |         return delegate.save(tag, path); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("removal") // Just the override | ||||||
|     @Override |     @Override | ||||||
|     public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) { |     public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) { | ||||||
|         delegate.upload(tag, uuid, file, whenDone); |         delegate.upload(tag, uuid, file, whenDone); | ||||||
|   | |||||||
| @@ -54,3 +54,13 @@ tasks.processResources { | |||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | tasks { | ||||||
|  |     withType<Javadoc> { | ||||||
|  |         val opt = options as StandardJavadocDocletOptions | ||||||
|  |         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.8/") | ||||||
|  |         opt.links("https://jd.adventure.kyori.net/api/4.9.3/") | ||||||
|  |         opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/") | ||||||
|  |         opt.links("https://checkerframework.org/api/") | ||||||
|  |     } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -274,6 +274,7 @@ public interface PlotPlatform<P> extends LocaleHolder { | |||||||
|      * Get the {@link PlotAreaManager} implementation. |      * Get the {@link PlotAreaManager} implementation. | ||||||
|      * |      * | ||||||
|      * @return the PlotAreaManager |      * @return the PlotAreaManager | ||||||
|  |      * @since 6.1.4 | ||||||
|      */ |      */ | ||||||
|     @NonNull PlotAreaManager plotAreaManager(); |     @NonNull PlotAreaManager plotAreaManager(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -306,7 +306,7 @@ public class PlotSquared { | |||||||
|      * |      * | ||||||
|      * @param version  First version |      * @param version  First version | ||||||
|      * @param version2 Second version |      * @param version2 Second version | ||||||
|      * @return true if `version` is >= `version2` |      * @return {@code true} if `version` is >= `version2` | ||||||
|      */ |      */ | ||||||
|     public boolean checkVersion( |     public boolean checkVersion( | ||||||
|             final int[] version, |             final int[] version, | ||||||
| @@ -338,10 +338,13 @@ public class PlotSquared { | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Add a global reference to a plot world. |      * Add a global reference to a plot world. | ||||||
|  |      * <p> | ||||||
|  |      * You can remove the reference by calling {@link #removePlotArea(PlotArea)} | ||||||
|  |      * </p> | ||||||
|      * |      * | ||||||
|      * @param plotArea the {@link PlotArea} to add. |      * @param plotArea the {@link PlotArea} to add. | ||||||
|      * @see #removePlotArea(PlotArea) To remove the reference |  | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public void addPlotArea(final @NonNull PlotArea plotArea) { |     public void addPlotArea(final @NonNull PlotArea plotArea) { | ||||||
|         HashMap<PlotId, Plot> plots; |         HashMap<PlotId, Plot> plots; | ||||||
|         if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) { |         if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) { | ||||||
| @@ -556,6 +559,7 @@ public class PlotSquared { | |||||||
|      * |      * | ||||||
|      * @param input an array of plots to sort |      * @param input an array of plots to sort | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) { |     private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) { | ||||||
|         List<Plot>[] bucket = new ArrayList[32]; |         List<Plot>[] bucket = new ArrayList[32]; | ||||||
|         Arrays.fill(bucket, new ArrayList<>()); |         Arrays.fill(bucket, new ArrayList<>()); | ||||||
| @@ -696,20 +700,12 @@ public class PlotSquared { | |||||||
|         ArrayList<Plot> toReturn = new ArrayList<>(plots.size()); |         ArrayList<Plot> toReturn = new ArrayList<>(plots.size()); | ||||||
|         for (PlotArea area : areas) { |         for (PlotArea area : areas) { | ||||||
|             switch (type) { |             switch (type) { | ||||||
|                 case CREATION_DATE: |                 case CREATION_DATE -> toReturn.addAll(sortPlotsByTemp(map.get(area))); | ||||||
|                     toReturn.addAll(sortPlotsByTemp(map.get(area))); |                 case CREATION_DATE_TIMESTAMP -> toReturn.addAll(sortPlotsByTimestamp(map.get(area))); | ||||||
|                     break; |                 case DISTANCE_FROM_ORIGIN -> toReturn.addAll(sortPlotsByHash(map.get(area))); | ||||||
|                 case CREATION_DATE_TIMESTAMP: |                 case LAST_MODIFIED -> toReturn.addAll(sortPlotsByModified(map.get(area))); | ||||||
|                     toReturn.addAll(sortPlotsByTimestamp(map.get(area))); |                 default -> { | ||||||
|                     break; |                 } | ||||||
|                 case DISTANCE_FROM_ORIGIN: |  | ||||||
|                     toReturn.addAll(sortPlotsByHash(map.get(area))); |  | ||||||
|                     break; |  | ||||||
|                 case LAST_MODIFIED: |  | ||||||
|                     toReturn.addAll(sortPlotsByModified(map.get(area))); |  | ||||||
|                     break; |  | ||||||
|                 default: |  | ||||||
|                     break; |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return toReturn; |         return toReturn; | ||||||
| @@ -739,7 +735,7 @@ public class PlotSquared { | |||||||
|      * |      * | ||||||
|      * @param plot      the plot to remove |      * @param plot      the plot to remove | ||||||
|      * @param callEvent If to call an event about the plot being removed |      * @param callEvent If to call an event about the plot being removed | ||||||
|      * @return true if plot existed | false if it didn't |      * @return {@code true} if plot existed | {@code false} if it didn't | ||||||
|      */ |      */ | ||||||
|     public boolean removePlot( |     public boolean removePlot( | ||||||
|             final @NonNull Plot plot, |             final @NonNull Plot plot, | ||||||
| @@ -1482,7 +1478,7 @@ public class PlotSquared { | |||||||
|      * |      * | ||||||
|      * @param world            World name |      * @param world            World name | ||||||
|      * @param chunkCoordinates Chunk coordinates |      * @param chunkCoordinates Chunk coordinates | ||||||
|      * @return True if the chunk uses non-standard generation, false if not |      * @return {@code true} if the chunk uses non-standard generation, {@code false} if not | ||||||
|      */ |      */ | ||||||
|     public boolean isNonStandardGeneration( |     public boolean isNonStandardGeneration( | ||||||
|             final @NonNull String world, |             final @NonNull String world, | ||||||
| @@ -1527,10 +1523,12 @@ public class PlotSquared { | |||||||
|     /** |     /** | ||||||
|      * Get the caption map belonging to a namespace. If none exists, a dummy |      * Get the caption map belonging to a namespace. If none exists, a dummy | ||||||
|      * caption map will be returned. |      * caption map will be returned. | ||||||
|  |      * <p> | ||||||
|  |      * You can register a caption map by calling {@link #registerCaptionMap(String, CaptionMap)} | ||||||
|  |      * </p> | ||||||
|      * |      * | ||||||
|      * @param namespace Namespace |      * @param namespace Namespace | ||||||
|      * @return Map instance |      * @return Map instance | ||||||
|      * @see #registerCaptionMap(String, CaptionMap) To register a caption map |  | ||||||
|      */ |      */ | ||||||
|     public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) { |     public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) { | ||||||
|         return this.captionMaps.computeIfAbsent( |         return this.captionMaps.computeIfAbsent( | ||||||
| @@ -1540,7 +1538,7 @@ public class PlotSquared { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Register a caption map. The namespace needs be equal to the namespace used for |      * Register a caption map. The namespace needs to be equal to the namespace used for | ||||||
|      * the {@link TranslatableCaption}s inside the map. |      * the {@link TranslatableCaption}s inside the map. | ||||||
|      * |      * | ||||||
|      * @param namespace  Namespace |      * @param namespace  Namespace | ||||||
|   | |||||||
| @@ -122,7 +122,7 @@ public final class PlotVersion { | |||||||
|      * Compare a given version string with the one cached here. |      * Compare a given version string with the one cached here. | ||||||
|      * |      * | ||||||
|      * @param versionString the version to compare |      * @param versionString the version to compare | ||||||
|      * @return true if the given version is a "later" version |      * @return {@code true} if the given version is a "later" version | ||||||
|      */ |      */ | ||||||
|     public boolean isLaterVersion(final @NonNull String versionString) { |     public boolean isLaterVersion(final @NonNull String versionString) { | ||||||
|         int dash = versionString.indexOf('-'); |         int dash = versionString.indexOf('-'); | ||||||
| @@ -144,7 +144,7 @@ public final class PlotVersion { | |||||||
|      * Compare a given version with the one cached here. |      * Compare a given version with the one cached here. | ||||||
|      * |      * | ||||||
|      * @param verArray the version to compare |      * @param verArray the version to compare | ||||||
|      * @return true if the given version is a "later" version |      * @return {@code true} if the given version is a "later" version | ||||||
|      */ |      */ | ||||||
|     public boolean isLaterVersion(int[] verArray) { |     public boolean isLaterVersion(int[] verArray) { | ||||||
|         if (verArray[0] > version[0]) { |         if (verArray[0] > version[0]) { | ||||||
|   | |||||||
| @@ -88,7 +88,7 @@ public interface BackupManager { | |||||||
|      * Returns true if (potentially) destructive actions should cause |      * Returns true if (potentially) destructive actions should cause | ||||||
|      * PlotSquared to create automatic plot backups |      * PlotSquared to create automatic plot backups | ||||||
|      * |      * | ||||||
|      * @return True if automatic backups are enabled |      * @return {@code true} if automatic backups are enabled | ||||||
|      */ |      */ | ||||||
|     boolean shouldAutomaticallyBackup(); |     boolean shouldAutomaticallyBackup(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -29,7 +29,8 @@ import java.util.Arrays; | |||||||
|  |  | ||||||
| public class ArrayUtil { | public class ArrayUtil { | ||||||
|  |  | ||||||
|     public static final <T> T[] concatAll(T[] first, T[]... rest) { |     @SuppressWarnings("unchecked") | ||||||
|  |     public static <T> T[] concatAll(T[] first, T[]... rest) { | ||||||
|         int totalLength = first.length; |         int totalLength = first.length; | ||||||
|         for (T[] array : rest) { |         for (T[] array : rest) { | ||||||
|             totalLength += array.length; |             totalLength += array.length; | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ public class FlatRandomCollection<T> extends RandomCollection<T> { | |||||||
|  |  | ||||||
|     private final T[] values; |     private final T[] values; | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public FlatRandomCollection(Map<T, Double> weights, Random random) { |     public FlatRandomCollection(Map<T, Double> weights, Random random) { | ||||||
|         super(weights, random); |         super(weights, random); | ||||||
|         int max = 0; |         int max = 0; | ||||||
|   | |||||||
| @@ -241,6 +241,7 @@ public class QuadMap<T> { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public void recalculateSkip() { |     public void recalculateSkip() { | ||||||
|         QuadMap<T> map = null; |         QuadMap<T> map = null; | ||||||
|         for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) { |         for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) { | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ import net.kyori.adventure.text.minimessage.Template; | |||||||
|  * @deprecated In favor of "/plot toggle chat" and |  * @deprecated In favor of "/plot toggle chat" and | ||||||
|  *         scheduled for removal within the next major release. |  *         scheduled for removal within the next major release. | ||||||
|  */ |  */ | ||||||
| @Deprecated(forRemoval = true) | @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
| @CommandDeclaration(command = "chat", | @CommandDeclaration(command = "chat", | ||||||
|         usage = "/plot chat", |         usage = "/plot chat", | ||||||
|         permission = "plots.chat", |         permission = "plots.chat", | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ import java.util.concurrent.CompletableFuture; | |||||||
| public class Clear extends Command { | public class Clear extends Command { | ||||||
|  |  | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     private final GlobalBlockQueue blockQueue; |     private final GlobalBlockQueue blockQueue; | ||||||
|  |  | ||||||
|     @Inject |     @Inject | ||||||
|   | |||||||
| @@ -288,7 +288,7 @@ public abstract class Command { | |||||||
|      * @param args     Arguments |      * @param args     Arguments | ||||||
|      * @param confirm  Instance, Success, Failure |      * @param confirm  Instance, Success, Failure | ||||||
|      * @param whenDone task to run when done |      * @param whenDone task to run when done | ||||||
|      * @return CompletableFuture true if the command executed fully, false in |      * @return CompletableFuture {@code true} if the command executed fully, {@code false} in | ||||||
|      *         any other case |      *         any other case | ||||||
|      */ |      */ | ||||||
|     public CompletableFuture<Boolean> execute( |     public CompletableFuture<Boolean> execute( | ||||||
| @@ -375,7 +375,6 @@ public abstract class Command { | |||||||
|             boolean failed = args.length < reqArgs.length; |             boolean failed = args.length < reqArgs.length; | ||||||
|             String[] baseSplit = getCommandString().split(" "); |             String[] baseSplit = getCommandString().split(" "); | ||||||
|             String[] fullSplit = getUsage().split(" "); |             String[] fullSplit = getUsage().split(" "); | ||||||
|             String base = getCommandString(); |  | ||||||
|             if (fullSplit.length - baseSplit.length < reqArgs.length) { |             if (fullSplit.length - baseSplit.length < reqArgs.length) { | ||||||
|                 String[] tmp = new String[baseSplit.length + reqArgs.length]; |                 String[] tmp = new String[baseSplit.length + reqArgs.length]; | ||||||
|                 System.arraycopy(fullSplit, 0, tmp, 0, fullSplit.length); |                 System.arraycopy(fullSplit, 0, tmp, 0, fullSplit.length); | ||||||
|   | |||||||
| @@ -69,6 +69,7 @@ public class Condense extends SubCommand { | |||||||
|         this.worldUtil = worldUtil; |         this.worldUtil = worldUtil; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     @Override |     @Override | ||||||
|     public boolean onCommand(final PlotPlayer<?> player, String[] args) { |     public boolean onCommand(final PlotPlayer<?> player, String[] args) { | ||||||
|         if (args.length != 2 && args.length != 3) { |         if (args.length != 2 && args.length != 3) { | ||||||
|   | |||||||
| @@ -255,7 +255,7 @@ public class DatabaseCommand extends SubCommand { | |||||||
|                 player.sendMessage(TranslatableCaption.of("database.failed_to_save_plots")); |                 player.sendMessage(TranslatableCaption.of("database.failed_to_save_plots")); | ||||||
|                 player.sendMessage(TranslatableCaption.of("errors.stacktrace_begin")); |                 player.sendMessage(TranslatableCaption.of("errors.stacktrace_begin")); | ||||||
|                 e.printStackTrace(); |                 e.printStackTrace(); | ||||||
|                 player.sendMessage(TranslatableCaption.of(("errors.stacktrace_end"))); |                 player.sendMessage(TranslatableCaption.of("errors.stacktrace_end")); | ||||||
|                 player.sendMessage(TranslatableCaption.of("database.invalid_args")); |                 player.sendMessage(TranslatableCaption.of("database.invalid_args")); | ||||||
|                 return false; |                 return false; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -94,12 +94,12 @@ public class Download extends SubCommand { | |||||||
|             player.sendMessage(TranslatableCaption.of("info.plot_unowned")); |             player.sendMessage(TranslatableCaption.of("info.plot_unowned")); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && (!DoneFlag.isDone(plot))) && !Permissions |         if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && !DoneFlag.isDone(plot)) && !Permissions | ||||||
|                 .hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DOWNLOAD)) { |                 .hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DOWNLOAD)) { | ||||||
|             player.sendMessage(TranslatableCaption.of("done.done_not_done")); |             player.sendMessage(TranslatableCaption.of("done.done_not_done")); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         if ((!plot.isOwner(player.getUUID())) && !Permissions |         if (!plot.isOwner(player.getUUID()) && !Permissions | ||||||
|                 .hasPermission(player, Permission.PERMISSION_ADMIN.toString())) { |                 .hasPermission(player, Permission.PERMISSION_ADMIN.toString())) { | ||||||
|             player.sendMessage(TranslatableCaption.of("permission.no_plot_perms")); |             player.sendMessage(TranslatableCaption.of("permission.no_plot_perms")); | ||||||
|             return false; |             return false; | ||||||
|   | |||||||
| @@ -165,7 +165,7 @@ public final class FlagCommand extends Command { | |||||||
|     /** |     /** | ||||||
|      * Checks if the player is allowed to modify the flags at their current location |      * Checks if the player is allowed to modify the flags at their current location | ||||||
|      * |      * | ||||||
|      * @return true if the player is allowed to modify the flags at their current location |      * @return {@code true} if the player is allowed to modify the flags at their current location | ||||||
|      */ |      */ | ||||||
|     private static boolean checkRequirements(final @NonNull PlotPlayer<?> player) { |     private static boolean checkRequirements(final @NonNull PlotPlayer<?> player) { | ||||||
|         final Location location = player.getLocation(); |         final Location location = player.getLocation(); | ||||||
| @@ -367,6 +367,7 @@ public final class FlagCommand extends Command { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unchecked", "rawtypes"}) | ||||||
|     @CommandDeclaration(command = "add", |     @CommandDeclaration(command = "add", | ||||||
|             aliases = {"a", "add"}, |             aliases = {"a", "add"}, | ||||||
|             usage = "/plot flag add <flag> <value>", |             usage = "/plot flag add <flag> <value>", | ||||||
| @@ -435,6 +436,7 @@ public final class FlagCommand extends Command { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unchecked", "rawtypes"}) | ||||||
|     @CommandDeclaration(command = "remove", |     @CommandDeclaration(command = "remove", | ||||||
|             aliases = {"r", "remove", "delete"}, |             aliases = {"r", "remove", "delete"}, | ||||||
|             usage = "/plot flag remove <flag> [values]", |             usage = "/plot flag remove <flag> [values]", | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ public class Like extends SubCommand { | |||||||
|                     }); |                     }); | ||||||
|                     for (final Plot plot : plots) { |                     for (final Plot plot : plots) { | ||||||
|                         if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(plot)) && plot |                         if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(plot)) && plot | ||||||
|                                 .isBasePlot() && (!plot.getLikes().containsKey(uuid))) { |                                 .isBasePlot() && !plot.getLikes().containsKey(uuid)) { | ||||||
|                             plot.teleportPlayer(player, TeleportCause.COMMAND_LIKE, result -> { |                             plot.teleportPlayer(player, TeleportCause.COMMAND_LIKE, result -> { | ||||||
|                             }); |                             }); | ||||||
|                             player.sendMessage(TranslatableCaption.of("tutorial.rate_this")); |                             player.sendMessage(TranslatableCaption.of("tutorial.rate_this")); | ||||||
|   | |||||||
| @@ -104,7 +104,7 @@ public class Rate extends SubCommand { | |||||||
|                     UUID uuid = player.getUUID(); |                     UUID uuid = player.getUUID(); | ||||||
|                     for (Plot p : plots) { |                     for (Plot p : plots) { | ||||||
|                         if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(p)) && p |                         if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(p)) && p | ||||||
|                                 .isBasePlot() && (!p.getRatings().containsKey(uuid)) && !p |                                 .isBasePlot() && !p.getRatings().containsKey(uuid) && !p | ||||||
|                                 .isAdded(uuid)) { |                                 .isAdded(uuid)) { | ||||||
|                             p.teleportPlayer(player, TeleportCause.COMMAND_RATE, result -> { |                             p.teleportPlayer(player, TeleportCause.COMMAND_RATE, result -> { | ||||||
|                             }); |                             }); | ||||||
|   | |||||||
| @@ -88,7 +88,6 @@ public class RegenAllRoads extends SubCommand { | |||||||
|             ); |             ); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         String name = args[0]; |  | ||||||
|         PlotManager manager = area.getPlotManager(); |         PlotManager manager = area.getPlotManager(); | ||||||
|         if (!(manager instanceof HybridPlotManager)) { |         if (!(manager instanceof HybridPlotManager)) { | ||||||
|             player.sendMessage(TranslatableCaption.of("errors.invalid_plot_world")); |             player.sendMessage(TranslatableCaption.of("errors.invalid_plot_world")); | ||||||
|   | |||||||
| @@ -50,7 +50,7 @@ import java.util.UUID; | |||||||
|  * @deprecated In favor of "/plot download" (Arkitektonika) and scheduled |  * @deprecated In favor of "/plot download" (Arkitektonika) and scheduled | ||||||
|  *         for removal within the next major release. |  *         for removal within the next major release. | ||||||
|  */ |  */ | ||||||
| @Deprecated(forRemoval = true) | @Deprecated(forRemoval = true, since = "6.0.9") | ||||||
| @CommandDeclaration(command = "save", | @CommandDeclaration(command = "save", | ||||||
|         category = CommandCategory.SCHEMATIC, |         category = CommandCategory.SCHEMATIC, | ||||||
|         requiredType = RequiredType.NONE, |         requiredType = RequiredType.NONE, | ||||||
|   | |||||||
| @@ -181,8 +181,6 @@ public class SchematicCmd extends SubCommand { | |||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
|             case "saveall", "exportall" -> { |             case "saveall", "exportall" -> { | ||||||
|                 Location loc = player.getLocation(); |  | ||||||
|                 final Plot plot = loc.getPlotAbs(); |  | ||||||
|                 if (!(player instanceof ConsolePlayer)) { |                 if (!(player instanceof ConsolePlayer)) { | ||||||
|                     player.sendMessage(TranslatableCaption.of("console.not_console")); |                     player.sendMessage(TranslatableCaption.of("console.not_console")); | ||||||
|                     return false; |                     return false; | ||||||
|   | |||||||
| @@ -100,7 +100,7 @@ public class Set extends SubCommand { | |||||||
|  |  | ||||||
|                 if (Settings.Enabled_Components.CHUNK_PROCESSOR) { |                 if (Settings.Enabled_Components.CHUNK_PROCESSOR) { | ||||||
|                     forbiddenTypes.addAll(worldUtil.getTileEntityTypes().stream().map( |                     forbiddenTypes.addAll(worldUtil.getTileEntityTypes().stream().map( | ||||||
|                             BlockType::getName).collect(Collectors.toList())); |                             BlockType::getName).toList()); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_ALLOW_UNSAFE) && |                 if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_ALLOW_UNSAFE) && | ||||||
|   | |||||||
| @@ -361,30 +361,4 @@ public class Visit extends Command { | |||||||
|         return completions; |         return completions; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void completeNumbers(final List<Command> commands, final String arg, final int start) { |  | ||||||
|         for (int i = 0; i < 100; i++) { |  | ||||||
|             final String command = Integer.toString(start + 1); |  | ||||||
|             if (!command.toLowerCase().startsWith(arg.toLowerCase())) { |  | ||||||
|                 continue; |  | ||||||
|             } |  | ||||||
|             commands.add(new Command(this, false, command, "", |  | ||||||
|                     RequiredType.NONE, CommandCategory.TELEPORT |  | ||||||
|             ) { |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private void completeAreas(final List<Command> commands, final String arg) { |  | ||||||
|         for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) { |  | ||||||
|             final String areaName = area.getWorldName() + ";" + area.getId(); |  | ||||||
|             if (!areaName.toLowerCase().startsWith(arg.toLowerCase())) { |  | ||||||
|                 continue; |  | ||||||
|             } |  | ||||||
|             commands.add(new Command(this, false, area.getWorldName() + ";" + area.getId(), "", |  | ||||||
|                     RequiredType.NONE, CommandCategory.TELEPORT |  | ||||||
|             ) { |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -65,6 +65,7 @@ public class ComponentPreset implements ConfigurationSerializable { | |||||||
|         this.icon = icon; |         this.icon = icon; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) { |     public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) { | ||||||
|         final ClassicPlotManagerComponent classicPlotManagerComponent = ClassicPlotManagerComponent |         final ClassicPlotManagerComponent classicPlotManagerComponent = ClassicPlotManagerComponent | ||||||
|                 .fromString(map.getOrDefault("component", "").toString()).orElseThrow(() -> |                 .fromString(map.getOrDefault("component", "").toString()).orElseThrow(() -> | ||||||
|   | |||||||
| @@ -75,6 +75,7 @@ public class ComponentPresetManager { | |||||||
|     private final InventoryUtil inventoryUtil; |     private final InventoryUtil inventoryUtil; | ||||||
|     private File componentsFile; |     private File componentsFile; | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     @Inject |     @Inject | ||||||
|     public ComponentPresetManager(final @NonNull EconHandler econHandler, final @NonNull InventoryUtil inventoryUtil) throws |     public ComponentPresetManager(final @NonNull EconHandler econHandler, final @NonNull InventoryUtil inventoryUtil) throws | ||||||
|             IOException { |             IOException { | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ public class Config { | |||||||
|      * @param <T>  value type |      * @param <T>  value type | ||||||
|      * @return value |      * @return value | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public static <T> T get(String key, Class<?> root) { |     public static <T> T get(String key, Class<?> root) { | ||||||
|         String[] split = key.split("\\."); |         String[] split = key.split("\\."); | ||||||
|         Object instance = getInstance(split, root); |         Object instance = getInstance(split, root); | ||||||
| @@ -183,6 +184,7 @@ public class Config { | |||||||
|         return value != null ? value.toString() : "null"; |         return value != null ? value.toString() : "null"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unchecked", "rawtypes"}) | ||||||
|     private static void save(PrintWriter writer, Class<?> clazz, Object instance, int indent) { |     private static void save(PrintWriter writer, Class<?> clazz, Object instance, int indent) { | ||||||
|         try { |         try { | ||||||
|             String lineSeparator = System.lineSeparator(); |             String lineSeparator = System.lineSeparator(); | ||||||
| @@ -258,21 +260,6 @@ public class Config { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Get the field for a specific config node. |  | ||||||
|      * |  | ||||||
|      * @param split the node (split by period) |  | ||||||
|      * @param root |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     private static Field getField(String[] split, Class<?> root) { |  | ||||||
|         Object instance = getInstance(split, root); |  | ||||||
|         if (instance == null) { |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
|         return getField(split, instance); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the field for a specific config node and instance<br> |      * Get the field for a specific config node and instance<br> | ||||||
|      * Note: As expiry can have multiple blocks there will be multiple instances |      * Note: As expiry can have multiple blocks there will be multiple instances | ||||||
| @@ -305,6 +292,7 @@ public class Config { | |||||||
|      * @param root |      * @param root | ||||||
|      * @return The instance or null |      * @return The instance or null | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings({"unchecked", "rawtypes"}) | ||||||
|     private static Object getInstance(String[] split, Class<?> root) { |     private static Object getInstance(String[] split, Class<?> root) { | ||||||
|         try { |         try { | ||||||
|             Class<?> clazz = root == null ? MethodHandles.lookup().lookupClass() : root; |             Class<?> clazz = root == null ? MethodHandles.lookup().lookupClass() : root; | ||||||
|   | |||||||
| @@ -73,7 +73,7 @@ public interface ConfigurationSection { | |||||||
|      * has been specified, this will return true. |      * has been specified, this will return true. | ||||||
|      * |      * | ||||||
|      * @param path Path to check for existence. |      * @param path Path to check for existence. | ||||||
|      * @return True if this section contains the requested path, either via |      * @return {@code true} if this section contains the requested path, either via | ||||||
|      *         default or being set. |      *         default or being set. | ||||||
|      * @throws IllegalArgumentException Thrown when path is {@code null}. |      * @throws IllegalArgumentException Thrown when path is {@code null}. | ||||||
|      */ |      */ | ||||||
| @@ -87,7 +87,7 @@ public interface ConfigurationSection { | |||||||
|      * has been specified, this will still return false. |      * has been specified, this will still return false. | ||||||
|      * |      * | ||||||
|      * @param path Path to check for existence. |      * @param path Path to check for existence. | ||||||
|      * @return True if this section contains the requested path, regardless of |      * @return {@code true} if this section contains the requested path, regardless of | ||||||
|      *         having a default. |      *         having a default. | ||||||
|      * @throws IllegalArgumentException Thrown when path is {@code null}. |      * @throws IllegalArgumentException Thrown when path is {@code null}. | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -196,6 +196,8 @@ public class Settings extends Config { | |||||||
|         public boolean CONFIRMATION = true; |         public boolean CONFIRMATION = true; | ||||||
|         public int DAYS = 90; |         public int DAYS = 90; | ||||||
|         public int SKIP_ACCOUNT_AGE_DAYS = -1; |         public int SKIP_ACCOUNT_AGE_DAYS = -1; | ||||||
|  |         @Comment("True, if a plot should be deleted if the plot owner is unknown to the server") | ||||||
|  |         public boolean DELETE_IF_OWNER_IS_UNKNOWN = false; | ||||||
|         public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*")); |         public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*")); | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -436,7 +438,7 @@ public class Settings extends Config { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
|     @Comment("Schematic interface related settings") |     @Comment("Schematic interface related settings") | ||||||
|     public static class Web { |     public static class Web { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -60,7 +60,7 @@ public interface CaptionMap { | |||||||
|      * Check if the map supports a given locale |      * Check if the map supports a given locale | ||||||
|      * |      * | ||||||
|      * @param locale Locale |      * @param locale Locale | ||||||
|      * @return True if the map supports the locale |      * @return {@code true} if the map supports the locale | ||||||
|      */ |      */ | ||||||
|     boolean supportsLocale(final @NonNull Locale locale); |     boolean supportsLocale(final @NonNull Locale locale); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -103,6 +103,7 @@ public class CaptionUtility { | |||||||
|      * @param miniMessageString the message from which the specified click events should be removed from. |      * @param miniMessageString the message from which the specified click events should be removed from. | ||||||
|      * @return the string without the click events that are configured to be removed. |      * @return the string without the click events that are configured to be removed. | ||||||
|      * @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE |      * @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public static String stripClickEvents(final @NonNull String miniMessageString) { |     public static String stripClickEvents(final @NonNull String miniMessageString) { | ||||||
|         // parse, transform and serialize again |         // parse, transform and serialize again | ||||||
| @@ -122,6 +123,7 @@ public class CaptionUtility { | |||||||
|      * @return the string without the click events that are configured to be removed. |      * @return the string without the click events that are configured to be removed. | ||||||
|      * @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE |      * @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE | ||||||
|      * @see #stripClickEvents(String) |      * @see #stripClickEvents(String) | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public static String stripClickEvents( |     public static String stripClickEvents( | ||||||
|             final @NonNull PlotFlag<?, ?> flag, |             final @NonNull PlotFlag<?, ?> flag, | ||||||
|   | |||||||
| @@ -99,7 +99,7 @@ public interface ChatFormatter { | |||||||
|          * Whether or not the output should escape |          * Whether or not the output should escape | ||||||
|          * any formatting keys |          * any formatting keys | ||||||
|          * |          * | ||||||
|          * @return True if raw output is to be used |          * @return {@code true} if raw output is to be used | ||||||
|          */ |          */ | ||||||
|         public boolean isRawOutput() { |         public boolean isRawOutput() { | ||||||
|             return this.rawOutput; |             return this.rawOutput; | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ public interface ComponentTransform { | |||||||
|      * |      * | ||||||
|      * @param transform the transform to apply. |      * @param transform the transform to apply. | ||||||
|      * @return a new transform which is applied on all child components and the component itself. |      * @return a new transform which is applied on all child components and the component itself. | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     static ComponentTransform nested(ComponentTransform transform) { |     static ComponentTransform nested(ComponentTransform transform) { | ||||||
|         return new NestedComponentTransform(transform); |         return new NestedComponentTransform(transform); | ||||||
| @@ -51,6 +52,7 @@ public interface ComponentTransform { | |||||||
|      * |      * | ||||||
|      * @param actionsToRemove the actions used to filter which click events should be removed. |      * @param actionsToRemove the actions used to filter which click events should be removed. | ||||||
|      * @return a new transform that removes click events from a component. |      * @return a new transform that removes click events from a component. | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     static ComponentTransform stripClicks(ClickEvent.Action... actionsToRemove) { |     static ComponentTransform stripClicks(ClickEvent.Action... actionsToRemove) { | ||||||
|         return new ClickStripTransform(Set.of(actionsToRemove)); |         return new ClickStripTransform(Set.of(actionsToRemove)); | ||||||
| @@ -61,6 +63,7 @@ public interface ComponentTransform { | |||||||
|      * |      * | ||||||
|      * @param original the component to transform. |      * @param original the component to transform. | ||||||
|      * @return the transformed component. |      * @return the transformed component. | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     @NonNull Component transform(@NonNull Component original); |     @NonNull Component transform(@NonNull Component original); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,10 +36,12 @@ import java.util.Locale; | |||||||
| public interface LocaleHolder { | public interface LocaleHolder { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the console locale holder |      * Get the console locale holder. | ||||||
|  |      * <p> | ||||||
|  |      * You can use {@link ConsolePlayer#getConsole()} for direct access to the {@link ConsolePlayer} | ||||||
|  |      * </p> | ||||||
|      * |      * | ||||||
|      * @return Console locale holder |      * @return Console locale holder | ||||||
|      * @see ConsolePlayer#getConsole() for direct access to the {@link ConsolePlayer} |  | ||||||
|      */ |      */ | ||||||
|     @NonNull |     @NonNull | ||||||
|     static LocaleHolder console() { |     static LocaleHolder console() { | ||||||
|   | |||||||
| @@ -371,7 +371,7 @@ public interface AbstractDB { | |||||||
|     /** |     /** | ||||||
|      * Don't use this method unless you want to ruin someone's server. |      * Don't use this method unless you want to ruin someone's server. | ||||||
|      * |      * | ||||||
|      * @return true if the tables were deleted, false when an error is encountered |      * @return {@code true} if the tables were deleted, {@code false} when an error is encountered | ||||||
|      */ |      */ | ||||||
|     boolean deleteTables(); |     boolean deleteTables(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ public abstract class Database { | |||||||
|     /** |     /** | ||||||
|      * Checks if a connection is open with the database. |      * Checks if a connection is open with the database. | ||||||
|      * |      * | ||||||
|      * @return true if the connection is open |      * @return {@code true} if the connection is open | ||||||
|      * @throws SQLException if the connection cannot be checked |      * @throws SQLException if the connection cannot be checked | ||||||
|      */ |      */ | ||||||
|     public abstract boolean checkConnection() throws SQLException; |     public abstract boolean checkConnection() throws SQLException; | ||||||
| @@ -67,7 +67,7 @@ public abstract class Database { | |||||||
|     /** |     /** | ||||||
|      * Closes the connection with the database. |      * Closes the connection with the database. | ||||||
|      * |      * | ||||||
|      * @return true if successful |      * @return {@code true} if successful | ||||||
|      * @throws SQLException if the connection cannot be closed |      * @throws SQLException if the connection cannot be closed | ||||||
|      */ |      */ | ||||||
|     public abstract boolean closeConnection() throws SQLException; |     public abstract boolean closeConnection() throws SQLException; | ||||||
|   | |||||||
| @@ -101,7 +101,9 @@ public class SQLManager implements AbstractDB { | |||||||
|     private final String prefix; |     private final String prefix; | ||||||
|     private final Database database; |     private final Database database; | ||||||
|     private final boolean mySQL; |     private final boolean mySQL; | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     private final PlotListener plotListener; |     private final PlotListener plotListener; | ||||||
|     private final YamlConfiguration worldConfiguration; |     private final YamlConfiguration worldConfiguration; | ||||||
|     /** |     /** | ||||||
| @@ -408,7 +410,6 @@ public class SQLManager implements AbstractDB { | |||||||
|                 while (iterator.hasNext()) { |                 while (iterator.hasNext()) { | ||||||
|                     try { |                     try { | ||||||
|                         Entry<Plot, Queue<UniqueStatement>> entry = iterator.next(); |                         Entry<Plot, Queue<UniqueStatement>> entry = iterator.next(); | ||||||
|                         Plot plot = entry.getKey(); |  | ||||||
|                         Queue<UniqueStatement> tasks = entry.getValue(); |                         Queue<UniqueStatement> tasks = entry.getValue(); | ||||||
|                         if (tasks.isEmpty()) { |                         if (tasks.isEmpty()) { | ||||||
|                             iterator.remove(); |                             iterator.remove(); | ||||||
| @@ -2295,8 +2296,6 @@ public class SQLManager implements AbstractDB { | |||||||
|                     int size = uniqueIdsList.size(); |                     int size = uniqueIdsList.size(); | ||||||
|                     int packet = 990; |                     int packet = 990; | ||||||
|                     int amount = size / packet; |                     int amount = size / packet; | ||||||
|                     int count = 0; |  | ||||||
|                     int last = -1; |  | ||||||
|                     for (int j = 0; j <= amount; j++) { |                     for (int j = 0; j <= amount; j++) { | ||||||
|                         List<Integer> subList = |                         List<Integer> subList = | ||||||
|                                 uniqueIdsList.subList(j * packet, Math.min(size, (j + 1) * packet)); |                                 uniqueIdsList.subList(j * packet, Math.min(size, (j + 1) * packet)); | ||||||
| @@ -3200,6 +3199,7 @@ public class SQLManager implements AbstractDB { | |||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unchecked", "unused"}) | ||||||
|     @Override |     @Override | ||||||
|     public void validateAllPlots(Set<Plot> toValidate) { |     public void validateAllPlots(Set<Plot> toValidate) { | ||||||
|         if (!isValid()) { |         if (!isValid()) { | ||||||
| @@ -3455,15 +3455,7 @@ public class SQLManager implements AbstractDB { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static class UUIDPair { |     private record UUIDPair(int id, UUID uuid) { | ||||||
|  |  | ||||||
|         public final int id; |  | ||||||
|         public final UUID uuid; |  | ||||||
|  |  | ||||||
|         public UUIDPair(int id, UUID uuid) { |  | ||||||
|             this.id = id; |  | ||||||
|             this.uuid = uuid; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -115,7 +115,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|     /** |     /** | ||||||
|      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeX()} |      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeX()} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public int getSize_x() { |     public int getSize_x() { | ||||||
|         return getSizeX(); |         return getSizeX(); | ||||||
|     } |     } | ||||||
| @@ -123,7 +123,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|     /** |     /** | ||||||
|      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeX(int)} )} |      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeX(int)} )} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public void setSize_x(int sizeX) { |     public void setSize_x(int sizeX) { | ||||||
|         setSizeX(sizeX); |         setSizeX(sizeX); | ||||||
|     } |     } | ||||||
| @@ -131,7 +131,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|     /** |     /** | ||||||
|      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeZ()} |      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeZ()} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public int getSize_z() { |     public int getSize_z() { | ||||||
|         return getSizeZ(); |         return getSizeZ(); | ||||||
|     } |     } | ||||||
| @@ -139,7 +139,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|     /** |     /** | ||||||
|      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeZ(int)} )} |      * @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeZ(int)} )} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public void setSize_z(int sizeZ) { |     public void setSize_z(int sizeZ) { | ||||||
|         setSizeZ(sizeZ); |         setSizeZ(sizeZ); | ||||||
|     } |     } | ||||||
| @@ -148,6 +148,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|      * Get the x size of the auto-area |      * Get the x size of the auto-area | ||||||
|      * |      * | ||||||
|      * @return x size |      * @return x size | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public int getSizeX() { |     public int getSizeX() { | ||||||
|         return this.sizeX; |         return this.sizeX; | ||||||
| @@ -157,6 +158,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|      * Set the x size of the auto-area |      * Set the x size of the auto-area | ||||||
|      * |      * | ||||||
|      * @param sizeX x size |      * @param sizeX x size | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public void setSizeX(int sizeX) { |     public void setSizeX(int sizeX) { | ||||||
|         this.sizeX = sizeX; |         this.sizeX = sizeX; | ||||||
| @@ -166,6 +168,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|      * Get the z size of the auto-area |      * Get the z size of the auto-area | ||||||
|      * |      * | ||||||
|      * @return z size |      * @return z size | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public int getSizeZ() { |     public int getSizeZ() { | ||||||
|         return this.sizeZ; |         return this.sizeZ; | ||||||
| @@ -175,6 +178,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve | |||||||
|      * Set the z size of the auto-area |      * Set the z size of the auto-area | ||||||
|      * |      * | ||||||
|      * @param sizeZ z size |      * @param sizeZ z size | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public void setSizeZ(int sizeZ) { |     public void setSizeZ(int sizeZ) { | ||||||
|         this.sizeZ = sizeZ; |         this.sizeZ = sizeZ; | ||||||
|   | |||||||
| @@ -40,8 +40,6 @@ import java.util.List; | |||||||
|  */ |  */ | ||||||
| public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent { | public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent { | ||||||
|  |  | ||||||
|     private Result eventResult; |  | ||||||
|  |  | ||||||
|     private List<Plot> plots; |     private List<Plot> plots; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -49,6 +47,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent { | |||||||
|      * |      * | ||||||
|      * @param player Player that executed the auto |      * @param player Player that executed the auto | ||||||
|      * @param plots  Plots that have been chosen to be set to the player |      * @param plots  Plots that have been chosen to be set to the player | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public PlayerAutoPlotsChosenEvent(PlotPlayer<?> player, List<Plot> plots) { |     public PlayerAutoPlotsChosenEvent(PlotPlayer<?> player, List<Plot> plots) { | ||||||
|         super(player, plots.size() > 0 ? plots.get(0) : null); |         super(player, plots.size() > 0 ? plots.get(0) : null); | ||||||
| @@ -69,6 +68,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent { | |||||||
|      * Get the immutable list of plots selected to be claimed by the player. May be of length 0. |      * Get the immutable list of plots selected to be claimed by the player. May be of length 0. | ||||||
|      * |      * | ||||||
|      * @return immutable list. |      * @return immutable list. | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public @NonNull List<Plot> getPlots() { |     public @NonNull List<Plot> getPlots() { | ||||||
|         return plots; |         return plots; | ||||||
| @@ -78,6 +78,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent { | |||||||
|      * Set the plots to be claimed by the player. |      * Set the plots to be claimed by the player. | ||||||
|      * |      * | ||||||
|      * @param plots list of plots. |      * @param plots list of plots. | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public void setPlots(final @NonNull List<Plot> plots) { |     public void setPlots(final @NonNull List<Plot> plots) { | ||||||
|         this.plots = List.copyOf(plots); |         this.plots = List.copyOf(plots); | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent { | |||||||
|      * @param initiator Player that initiated the event |      * @param initiator Player that initiated the event | ||||||
|      * @param plot      Plot in which the event occurred |      * @param plot      Plot in which the event occurred | ||||||
|      * @param player    Player that was denied/un-denied |      * @param player    Player that was denied/un-denied | ||||||
|      * @param added     true of add to deny list, false if removed |      * @param added     {@code true} of add to deny list, {@code false} if removed | ||||||
|      */ |      */ | ||||||
|     public PlayerPlotDeniedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { |     public PlayerPlotDeniedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { | ||||||
|         super(plot); |         super(plot); | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ public class PlayerPlotHelperEvent extends PlotEvent { | |||||||
|      * @param initiator Player that initiated the event |      * @param initiator Player that initiated the event | ||||||
|      * @param plot      Plot in which the event occurred |      * @param plot      Plot in which the event occurred | ||||||
|      * @param player    Player that was added/removed from the helper list |      * @param player    Player that was added/removed from the helper list | ||||||
|      * @param added     true of the player was added, false if the player was removed |      * @param added     {@code true} if the player was added, {@code false} if the player was removed | ||||||
|      */ |      */ | ||||||
|     public PlayerPlotHelperEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { |     public PlayerPlotHelperEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { | ||||||
|         super(plot); |         super(plot); | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent { | |||||||
|      * @param initiator Player that initiated the event |      * @param initiator Player that initiated the event | ||||||
|      * @param plot      Plot in which the event occurred |      * @param plot      Plot in which the event occurred | ||||||
|      * @param player    Player that was added/removed from the trusted list |      * @param player    Player that was added/removed from the trusted list | ||||||
|      * @param added     true of the player was added, false if the player was removed |      * @param added     {@code true} if the player was added, {@code false} if the player was removed | ||||||
|      */ |      */ | ||||||
|     public PlayerPlotTrustedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { |     public PlayerPlotTrustedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) { | ||||||
|         super(plot); |         super(plot); | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|      * @deprecated use {@link PlayerTeleportToPlotEvent#PlayerTeleportToPlotEvent(PlotPlayer, Location, Plot, TeleportCause)}. |      * @deprecated use {@link PlayerTeleportToPlotEvent#PlayerTeleportToPlotEvent(PlotPlayer, Location, Plot, TeleportCause)}. | ||||||
|      * You should not be creating events in the first place. |      * You should not be creating events in the first place. | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot) { |     public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot) { | ||||||
|         this(player, from, plot, TeleportCause.UNKNOWN); |         this(player, from, plot, TeleportCause.UNKNOWN); | ||||||
|     } |     } | ||||||
| @@ -54,6 +54,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|      * @param from   Start location |      * @param from   Start location | ||||||
|      * @param plot   Plot to which the player was teleported |      * @param plot   Plot to which the player was teleported | ||||||
|      * @param cause  Why the teleport is being completed |      * @param cause  Why the teleport is being completed | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) { |     public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) { | ||||||
|         super(player, plot); |         super(player, plot); | ||||||
| @@ -65,6 +66,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|      * Get the teleport cause |      * Get the teleport cause | ||||||
|      * |      * | ||||||
|      * @return TeleportCause |      * @return TeleportCause | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public TeleportCause getCause() { |     public TeleportCause getCause() { | ||||||
|         return cause; |         return cause; | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ public class PlotClaimedNotifyEvent extends PlotEvent { | |||||||
|      * |      * | ||||||
|      * @param plot Plot that was claimed |      * @param plot Plot that was claimed | ||||||
|      * @param auto If the plot was claimed using /plot auto |      * @param auto If the plot was claimed using /plot auto | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public PlotClaimedNotifyEvent(Plot plot, boolean auto) { |     public PlotClaimedNotifyEvent(Plot plot, boolean auto) { | ||||||
|         super(plot); |         super(plot); | ||||||
| @@ -49,7 +50,9 @@ public class PlotClaimedNotifyEvent extends PlotEvent { | |||||||
|      * If the plot was claimed using /plot auto |      * If the plot was claimed using /plot auto | ||||||
|      * |      * | ||||||
|      * @return if claimed with auto |      * @return if claimed with auto | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unused") | ||||||
|     public boolean wasAuto() { |     public boolean wasAuto() { | ||||||
|         return auto; |         return auto; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -57,12 +57,16 @@ public enum TeleportCause { | |||||||
|     PLUGIN, |     PLUGIN, | ||||||
|     UNKNOWN; |     UNKNOWN; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.1.0 | ||||||
|  |      */ | ||||||
|     public static final class CauseSets { |     public static final class CauseSets { | ||||||
|  |  | ||||||
|         public static final Set<TeleportCause> COMMAND = Sets.immutableEnumSet(EnumSet.range( |         public static final Set<TeleportCause> COMMAND = Sets.immutableEnumSet(EnumSet.range( | ||||||
|                 TeleportCause.COMMAND, |                 TeleportCause.COMMAND, | ||||||
|                 TeleportCause.COMMAND_VISIT |                 TeleportCause.COMMAND_VISIT | ||||||
|         )); |         )); | ||||||
|  |         @SuppressWarnings("unused") | ||||||
|         public static final Set<TeleportCause> PLUGIN = Sets.immutableEnumSet(EnumSet.range( |         public static final Set<TeleportCause> PLUGIN = Sets.immutableEnumSet(EnumSet.range( | ||||||
|                 TeleportCause.DEATH, |                 TeleportCause.DEATH, | ||||||
|                 TeleportCause.PLUGIN |                 TeleportCause.PLUGIN | ||||||
|   | |||||||
| @@ -97,8 +97,8 @@ public class HybridGen extends IndependentPlotGenerator { | |||||||
|         } |         } | ||||||
|         // Coords |         // Coords | ||||||
|         Location min = result.getMin(); |         Location min = result.getMin(); | ||||||
|         int bx = (min.getX()) - hybridPlotWorld.ROAD_OFFSET_X; |         int bx = min.getX() - hybridPlotWorld.ROAD_OFFSET_X; | ||||||
|         int bz = (min.getZ()) - hybridPlotWorld.ROAD_OFFSET_Z; |         int bz = min.getZ() - hybridPlotWorld.ROAD_OFFSET_Z; | ||||||
|         // The relative X-coordinate (within the plot) of the minimum X coordinate |         // The relative X-coordinate (within the plot) of the minimum X coordinate | ||||||
|         // contained in the scoped queue |         // contained in the scoped queue | ||||||
|         short relativeOffsetX; |         short relativeOffsetX; | ||||||
|   | |||||||
| @@ -148,12 +148,22 @@ public class HybridUtils { | |||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             ChunkQueueCoordinator chunk = new ChunkQueueCoordinator(bot, top, false); |             ChunkQueueCoordinator chunk = new ChunkQueueCoordinator(worldUtil.getWeWorld(world), bot, top, false); | ||||||
|             hpw.getGenerator().generateChunk(chunk, hpw); |             hpw.getGenerator().generateChunk(chunk, hpw); | ||||||
|  |  | ||||||
|  |             final BlockState airBlock = BlockTypes.AIR.getDefaultState(); | ||||||
|             final BlockState[][][] oldBlocks = chunk.getBlocks(); |             final BlockState[][][] oldBlocks = chunk.getBlocks(); | ||||||
|             final BlockState[][][] newBlocks = new BlockState[256][width][length]; |             final BlockState[][][] newBlocks = new BlockState[256][width][length]; | ||||||
|             final BlockState airBlock = BlockTypes.AIR.getDefaultState(); |             for (final BlockState[][] newBlock : newBlocks) { | ||||||
|  |                 for (final BlockState[] blockStates : newBlock) { | ||||||
|  |                     Arrays.fill(blockStates, airBlock); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             for (final BlockState[][] oldBlock : oldBlocks) { | ||||||
|  |                 for (final BlockState[] blockStates : oldBlock) { | ||||||
|  |                     Arrays.fill(blockStates, airBlock); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             System.gc(); |             System.gc(); | ||||||
|             System.gc(); |             System.gc(); | ||||||
| @@ -221,9 +231,6 @@ public class HybridUtils { | |||||||
|                         for (int y = 0; y < 256; y++) { |                         for (int y = 0; y < 256; y++) { | ||||||
|                             BlockState old = oldBlocks[y][x][z]; |                             BlockState old = oldBlocks[y][x][z]; | ||||||
|                             try { |                             try { | ||||||
|                                 if (old == null) { |  | ||||||
|                                     old = airBlock; |  | ||||||
|                                 } |  | ||||||
|                                 BlockState now = newBlocks[y][x][z]; |                                 BlockState now = newBlocks[y][x][z]; | ||||||
|                                 if (!old.equals(now)) { |                                 if (!old.equals(now)) { | ||||||
|                                     changes[i]++; |                                     changes[i]++; | ||||||
|   | |||||||
| @@ -95,6 +95,7 @@ public abstract class IndependentPlotGenerator { | |||||||
|      * @param world ChunkGenerator Implementation |      * @param world ChunkGenerator Implementation | ||||||
|      * @return Chunk generator |      * @return Chunk generator | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public <T> GeneratorWrapper<T> specify(final @NonNull String world) { |     public <T> GeneratorWrapper<T> specify(final @NonNull String world) { | ||||||
|         return (GeneratorWrapper<T>) PlotSquared.platform().wrapPlotGenerator(world, this); |         return (GeneratorWrapper<T>) PlotSquared.platform().wrapPlotGenerator(world, this); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -42,8 +42,6 @@ import com.sk89q.worldedit.world.biome.BiomeType; | |||||||
| import com.sk89q.worldedit.world.block.BaseBlock; | import com.sk89q.worldedit.world.block.BaseBlock; | ||||||
| import com.sk89q.worldedit.world.block.BlockState; | import com.sk89q.worldedit.world.block.BlockState; | ||||||
| import com.sk89q.worldedit.world.block.BlockStateHolder; | import com.sk89q.worldedit.world.block.BlockStateHolder; | ||||||
| import org.apache.logging.log4j.LogManager; |  | ||||||
| import org.apache.logging.log4j.Logger; |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
| import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||||
| @@ -53,8 +51,6 @@ import java.util.Set; | |||||||
|  |  | ||||||
| public class ProcessedWEExtent extends AbstractDelegateExtent { | public class ProcessedWEExtent extends AbstractDelegateExtent { | ||||||
|  |  | ||||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ProcessedWEExtent.class.getSimpleName()); |  | ||||||
|  |  | ||||||
|     private final Set<CuboidRegion> mask; |     private final Set<CuboidRegion> mask; | ||||||
|     private final String world; |     private final String world; | ||||||
|     private final int max; |     private final int max; | ||||||
| @@ -162,6 +158,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent { | |||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") | ||||||
|     @Override |     @Override | ||||||
|     public boolean setBiome(BlockVector2 position, BiomeType biome) { |     public boolean setBiome(BlockVector2 position, BiomeType biome) { | ||||||
|         return WEManager.maskContains(this.mask, position.getX(), position.getZ()) && super |         return WEManager.maskContains(this.mask, position.getX(), position.getZ()) && super | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ public class WEExtent extends AbstractDelegateExtent { | |||||||
|         this.mask = mask; |         this.mask = mask; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     @Override |     @Override | ||||||
|     public boolean setBlock(BlockVector3 location, BlockStateHolder block) |     public boolean setBlock(BlockVector3 location, BlockStateHolder block) | ||||||
|             throws WorldEditException { |             throws WorldEditException { | ||||||
|   | |||||||
| @@ -52,6 +52,7 @@ public interface PermissionHolder { | |||||||
|      * @param permission Permission |      * @param permission Permission | ||||||
|      * @param key        Permission "key" |      * @param key        Permission "key" | ||||||
|      * @return {@code true} if the owner has the given permission, else {@code false} |      * @return {@code true} if the owner has the given permission, else {@code false} | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     default boolean hasKeyedPermission( |     default boolean hasKeyedPermission( | ||||||
|             final @NonNull String permission, |             final @NonNull String permission, | ||||||
| @@ -115,6 +116,7 @@ public interface PermissionHolder { | |||||||
|      * @param permission Permission |      * @param permission Permission | ||||||
|      * @param key        Permission "key" |      * @param key        Permission "key" | ||||||
|      * @return {@code true} if the owner has the given permission, else {@code false} |      * @return {@code true} if the owner has the given permission, else {@code false} | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     boolean hasKeyedPermission(@Nullable String world, @NonNull String permission, @NonNull String key); |     boolean hasKeyedPermission(@Nullable String world, @NonNull String permission, @NonNull String key); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -59,7 +59,9 @@ public interface PermissionProfile { | |||||||
|      * @param permission Permission |      * @param permission Permission | ||||||
|      * @param key        Permission "key" |      * @param key        Permission "key" | ||||||
|      * @return {@code true} if the owner has the given permission, else {@code false} |      * @return {@code true} if the owner has the given permission, else {@code false} | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unused") | ||||||
|     default boolean hasKeyedPermission( |     default boolean hasKeyedPermission( | ||||||
|             final @NonNull String permission, |             final @NonNull String permission, | ||||||
|             final @NonNull String key |             final @NonNull String key | ||||||
| @@ -75,6 +77,7 @@ public interface PermissionProfile { | |||||||
|      * @param permission Permission |      * @param permission Permission | ||||||
|      * @param key        Permission "key" |      * @param key        Permission "key" | ||||||
|      * @return {@code true} if the owner has the given permission, else {@code false} |      * @return {@code true} if the owner has the given permission, else {@code false} | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     boolean hasKeyedPermission( |     boolean hasKeyedPermission( | ||||||
|             @Nullable String world, final @NonNull String permission, |             @Nullable String world, final @NonNull String permission, | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public abstract class MetaDataAccess<T> implements AutoCloseable { | |||||||
|         this.lockAccess = lockAccess; |         this.lockAccess = lockAccess; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @SuppressWarnings("ALL") |     @SuppressWarnings("unchecked") | ||||||
|     private static <E extends Throwable> void sneakyThrow(final Throwable e) throws E { |     private static <E extends Throwable> void sneakyThrow(final Throwable e) throws E { | ||||||
|         throw (E) e; |         throw (E) e; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -62,6 +62,7 @@ public final class MetaDataKey<T> { | |||||||
|      * @param <T>  Type |      * @param <T>  Type | ||||||
|      * @return MetaData key instance |      * @return MetaData key instance | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public static @NonNull <T> MetaDataKey<T> of(final @NonNull String key, final @NonNull TypeLiteral<T> type) { |     public static @NonNull <T> MetaDataKey<T> of(final @NonNull String key, final @NonNull TypeLiteral<T> type) { | ||||||
|         synchronized (keyMetaData) { |         synchronized (keyMetaData) { | ||||||
|             return (MetaDataKey<T>) |             return (MetaDataKey<T>) | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ final class PersistentMetaDataAccess<T> extends MetaDataAccess<T> { | |||||||
|         return this.getPlayer().hasPersistentMeta(getMetaDataKey().toString()); |         return this.getPlayer().hasPersistentMeta(getMetaDataKey().toString()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     @Override |     @Override | ||||||
|     public @Nullable T remove() { |     public @Nullable T remove() { | ||||||
|         this.checkClosed(); |         this.checkClosed(); | ||||||
|   | |||||||
| @@ -104,7 +104,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|     private static final Set<PlotPlayer<?>> debugModeEnabled = |     private static final Set<PlotPlayer<?>> debugModeEnabled = | ||||||
|             Collections.synchronizedSet(new HashSet<>()); |             Collections.synchronizedSet(new HashSet<>()); | ||||||
|  |  | ||||||
|     private static final Map<Class, PlotPlayerConverter> converters = new HashMap<>(); |     @SuppressWarnings("rawtypes") | ||||||
|  |     private static final Map<Class<?>, PlotPlayerConverter> converters = new HashMap<>(); | ||||||
|     private final LockRepository lockRepository = new LockRepository(); |     private final LockRepository lockRepository = new LockRepository(); | ||||||
|     private final PlotAreaManager plotAreaManager; |     private final PlotAreaManager plotAreaManager; | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
| @@ -128,6 +129,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|         this.permissionHandler = permissionHandler; |         this.permissionHandler = permissionHandler; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"rawtypes", "unchecked"}) | ||||||
|     public static <T> PlotPlayer<T> from(final @NonNull T object) { |     public static <T> PlotPlayer<T> from(final @NonNull T object) { | ||||||
|         // fast path |         // fast path | ||||||
|         if (converters.containsKey(object.getClass())) { |         if (converters.containsKey(object.getClass())) { | ||||||
| @@ -234,6 +236,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|      * @param <T> the object type to return |      * @param <T> the object type to return | ||||||
|      * @return the value assigned to the key or null if it does not exist |      * @return the value assigned to the key or null if it does not exist | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     <T> T getMeta(String key) { |     <T> T getMeta(String key) { | ||||||
|         if (this.meta != null) { |         if (this.meta != null) { | ||||||
|             return (T) this.meta.get(key); |             return (T) this.meta.get(key); | ||||||
| @@ -361,7 +364,6 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public int getClusterCount(String world) { |     public int getClusterCount(String world) { | ||||||
|         UUID uuid = getUUID(); |  | ||||||
|         int count = 0; |         int count = 0; | ||||||
|         for (PlotArea area : this.plotAreaManager.getPlotAreasSet(world)) { |         for (PlotArea area : this.plotAreaManager.getPlotAreasSet(world)) { | ||||||
|             for (PlotCluster cluster : area.getClusters()) { |             for (PlotCluster cluster : area.getClusters()) { | ||||||
| @@ -376,9 +378,12 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|     /** |     /** | ||||||
|      * Get a {@link Set} of plots owned by this player. |      * Get a {@link Set} of plots owned by this player. | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Take a look at {@link PlotSquared} for more searching functions. | ||||||
|  |      * See {@link #getPlotCount()} for the number of plots. | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @return a {@link Set} of plots owned by the player |      * @return a {@link Set} of plots owned by the player | ||||||
|      * @see PlotSquared for more searching functions |  | ||||||
|      * @see #getPlotCount() for the number of plots |  | ||||||
|      */ |      */ | ||||||
|     public Set<Plot> getPlots() { |     public Set<Plot> getPlots() { | ||||||
|         return PlotQuery.newQuery().ownedBy(this).asSet(); |         return PlotQuery.newQuery().ownedBy(this).asSet(); | ||||||
| @@ -499,7 +504,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|      * Retrieves the attribute of this player. |      * Retrieves the attribute of this player. | ||||||
|      * |      * | ||||||
|      * @param key metadata key |      * @param key metadata key | ||||||
|      * @return the attribute will be either true or false |      * @return the attribute will be either {@code true} or {@code false} | ||||||
|      */ |      */ | ||||||
|     public boolean getAttribute(String key) { |     public boolean getAttribute(String key) { | ||||||
|         if (!hasPersistentMeta("attrib_" + key)) { |         if (!hasPersistentMeta("attrib_" + key)) { | ||||||
| @@ -570,7 +575,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|     /** |     /** | ||||||
|      * Check if this player is banned. |      * Check if this player is banned. | ||||||
|      * |      * | ||||||
|      * @return true if the player is banned, false otherwise. |      * @return {@code true} if the player is banned, {@code false} otherwise. | ||||||
|      */ |      */ | ||||||
|     public abstract boolean isBanned(); |     public abstract boolean isBanned(); | ||||||
|  |  | ||||||
| @@ -795,16 +800,16 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|             final @NonNull MetaDataKey<T> key, |             final @NonNull MetaDataKey<T> key, | ||||||
|             final @NonNull T value |             final @NonNull T value | ||||||
|     ) { |     ) { | ||||||
|         final Object rawValue = value; |  | ||||||
|         if (key.getType().getRawType().equals(Integer.class)) { |         if (key.getType().getRawType().equals(Integer.class)) { | ||||||
|             this.setPersistentMeta(key.toString(), Ints.toByteArray((int) rawValue)); |             this.setPersistentMeta(key.toString(), Ints.toByteArray((int) (Object) value)); | ||||||
|         } else if (key.getType().getRawType().equals(Boolean.class)) { |         } else if (key.getType().getRawType().equals(Boolean.class)) { | ||||||
|             this.setPersistentMeta(key.toString(), ByteArrayUtilities.booleanToBytes((boolean) rawValue)); |             this.setPersistentMeta(key.toString(), ByteArrayUtilities.booleanToBytes((boolean) (Object) value)); | ||||||
|         } else { |         } else { | ||||||
|             throw new IllegalArgumentException(String.format("Unknown meta data type '%s'", key.getType())); |             throw new IllegalArgumentException(String.format("Unknown meta data type '%s'", key.getType())); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @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()); |         final byte[] value = this.getPersistentMeta(key.toString()); | ||||||
|         if (value == null) { |         if (value == null) { | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ final class TemporaryMetaDataAccess<T> extends MetaDataAccess<T> { | |||||||
|         return this.getPlayer().getMeta(this.getMetaDataKey().toString()) != null; |         return this.getPlayer().getMeta(this.getMetaDataKey().toString()) != null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     @Override |     @Override | ||||||
|     public @Nullable T remove() { |     public @Nullable T remove() { | ||||||
|         this.checkClosed(); |         this.checkClosed(); | ||||||
|   | |||||||
| @@ -219,10 +219,13 @@ public class Plot { | |||||||
|      * Constructor for a new plot. |      * Constructor for a new plot. | ||||||
|      * (Only changes after plot.create() will be properly set in the database) |      * (Only changes after plot.create() will be properly set in the database) | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * See {@link Plot#getPlot(Location)} for existing plots | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param area  the PlotArea where the plot is located |      * @param area  the PlotArea where the plot is located | ||||||
|      * @param id    the plot id |      * @param id    the plot id | ||||||
|      * @param owner the plot owner |      * @param owner the plot owner | ||||||
|      * @see Plot#getPlot(Location) for existing plots |  | ||||||
|      */ |      */ | ||||||
|     public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner) { |     public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner) { | ||||||
|         this(area, id, owner, 0); |         this(area, id, owner, 0); | ||||||
| @@ -232,9 +235,12 @@ public class Plot { | |||||||
|      * Constructor for an unowned plot. |      * Constructor for an unowned plot. | ||||||
|      * (Only changes after plot.create() will be properly set in the database) |      * (Only changes after plot.create() will be properly set in the database) | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * See {@link Plot#getPlot(Location)} for existing plots | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param area the PlotArea where the plot is located |      * @param area the PlotArea where the plot is located | ||||||
|      * @param id   the plot id |      * @param id   the plot id | ||||||
|      * @see Plot#getPlot(Location) for existing plots |  | ||||||
|      */ |      */ | ||||||
|     public Plot(final @NonNull PlotArea area, final @NonNull PlotId id) { |     public Plot(final @NonNull PlotArea area, final @NonNull PlotId id) { | ||||||
|         this(area, id, null, 0); |         this(area, id, null, 0); | ||||||
| @@ -245,11 +251,14 @@ public class Plot { | |||||||
|      * The database will ignore any queries regarding temporary plots. |      * The database will ignore any queries regarding temporary plots. | ||||||
|      * Please note that some bulk plot management functions may still affect temporary plots (TODO: fix this) |      * Please note that some bulk plot management functions may still affect temporary plots (TODO: fix this) | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * See {@link Plot#getPlot(Location)} for existing plots | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param area  the PlotArea where the plot is located |      * @param area  the PlotArea where the plot is located | ||||||
|      * @param id    the plot id |      * @param id    the plot id | ||||||
|      * @param owner the owner of the plot |      * @param owner the owner of the plot | ||||||
|      * @param temp  Represents whatever the database manager needs it to |      * @param temp  Represents whatever the database manager needs it to | ||||||
|      * @see Plot#getPlot(Location) for existing plots |  | ||||||
|      */ |      */ | ||||||
|     public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner, final int temp) { |     public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner, final int temp) { | ||||||
|         this.area = area; |         this.area = area; | ||||||
| @@ -266,6 +275,10 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Constructor for a saved plots (Used by the database manager when plots are fetched) |      * Constructor for a saved plots (Used by the database manager when plots are fetched) | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * See {@link Plot#getPlot(Location)} for existing plots | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param id        the plot id |      * @param id        the plot id | ||||||
|      * @param owner     the plot owner |      * @param owner     the plot owner | ||||||
|      * @param trusted   the plot trusted players |      * @param trusted   the plot trusted players | ||||||
| @@ -278,7 +291,6 @@ public class Plot { | |||||||
|      * @param merged    an array giving merged plots |      * @param merged    an array giving merged plots | ||||||
|      * @param timestamp when the plot was created |      * @param timestamp when the plot was created | ||||||
|      * @param temp      value representing whatever DBManager needs to to. Do not touch tbh. |      * @param temp      value representing whatever DBManager needs to to. Do not touch tbh. | ||||||
|      * @see Plot#getPlot(Location) for existing plots |  | ||||||
|      */ |      */ | ||||||
|     public Plot( |     public Plot( | ||||||
|             @NonNull PlotId id, |             @NonNull PlotId id, | ||||||
| @@ -418,9 +430,12 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Return a new/cached plot object at a given location. |      * Return a new/cached plot object at a given location. | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link PlotPlayer#getCurrentPlot()} if a player is expected here. | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param location the location of the plot |      * @param location the location of the plot | ||||||
|      * @return plot at location or null |      * @return plot at location or null | ||||||
|      * @see PlotPlayer#getCurrentPlot() if a player is expected here. |  | ||||||
|      */ |      */ | ||||||
|     public static @Nullable Plot getPlot(final @NonNull Location location) { |     public static @Nullable Plot getPlot(final @NonNull Location location) { | ||||||
|         final PlotArea pa = location.getPlotArea(); |         final PlotArea pa = location.getPlotArea(); | ||||||
| @@ -449,7 +464,7 @@ public class Plot { | |||||||
|      * that could alter the de facto owner of the plot. |      * that could alter the de facto owner of the plot. | ||||||
|      * |      * | ||||||
|      * @return The plot owner of this particular (sub-)plot |      * @return The plot owner of this particular (sub-)plot | ||||||
|      *         as stored in the database, if one exists. Else, null. |      * as stored in the database, if one exists. Else, null. | ||||||
|      */ |      */ | ||||||
|     public @Nullable UUID getOwnerAbs() { |     public @Nullable UUID getOwnerAbs() { | ||||||
|         return this.owner; |         return this.owner; | ||||||
| @@ -588,10 +603,13 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Get the plot owner of this particular sub-plot. |      * Get the plot owner of this particular sub-plot. | ||||||
|      * (Merged plots can have multiple owners) |      * (Merged plots can have multiple owners) | ||||||
|      * Direct access is discouraged: use getOwners() |      * Direct access is discouraged: use {@link #getOwners()} | ||||||
|  |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #getOwnerAbs()} to get the owner as stored in the database | ||||||
|  |      * </p> | ||||||
|      * |      * | ||||||
|      * @return Server if ServerPlot flag set, else {@link #getOwnerAbs()} |      * @return Server if ServerPlot flag set, else {@link #getOwnerAbs()} | ||||||
|      * @see #getOwnerAbs() getOwnerAbs() to get the owner as stored in the database |  | ||||||
|      */ |      */ | ||||||
|     public @Nullable UUID getOwner() { |     public @Nullable UUID getOwner() { | ||||||
|         if (this.getFlag(ServerPlotFlag.class)) { |         if (this.getFlag(ServerPlotFlag.class)) { | ||||||
| @@ -1201,12 +1219,6 @@ public class Plot { | |||||||
|      * |      * | ||||||
|      * @return array of entity counts |      * @return array of entity counts | ||||||
|      * @see RegionManager#countEntities(Plot) |      * @see RegionManager#countEntities(Plot) | ||||||
|      *         0 = Entity |  | ||||||
|      *         1 = Animal |  | ||||||
|      *         2 = Monster |  | ||||||
|      *         3 = Mob |  | ||||||
|      *         4 = Boat |  | ||||||
|      *         5 = Misc |  | ||||||
|      */ |      */ | ||||||
|     public int[] countEntities() { |     public int[] countEntities() { | ||||||
|         int[] count = new int[6]; |         int[] count = new int[6]; | ||||||
| @@ -1225,7 +1237,7 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Returns true if a previous task was running |      * Returns true if a previous task was running | ||||||
|      * |      * | ||||||
|      * @return true if a previous task is running |      * @return {@code true} if a previous task is running | ||||||
|      */ |      */ | ||||||
|     public int addRunning() { |     public int addRunning() { | ||||||
|         int value = this.getRunning(); |         int value = this.getRunning(); | ||||||
| @@ -1269,7 +1281,7 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Unclaim the plot (does not modify terrain). Changes made to this plot will not be reflected in unclaimed plot objects. |      * Unclaim the plot (does not modify terrain). Changes made to this plot will not be reflected in unclaimed plot objects. | ||||||
|      * |      * | ||||||
|      * @return false if the Plot has no owner, otherwise true. |      * @return {@code false} if the Plot has no owner, otherwise {@code true}. | ||||||
|      */ |      */ | ||||||
|     public boolean unclaim() { |     public boolean unclaim() { | ||||||
|         if (!this.hasOwner()) { |         if (!this.hasOwner()) { | ||||||
| @@ -1686,7 +1698,7 @@ public class Plot { | |||||||
|         return base.settings != null && base.settings.getRatings() != null; |         return base.settings != null && base.settings.getRatings() != null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic) { |     public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic) { | ||||||
|         if (!canClaim(player)) { |         if (!canClaim(player)) { | ||||||
|             return false; |             return false; | ||||||
| @@ -1694,7 +1706,7 @@ public class Plot { | |||||||
|         return claim(player, teleport, schematic, true); |         return claim(player, teleport, schematic, true); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.0") | ||||||
|     public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB) { |     public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB) { | ||||||
|         return claim(player, teleport, schematic, updateDB, false); |         return claim(player, teleport, schematic, updateDB, false); | ||||||
|     } |     } | ||||||
| @@ -1708,6 +1720,7 @@ public class Plot { | |||||||
|      * @param updateDB  If the database should be updated |      * @param updateDB  If the database should be updated | ||||||
|      * @param auto      If the plot is being claimed by a /plot auto |      * @param auto      If the plot is being claimed by a /plot auto | ||||||
|      * @return success |      * @return success | ||||||
|  |      * @since 6.1.0 | ||||||
|      */ |      */ | ||||||
|     public boolean claim( |     public boolean claim( | ||||||
|             final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB, |             final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB, | ||||||
| @@ -2669,7 +2682,7 @@ public class Plot { | |||||||
|     /** |     /** | ||||||
|      * Checks if the owner of this Plot is online. |      * Checks if the owner of this Plot is online. | ||||||
|      * |      * | ||||||
|      * @return true if the owner of the Plot is online |      * @return {@code true} if the owner of the Plot is online | ||||||
|      */ |      */ | ||||||
|     public boolean isOnline() { |     public boolean isOnline() { | ||||||
|         if (!this.hasOwner()) { |         if (!this.hasOwner()) { | ||||||
| @@ -2834,7 +2847,7 @@ public class Plot { | |||||||
|                         if (this.isOnline()) { |                         if (this.isOnline()) { | ||||||
|                             seen = TranslatableCaption.of("info.now").getComponent(player); |                             seen = TranslatableCaption.of("info.now").getComponent(player); | ||||||
|                         } else { |                         } else { | ||||||
|                             int time = (int) (ExpireManager.IMP.getAge(this) / 1000); |                             int time = (int) (ExpireManager.IMP.getAge(this, false) / 1000); | ||||||
|                             if (time != 0) { |                             if (time != 0) { | ||||||
|                                 seen = TimeUtil.secToTime(time); |                                 seen = TimeUtil.secToTime(time); | ||||||
|                             } else { |                             } else { | ||||||
| @@ -3031,8 +3044,11 @@ public class Plot { | |||||||
|      * If rating categories are enabled, get the average rating by category.<br> |      * If rating categories are enabled, get the average rating by category.<br> | ||||||
|      * - The index corresponds to the index of the category in the config |      * - The index corresponds to the index of the category in the config | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * See {@link Settings.Ratings#CATEGORIES} for rating categories | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @return Average ratings in each category |      * @return Average ratings in each category | ||||||
|      * @see Settings.Ratings#CATEGORIES Rating categories |  | ||||||
|      */ |      */ | ||||||
|     public @NonNull double[] getAverageRatings() { |     public @NonNull double[] getAverageRatings() { | ||||||
|         Map<UUID, Integer> rating; |         Map<UUID, Integer> rating; | ||||||
|   | |||||||
| @@ -295,7 +295,7 @@ public abstract class PlotArea { | |||||||
|      * Check if a PlotArea is compatible (move/copy etc.). |      * Check if a PlotArea is compatible (move/copy etc.). | ||||||
|      * |      * | ||||||
|      * @param plotArea the {@link PlotArea} to compare |      * @param plotArea the {@link PlotArea} to compare | ||||||
|      * @return true if both areas are compatible |      * @return {@code true} if both areas are compatible | ||||||
|      */ |      */ | ||||||
|     public boolean isCompatible(final @NonNull PlotArea plotArea) { |     public boolean isCompatible(final @NonNull PlotArea plotArea) { | ||||||
|         final ConfigurationSection section = this.worldConfiguration.getConfigurationSection("worlds"); |         final ConfigurationSection section = this.worldConfiguration.getConfigurationSection("worlds"); | ||||||
| @@ -439,38 +439,6 @@ public abstract class PlotArea { | |||||||
|         loadConfiguration(config); |         loadConfiguration(config); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private Component getFlagsComponent(Component flagsComponent, Collection<PlotFlag<?, ?>> flagCollection) { |  | ||||||
|         if (flagCollection.isEmpty()) { |  | ||||||
|             flagsComponent = MINI_MESSAGE.parse(TranslatableCaption.of("flag.no_flags").getComponent(LocaleHolder.console())); |  | ||||||
|         } else { |  | ||||||
|             String prefix = " "; |  | ||||||
|             for (final PlotFlag<?, ?> flag : flagCollection) { |  | ||||||
|                 Object value; |  | ||||||
|                 if (flag instanceof DoubleFlag && !Settings.General.SCIENTIFIC) { |  | ||||||
|                     value = FLAG_DECIMAL_FORMAT.format(flag.getValue()); |  | ||||||
|                 } else { |  | ||||||
|                     value = flag.toString(); |  | ||||||
|                 } |  | ||||||
|                 Component snip = MINI_MESSAGE.parse( |  | ||||||
|                         prefix + CaptionUtility |  | ||||||
|                                 .format( |  | ||||||
|                                         ConsolePlayer.getConsole(), |  | ||||||
|                                         TranslatableCaption.of("info.plot_flag_list").getComponent(LocaleHolder.console()) |  | ||||||
|                                 ), |  | ||||||
|                         Template.of("flag", flag.getName()), |  | ||||||
|                         Template.of("value", CaptionUtility.formatRaw(ConsolePlayer.getConsole(), value.toString())) |  | ||||||
|                 ); |  | ||||||
|                 if (flagsComponent != null) { |  | ||||||
|                     flagsComponent.append(snip); |  | ||||||
|                 } else { |  | ||||||
|                     flagsComponent = snip; |  | ||||||
|                 } |  | ||||||
|                 prefix = ", "; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return flagsComponent; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public abstract void loadConfiguration(ConfigurationSection config); |     public abstract void loadConfiguration(ConfigurationSection config); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -1133,7 +1101,7 @@ public abstract class PlotArea { | |||||||
|      * If a schematic is available, it can be used for plot claiming. |      * If a schematic is available, it can be used for plot claiming. | ||||||
|      * |      * | ||||||
|      * @param schematic the schematic to look for. |      * @param schematic the schematic to look for. | ||||||
|      * @return true if the schematic exists, false otherwise. |      * @return {@code true} if the schematic exists, {@code false} otherwise. | ||||||
|      */ |      */ | ||||||
|     public boolean hasSchematic(@NonNull String schematic) { |     public boolean hasSchematic(@NonNull String schematic) { | ||||||
|         return getSchematics().contains(schematic.toLowerCase()); |         return getSchematics().contains(schematic.toLowerCase()); | ||||||
| @@ -1142,7 +1110,7 @@ public abstract class PlotArea { | |||||||
|     /** |     /** | ||||||
|      * Get whether economy is enabled and used on this plot area or not. |      * Get whether economy is enabled and used on this plot area or not. | ||||||
|      * |      * | ||||||
|      * @return true if this plot area uses economy, false otherwise. |      * @return {@code true} if this plot area uses economy, {@code false} otherwise. | ||||||
|      */ |      */ | ||||||
|     public boolean useEconomy() { |     public boolean useEconomy() { | ||||||
|         return useEconomy; |         return useEconomy; | ||||||
| @@ -1151,7 +1119,7 @@ public abstract class PlotArea { | |||||||
|     /** |     /** | ||||||
|      * Get whether the plot area is limited by a world border or not. |      * Get whether the plot area is limited by a world border or not. | ||||||
|      * |      * | ||||||
|      * @return true if the plot area has a world border, false otherwise. |      * @return {@code true} if the plot area has a world border, {@code false} otherwise. | ||||||
|      */ |      */ | ||||||
|     public boolean hasWorldBorder() { |     public boolean hasWorldBorder() { | ||||||
|         return worldBorder; |         return worldBorder; | ||||||
| @@ -1160,7 +1128,7 @@ public abstract class PlotArea { | |||||||
|     /** |     /** | ||||||
|      * Get whether plot signs are allowed or not. |      * Get whether plot signs are allowed or not. | ||||||
|      * |      * | ||||||
|      * @return true if plot signs are allow, false otherwise. |      * @return {@code true} if plot signs are allowed, {@code false} otherwise. | ||||||
|      */ |      */ | ||||||
|     public boolean allowSigns() { |     public boolean allowSigns() { | ||||||
|         return allowSigns; |         return allowSigns; | ||||||
| @@ -1308,8 +1276,9 @@ public abstract class PlotArea { | |||||||
|      * @deprecated Use {@link #signMaterial()}. This method is used for 1.13 only and |      * @deprecated Use {@link #signMaterial()}. This method is used for 1.13 only and | ||||||
|      *         will be removed without replacement in favor of {@link #signMaterial()} |      *         will be removed without replacement in favor of {@link #signMaterial()} | ||||||
|      *         once we remove the support for 1.13. |      *         once we remove the support for 1.13. | ||||||
|  |      * @since 6.0.3 | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.3") | ||||||
|     public String getLegacySignMaterial() { |     public String getLegacySignMaterial() { | ||||||
|         return this.legacySignMaterial; |         return this.legacySignMaterial; | ||||||
|     } |     } | ||||||
| @@ -1355,14 +1324,18 @@ public abstract class PlotArea { | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the location for non-members to be teleported to. |      * Get the location for non-members to be teleported to. | ||||||
|  |      * | ||||||
|  |      * @since 6.1.4 | ||||||
|      */ |      */ | ||||||
|     public BlockLoc nonmemberHome() { |     public BlockLoc nonmemberHome() { | ||||||
|         return this.nonmemberHome; |         return this.nonmemberHome; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the default location for players to be teleported to. May be overriden by {@link #nonmemberHome} if the player is |      * Get the default location for players to be teleported to. May be overridden by {@link #nonmemberHome} if the player is | ||||||
|      * not a member of the plot. |      * not a member of the plot. | ||||||
|  |      * | ||||||
|  |      * @since 6.1.4 | ||||||
|      */ |      */ | ||||||
|     public BlockLoc defaultHome() { |     public BlockLoc defaultHome() { | ||||||
|         return this.defaultHome; |         return this.defaultHome; | ||||||
| @@ -1371,7 +1344,7 @@ public abstract class PlotArea { | |||||||
|     /** |     /** | ||||||
|      * @deprecated Use {@link #nonmemberHome} |      * @deprecated Use {@link #nonmemberHome} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.4") | ||||||
|     public PlotLoc getNonmemberHome() { |     public PlotLoc getNonmemberHome() { | ||||||
|         return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ()); |         return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ()); | ||||||
|     } |     } | ||||||
| @@ -1379,7 +1352,7 @@ public abstract class PlotArea { | |||||||
|     /** |     /** | ||||||
|      * @deprecated Use {@link #defaultHome} |      * @deprecated Use {@link #defaultHome} | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.1.4") | ||||||
|     public PlotLoc getDefaultHome() { |     public PlotLoc getDefaultHome() { | ||||||
|         return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ()); |         return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ()); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ public abstract class PlotManager { | |||||||
|      * @param plotIds list of PlotIds to finish the merge for |      * @param plotIds list of PlotIds to finish the merge for | ||||||
|      * @param queue   Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, |      * @param queue   Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, | ||||||
|      *                otherwise writes to the queue but does not enqueue. |      *                otherwise writes to the queue but does not enqueue. | ||||||
|      * @return false if part if the merge failed, otherwise true if successful. |      * @return {@code false} if part if the merge failed, otherwise {@code true} if successful. | ||||||
|      */ |      */ | ||||||
|     public abstract boolean finishPlotMerge(@NonNull List<PlotId> plotIds, @Nullable QueueCoordinator queue); |     public abstract boolean finishPlotMerge(@NonNull List<PlotId> plotIds, @Nullable QueueCoordinator queue); | ||||||
|  |  | ||||||
| @@ -214,7 +214,7 @@ public abstract class PlotManager { | |||||||
|      * @return the world height |      * @return the world height | ||||||
|      * @deprecated In favor of custom world heights within 1.17 and therefore scheduled for removal without replacement |      * @deprecated In favor of custom world heights within 1.17 and therefore scheduled for removal without replacement | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
|     public int getWorldHeight() { |     public int getWorldHeight() { | ||||||
|         return 255; |         return 255; | ||||||
|     } |     } | ||||||
| @@ -224,7 +224,7 @@ public abstract class PlotManager { | |||||||
|      * |      * | ||||||
|      * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, |      * @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, | ||||||
|      *              otherwise writes to the queue but does not enqueue. |      *              otherwise writes to the queue but does not enqueue. | ||||||
|      * @return true if the wall blocks were successfully set |      * @return {@code true} if the wall blocks were successfully set | ||||||
|      */ |      */ | ||||||
|     public boolean regenerateAllPlotWalls(@Nullable QueueCoordinator queue) { |     public boolean regenerateAllPlotWalls(@Nullable QueueCoordinator queue) { | ||||||
|         boolean success = true; |         boolean success = true; | ||||||
|   | |||||||
| @@ -190,9 +190,12 @@ public final class PlotModificationManager { | |||||||
|     /** |     /** | ||||||
|      * Clear the plot |      * Clear the plot | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #deletePlot(PlotPlayer, Runnable)} to clear and delete a plot | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param whenDone A runnable to execute when clearing finishes, or null |      * @param whenDone A runnable to execute when clearing finishes, or null | ||||||
|      * @see #clear(boolean, boolean, PlotPlayer, Runnable) |      * @see #clear(boolean, boolean, PlotPlayer, Runnable) | ||||||
|      * @see #deletePlot(PlotPlayer, Runnable) to clear and delete a plot |  | ||||||
|      */ |      */ | ||||||
|     public void clear(final @Nullable Runnable whenDone) { |     public void clear(final @Nullable Runnable whenDone) { | ||||||
|         this.clear(false, false, null, whenDone); |         this.clear(false, false, null, whenDone); | ||||||
| @@ -201,11 +204,14 @@ public final class PlotModificationManager { | |||||||
|     /** |     /** | ||||||
|      * Clear the plot |      * Clear the plot | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #deletePlot(PlotPlayer, Runnable)} to clear and delete a plot | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param checkRunning Whether or not already executing tasks should be checked |      * @param checkRunning Whether or not already executing tasks should be checked | ||||||
|      * @param isDelete     Whether or not the plot is being deleted |      * @param isDelete     Whether or not the plot is being deleted | ||||||
|      * @param actor        The actor clearing the plot |      * @param actor        The actor clearing the plot | ||||||
|      * @param whenDone     A runnable to execute when clearing finishes, or null |      * @param whenDone     A runnable to execute when clearing finishes, or null | ||||||
|      * @see #deletePlot(PlotPlayer, Runnable) to clear and delete a plot |  | ||||||
|      */ |      */ | ||||||
|     public boolean clear( |     public boolean clear( | ||||||
|             final boolean checkRunning, |             final boolean checkRunning, | ||||||
| @@ -448,7 +454,7 @@ public final class PlotModificationManager { | |||||||
|      * - Any setting from before plot creation will not be saved until the server is stopped properly. i.e. Set any values/options after plot |      * - Any setting from before plot creation will not be saved until the server is stopped properly. i.e. Set any values/options after plot | ||||||
|      * creation. |      * creation. | ||||||
|      * |      * | ||||||
|      * @return true if plot was created successfully |      * @return {@code true} if plot was created successfully | ||||||
|      */ |      */ | ||||||
|     public boolean create() { |     public boolean create() { | ||||||
|         return this.create(this.plot.getOwnerAbs(), true); |         return this.create(this.plot.getOwnerAbs(), true); | ||||||
| @@ -792,7 +798,7 @@ public final class PlotModificationManager { | |||||||
|     /** |     /** | ||||||
|      * Unlink a plot and remove the roads |      * Unlink a plot and remove the roads | ||||||
|      * |      * | ||||||
|      * @return true if plot was linked |      * @return {@code true} if plot was linked | ||||||
|      * @see #unlinkPlot(boolean, boolean) |      * @see #unlinkPlot(boolean, boolean) | ||||||
|      */ |      */ | ||||||
|     public boolean unlink() { |     public boolean unlink() { | ||||||
| @@ -858,11 +864,14 @@ public final class PlotModificationManager { | |||||||
|     /** |     /** | ||||||
|      * Delete a plot (use null for the runnable if you don't need to be notified on completion) |      * Delete a plot (use null for the runnable if you don't need to be notified on completion) | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link PlotModificationManager#clear(boolean, boolean, PlotPlayer, Runnable)} to simply clear a plot | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param actor    The actor executing the task |      * @param actor    The actor executing the task | ||||||
|      * @param whenDone task to run when plot has been deleted. Nullable |      * @param whenDone task to run when plot has been deleted. Nullable | ||||||
|      * @return {@code true} if the deletion was successful, {@code false} if not |      * @return {@code true} if the deletion was successful, {@code false} if not | ||||||
|      * @see PlotSquared#removePlot(Plot, boolean) |      * @see PlotSquared#removePlot(Plot, boolean) | ||||||
|      * @see PlotModificationManager#clear(boolean, boolean, PlotPlayer, Runnable) to simply clear a plot |  | ||||||
|      */ |      */ | ||||||
|     public boolean deletePlot(@Nullable PlotPlayer<?> actor, final Runnable whenDone) { |     public boolean deletePlot(@Nullable PlotPlayer<?> actor, final Runnable whenDone) { | ||||||
|         if (!this.plot.hasOwner()) { |         if (!this.plot.hasOwner()) { | ||||||
|   | |||||||
| @@ -30,6 +30,9 @@ import java.util.Objects; | |||||||
|  |  | ||||||
| public class PlotTitle { | public class PlotTitle { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.1.0 | ||||||
|  |      */ | ||||||
|     public static final PlotTitle CONFIGURED = new PlotTitle(); |     public static final PlotTitle CONFIGURED = new PlotTitle(); | ||||||
|  |  | ||||||
|     private final String title; |     private final String title; | ||||||
| @@ -40,6 +43,9 @@ public class PlotTitle { | |||||||
|         subtitle = null; |         subtitle = null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.0.10 | ||||||
|  |      */ | ||||||
|     public PlotTitle(String title, String subtitle) { |     public PlotTitle(String title, String subtitle) { | ||||||
|         Objects.requireNonNull(title); |         Objects.requireNonNull(title); | ||||||
|         Objects.requireNonNull(subtitle); |         Objects.requireNonNull(subtitle); | ||||||
| @@ -47,11 +53,17 @@ public class PlotTitle { | |||||||
|         this.subtitle = subtitle; |         this.subtitle = subtitle; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.0.10 | ||||||
|  |      */ | ||||||
|     @Nullable |     @Nullable | ||||||
|     public String title() { |     public String title() { | ||||||
|         return title; |         return title; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.0.10 | ||||||
|  |      */ | ||||||
|     @Nullable |     @Nullable | ||||||
|     public String subtitle() { |     public String subtitle() { | ||||||
|         return subtitle; |         return subtitle; | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ public abstract class CommentInbox { | |||||||
|     /** |     /** | ||||||
|      * @param plot   the plot's inbox to write to |      * @param plot   the plot's inbox to write to | ||||||
|      * @param player the player trying to write the comment |      * @param player the player trying to write the comment | ||||||
|      * @return true if the player can write a comment on the plot |      * @return {@code true} if the player can write a comment on the plot | ||||||
|      */ |      */ | ||||||
|     public boolean canWrite(Plot plot, PlotPlayer<?> player) { |     public boolean canWrite(Plot plot, PlotPlayer<?> player) { | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
| @@ -68,7 +68,7 @@ public abstract class CommentInbox { | |||||||
|     /** |     /** | ||||||
|      * @param plot   the plot's inbox to write to |      * @param plot   the plot's inbox to write to | ||||||
|      * @param player the player trying to modify the inbox |      * @param player the player trying to modify the inbox | ||||||
|      * @return true if the player can write a comment on the plot |      * @return {@code true} if the player can write a comment on the plot | ||||||
|      */ |      */ | ||||||
|     @SuppressWarnings({"BooleanMethodIsAlwaysInverted"}) |     @SuppressWarnings({"BooleanMethodIsAlwaysInverted"}) | ||||||
|     public boolean canModify(Plot plot, PlotPlayer<?> player) { |     public boolean canModify(Plot plot, PlotPlayer<?> player) { | ||||||
|   | |||||||
| @@ -216,24 +216,20 @@ public class ExpireManager { | |||||||
|                 applicable.add(et); |                 applicable.add(et); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (applicable.isEmpty()) { |         if (applicable.isEmpty()) { | ||||||
|             return new ArrayList<>(); |             return new ArrayList<>(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         // Don't delete server plots | ||||||
|         if (plot.getFlag(ServerPlotFlag.class)) { |         if (plot.getFlag(ServerPlotFlag.class)) { | ||||||
|             return new ArrayList<>(); |             return new ArrayList<>(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         long diff = getAge(plot); |  | ||||||
|         if (diff == 0) { |  | ||||||
|             return new ArrayList<>(); |  | ||||||
|         } |  | ||||||
|         // Filter out non old plots |         // Filter out non old plots | ||||||
|         boolean shouldCheckAccountAge = false; |         boolean shouldCheckAccountAge = false; | ||||||
|         for (int i = 0; i < applicable.size(); i++) { |         for (int i = 0; i < applicable.size(); i++) { | ||||||
|             ExpiryTask et = applicable.poll(); |             ExpiryTask et = applicable.poll(); | ||||||
|             if (et.applies(diff)) { |             if (et.applies(getAge(plot, et.shouldDeleteForUnknownOwner()))) { | ||||||
|                 applicable.add(et); |                 applicable.add(et); | ||||||
|                 shouldCheckAccountAge |= et.getSettings().SKIP_ACCOUNT_AGE_DAYS != -1; |                 shouldCheckAccountAge |= et.getSettings().SKIP_ACCOUNT_AGE_DAYS != -1; | ||||||
|             } |             } | ||||||
| @@ -243,9 +239,9 @@ public class ExpireManager { | |||||||
|         } |         } | ||||||
|         // Check account age |         // Check account age | ||||||
|         if (shouldCheckAccountAge) { |         if (shouldCheckAccountAge) { | ||||||
|             long accountAge = getAge(plot); |  | ||||||
|             for (int i = 0; i < applicable.size(); i++) { |             for (int i = 0; i < applicable.size(); i++) { | ||||||
|                 ExpiryTask et = applicable.poll(); |                 ExpiryTask et = applicable.poll(); | ||||||
|  |                 long accountAge = getAge(plot, et.shouldDeleteForUnknownOwner()); | ||||||
|                 if (et.appliesAccountAge(accountAge)) { |                 if (et.appliesAccountAge(accountAge)) { | ||||||
|                     applicable.add(et); |                     applicable.add(et); | ||||||
|                 } |                 } | ||||||
| @@ -309,9 +305,8 @@ public class ExpireManager { | |||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         this.running = 2; |         this.running = 2; | ||||||
|         final ConcurrentLinkedDeque<Plot> plots = |  | ||||||
|                 new ConcurrentLinkedDeque<>(PlotQuery.newQuery().allPlots().asList()); |  | ||||||
|         TaskManager.runTaskAsync(new Runnable() { |         TaskManager.runTaskAsync(new Runnable() { | ||||||
|  |             private ConcurrentLinkedDeque<Plot> plots = null; | ||||||
|             @Override |             @Override | ||||||
|             public void run() { |             public void run() { | ||||||
|                 final Runnable task = this; |                 final Runnable task = this; | ||||||
| @@ -319,7 +314,9 @@ public class ExpireManager { | |||||||
|                     ExpireManager.this.running = 0; |                     ExpireManager.this.running = 0; | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 long start = System.currentTimeMillis(); |                 if (plots == null) { | ||||||
|  |                     plots = new ConcurrentLinkedDeque<>(PlotQuery.newQuery().allPlots().asList()); | ||||||
|  |                 } | ||||||
|                 while (!plots.isEmpty()) { |                 while (!plots.isEmpty()) { | ||||||
|                     if (ExpireManager.this.running != 2) { |                     if (ExpireManager.this.running != 2) { | ||||||
|                         ExpireManager.this.running = 0; |                         ExpireManager.this.running = 0; | ||||||
| @@ -454,7 +451,20 @@ public class ExpireManager { | |||||||
|         plot.getPlotModificationManager().deletePlot(null, whenDone); |         plot.getPlotModificationManager().deletePlot(null, whenDone); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public long getAge(UUID uuid) { |     public long getAge(UUID uuid) { | ||||||
|  |         return getAge(uuid, false); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get the age (last play time) of the passed player | ||||||
|  |      * | ||||||
|  |      * @param uuid                     the uuid of the owner to check against | ||||||
|  |      * @param shouldDeleteUnknownOwner {@code true} if an unknown player should be counted as never online | ||||||
|  |      * @return the millis since the player was last online, or {@link Long#MAX_VALUE} if player was never online | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public long getAge(UUID uuid, final boolean shouldDeleteUnknownOwner) { | ||||||
|         if (PlotSquared.platform().playerManager().getPlayerIfExists(uuid) != null) { |         if (PlotSquared.platform().playerManager().getPlayerIfExists(uuid) != null) { | ||||||
|             return 0; |             return 0; | ||||||
|         } |         } | ||||||
| @@ -464,7 +474,7 @@ public class ExpireManager { | |||||||
|             if (opp != null && (last = opp.getLastPlayed()) != 0) { |             if (opp != null && (last = opp.getLastPlayed()) != 0) { | ||||||
|                 this.dates_cache.put(uuid, last); |                 this.dates_cache.put(uuid, last); | ||||||
|             } else { |             } else { | ||||||
|                 return 0; |                 return shouldDeleteUnknownOwner ? Long.MAX_VALUE : 0; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (last == 0) { |         if (last == 0) { | ||||||
| @@ -473,7 +483,7 @@ public class ExpireManager { | |||||||
|         return System.currentTimeMillis() - last; |         return System.currentTimeMillis() - last; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public long getAge(Plot plot) { |     public long getAge(Plot plot, final boolean shouldDeleteUnknownOwner) { | ||||||
|         if (!plot.hasOwner() || Objects.equals(DBFunc.EVERYONE, plot.getOwner()) |         if (!plot.hasOwner() || Objects.equals(DBFunc.EVERYONE, plot.getOwner()) | ||||||
|                 || PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwner()) != null || plot.getRunning() > 0) { |                 || PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwner()) != null || plot.getRunning() > 0) { | ||||||
|             return 0; |             return 0; | ||||||
| @@ -495,7 +505,7 @@ public class ExpireManager { | |||||||
|         } |         } | ||||||
|         long min = Long.MAX_VALUE; |         long min = Long.MAX_VALUE; | ||||||
|         for (UUID owner : plot.getOwners()) { |         for (UUID owner : plot.getOwners()) { | ||||||
|             long age = getAge(owner); |             long age = getAge(owner, shouldDeleteUnknownOwner); | ||||||
|             if (age < min) { |             if (age < min) { | ||||||
|                 min = age; |                 min = age; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -80,7 +80,7 @@ public class ExpiryTask { | |||||||
|                         diff = settings.REQUIRED_PLOTS - plots.size(); |                         diff = settings.REQUIRED_PLOTS - plots.size(); | ||||||
|                     } |                     } | ||||||
|                     List<Long> entireList = |                     List<Long> entireList = | ||||||
|                             plots.stream().map(plot -> ExpireManager.IMP.getAge(plot)) |                             plots.stream().map(plot -> ExpireManager.IMP.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN)) | ||||||
|                                     .collect(Collectors.toList()); |                                     .collect(Collectors.toList()); | ||||||
|                     List<Long> top = new ArrayList<>(diff + 1); |                     List<Long> top = new ArrayList<>(diff + 1); | ||||||
|                     if (diff > 1000) { |                     if (diff > 1000) { | ||||||
| @@ -157,5 +157,13 @@ public class ExpiryTask { | |||||||
|         return settings.CONFIRMATION; |         return settings.CONFIRMATION; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Returns {@code true} if this task respects unknown owners | ||||||
|  |      * @return {@code true} if unknown owners should be counted as never online | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public boolean shouldDeleteForUnknownOwner() { | ||||||
|  |         return settings.DELETE_IF_OWNER_IS_UNKNOWN; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -558,6 +558,7 @@ public class PlotAnalysis { | |||||||
|         return ranks; |         return ranks; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public static void sort(int[] input) { |     public static void sort(int[] input) { | ||||||
|         int SIZE = 10; |         int SIZE = 10; | ||||||
|         List<Integer>[] bucket = new ArrayList[SIZE]; |         List<Integer>[] bucket = new ArrayList[SIZE]; | ||||||
|   | |||||||
| @@ -96,7 +96,7 @@ public class FlagContainer { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Cast a plot flag with wildcard parameters into a parametrisized |      * Cast a plot flag with wildcard parameters into a parametrized | ||||||
|      * PlotFlag. This is an unsafe operation, and should only be performed |      * PlotFlag. This is an unsafe operation, and should only be performed | ||||||
|      * if the generic parameters are known beforehand. |      * if the generic parameters are known beforehand. | ||||||
|      * |      * | ||||||
| @@ -105,7 +105,7 @@ public class FlagContainer { | |||||||
|      * @param <T>  Flag type |      * @param <T>  Flag type | ||||||
|      * @return Casted flag |      * @return Casted flag | ||||||
|      */ |      */ | ||||||
|     @SuppressWarnings("ALL") |     @SuppressWarnings("unchecked") | ||||||
|     public static <V, T extends PlotFlag<V, ?>> T castUnsafe( |     public static <V, T extends PlotFlag<V, ?>> T castUnsafe( | ||||||
|             final PlotFlag<?, ?> flag |             final PlotFlag<?, ?> flag | ||||||
|     ) { |     ) { | ||||||
| @@ -142,10 +142,13 @@ public class FlagContainer { | |||||||
|     /** |     /** | ||||||
|      * Add a flag to the container |      * Add a flag to the container | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #addAll(Collection)} to add multiple flags. | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param flag Flag to add |      * @param flag Flag to add | ||||||
|      * @param <T>  flag type |      * @param <T>  flag type | ||||||
|      * @param <V>  flag value type |      * @param <V>  flag value type | ||||||
|      * @see #addAll(Collection) to add multiple flags |  | ||||||
|      */ |      */ | ||||||
|     public <V, T extends PlotFlag<V, ?>> void addFlag(final T flag) { |     public <V, T extends PlotFlag<V, ?>> void addFlag(final T flag) { | ||||||
|         try { |         try { | ||||||
| @@ -181,6 +184,7 @@ public class FlagContainer { | |||||||
|      * @param <V>  flag value type |      * @param <V>  flag value type | ||||||
|      * @return value of flag removed |      * @return value of flag removed | ||||||
|      */ |      */ | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public <V, T extends PlotFlag<V, ?>> V removeFlag(final T flag) { |     public <V, T extends PlotFlag<V, ?>> V removeFlag(final T flag) { | ||||||
|         final Object value = this.flagMap.remove(flag.getClass()); |         final Object value = this.flagMap.remove(flag.getClass()); | ||||||
|         if (this.plotFlagUpdateHandler != null) { |         if (this.plotFlagUpdateHandler != null) { | ||||||
| @@ -198,8 +202,11 @@ public class FlagContainer { | |||||||
|     /** |     /** | ||||||
|      * Add all flags to the container |      * Add all flags to the container | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #addFlag(PlotFlag)} to add a single flag. | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param flags Flags to add |      * @param flags Flags to add | ||||||
|      * @see #addFlag(PlotFlag) to add a single flagg |  | ||||||
|      */ |      */ | ||||||
|     public void addAll(final Collection<PlotFlag<?, ?>> flags) { |     public void addAll(final Collection<PlotFlag<?, ?>> flags) { | ||||||
|         for (final PlotFlag<?, ?> flag : flags) { |         for (final PlotFlag<?, ?> flag : flags) { | ||||||
| @@ -304,8 +311,11 @@ public class FlagContainer { | |||||||
|      * Updates are: a flag being removed, a flag being added or a flag |      * Updates are: a flag being removed, a flag being added or a flag | ||||||
|      * being updated. |      * being updated. | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link PlotFlagUpdateType} to see the update types available. | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param plotFlagUpdateHandler The update handler which will react to changes. |      * @param plotFlagUpdateHandler The update handler which will react to changes. | ||||||
|      * @see PlotFlagUpdateType Plot flag update types |  | ||||||
|      */ |      */ | ||||||
|     public void subscribe(final @NonNull PlotFlagUpdateHandler plotFlagUpdateHandler) { |     public void subscribe(final @NonNull PlotFlagUpdateHandler plotFlagUpdateHandler) { | ||||||
|         this.updateSubscribers.add(plotFlagUpdateHandler); |         this.updateSubscribers.add(plotFlagUpdateHandler); | ||||||
| @@ -348,6 +358,7 @@ public class FlagContainer { | |||||||
|      * This is to prevent memory leaks. This method is not part of the API. |      * This is to prevent memory leaks. This method is not part of the API. | ||||||
|      * |      * | ||||||
|      * @return a new Runnable that cleans up once the FlagContainer isn't needed anymore. |      * @return a new Runnable that cleans up once the FlagContainer isn't needed anymore. | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     @AnnotationHelper.ApiDescription(info = "This method should not be considered as public or API.") |     @AnnotationHelper.ApiDescription(info = "This method should not be considered as public or API.") | ||||||
|     public Runnable createCleanupHook() { |     public Runnable createCleanupHook() { | ||||||
|   | |||||||
| @@ -163,6 +163,7 @@ public abstract class PlotFlag<T, F extends PlotFlag<T, F>> { | |||||||
|      * Get if the flag's permission should check for values. E.g. plots.flag.set.music.VALUE |      * Get if the flag's permission should check for values. E.g. plots.flag.set.music.VALUE | ||||||
|      * |      * | ||||||
|      * @return if valued permission |      * @return if valued permission | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public boolean isValuedPermission() { |     public boolean isValuedPermission() { | ||||||
|         return true; |         return true; | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; | |||||||
| import com.plotsquared.core.plot.PlotTitle; | import com.plotsquared.core.plot.PlotTitle; | ||||||
| import com.plotsquared.core.plot.flag.FlagParseException; | import com.plotsquared.core.plot.flag.FlagParseException; | ||||||
| import com.plotsquared.core.plot.flag.PlotFlag; | import com.plotsquared.core.plot.flag.PlotFlag; | ||||||
|  | import com.plotsquared.core.util.StringMan; | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
| public class PlotTitleFlag extends PlotFlag<PlotTitle, PlotTitleFlag> { | public class PlotTitleFlag extends PlotFlag<PlotTitle, PlotTitleFlag> { | ||||||
| @@ -56,17 +57,18 @@ public class PlotTitleFlag extends PlotFlag<PlotTitle, PlotTitleFlag> { | |||||||
|         if (!input.contains("\"")) { |         if (!input.contains("\"")) { | ||||||
|             return new PlotTitleFlag(new PlotTitle(input, "")); |             return new PlotTitleFlag(new PlotTitle(input, "")); | ||||||
|         } |         } | ||||||
|         input = input.substring(input.indexOf("\"")); |  | ||||||
|         input = input.substring(0, input.lastIndexOf("\"") + 1); |         var split = StringMan.splitMessage(input); | ||||||
|         String[] inputs = input.split("\""); |  | ||||||
|         PlotTitle value; |         if (split.isEmpty() || split.size() > 2) { | ||||||
|         if (inputs.length == 2) { |  | ||||||
|             value = new PlotTitle(inputs[1], ""); |  | ||||||
|         } else if (inputs.length > 3) { |  | ||||||
|             value = new PlotTitle(inputs[1], inputs[3]); |  | ||||||
|         } else { |  | ||||||
|             throw new FlagParseException(this, input, TranslatableCaption.of("flags.flag_error_title")); |             throw new FlagParseException(this, input, TranslatableCaption.of("flags.flag_error_title")); | ||||||
|         } |         } | ||||||
|  |         PlotTitle value; | ||||||
|  |         if (split.size() == 1) { | ||||||
|  |             value = new PlotTitle(split.get(0), ""); | ||||||
|  |         } else { | ||||||
|  |             value = new PlotTitle(split.get(0), split.get(1)); | ||||||
|  |         } | ||||||
|         return new PlotTitleFlag(value); |         return new PlotTitleFlag(value); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -196,9 +196,12 @@ public interface PlotAreaManager { | |||||||
|     /** |     /** | ||||||
|      * Check if a plot world. |      * Check if a plot world. | ||||||
|      * |      * | ||||||
|  |      * <p> | ||||||
|  |      * Use {@link #getPlotAreaByString(String)} to get the PlotArea object | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|      * @param world the world |      * @param world the world | ||||||
|      * @return if a plot world is registered |      * @return if a plot world is registered | ||||||
|      * @see #getPlotAreaByString(String) to get the PlotArea object |  | ||||||
|      */ |      */ | ||||||
|     default boolean hasPlotArea(final @NonNull String world) { |     default boolean hasPlotArea(final @NonNull String world) { | ||||||
|         return this.getPlotAreas(world, null).length != 0; |         return this.getPlotAreas(world, null).length != 0; | ||||||
|   | |||||||
| @@ -57,7 +57,9 @@ import java.nio.file.Files; | |||||||
|  |  | ||||||
| public class SinglePlotArea extends GridPlotWorld { | public class SinglePlotArea extends GridPlotWorld { | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     private final PlotListener plotListener; |     private final PlotListener plotListener; | ||||||
|     public boolean VOID = false; |     public boolean VOID = false; | ||||||
|  |  | ||||||
| @@ -81,6 +83,7 @@ public class SinglePlotArea extends GridPlotWorld { | |||||||
|      * Returns true if the given string matches the naming system used to identify single plot worlds |      * Returns true if the given string matches the naming system used to identify single plot worlds | ||||||
|      * e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world |      * e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world | ||||||
|      * {@link com.plotsquared.core.plot.PlotArea}. |      * {@link com.plotsquared.core.plot.PlotArea}. | ||||||
|  |      * @since 6.1.4 | ||||||
|      */ |      */ | ||||||
|     public static boolean isSinglePlotWorld(String worldName) { |     public static boolean isSinglePlotWorld(String worldName) { | ||||||
|         int len = worldName.length(); |         int len = worldName.length(); | ||||||
| @@ -273,6 +276,7 @@ public class SinglePlotArea extends GridPlotWorld { | |||||||
|         return false; // do not create signs for single plots |         return false; // do not create signs for single plots | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") | ||||||
|     protected Plot adapt(Plot p) { |     protected Plot adapt(Plot p) { | ||||||
|         if (p instanceof SinglePlot) { |         if (p instanceof SinglePlot) { | ||||||
|             return p; |             return p; | ||||||
|   | |||||||
| @@ -57,7 +57,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator { | |||||||
|     private final ConcurrentHashMap<BlockVector2, LocalChunk> blockChunks = new ConcurrentHashMap<>(); |     private final ConcurrentHashMap<BlockVector2, LocalChunk> blockChunks = new ConcurrentHashMap<>(); | ||||||
|     private final List<BlockVector2> readRegion = new ArrayList<>(); |     private final List<BlockVector2> readRegion = new ArrayList<>(); | ||||||
|     private final List<ProgressSubscriber> progressSubscribers = new ArrayList<>(); |     private final List<ProgressSubscriber> progressSubscribers = new ArrayList<>(); | ||||||
|     private long modified; |  | ||||||
|     private LocalChunk lastWrappedChunk; |     private LocalChunk lastWrappedChunk; | ||||||
|     private int lastX = Integer.MIN_VALUE; |     private int lastX = Integer.MIN_VALUE; | ||||||
|     private int lastZ = Integer.MIN_VALUE; |     private int lastZ = Integer.MIN_VALUE; | ||||||
| @@ -76,7 +75,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator { | |||||||
|     public BasicQueueCoordinator(@NonNull World world) { |     public BasicQueueCoordinator(@NonNull World world) { | ||||||
|         super(world); |         super(world); | ||||||
|         this.world = world; |         this.world = world; | ||||||
|         this.modified = System.currentTimeMillis(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -94,7 +92,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public final void setModified(long modified) { |     public final void setModified(long modified) { | ||||||
|         this.modified = modified; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -120,6 +117,7 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator { | |||||||
|         return setBlock(x, y, z, id.toBaseBlock()); |         return setBlock(x, y, z, id.toBaseBlock()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("removal") | ||||||
|     @Override |     @Override | ||||||
|     public boolean setBiome(int x, int z, @NonNull BiomeType biomeType) { |     public boolean setBiome(int x, int z, @NonNull BiomeType biomeType) { | ||||||
|         LocalChunk chunk = getChunk(x >> 4, z >> 4); |         LocalChunk chunk = getChunk(x >> 4, z >> 4); | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ public abstract class ChunkCoordinator implements Runnable { | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Cancel the chunk coordinator. |      * Cancel the chunk coordinator. | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public abstract void cancel(); |     public abstract void cancel(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,13 +46,20 @@ public class ChunkQueueCoordinator extends ScopedQueueCoordinator { | |||||||
|     private final int length; |     private final int length; | ||||||
|     private final BlockVector3 bot; |     private final BlockVector3 bot; | ||||||
|     private final BlockVector3 top; |     private final BlockVector3 top; | ||||||
|  |     private final World weWorld; | ||||||
|  |  | ||||||
|     public ChunkQueueCoordinator(@NonNull BlockVector3 bot, @NonNull BlockVector3 top, boolean biomes) { |     public ChunkQueueCoordinator( | ||||||
|  |             final @NonNull World weWorld, | ||||||
|  |             @NonNull BlockVector3 bot, | ||||||
|  |             @NonNull BlockVector3 top, | ||||||
|  |             boolean biomes | ||||||
|  |     ) { | ||||||
|         super(null, Location.at("", 0, 0, 0), Location.at("", 15, 255, 15)); |         super(null, Location.at("", 0, 0, 0), Location.at("", 15, 255, 15)); | ||||||
|  |         this.weWorld = weWorld; | ||||||
|         this.width = top.getX() - bot.getX() + 1; |         this.width = top.getX() - bot.getX() + 1; | ||||||
|         this.length = top.getZ() - bot.getZ() + 1; |         this.length = top.getZ() - bot.getZ() + 1; | ||||||
|         this.result = new BlockState[256][][]; |         this.result = new BlockState[256][width][length]; | ||||||
|         this.biomeResult = biomes ? new BiomeType[256][][] : null; |         this.biomeResult = biomes ? new BiomeType[256][width][length] : null; | ||||||
|         this.bot = bot; |         this.bot = bot; | ||||||
|         this.top = top; |         this.top = top; | ||||||
|     } |     } | ||||||
| @@ -137,7 +144,7 @@ public class ChunkQueueCoordinator extends ScopedQueueCoordinator { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public @Nullable World getWorld() { |     public @Nullable World getWorld() { | ||||||
|         return super.getWorld(); |         return weWorld; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ public abstract class QueueCoordinator { | |||||||
|     private Object chunkObject; |     private Object chunkObject; | ||||||
|     private final AtomicBoolean enqueued = new AtomicBoolean(); |     private final AtomicBoolean enqueued = new AtomicBoolean(); | ||||||
|  |  | ||||||
|  |     @SuppressWarnings({"unused", "FieldCanBeLocal"}) | ||||||
|     @Inject |     @Inject | ||||||
|     private GlobalBlockQueue blockQueue; |     private GlobalBlockQueue blockQueue; | ||||||
|  |  | ||||||
| @@ -208,7 +209,7 @@ public abstract class QueueCoordinator { | |||||||
|      *         <br> |      *         <br> | ||||||
|      *         Scheduled for removal once we drop the support for versions not supporting 3D biomes. |      *         Scheduled for removal once we drop the support for versions not supporting 3D biomes. | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
|     public abstract boolean setBiome(int x, int z, @NonNull BiomeType biome); |     public abstract boolean setBiome(int x, int z, @NonNull BiomeType biome); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -326,6 +327,7 @@ public abstract class QueueCoordinator { | |||||||
|      * Enqueue the queue to start it |      * Enqueue the queue to start it | ||||||
|      * |      * | ||||||
|      * @return success or not |      * @return success or not | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public boolean enqueue() { |     public boolean enqueue() { | ||||||
|         boolean success = false; |         boolean success = false; | ||||||
|   | |||||||
| @@ -34,6 +34,7 @@ import java.util.function.Consumer; | |||||||
| /** | /** | ||||||
|  * A repository for keyed {@link java.util.concurrent.locks.Lock locks} |  * A repository for keyed {@link java.util.concurrent.locks.Lock locks} | ||||||
|  */ |  */ | ||||||
|  | @SuppressWarnings("UnstableApiUsage") | ||||||
| public final class LockRepository { | public final class LockRepository { | ||||||
|  |  | ||||||
|     private final Striped<Lock> striped; |     private final Striped<Lock> striped; | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ public final class BlockUtil { | |||||||
|         if (id.length() == 1 && id.charAt(0) == '*') { |         if (id.length() == 1 && id.charAt(0) == '*') { | ||||||
|             return FuzzyBlockState.builder().type(BlockTypes.AIR).build(); |             return FuzzyBlockState.builder().type(BlockTypes.AIR).build(); | ||||||
|         } |         } | ||||||
|         String mutableId = id; |         String mutableId; | ||||||
|         mutableId = id.toLowerCase(); |         mutableId = id.toLowerCase(); | ||||||
|         BlockType type = BlockTypes.get(mutableId); |         BlockType type = BlockTypes.get(mutableId); | ||||||
|         if (type != null) { |         if (type != null) { | ||||||
|   | |||||||
| @@ -123,7 +123,7 @@ public class ChunkUtil { | |||||||
|      * @param pos1  Region minimum point |      * @param pos1  Region minimum point | ||||||
|      * @param pos2  Region maximum point |      * @param pos2  Region maximum point | ||||||
|      * @param chunk BlockVector2 of chunk coordinates |      * @param chunk BlockVector2 of chunk coordinates | ||||||
|      * @return true if the region pos1-pos2 contains the chunk |      * @return {@code true} if the region pos1-pos2 contains the chunk | ||||||
|      */ |      */ | ||||||
|     public static boolean isWholeChunk(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockVector2 chunk) { |     public static boolean isWholeChunk(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockVector2 chunk) { | ||||||
|         int x1 = pos1.getX(); |         int x1 = pos1.getX(); | ||||||
|   | |||||||
| @@ -73,6 +73,7 @@ public class EntityUtil { | |||||||
|         return i; |         return i; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("unchecked") | ||||||
|     public static boolean checkEntity(Plot plot, PlotFlag<Integer, ?>... flags) { |     public static boolean checkEntity(Plot plot, PlotFlag<Integer, ?>... flags) { | ||||||
|         if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { |         if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { | ||||||
|             return true; |             return true; | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ package com.plotsquared.core.util; | |||||||
|  * |  * | ||||||
|  * @deprecated Do not use |  * @deprecated Do not use | ||||||
|  */ |  */ | ||||||
| @Deprecated(forRemoval = true) | @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
| public class MainUtil { | public class MainUtil { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -74,6 +74,7 @@ public class Permissions { | |||||||
|      * @param permission Permission |      * @param permission Permission | ||||||
|      * @param key        Permission "key" |      * @param key        Permission "key" | ||||||
|      * @return {@code true} if the owner has the given permission, else {@code false} |      * @return {@code true} if the owner has the given permission, else {@code false} | ||||||
|  |      * @since 6.0.10 | ||||||
|      */ |      */ | ||||||
|     public static boolean hasKeyedPermission( |     public static boolean hasKeyedPermission( | ||||||
|             final @NonNull PermissionHolder caller, final @NonNull String permission, |             final @NonNull PermissionHolder caller, final @NonNull String permission, | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ public class PremiumVerification { | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @param userID Spigot user ID |      * @param userID Spigot user ID | ||||||
|      * @return true if userID does not contain __USER__ |      * @return {@code true} if userID does not contain __USER__ | ||||||
|      */ |      */ | ||||||
|     private static Boolean isPremium(String userID) { |     private static Boolean isPremium(String userID) { | ||||||
|         return !userID.contains("__USER__"); |         return !userID.contains("__USER__"); | ||||||
| @@ -61,7 +61,7 @@ public class PremiumVerification { | |||||||
|     /** |     /** | ||||||
|      * Returns true if this plugin is premium |      * Returns true if this plugin is premium | ||||||
|      * |      * | ||||||
|      * @return if is premium |      * @return {@code true} if is premium | ||||||
|      */ |      */ | ||||||
|     public static Boolean isPremium() { |     public static Boolean isPremium() { | ||||||
|         return usingPremium == null ? (usingPremium = isPremium(getUserID())) : usingPremium; |         return usingPremium == null ? (usingPremium = isPremium(getUserID())) : usingPremium; | ||||||
|   | |||||||
| @@ -120,7 +120,7 @@ public abstract class RegionManager { | |||||||
|      * @param actor   the actor associated with the cuboid set |      * @param actor   the actor associated with the cuboid set | ||||||
|      * @param queue   Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, |      * @param queue   Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues, | ||||||
|      *                otherwise writes to the queue but does not enqueue. |      *                otherwise writes to the queue but does not enqueue. | ||||||
|      * @return true if not enqueued, otherwise whether the created queue enqueued. |      * @return {@code true} if not enqueued, otherwise whether the created queue enqueued. | ||||||
|      */ |      */ | ||||||
|     public boolean setCuboids( |     public boolean setCuboids( | ||||||
|             final @NonNull PlotArea area, |             final @NonNull PlotArea area, | ||||||
| @@ -161,7 +161,7 @@ public abstract class RegionManager { | |||||||
|      * Notify any plugins that may want to modify clear behaviour that a clear is occuring |      * Notify any plugins that may want to modify clear behaviour that a clear is occuring | ||||||
|      * |      * | ||||||
|      * @param manager plot manager |      * @param manager plot manager | ||||||
|      * @return true if the notified will accept the clear task |      * @return {@code true} if the notified will accept the clear task | ||||||
|      */ |      */ | ||||||
|     public boolean notifyClear(PlotManager manager) { |     public boolean notifyClear(PlotManager manager) { | ||||||
|         return false; |         return false; | ||||||
| @@ -174,7 +174,7 @@ public abstract class RegionManager { | |||||||
|      * @param whenDone task to run when complete |      * @param whenDone task to run when complete | ||||||
|      * @param manager  plot manager |      * @param manager  plot manager | ||||||
|      * @param actor    the player running the clear |      * @param actor    the player running the clear | ||||||
|      * @return true if the clear worked. False if someone went wrong so P2 can then handle the clear |      * @return {@code true} if the clear worked. {@code false} if someone went wrong so P2 can then handle the clear | ||||||
|      */ |      */ | ||||||
|     public abstract boolean handleClear( |     public abstract boolean handleClear( | ||||||
|             @NonNull Plot plot, |             @NonNull Plot plot, | ||||||
| @@ -289,7 +289,7 @@ public abstract class RegionManager { | |||||||
|                 true |                 true | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         toQueue2.setCompleteTask(whenDone::run); |         toQueue2.setCompleteTask(whenDone); | ||||||
|         if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { |         if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { | ||||||
|             toQueue2.addProgressSubscriber(subscriberFactory.createFull( |             toQueue2.addProgressSubscriber(subscriberFactory.createFull( | ||||||
|                     actor, |                     actor, | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ public abstract class SchematicHandler { | |||||||
|         this.subscriberFactory = subscriberFactory; |         this.subscriberFactory = subscriberFactory; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
|     public static void upload( |     public static void upload( | ||||||
|             @Nullable UUID uuid, |             @Nullable UUID uuid, | ||||||
|             final @Nullable String file, |             final @Nullable String file, | ||||||
| @@ -520,7 +520,7 @@ public abstract class SchematicHandler { | |||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Deprecated(forRemoval = true) |     @Deprecated(forRemoval = true, since = "6.0.0") | ||||||
|     public void upload(final CompoundTag tag, UUID uuid, String file, RunnableVal<URL> whenDone) { |     public void upload(final CompoundTag tag, UUID uuid, String file, RunnableVal<URL> whenDone) { | ||||||
|         if (tag == null) { |         if (tag == null) { | ||||||
|             TaskManager.runTask(whenDone); |             TaskManager.runTask(whenDone); | ||||||
| @@ -543,7 +543,7 @@ public abstract class SchematicHandler { | |||||||
|      * |      * | ||||||
|      * @param tag  to save |      * @param tag  to save | ||||||
|      * @param path to save in |      * @param path to save in | ||||||
|      * @return true if succeeded |      * @return {@code true} if succeeded | ||||||
|      */ |      */ | ||||||
|     public boolean save(CompoundTag tag, String path) { |     public boolean save(CompoundTag tag, String path) { | ||||||
|         if (tag == null) { |         if (tag == null) { | ||||||
|   | |||||||
| @@ -35,6 +35,9 @@ public abstract class SetupUtils { | |||||||
|  |  | ||||||
|     public static HashMap<String, GeneratorWrapper<?>> generators = new HashMap<>(); |     public static HashMap<String, GeneratorWrapper<?>> generators = new HashMap<>(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @since 6.1.0 | ||||||
|  |      */ | ||||||
|     public abstract void updateGenerators(final boolean force); |     public abstract void updateGenerators(final boolean force); | ||||||
|  |  | ||||||
|     public abstract String getGenerator(final PlotArea plotArea); |     public abstract String getGenerator(final PlotArea plotArea); | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user