mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-30 00:53:44 +01:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			feat/plotB
			...
			feat/v7/pl
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 936f3a36c5 | ||
|   | 31b3aca32f | ||
|   | 8cd92c8ffa | ||
|   | d85e3f443f | 
							
								
								
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -27,10 +27,10 @@ jobs: | |||||||
|           distribution: temurin |           distribution: temurin | ||||||
|           java-version: 17 |           java-version: 17 | ||||||
|       - name: Initialize CodeQL |       - name: Initialize CodeQL | ||||||
|         uses: github/codeql-action/init@v3 |         uses: github/codeql-action/init@v2 | ||||||
|         with: |         with: | ||||||
|           languages: ${{ matrix.language }} |           languages: ${{ matrix.language }} | ||||||
|       - name: Autobuild |       - name: Autobuild | ||||||
|         uses: github/codeql-action/autobuild@v3 |         uses: github/codeql-action/autobuild@v2 | ||||||
|       - name: Perform CodeQL Analysis |       - name: Perform CodeQL Analysis | ||||||
|         uses: github/codeql-action/analyze@v3 |         uses: github/codeql-action/analyze@v2 | ||||||
|   | |||||||
| @@ -67,7 +67,6 @@ tasks.named<ShadowJar>("shadowJar") { | |||||||
|         exclude(dependency("org.checkerframework:")) |         exclude(dependency("org.checkerframework:")) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     relocate("net.kyori.option", "com.plotsquared.core.configuration.option") |  | ||||||
|     relocate("net.kyori.adventure", "com.plotsquared.core.configuration.adventure") |     relocate("net.kyori.adventure", "com.plotsquared.core.configuration.adventure") | ||||||
|     relocate("net.kyori.examination", "com.plotsquared.core.configuration.examination") |     relocate("net.kyori.examination", "com.plotsquared.core.configuration.examination") | ||||||
|     relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib") |     relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib") | ||||||
|   | |||||||
| @@ -261,10 +261,7 @@ public class BlockEventListener implements Listener { | |||||||
|                 final BlockFace facing = piston.getFacing(); |                 final BlockFace facing = piston.getFacing(); | ||||||
|                 location = location.add(facing.getModX(), facing.getModY(), facing.getModZ()); |                 location = location.add(facing.getModX(), facing.getModY(), facing.getModZ()); | ||||||
|                 Plot newPlot = area.getOwnedPlotAbs(location); |                 Plot newPlot = area.getOwnedPlotAbs(location); | ||||||
|                 if (plot.equals(newPlot)) { |                 if (!plot.equals(newPlot)) { | ||||||
|                     return; |  | ||||||
|                 } |  | ||||||
|                 if (!plot.isMerged() || !plot.getConnectedPlots().contains(newPlot)) { |  | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                     plot.debug("Prevented piston update because of invalid edge piston detection"); |                     plot.debug("Prevented piston update because of invalid edge piston detection"); | ||||||
|                 } |                 } | ||||||
|   | |||||||
| @@ -252,8 +252,7 @@ public class PlayerEventListener implements Listener { | |||||||
|                 } |                 } | ||||||
|                 Plot plot = location.getOwnedPlot(); |                 Plot plot = location.getOwnedPlot(); | ||||||
|                 if (plot == null) { |                 if (plot == null) { | ||||||
|                     if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false) |                     if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) { | ||||||
|                             && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) { |  | ||||||
|                         event.setCancelled(true); |                         event.setCancelled(true); | ||||||
|                     } |                     } | ||||||
|                     return; |                     return; | ||||||
| @@ -261,8 +260,7 @@ public class PlayerEventListener implements Listener { | |||||||
|                 if (plot.isAdded(event.getPlayer().getUniqueId())) { |                 if (plot.isAdded(event.getPlayer().getUniqueId())) { | ||||||
|                     return; // allow for added players |                     return; // allow for added players | ||||||
|                 } |                 } | ||||||
|                 if (!plot.getFlag(EditSignFlag.class) |                 if (!plot.getFlag(EditSignFlag.class)) { | ||||||
|                         && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) { |  | ||||||
|                     plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false"); |                     plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false"); | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                 } |                 } | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ package com.plotsquared.bukkit.listener; | |||||||
|  |  | ||||||
| import com.plotsquared.bukkit.util.BukkitUtil; | import com.plotsquared.bukkit.util.BukkitUtil; | ||||||
| import com.plotsquared.core.location.Location; | import com.plotsquared.core.location.Location; | ||||||
| import com.plotsquared.core.permissions.Permission; |  | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| import com.plotsquared.core.plot.flag.implementations.EditSignFlag; | import com.plotsquared.core.plot.flag.implementations.EditSignFlag; | ||||||
| @@ -47,8 +46,7 @@ public class PlayerEventListener1201 implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false) |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) { | ||||||
|                     && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) { |  | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
| @@ -56,8 +54,7 @@ public class PlayerEventListener1201 implements Listener { | |||||||
|         if (plot.isAdded(event.getPlayer().getUniqueId())) { |         if (plot.isAdded(event.getPlayer().getUniqueId())) { | ||||||
|             return; // allow for added players |             return; // allow for added players | ||||||
|         } |         } | ||||||
|         if (!plot.getFlag(EditSignFlag.class) |         if (!plot.getFlag(EditSignFlag.class)) { | ||||||
|                 && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) { |  | ||||||
|             plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false"); |             plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false"); | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -47,21 +47,7 @@ public class TranslationUpdateManager { | |||||||
|         String usedGrants = "usedGrants"; |         String usedGrants = "usedGrants"; | ||||||
|         String usedGrantsReplacement = "used_grants"; |         String usedGrantsReplacement = "used_grants"; | ||||||
|         String remainingGrants = "remainingGrants"; |         String remainingGrants = "remainingGrants"; | ||||||
|         String remainingGrantsReplacement = "remaining_grants"; |         String rremainingGrantsReplacement = "remaining_grants"; | ||||||
|         String minimumRadius = "minimumRadius"; |  | ||||||
|         String minimumRadiusReplacement = "minimum_radius"; |  | ||||||
|         String maximumMoves = "maximumMoves"; |  | ||||||
|         String maximumMovesReplacement = "maximum_moves"; |  | ||||||
|         String userMove = "userMove"; |  | ||||||
|         String userMoveReplacement = "user_move"; |  | ||||||
|  |  | ||||||
|         // tag opening / closing characters are important, as the locale keys exist as well, which should not be replaced |  | ||||||
|         String listInfoUnknown = "<info.unknown>"; |  | ||||||
|         String listInfoUnknownReplacement = "<unknown>"; |  | ||||||
|         String listInfoServer = "<info.server>"; |  | ||||||
|         String listInfoServerReplacement = "<server>"; |  | ||||||
|         String listInfoEveryone = "<info.everyone>"; |  | ||||||
|         String listInfoEveryoneReplacement = "<everyone>"; |  | ||||||
|  |  | ||||||
|         try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) { |         try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) { | ||||||
|             paths |             paths | ||||||
| @@ -72,13 +58,7 @@ public class TranslationUpdateManager { | |||||||
|                         replaceInFile(p, minHeight, minheightReplacement); |                         replaceInFile(p, minHeight, minheightReplacement); | ||||||
|                         replaceInFile(p, maxHeight, maxheightReplacement); |                         replaceInFile(p, maxHeight, maxheightReplacement); | ||||||
|                         replaceInFile(p, usedGrants, usedGrantsReplacement); |                         replaceInFile(p, usedGrants, usedGrantsReplacement); | ||||||
|                         replaceInFile(p, remainingGrants, remainingGrantsReplacement); |                         replaceInFile(p, remainingGrants, rremainingGrantsReplacement); | ||||||
|                         replaceInFile(p, minimumRadius, minimumRadiusReplacement); |  | ||||||
|                         replaceInFile(p, maximumMoves, maximumMovesReplacement); |  | ||||||
|                         replaceInFile(p, userMove, userMoveReplacement); |  | ||||||
|                         replaceInFile(p, listInfoUnknown, listInfoUnknownReplacement); |  | ||||||
|                         replaceInFile(p, listInfoServer, listInfoServerReplacement); |  | ||||||
|                         replaceInFile(p, listInfoEveryone, listInfoEveryoneReplacement); |  | ||||||
|                     }); |                     }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -21,9 +21,8 @@ package com.plotsquared.core.command; | |||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import com.plotsquared.core.PlotSquared; | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.events.PlayerBuyPlotEvent; | import com.plotsquared.core.events.PlotFlagRemoveEvent; | ||||||
| import com.plotsquared.core.events.Result; | import com.plotsquared.core.events.Result; | ||||||
| import com.plotsquared.core.player.OfflinePlotPlayer; |  | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| @@ -89,30 +88,22 @@ public class Buy extends Command { | |||||||
|                 TranslatableCaption.of("permission.cant_claim_more_plots"), |                 TranslatableCaption.of("permission.cant_claim_more_plots"), | ||||||
|                 TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots()))) |                 TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots()))) | ||||||
|         ); |         ); | ||||||
|         double priceFlag = plot.getFlag(PriceFlag.class); |         double price = plot.getFlag(PriceFlag.class); | ||||||
|         if (priceFlag <= 0) { |         if (price <= 0) { | ||||||
|             throw new CommandException(TranslatableCaption.of("economy.not_for_sale")); |             throw new CommandException(TranslatableCaption.of("economy.not_for_sale")); | ||||||
|         } |         } | ||||||
|         checkTrue( |         checkTrue( | ||||||
|                 this.econHandler.isSupported(), |                 this.econHandler.isSupported(), | ||||||
|                 TranslatableCaption.of("economy.vault_or_consumer_null") |                 TranslatableCaption.of("economy.vault_or_consumer_null") | ||||||
|         ); |         ); | ||||||
|  |         checkTrue( | ||||||
|         PlayerBuyPlotEvent event = this.eventDispatcher.callPlayerBuyPlot(player, plot, priceFlag); |                 this.econHandler.getMoney(player) >= price, | ||||||
|         if (event.getEventResult() == Result.DENY) { |  | ||||||
|             throw new CommandException(TranslatableCaption.of("economy.cannot_buy_blocked")); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         double price = event.getEventResult() == Result.FORCE ? 0 : event.price(); |  | ||||||
|         if (this.econHandler.getMoney(player) < price) { |  | ||||||
|             throw new CommandException( |  | ||||||
|                 TranslatableCaption.of("economy.cannot_afford_plot"), |                 TranslatableCaption.of("economy.cannot_afford_plot"), | ||||||
|                 TagResolver.builder() |                 TagResolver.builder() | ||||||
|                         .tag("money", Tag.inserting(Component.text(this.econHandler.format(price)))) |                         .tag("money", Tag.inserting(Component.text(this.econHandler.format(price)))) | ||||||
|                         .tag("balance", Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))) |                         .tag("balance", Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))) | ||||||
|                         .build() |                         .build() | ||||||
|         ); |         ); | ||||||
|         } |  | ||||||
|         this.econHandler.withdrawMoney(player, price); |         this.econHandler.withdrawMoney(player, price); | ||||||
|         // Failure |         // Failure | ||||||
|         // Success |         // Success | ||||||
| @@ -122,8 +113,7 @@ public class Buy extends Command { | |||||||
|                     TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price)))) |                     TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price)))) | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|             OfflinePlotPlayer previousOwner = PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs()); |             this.econHandler.depositMoney(PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs()), price); | ||||||
|             this.econHandler.depositMoney(previousOwner, price); |  | ||||||
|  |  | ||||||
|             PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs()); |             PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs()); | ||||||
|             if (owner != null) { |             if (owner != null) { | ||||||
| @@ -137,8 +127,9 @@ public class Buy extends Command { | |||||||
|                 ); |                 ); | ||||||
|             } |             } | ||||||
|             PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class); |             PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class); | ||||||
|             if (this.eventDispatcher.callFlagRemove(plotFlag, plot).getEventResult() != Result.DENY) { |             PlotFlagRemoveEvent event = this.eventDispatcher.callFlagRemove(plotFlag, plot); | ||||||
|                 plot.removeFlag(plotFlag); |             if (event.getEventResult() != Result.DENY) { | ||||||
|  |                 plot.removeFlag(event.getFlag()); | ||||||
|             } |             } | ||||||
|             plot.setOwner(player.getUUID()); |             plot.setOwner(player.getUUID()); | ||||||
|             plot.getPlotModificationManager().setSign(player.getName()); |             plot.getPlotModificationManager().setSign(player.getName()); | ||||||
| @@ -146,7 +137,6 @@ public class Buy extends Command { | |||||||
|                     TranslatableCaption.of("working.claimed"), |                     TranslatableCaption.of("working.claimed"), | ||||||
|                     TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString()))) |                     TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString()))) | ||||||
|             ); |             ); | ||||||
|             this.eventDispatcher.callPostPlayerBuyPlot(player, previousOwner, plot, price); |  | ||||||
|             whenDone.run(Buy.this, CommandResult.SUCCESS); |             whenDone.run(Buy.this, CommandResult.SUCCESS); | ||||||
|         }, () -> { |         }, () -> { | ||||||
|             this.econHandler.depositMoney(player, price); |             this.econHandler.depositMoney(player, price); | ||||||
|   | |||||||
| @@ -256,11 +256,11 @@ public class Condense extends SubCommand { | |||||||
|                 player.sendMessage(TranslatableCaption.of("condense.default_eval")); |                 player.sendMessage(TranslatableCaption.of("condense.default_eval")); | ||||||
|                 player.sendMessage( |                 player.sendMessage( | ||||||
|                         TranslatableCaption.of("condense.minimum_radius"), |                         TranslatableCaption.of("condense.minimum_radius"), | ||||||
|                         TagResolver.resolver("minimum_radius", Tag.inserting(Component.text(minimumRadius))) |                         TagResolver.resolver("minimumRadius", Tag.inserting(Component.text(minimumRadius))) | ||||||
|                 ); |                 ); | ||||||
|                 player.sendMessage( |                 player.sendMessage( | ||||||
|                         TranslatableCaption.of("condense.maximum_moved"), |                         TranslatableCaption.of("condense.maximum_moved"), | ||||||
|                         TagResolver.resolver("maximum_moves", Tag.inserting(Component.text(maxMove))) |                         TagResolver.resolver("maxMove", Tag.inserting(Component.text(maxMove))) | ||||||
|                 ); |                 ); | ||||||
|                 player.sendMessage(TranslatableCaption.of("condense.input_eval")); |                 player.sendMessage(TranslatableCaption.of("condense.input_eval")); | ||||||
|                 player.sendMessage( |                 player.sendMessage( | ||||||
| @@ -269,7 +269,7 @@ public class Condense extends SubCommand { | |||||||
|                 ); |                 ); | ||||||
|                 player.sendMessage( |                 player.sendMessage( | ||||||
|                         TranslatableCaption.of("condense.estimated_moves"), |                         TranslatableCaption.of("condense.estimated_moves"), | ||||||
|                         TagResolver.resolver("user_move", Tag.inserting(Component.text(userMove))) |                         TagResolver.resolver("userMove", Tag.inserting(Component.text(userMove))) | ||||||
|                 ); |                 ); | ||||||
|                 player.sendMessage(TranslatableCaption.of("condense.eta")); |                 player.sendMessage(TranslatableCaption.of("condense.eta")); | ||||||
|                 player.sendMessage(TranslatableCaption.of("condense.radius_measured")); |                 player.sendMessage(TranslatableCaption.of("condense.radius_measured")); | ||||||
|   | |||||||
| @@ -94,7 +94,7 @@ public class Done extends SubCommand { | |||||||
|                 TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString()))) |                 TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString()))) | ||||||
|         ); |         ); | ||||||
|         final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done"); |         final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done"); | ||||||
|         if (PlotSquared.platform().expireManager() == null || doneRequirements == null || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DONE)) { |         if (PlotSquared.platform().expireManager() == null || doneRequirements == null) { | ||||||
|             finish(plot, player, true); |             finish(plot, player, true); | ||||||
|             plot.removeRunning(); |             plot.removeRunning(); | ||||||
|         } else { |         } else { | ||||||
|   | |||||||
| @@ -465,7 +465,7 @@ public class ListCmd extends SubCommand { | |||||||
|                 TextComponent.Builder builder = Component.text(); |                 TextComponent.Builder builder = Component.text(); | ||||||
|                 if (plot.getFlag(ServerPlotFlag.class)) { |                 if (plot.getFlag(ServerPlotFlag.class)) { | ||||||
|                     TagResolver serverResolver = TagResolver.resolver( |                     TagResolver serverResolver = TagResolver.resolver( | ||||||
|                             "server", |                             "info.server", | ||||||
|                             Tag.inserting(TranslatableCaption.of("info.server").toComponent(player)) |                             Tag.inserting(TranslatableCaption.of("info.server").toComponent(player)) | ||||||
|                     ); |                     ); | ||||||
|                     builder.append(MINI_MESSAGE.deserialize(server, serverResolver)); |                     builder.append(MINI_MESSAGE.deserialize(server, serverResolver)); | ||||||
| @@ -483,13 +483,13 @@ public class ListCmd extends SubCommand { | |||||||
|                                 builder.append(MINI_MESSAGE.deserialize(online, resolver)); |                                 builder.append(MINI_MESSAGE.deserialize(online, resolver)); | ||||||
|                             } else if (uuidMapping.username().equalsIgnoreCase("unknown")) { |                             } else if (uuidMapping.username().equalsIgnoreCase("unknown")) { | ||||||
|                                 TagResolver unknownResolver = TagResolver.resolver( |                                 TagResolver unknownResolver = TagResolver.resolver( | ||||||
|                                         "unknown", |                                         "info.unknown", | ||||||
|                                         Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player)) |                                         Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player)) | ||||||
|                                 ); |                                 ); | ||||||
|                                 builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver)); |                                 builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver)); | ||||||
|                             } else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) { |                             } else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) { | ||||||
|                                 TagResolver everyoneResolver = TagResolver.resolver( |                                 TagResolver everyoneResolver = TagResolver.resolver( | ||||||
|                                         "everyone", |                                         "info.everyone", | ||||||
|                                         Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player)) |                                         Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player)) | ||||||
|                                 ); |                                 ); | ||||||
|                                 builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver)); |                                 builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver)); | ||||||
|   | |||||||
| @@ -18,34 +18,17 @@ | |||||||
|  */ |  */ | ||||||
| package com.plotsquared.core.events; | package com.plotsquared.core.events; | ||||||
|  |  | ||||||
|  |  | ||||||
| import org.checkerframework.checker.nullness.qual.Nullable; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * PlotSquared event with {@link Result} to cancel, force, or allow. |  * PlotSquared event with {@link Result} to cancel, force, or allow. | ||||||
|  */ |  */ | ||||||
| public interface CancellablePlotEvent { | public interface CancellablePlotEvent { | ||||||
|  |  | ||||||
|     /** |     Result getEventResult(); | ||||||
|      * The currently set {@link Result} for this event (as set by potential previous event listeners). |  | ||||||
|      * |  | ||||||
|      * @return the current result. |  | ||||||
|      */ |  | ||||||
|     @Nullable Result getEventResult(); |  | ||||||
|  |  | ||||||
|     /** |     void setEventResult(Result eventResult); | ||||||
|      * Set the {@link Result} for this event. |  | ||||||
|      * |  | ||||||
|      * @param eventResult the new result. |  | ||||||
|      */ |  | ||||||
|     void setEventResult(@Nullable Result eventResult); |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * @deprecated No usage and not null-safe |  | ||||||
|      */ |  | ||||||
|     @Deprecated(since = "TODO") |  | ||||||
|     default int getEventResultRaw() { |     default int getEventResultRaw() { | ||||||
|         return getEventResult() != null ? getEventResult().getValue() : -1; |         return getEventResult().getValue(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,88 +0,0 @@ | |||||||
| /* |  | ||||||
|  * PlotSquared, a land and world management plugin for Minecraft. |  | ||||||
|  * Copyright (C) IntellectualSites <https://intellectualsites.com> |  | ||||||
|  * Copyright (C) IntellectualSites team and contributors |  | ||||||
|  * |  | ||||||
|  * This program is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
| package com.plotsquared.core.events; |  | ||||||
|  |  | ||||||
| import com.plotsquared.core.player.PlotPlayer; |  | ||||||
| import com.plotsquared.core.plot.Plot; |  | ||||||
| import org.checkerframework.checker.index.qual.NonNegative; |  | ||||||
| import org.checkerframework.checker.nullness.qual.Nullable; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Called when a user attempts to buy a plot. |  | ||||||
|  * <p> |  | ||||||
|  * Setting the {@link #setEventResult(Result) Result} to {@link Result#FORCE} ignores the price and players account balance and does not charge the |  | ||||||
|  * player anything. {@link Result#DENY} blocks the purchase completely, {@link Result#ACCEPT} and {@code null} do not modify |  | ||||||
|  * the behaviour. |  | ||||||
|  * <p> |  | ||||||
|  * Setting the {@link #setPrice(double) price} to {@code 0} makes the plot practically free. |  | ||||||
|  * |  | ||||||
|  * @since TODO |  | ||||||
|  */ |  | ||||||
| public class PlayerBuyPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent { |  | ||||||
|  |  | ||||||
|     private Result result; |  | ||||||
|     private double price; |  | ||||||
|  |  | ||||||
|     public PlayerBuyPlotEvent(final PlotPlayer<?> plotPlayer, final Plot plot, @NonNegative final double price) { |  | ||||||
|         super(plotPlayer, plot); |  | ||||||
|         this.price = price; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Sets the price required to buy the plot. |  | ||||||
|      * |  | ||||||
|      * @param price the new price. |  | ||||||
|      * @since TODO |  | ||||||
|      */ |  | ||||||
|     public void setPrice(@NonNegative final double price) { |  | ||||||
|         //noinspection ConstantValue - the annotation does not ensure a non-negative runtime value |  | ||||||
|         if (price < 0) { |  | ||||||
|             throw new IllegalArgumentException("price must be non-negative"); |  | ||||||
|         } |  | ||||||
|         this.price = price; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns the currently set price required to buy the plot. |  | ||||||
|      * |  | ||||||
|      * @return the price. |  | ||||||
|      * @since TODO |  | ||||||
|      */ |  | ||||||
|     public @NonNegative double price() { |  | ||||||
|         return price; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * {@inheritDoc} |  | ||||||
|      */ |  | ||||||
|     @Override |  | ||||||
|     public void setEventResult(@Nullable final Result eventResult) { |  | ||||||
|         this.result = eventResult; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * {@inheritDoc} |  | ||||||
|      */ |  | ||||||
|     @Override |  | ||||||
|     public @Nullable Result getEventResult() { |  | ||||||
|         return this.result; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,77 +0,0 @@ | |||||||
| /* |  | ||||||
|  * PlotSquared, a land and world management plugin for Minecraft. |  | ||||||
|  * Copyright (C) IntellectualSites <https://intellectualsites.com> |  | ||||||
|  * Copyright (C) IntellectualSites team and contributors |  | ||||||
|  * |  | ||||||
|  * This program is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
| package com.plotsquared.core.events; |  | ||||||
|  |  | ||||||
| import com.plotsquared.core.player.PlotPlayer; |  | ||||||
| import org.checkerframework.checker.index.qual.NonNegative; |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Called every time after PlotSquared calculated a players plot limit based on their permission. |  | ||||||
|  * <p> |  | ||||||
|  * May be used to grant a player more plots based on another rank or bought feature. |  | ||||||
|  * |  | ||||||
|  * @since 7.3.0 |  | ||||||
|  */ |  | ||||||
| public class PlayerPlotLimitEvent { |  | ||||||
|  |  | ||||||
|     private final PlotPlayer<?> player; |  | ||||||
|  |  | ||||||
|     private int limit; |  | ||||||
|  |  | ||||||
|     public PlayerPlotLimitEvent(@NonNull final PlotPlayer<?> player, @NonNegative final int limit) { |  | ||||||
|         this.player = player; |  | ||||||
|         this.limit = limit; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Overrides the previously calculated or set plot limit for {@link #player()}. |  | ||||||
|      * |  | ||||||
|      * @param limit The amount of plots a player may claim. Must be {@code 0} or greater. |  | ||||||
|      * @since 7.3.0 |  | ||||||
|      */ |  | ||||||
|     public void limit(@NonNegative final int limit) { |  | ||||||
|         if (limit < 0) { |  | ||||||
|             throw new IllegalArgumentException("Player plot limit must be greater or equal 0"); |  | ||||||
|         } |  | ||||||
|         this.limit = limit; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns the previous set limit, if none was overridden before this event handler the default limit based on the players |  | ||||||
|      * permissions node is returned. |  | ||||||
|      * |  | ||||||
|      * @return The currently defined plot limit of this player. |  | ||||||
|      * @since 7.3.0 |  | ||||||
|      */ |  | ||||||
|     public @NonNegative int limit() { |  | ||||||
|         return limit; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * The player for which the limit is queried. |  | ||||||
|      * |  | ||||||
|      * @return the player. |  | ||||||
|      * @since 7.3.0 |  | ||||||
|      */ |  | ||||||
|     public @NonNull PlotPlayer<?> player() { |  | ||||||
|         return player; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,64 +0,0 @@ | |||||||
| /* |  | ||||||
|  * PlotSquared, a land and world management plugin for Minecraft. |  | ||||||
|  * Copyright (C) IntellectualSites <https://intellectualsites.com> |  | ||||||
|  * Copyright (C) IntellectualSites team and contributors |  | ||||||
|  * |  | ||||||
|  * This program is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
| package com.plotsquared.core.events.post; |  | ||||||
|  |  | ||||||
| import com.plotsquared.core.events.PlotPlayerEvent; |  | ||||||
| import com.plotsquared.core.player.OfflinePlotPlayer; |  | ||||||
| import com.plotsquared.core.player.PlotPlayer; |  | ||||||
| import com.plotsquared.core.plot.Plot; |  | ||||||
| import org.checkerframework.checker.index.qual.NonNegative; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Called after a player has successfully bought a plot. |  | ||||||
|  * |  | ||||||
|  * @since TODO |  | ||||||
|  */ |  | ||||||
| public class PostPlayerBuyPlotEvent extends PlotPlayerEvent { |  | ||||||
|  |  | ||||||
|     private final OfflinePlotPlayer previousOwner; |  | ||||||
|     private final double price; |  | ||||||
|  |  | ||||||
|     public PostPlayerBuyPlotEvent( |  | ||||||
|             final PlotPlayer<?> plotPlayer, final OfflinePlotPlayer previousOwner, final Plot plot, |  | ||||||
|             @NonNegative final double price |  | ||||||
|     ) { |  | ||||||
|         super(plotPlayer, plot); |  | ||||||
|         this.previousOwner = previousOwner; |  | ||||||
|         this.price = price; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * The previous owner of the bought plot. |  | ||||||
|      * |  | ||||||
|      * @return the previous owner. |  | ||||||
|      */ |  | ||||||
|     public OfflinePlotPlayer previousOwner() { |  | ||||||
|         return previousOwner; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns the price after potential modifications by {@link com.plotsquared.core.events.PlayerBuyPlotEvent}. |  | ||||||
|      * |  | ||||||
|      * @return the price the player had to pay to buy the plot. |  | ||||||
|      */ |  | ||||||
|     public double price() { |  | ||||||
|         return price; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -143,7 +143,7 @@ public class ClassicPlotManager extends SquarePlotManager { | |||||||
|                     classicPlotWorld, |                     classicPlotWorld, | ||||||
|                     plot.getRegions(), |                     plot.getRegions(), | ||||||
|                     blocks, |                     blocks, | ||||||
|                     classicPlotWorld.getMinBuildHeight(), |                     classicPlotWorld.getMinComponentHeight(), | ||||||
|                     classicPlotWorld.getMaxBuildHeight() - 1, |                     classicPlotWorld.getMaxBuildHeight() - 1, | ||||||
|                     actor, |                     actor, | ||||||
|                     queue |                     queue | ||||||
| @@ -204,7 +204,7 @@ public class ClassicPlotManager extends SquarePlotManager { | |||||||
|                     classicPlotWorld, |                     classicPlotWorld, | ||||||
|                     plot.getRegions(), |                     plot.getRegions(), | ||||||
|                     blocks, |                     blocks, | ||||||
|                     classicPlotWorld.getMinBuildHeight(), |                     classicPlotWorld.getMinComponentHeight(), | ||||||
|                     classicPlotWorld.PLOT_HEIGHT - 1, |                     classicPlotWorld.PLOT_HEIGHT - 1, | ||||||
|                     actor, |                     actor, | ||||||
|                     queue |                     queue | ||||||
| @@ -379,7 +379,7 @@ public class ClassicPlotManager extends SquarePlotManager { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         int yStart = classicPlotWorld.getMinBuildHeight() + (classicPlotWorld.PLOT_BEDROCK ? 1 : 0); |         int yStart = classicPlotWorld.getMinComponentHeight(); | ||||||
|         if (!plot.isMerged(Direction.NORTH)) { |         if (!plot.isMerged(Direction.NORTH)) { | ||||||
|             int z = bot.getZ(); |             int z = bot.getZ(); | ||||||
|             for (int x = bot.getX(); x < top.getX(); x++) { |             for (int x = bot.getX(); x < top.getX(); x++) { | ||||||
|   | |||||||
| @@ -52,6 +52,7 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { | |||||||
|     public BlockBucket ROAD_BLOCK = new BlockBucket(BlockTypes.QUARTZ_BLOCK); |     public BlockBucket ROAD_BLOCK = new BlockBucket(BlockTypes.QUARTZ_BLOCK); | ||||||
|     public boolean PLOT_BEDROCK = true; |     public boolean PLOT_BEDROCK = true; | ||||||
|     public boolean PLACE_TOP_BLOCK = true; |     public boolean PLACE_TOP_BLOCK = true; | ||||||
|  |     public boolean COMPONENT_BELOW_BEDROCK = false; | ||||||
|  |  | ||||||
|     public ClassicPlotWorld( |     public ClassicPlotWorld( | ||||||
|             final @NonNull String worldName, |             final @NonNull String worldName, | ||||||
| @@ -129,6 +130,9 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { | |||||||
|                 ), |                 ), | ||||||
|                 new ConfigurationNode("plot.bedrock", this.PLOT_BEDROCK, TranslatableCaption.of("setup.bedrock_boolean"), |                 new ConfigurationNode("plot.bedrock", this.PLOT_BEDROCK, TranslatableCaption.of("setup.bedrock_boolean"), | ||||||
|                         ConfigurationUtil.BOOLEAN |                         ConfigurationUtil.BOOLEAN | ||||||
|  |                 ), | ||||||
|  |                 new ConfigurationNode("world.component_below_bedrock", this.COMPONENT_BELOW_BEDROCK, TranslatableCaption.of( | ||||||
|  |                         "setup.component_below_bedrock_boolean"), ConfigurationUtil.BOOLEAN | ||||||
|                 )}; |                 )}; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -150,6 +154,14 @@ public abstract class ClassicPlotWorld extends SquarePlotWorld { | |||||||
|         this.PLACE_TOP_BLOCK = config.getBoolean("wall.place_top_block"); |         this.PLACE_TOP_BLOCK = config.getBoolean("wall.place_top_block"); | ||||||
|         this.WALL_HEIGHT = Math.min(getMaxGenHeight() - (PLACE_TOP_BLOCK ? 1 : 0), config.getInt("wall.height")); |         this.WALL_HEIGHT = Math.min(getMaxGenHeight() - (PLACE_TOP_BLOCK ? 1 : 0), config.getInt("wall.height")); | ||||||
|         this.CLAIMED_WALL_BLOCK = createCheckedBlockBucket(config.getString("wall.block_claimed"), CLAIMED_WALL_BLOCK); |         this.CLAIMED_WALL_BLOCK = createCheckedBlockBucket(config.getString("wall.block_claimed"), CLAIMED_WALL_BLOCK); | ||||||
|  |         this.COMPONENT_BELOW_BEDROCK = config.getBoolean("world.component_below_bedrock"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public int getMinComponentHeight() { | ||||||
|  |         return COMPONENT_BELOW_BEDROCK && getMinGenHeight() >= getMinBuildHeight() | ||||||
|  |                 ? getMinGenHeight() + (PLOT_BEDROCK ? 1 : 0) | ||||||
|  |                 : getMinBuildHeight(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     int schematicStartHeight() { |     int schematicStartHeight() { | ||||||
|   | |||||||
| @@ -364,6 +364,7 @@ public class PlotListener { | |||||||
|     public boolean plotExit(final PlotPlayer<?> player, Plot plot) { |     public boolean plotExit(final PlotPlayer<?> player, Plot plot) { | ||||||
|         try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { |         try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { | ||||||
|             final Plot previous = lastPlot.remove(); |             final Plot previous = lastPlot.remove(); | ||||||
|  |             this.eventDispatcher.callLeave(player, plot); | ||||||
|  |  | ||||||
|             List<StatusEffect> effects = playerEffects.remove(player.getUUID()); |             List<StatusEffect> effects = playerEffects.remove(player.getUUID()); | ||||||
|             if (effects != null) { |             if (effects != null) { | ||||||
| @@ -466,8 +467,6 @@ public class PlotListener { | |||||||
|                 feedRunnable.remove(player.getUUID()); |                 feedRunnable.remove(player.getUUID()); | ||||||
|                 healRunnable.remove(player.getUUID()); |                 healRunnable.remove(player.getUUID()); | ||||||
|             } |             } | ||||||
|         } finally { |  | ||||||
|             this.eventDispatcher.callLeave(player, plot); |  | ||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -59,9 +59,6 @@ public enum Permission implements ComponentLike { | |||||||
|     PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED("plots.admin.vehicle.break.unowned"), |     PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED("plots.admin.vehicle.break.unowned"), | ||||||
|     PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER("plots.admin.vehicle.break.other"), |     PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER("plots.admin.vehicle.break.other"), | ||||||
|     PERMISSION_ADMIN_PVE("plots.admin.pve"), |     PERMISSION_ADMIN_PVE("plots.admin.pve"), | ||||||
|     PERMISSION_ADMIN_PLACE_VEHICLE_ROAD("plots.admin.vehicle.place.road"), |  | ||||||
|     PERMISSION_ADMIN_PLACE_VEHICLE_UNOWNED("plots.admin.vehicle.place.unowned"), |  | ||||||
|     PERMISSION_ADMIN_PLACE_VEHICLE_OTHER("plots.admin.vehicle.place.other"), |  | ||||||
|     PERMISSION_ADMIN_PVP("plots.admin.pvp"), |     PERMISSION_ADMIN_PVP("plots.admin.pvp"), | ||||||
|     PERMISSION_ADMIN_BUILD_ROAD("plots.admin.build.road"), |     PERMISSION_ADMIN_BUILD_ROAD("plots.admin.build.road"), | ||||||
|     PERMISSION_ADMIN_PROJECTILE_ROAD("plots.admin.projectile.road"), |     PERMISSION_ADMIN_PROJECTILE_ROAD("plots.admin.projectile.road"), | ||||||
|   | |||||||
| @@ -306,8 +306,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|      * @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml) |      * @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml) | ||||||
|      */ |      */ | ||||||
|     public int getAllowedPlots() { |     public int getAllowedPlots() { | ||||||
|         final int calculatedLimit = hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS); |         return hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS); | ||||||
|         return this.eventDispatcher.callPlayerPlotLimit(this, calculatedLimit).limit(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -1452,6 +1452,24 @@ public abstract class PlotArea implements ComponentLike { | |||||||
|         this.defaultHome = defaultHome; |         this.defaultHome = defaultHome; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get the maximum height that changes to plot components (wall filling, air, all etc.) may operate to | ||||||
|  |      * | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public int getMaxComponentHeight() { | ||||||
|  |         return this.maxBuildHeight; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get the minimum height that changes to plot components (wall filling, air, all etc.) may operate to | ||||||
|  |      * | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public int getMinComponentHeight() { | ||||||
|  |         return this.minBuildHeight; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the maximum height players may build in. Exclusive. |      * Get the maximum height players may build in. Exclusive. | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -25,13 +25,11 @@ import com.plotsquared.core.configuration.Settings; | |||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.events.PlayerAutoPlotEvent; | import com.plotsquared.core.events.PlayerAutoPlotEvent; | ||||||
| import com.plotsquared.core.events.PlayerAutoPlotsChosenEvent; | import com.plotsquared.core.events.PlayerAutoPlotsChosenEvent; | ||||||
| import com.plotsquared.core.events.PlayerBuyPlotEvent; |  | ||||||
| import com.plotsquared.core.events.PlayerClaimPlotEvent; | import com.plotsquared.core.events.PlayerClaimPlotEvent; | ||||||
| import com.plotsquared.core.events.PlayerEnterPlotEvent; | import com.plotsquared.core.events.PlayerEnterPlotEvent; | ||||||
| import com.plotsquared.core.events.PlayerLeavePlotEvent; | import com.plotsquared.core.events.PlayerLeavePlotEvent; | ||||||
| import com.plotsquared.core.events.PlayerPlotDeniedEvent; | import com.plotsquared.core.events.PlayerPlotDeniedEvent; | ||||||
| import com.plotsquared.core.events.PlayerPlotHelperEvent; | import com.plotsquared.core.events.PlayerPlotHelperEvent; | ||||||
| import com.plotsquared.core.events.PlayerPlotLimitEvent; |  | ||||||
| import com.plotsquared.core.events.PlayerPlotTrustedEvent; | import com.plotsquared.core.events.PlayerPlotTrustedEvent; | ||||||
| import com.plotsquared.core.events.PlayerTeleportToPlotEvent; | import com.plotsquared.core.events.PlayerTeleportToPlotEvent; | ||||||
| import com.plotsquared.core.events.PlotAutoMergeEvent; | import com.plotsquared.core.events.PlotAutoMergeEvent; | ||||||
| @@ -50,7 +48,6 @@ import com.plotsquared.core.events.PlotUnlinkEvent; | |||||||
| import com.plotsquared.core.events.RemoveRoadEntityEvent; | import com.plotsquared.core.events.RemoveRoadEntityEvent; | ||||||
| import com.plotsquared.core.events.TeleportCause; | import com.plotsquared.core.events.TeleportCause; | ||||||
| import com.plotsquared.core.events.post.PostPlayerAutoPlotEvent; | import com.plotsquared.core.events.post.PostPlayerAutoPlotEvent; | ||||||
| import com.plotsquared.core.events.post.PostPlayerBuyPlotEvent; |  | ||||||
| import com.plotsquared.core.events.post.PostPlotChangeOwnerEvent; | import com.plotsquared.core.events.post.PostPlotChangeOwnerEvent; | ||||||
| import com.plotsquared.core.events.post.PostPlotDeleteEvent; | import com.plotsquared.core.events.post.PostPlotDeleteEvent; | ||||||
| import com.plotsquared.core.events.post.PostPlotMergeEvent; | import com.plotsquared.core.events.post.PostPlotMergeEvent; | ||||||
| @@ -59,7 +56,6 @@ import com.plotsquared.core.listener.PlayerBlockEventType; | |||||||
| import com.plotsquared.core.location.Direction; | import com.plotsquared.core.location.Direction; | ||||||
| import com.plotsquared.core.location.Location; | import com.plotsquared.core.location.Location; | ||||||
| import com.plotsquared.core.permissions.Permission; | import com.plotsquared.core.permissions.Permission; | ||||||
| import com.plotsquared.core.player.OfflinePlotPlayer; |  | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| @@ -312,23 +308,6 @@ public class EventDispatcher { | |||||||
|         return event; |         return event; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PlayerPlotLimitEvent callPlayerPlotLimit(PlotPlayer<?> player, int calculatedLimit) { |  | ||||||
|         PlayerPlotLimitEvent event = new PlayerPlotLimitEvent(player, calculatedLimit); |  | ||||||
|         eventBus.post(event); |  | ||||||
|         return event; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public PlayerBuyPlotEvent callPlayerBuyPlot(PlotPlayer<?> player, Plot plot, double price) { |  | ||||||
|         PlayerBuyPlotEvent event = new PlayerBuyPlotEvent(player, plot, price); |  | ||||||
|         eventBus.post(event); |  | ||||||
|         return event; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void callPostPlayerBuyPlot(PlotPlayer<?> player, OfflinePlotPlayer previousOwner, Plot plot, |  | ||||||
|                                       double price) { |  | ||||||
|         eventBus.post(new PostPlayerBuyPlotEvent(player, previousOwner, plot, price)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void doJoinTask(final PlotPlayer<?> player) { |     public void doJoinTask(final PlotPlayer<?> player) { | ||||||
|         if (player == null) { |         if (player == null) { | ||||||
|             return; //possible future warning message to figure out where we are retrieving null |             return; //possible future warning message to figure out where we are retrieving null | ||||||
| @@ -396,10 +375,14 @@ public class EventDispatcher { | |||||||
|                             return true; |                             return true; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (!plot.hasOwner()) { |                 if (!plot.hasOwner()) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 final List<BlockTypeWrapper> use = plot.getFlag(UseFlag.class); |                 final List<BlockTypeWrapper> use = plot.getFlag(UseFlag.class); | ||||||
|                 for (final BlockTypeWrapper blockTypeWrapper : use) { |                 for (final BlockTypeWrapper blockTypeWrapper : use) { | ||||||
| @@ -408,7 +391,7 @@ public class EventDispatcher { | |||||||
|                         return true; |                         return true; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) { |                 if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), false)) { | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 // we check for the EditSignFlag in the PlayerSignOpenEvent again, but we must not cancel the interact event |                 // we check for the EditSignFlag in the PlayerSignOpenEvent again, but we must not cancel the interact event | ||||||
| @@ -433,10 +416,14 @@ public class EventDispatcher { | |||||||
|                             return true; |                             return true; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, false); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), false | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (!plot.hasOwner()) { |                 if (!plot.hasOwner()) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, false); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), false | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (plot.getFlag(DeviceInteractFlag.class)) { |                 if (plot.getFlag(DeviceInteractFlag.class)) { | ||||||
|                     return true; |                     return true; | ||||||
| @@ -448,14 +435,21 @@ public class EventDispatcher { | |||||||
|                         return true; |                         return true; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false); |                 return player.hasPermission( | ||||||
|  |                         Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), | ||||||
|  |                         false | ||||||
|  |                 ); | ||||||
|             } |             } | ||||||
|             case SPAWN_MOB -> { |             case SPAWN_MOB -> { | ||||||
|                 if (plot == null) { |                 if (plot == null) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (!plot.hasOwner()) { |                 if (!plot.hasOwner()) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (plot.getFlag(MobPlaceFlag.class)) { |                 if (plot.getFlag(MobPlaceFlag.class)) { | ||||||
|                     return true; |                     return true; | ||||||
| @@ -467,7 +461,10 @@ public class EventDispatcher { | |||||||
|                         return true; |                         return true; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) { |                 if (player.hasPermission( | ||||||
|  |                         Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), | ||||||
|  |                         false | ||||||
|  |                 )) { | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 if (notifyPerms) { |                 if (notifyPerms) { | ||||||
| @@ -487,10 +484,14 @@ public class EventDispatcher { | |||||||
|             } |             } | ||||||
|             case PLACE_MISC -> { |             case PLACE_MISC -> { | ||||||
|                 if (plot == null) { |                 if (plot == null) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (!plot.hasOwner()) { |                 if (!plot.hasOwner()) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms); |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (plot.getFlag(MiscPlaceFlag.class)) { |                 if (plot.getFlag(MiscPlaceFlag.class)) { | ||||||
|                     return true; |                     return true; | ||||||
| @@ -502,7 +503,10 @@ public class EventDispatcher { | |||||||
|                         return true; |                         return true; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|                 if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) { |                 if (player.hasPermission( | ||||||
|  |                         Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), | ||||||
|  |                         false | ||||||
|  |                 )) { | ||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 if (notifyPerms) { |                 if (notifyPerms) { | ||||||
| @@ -522,28 +526,16 @@ public class EventDispatcher { | |||||||
|             } |             } | ||||||
|             case PLACE_VEHICLE -> { |             case PLACE_VEHICLE -> { | ||||||
|                 if (plot == null) { |                 if (plot == null) { | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_ROAD, notifyPerms); |                     return player.hasPermission( | ||||||
|                 } |                             Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms | ||||||
|                 if (!plot.hasOwner()) { |  | ||||||
|                     return player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_UNOWNED, notifyPerms); |  | ||||||
|                 } |  | ||||||
|                 if (plot.getFlag(VehiclePlaceFlag.class)) { |  | ||||||
|                     return true; |  | ||||||
|                 } |  | ||||||
|                 if (player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_OTHER, false)) { |  | ||||||
|                     return true; |  | ||||||
|                 } |  | ||||||
|                 if (notifyPerms) { |  | ||||||
|                     player.sendMessage( |  | ||||||
|                             TranslatableCaption.of("commandconfig.flag_tutorial_usage"), |  | ||||||
|                             TagResolver.resolver( |  | ||||||
|                                     "flag", |  | ||||||
|                                     Tag.inserting( |  | ||||||
|                                             PlotFlag.getFlagNameComponent(VehiclePlaceFlag.class) |  | ||||||
|                                     ) |  | ||||||
|                             ) |  | ||||||
|                     ); |                     ); | ||||||
|                 } |                 } | ||||||
|  |                 if (!plot.hasOwner()) { | ||||||
|  |                     return player.hasPermission( | ||||||
|  |                             Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  |                 return plot.getFlag(VehiclePlaceFlag.class); | ||||||
|             } |             } | ||||||
|             default -> { |             default -> { | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -125,7 +125,6 @@ | |||||||
|   "economy.added_balance": "<prefix><gold><money> </gold><gray>has been added to your balance.</gray>", |   "economy.added_balance": "<prefix><gold><money> </gold><gray>has been added to your balance.</gray>", | ||||||
|   "economy.removed_balance": "<prefix><gold><money> </gold><gray>has been taken from your balance.</gray>", |   "economy.removed_balance": "<prefix><gold><money> </gold><gray>has been taken from your balance.</gray>", | ||||||
|   "economy.removed_granted_plot": "<prefix><gray>You used <used_grants> plot grant(s), you've got </gray><gold><remaining_grants></gold> <gray>left.</gray>", |   "economy.removed_granted_plot": "<prefix><gray>You used <used_grants> plot grant(s), you've got </gray><gold><remaining_grants></gold> <gray>left.</gray>", | ||||||
|   "economy.cannot_buy_blocked":  "<prefix><red>You are not allowed to buy this plot.</red>", |  | ||||||
|   "setup.choose_generator": "<gold>What generator do you want?</gold>", |   "setup.choose_generator": "<gold>What generator do you want?</gold>", | ||||||
|   "setup.setup_not_started": "<prefix><gold>No setup started.</gold>", |   "setup.setup_not_started": "<prefix><gold>No setup started.</gold>", | ||||||
|   "setup.setup_init": "<prefix><gold>Usage: </gold><gray>/plot setup <value></gray>", |   "setup.setup_init": "<prefix><gold>Usage: </gold><gray>/plot setup <value></gray>", | ||||||
| @@ -166,6 +165,7 @@ | |||||||
|   "setup.wall_height": "<gold>Wall height</gold>", |   "setup.wall_height": "<gold>Wall height</gold>", | ||||||
|   "setup.min_gen_height": "<gold>Minimum height from which to generate (for 1.18+ can be negative).</gold>", |   "setup.min_gen_height": "<gold>Minimum height from which to generate (for 1.18+ can be negative).</gold>", | ||||||
|   "setup.bedrock_boolean": "<gold>Whether a bedrock layer under the plot should be generated or not</gold>", |   "setup.bedrock_boolean": "<gold>Whether a bedrock layer under the plot should be generated or not</gold>", | ||||||
|  |   "setup.component_below_bedrock_boolean": "<gold>Whether a component change e.g. /plot set walls should edit the bedrock layer or below</gold>", | ||||||
|   "setup.singleplotarea_void_world": "<gold>Void world</gold>", |   "setup.singleplotarea_void_world": "<gold>Void world</gold>", | ||||||
|   "plotareatype.plot_area_type_normal": "<gray>Standard plot generation</gray>", |   "plotareatype.plot_area_type_normal": "<gray>Standard plot generation</gray>", | ||||||
|   "plotareatype.plot_area_type_augmented": "<gray>Plot generation with vanilla terrain</gray>", |   "plotareatype.plot_area_type_augmented": "<gray>Plot generation with vanilla terrain</gray>", | ||||||
| @@ -249,11 +249,11 @@ | |||||||
|   "condense.skipping": "<prefix><red>Skipping complex plot: </red><gold><plot></gold><red>.</red>", |   "condense.skipping": "<prefix><red>Skipping complex plot: </red><gold><plot></gold><red>.</red>", | ||||||
|   "condense.task_stopped": "<prefix><gold>Task already stopped.</gold>", |   "condense.task_stopped": "<prefix><gold>Task already stopped.</gold>", | ||||||
|   "condense.default_eval": "<dark_gray><strikethrough>=== <reset> <gold>DEFAULT EVAL </gold><dark_gray><strikethrough>===</dark_gray>", |   "condense.default_eval": "<dark_gray><strikethrough>=== <reset> <gold>DEFAULT EVAL </gold><dark_gray><strikethrough>===</dark_gray>", | ||||||
|   "condense.minimum_radius": "<gold>Minimum radius: </gold><gray><minimum_radius></gray>", |   "condense.minimum_radius": "<gold>Minimum radius: </gold><gray><minimumRadius></gray>", | ||||||
|   "condense.maximum_moved": "<gold>Maximum moved: </gold><gray><maximum_moves></gray>", |   "condense.maximum_moved": "<gold>Maximum moved: </gold><gray><maximumMoves></gray>", | ||||||
|   "condense.input_eval": "<dark_gray><strikethrough>=== <reset> <gold>INPUT EVAL </gold><dark_gray><strikethrough>===</dark_gray>", |   "condense.input_eval": "<dark_gray><strikethrough>=== <reset> <gold>INPUT EVAL </gold><dark_gray><strikethrough>===</dark_gray>", | ||||||
|   "condense.input_radius": "<gold>Input radius: </gold><gray><radius></gray>", |   "condense.input_radius": "<gold>Input radius: </gold><gray><radius></gray>", | ||||||
|   "condense.estimated_moves": "<gold>Estimated moves: </gold><gray><user_move></gray>", |   "condense.estimated_moves": "<gold>Estimated moves: </gold><gray><userMove></gray>", | ||||||
|   "condense.eta": "<prefix><gold>Estimated time: No idea, times will drastically change based on the system performance and load.</gold>", |   "condense.eta": "<prefix><gold>Estimated time: No idea, times will drastically change based on the system performance and load.</gold>", | ||||||
|   "condense.radius_measured": "<yellow> - Radius is measured in plot width.</yellow>", |   "condense.radius_measured": "<yellow> - Radius is measured in plot width.</yellow>", | ||||||
|   "database.starting_conversion": "<prefix><gold>Starting...</gold>", |   "database.starting_conversion": "<prefix><gold>Starting...</gold>", | ||||||
| @@ -382,9 +382,9 @@ | |||||||
|   "info.plot_list_default": "<gold><plot></gold>", |   "info.plot_list_default": "<gold><plot></gold>", | ||||||
|   "info.plot_list_player_online": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_aqua>Online</dark_aqua>'><gold><player></gold></hover>", |   "info.plot_list_player_online": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_aqua>Online</dark_aqua>'><gold><player></gold></hover>", | ||||||
|   "info.plot_list_player_offline": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_gray>Offline</dark_gray>'><gold><player></gold></hover>", |   "info.plot_list_player_offline": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_gray>Offline</dark_gray>'><gold><player></gold></hover>", | ||||||
|   "info.plot_list_player_unknown": "<hover:show_text:'<red>The owner of this plot is unknown</red>'><white><unknown></white></hover>", |   "info.plot_list_player_unknown": "<hover:show_text:'<red>The owner of this plot is unknown</red>'><white><info.unknown></white></hover>", | ||||||
|   "info.plot_list_player_server": "<hover:show_text:'<red>The plot is owned by the server</red>'><white><server></white></hover>", |   "info.plot_list_player_server": "<hover:show_text:'<red>The plot is owned by the server</red>'><white><info.server></white></hover>", | ||||||
|   "info.plot_list_player_everyone": "<hover:show_text:'<blue>The plot is owned by everyone</blue>'><white><everyone></white></hover>", |   "info.plot_list_player_everyone": "<hover:show_text:'<blue>The plot is owned by everyone</blue>'><white><info.everyone></white></hover>", | ||||||
|   "info.area_info_format": "<header>\n<reset><gold>Name: </gold><gray><name></gray>\n<gold>Type: </gold><gray><type></gray>\n<gold>Terrain: </gold><gray><terrain></gray>\n<gold>Usage: </gold><gray><usage>%</gray>\n<gold>Claimed: </gold><gray><claimed></gray>\n<gold>Clusters: </gold><gray><clusters></gray>\n<gold>Region: </gold><gray><region></gray>\n<gold>Generator: </gold><gray><generator></gray>\n<footer>", |   "info.area_info_format": "<header>\n<reset><gold>Name: </gold><gray><name></gray>\n<gold>Type: </gold><gray><type></gray>\n<gold>Terrain: </gold><gray><terrain></gray>\n<gold>Usage: </gold><gray><usage>%</gray>\n<gold>Claimed: </gold><gray><claimed></gray>\n<gold>Clusters: </gold><gray><clusters></gray>\n<gold>Region: </gold><gray><region></gray>\n<gold>Generator: </gold><gray><generator></gray>\n<footer>", | ||||||
|   "info.area_list_tooltip": "<gold>Claimed=</gold><gray><claimed></gray>\n<gold>Usage=</gold><gray><usage></gray>\n<gold>Clusters=</gold><gray><clusters></gray>\n<gold>Region=</gold><gray><region></gray>\n<gold>Generator=</gold><gray><generator></gray>", |   "info.area_list_tooltip": "<gold>Claimed=</gold><gray><claimed></gray>\n<gold>Usage=</gold><gray><usage></gray>\n<gold>Clusters=</gold><gray><clusters></gray>\n<gold>Region=</gold><gray><region></gray>\n<gold>Generator=</gold><gray><generator></gray>", | ||||||
|   "info.area_list_item": "<click:run_command:'<command_tp>'><hover:show_text:'<command_tp>'><dark_gray>[</dark_gray><gold><number></gold><dark_gray>]</dark_gray></hover></click> <click:run_command:'<command_info>'><hover:show_text:'<hover_info>'><gold><area_name></gold></hover></click><gray> - </gray><gray><area_type>:<area_terrain></gray>", |   "info.area_list_item": "<click:run_command:'<command_tp>'><hover:show_text:'<command_tp>'><dark_gray>[</dark_gray><gold><number></gold><dark_gray>]</dark_gray></hover></click> <click:run_command:'<command_info>'><hover:show_text:'<hover_info>'><gold><area_name></gold></hover></click><gray> - </gray><gray><area_type>:<area_terrain></gray>", | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ plugins { | |||||||
| } | } | ||||||
|  |  | ||||||
| group = "com.intellectualsites.plotsquared" | group = "com.intellectualsites.plotsquared" | ||||||
| version = "7.3.2-SNAPSHOT" | version = "7.2.2-SNAPSHOT" | ||||||
|  |  | ||||||
| if (!File("$rootDir/.git").exists()) { | if (!File("$rootDir/.git").exists()) { | ||||||
|     logger.lifecycle(""" |     logger.lifecycle(""" | ||||||
|   | |||||||
| @@ -2,18 +2,18 @@ | |||||||
| # Platform expectations | # Platform expectations | ||||||
| paper = "1.20.2-R0.1-SNAPSHOT" | paper = "1.20.2-R0.1-SNAPSHOT" | ||||||
| guice = "7.0.0" | guice = "7.0.0" | ||||||
| spotbugs = "4.8.3" | spotbugs = "4.8.2" | ||||||
| checkerqual = "3.42.0" | checkerqual = "3.41.0" | ||||||
| gson = "2.10" | gson = "2.10" | ||||||
| guava = "31.1-jre" | guava = "31.1-jre" | ||||||
| snakeyaml = "2.0" | snakeyaml = "2.0" | ||||||
| adventure = "4.15.0" | adventure = "4.14.0" | ||||||
| adventure-bukkit = "4.3.2" | adventure-bukkit = "4.3.1" | ||||||
| log4j = "2.19.0" | log4j = "2.19.0" | ||||||
|  |  | ||||||
| # Plugins | # Plugins | ||||||
| worldedit = "7.2.18" | worldedit = "7.2.17" | ||||||
| fawe = "2.8.4" | fawe = "2.8.3" | ||||||
| placeholderapi = "2.11.5" | placeholderapi = "2.11.5" | ||||||
| luckperms = "5.4" | luckperms = "5.4" | ||||||
| essentialsx = "2.20.1" | essentialsx = "2.20.1" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user