mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-26 23:23:45 +01:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			7.2.1
			...
			feat/plotL
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | fb3da2f97c | ||
|   | a0ee0caba9 | ||
|   | c0b1179d22 | 
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -27,7 +27,7 @@ body: | |||||||
|       description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first. |       description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first. | ||||||
|       multiple: false |       multiple: false | ||||||
|       options: |       options: | ||||||
|         - '1.20.4' |         - '1.20.2' | ||||||
|         - '1.20' |         - '1.20' | ||||||
|         - '1.19.4' |         - '1.19.4' | ||||||
|         - '1.19.3' |         - '1.19.3' | ||||||
|   | |||||||
| @@ -105,7 +105,7 @@ tasks { | |||||||
|         opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/") |         opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/") | ||||||
|         opt.links("https://jd.advntr.dev/api/4.14.0/") |         opt.links("https://jd.advntr.dev/api/4.14.0/") | ||||||
|         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") |         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") | ||||||
|    //     opt.links("https://checkerframework.org/api/") |         opt.links("https://checkerframework.org/api/") | ||||||
|         opt.isLinkSource = true |         opt.isLinkSource = true | ||||||
|         opt.bottom(File("$rootDir/javadocfooter.html").readText()) |         opt.bottom(File("$rootDir/javadocfooter.html").readText()) | ||||||
|         opt.isUse = true |         opt.isUse = true | ||||||
|   | |||||||
| @@ -50,7 +50,6 @@ import com.plotsquared.core.plot.flag.implementations.DenyPortalsFlag; | |||||||
| import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag; | import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.DoneFlag; | import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag; | import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.EditSignFlag; |  | ||||||
| import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag; | import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag; | import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag; | import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag; | ||||||
| @@ -88,7 +87,6 @@ import org.bukkit.Material; | |||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.block.BlockFace; | import org.bukkit.block.BlockFace; | ||||||
| import org.bukkit.block.BlockState; | import org.bukkit.block.BlockState; | ||||||
| import org.bukkit.block.Sign; |  | ||||||
| import org.bukkit.block.data.Waterlogged; | import org.bukkit.block.data.Waterlogged; | ||||||
| import org.bukkit.command.PluginCommand; | import org.bukkit.command.PluginCommand; | ||||||
| import org.bukkit.entity.ArmorStand; | import org.bukkit.entity.ArmorStand; | ||||||
| @@ -177,33 +175,6 @@ public class PlayerEventListener implements Listener { | |||||||
|             Material.WRITABLE_BOOK, |             Material.WRITABLE_BOOK, | ||||||
|             Material.WRITTEN_BOOK |             Material.WRITTEN_BOOK | ||||||
|     ); |     ); | ||||||
|     private static final Set<String> DYES; |  | ||||||
|     static { |  | ||||||
|         Set<String> mutableDyes = new HashSet<>(Set.of( |  | ||||||
|                 "WHITE_DYE", |  | ||||||
|                 "LIGHT_GRAY_DYE", |  | ||||||
|                 "GRAY_DYE", |  | ||||||
|                 "BLACK_DYE", |  | ||||||
|                 "BROWN_DYE", |  | ||||||
|                 "RED_DYE", |  | ||||||
|                 "ORANGE_DYE", |  | ||||||
|                 "YELLOW_DYE", |  | ||||||
|                 "LIME_DYE", |  | ||||||
|                 "GREEN_DYE", |  | ||||||
|                 "CYAN_DYE", |  | ||||||
|                 "LIGHT_BLUE_DYE", |  | ||||||
|                 "BLUE_DYE", |  | ||||||
|                 "PURPLE_DYE", |  | ||||||
|                 "MAGENTA_DYE", |  | ||||||
|                 "PINK_DYE", |  | ||||||
|                 "GLOW_INK_SAC" |  | ||||||
|         )); |  | ||||||
|         int[] version = PlotSquared.platform().serverVersion(); |  | ||||||
|         if (version[1] >= 20 && version[2] >= 1) { |  | ||||||
|             mutableDyes.add("HONEYCOMB"); |  | ||||||
|         } |  | ||||||
|         DYES = Set.copyOf(mutableDyes); |  | ||||||
|     } |  | ||||||
|     private final EventDispatcher eventDispatcher; |     private final EventDispatcher eventDispatcher; | ||||||
|     private final WorldEdit worldEdit; |     private final WorldEdit worldEdit; | ||||||
|     private final PlotAreaManager plotAreaManager; |     private final PlotAreaManager plotAreaManager; | ||||||
| @@ -236,38 +207,6 @@ public class PlayerEventListener implements Listener { | |||||||
|         this.plotListener = plotListener; |         this.plotListener = plotListener; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |  | ||||||
|     public void onPlayerDyeSign(PlayerInteractEvent event) { |  | ||||||
|         ItemStack itemStack = event.getItem(); |  | ||||||
|         if (itemStack == null) { |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         Block block = event.getClickedBlock(); |  | ||||||
|         if (block != null && block.getState() instanceof Sign) { |  | ||||||
|             if (DYES.contains(itemStack.getType().toString())) { |  | ||||||
|                 Location location = BukkitUtil.adapt(block.getLocation()); |  | ||||||
|                 PlotArea area = location.getPlotArea(); |  | ||||||
|                 if (area == null) { |  | ||||||
|                     return; |  | ||||||
|                 } |  | ||||||
|                 Plot plot = location.getOwnedPlot(); |  | ||||||
|                 if (plot == null) { |  | ||||||
|                     if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) { |  | ||||||
|                         event.setCancelled(true); |  | ||||||
|                     } |  | ||||||
|                     return; |  | ||||||
|                 } |  | ||||||
|                 if (plot.isAdded(event.getPlayer().getUniqueId())) { |  | ||||||
|                     return; // allow for added players |  | ||||||
|                 } |  | ||||||
|                 if (!plot.getFlag(EditSignFlag.class)) { |  | ||||||
|                     plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false"); |  | ||||||
|                     event.setCancelled(true); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @EventHandler(ignoreCancelled = true) |     @EventHandler(ignoreCancelled = true) | ||||||
|     public void onEffect(@NonNull EntityPotionEffectEvent event) { |     public void onEffect(@NonNull EntityPotionEffectEvent event) { | ||||||
|         if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW || |         if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW || | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ import org.bukkit.event.player.PlayerSignOpenEvent; | |||||||
|  |  | ||||||
| /** | /** | ||||||
|  * For events since 1.20.1 |  * For events since 1.20.1 | ||||||
|  * @since 7.2.1 |  * @since TODO | ||||||
|  */ |  */ | ||||||
| public class PlayerEventListener1201 implements Listener { | public class PlayerEventListener1201 implements Listener { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ tasks { | |||||||
|         opt.links("https://jd.advntr.dev/api/4.14.0/") |         opt.links("https://jd.advntr.dev/api/4.14.0/") | ||||||
|         opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/") |         opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/") | ||||||
|         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") |         opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/") | ||||||
|         //  opt.links("https://checkerframework.org/api/") |         opt.links("https://checkerframework.org/api/") | ||||||
|         opt.isLinkSource = true |         opt.isLinkSource = true | ||||||
|         opt.bottom(File("$rootDir/javadocfooter.html").readText()) |         opt.bottom(File("$rootDir/javadocfooter.html").readText()) | ||||||
|         opt.isUse = true |         opt.isUse = true | ||||||
|   | |||||||
| @@ -0,0 +1,77 @@ | |||||||
|  | /* | ||||||
|  |  * 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 TODO | ||||||
|  |  */ | ||||||
|  | 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 TODO | ||||||
|  |      */ | ||||||
|  |     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 TODO | ||||||
|  |      */ | ||||||
|  |     public @NonNegative int limit() { | ||||||
|  |         return limit; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * The player for which the limit is queried. | ||||||
|  |      * | ||||||
|  |      * @return the player. | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public @NonNull PlotPlayer<?> player() { | ||||||
|  |         return player; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -75,7 +75,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|      * Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set |      * Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set | ||||||
|      * |      * | ||||||
|      * @return LocationTransformer |      * @return LocationTransformer | ||||||
|      * @since 7.2.1 |      * @since TODO | ||||||
|      */ |      */ | ||||||
|     public @Nullable UnaryOperator<Location> getLocationTransformer() { |     public @Nullable UnaryOperator<Location> getLocationTransformer() { | ||||||
|         return this.locationTransformer; |         return this.locationTransformer; | ||||||
| @@ -86,7 +86,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel | |||||||
|      * May be {@code null}, if any previous set transformations should be discarded. |      * May be {@code null}, if any previous set transformations should be discarded. | ||||||
|      * |      * | ||||||
|      * @param locationTransformer The new transformer |      * @param locationTransformer The new transformer | ||||||
|      * @since 7.2.1 |      * @since TODO | ||||||
|      */ |      */ | ||||||
|     public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) { |     public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) { | ||||||
|         this.locationTransformer = locationTransformer; |         this.locationTransformer = locationTransformer; | ||||||
|   | |||||||
| @@ -306,7 +306,8 @@ 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() { | ||||||
|         return hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS); |         final int calculatedLimit = hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS); | ||||||
|  |         return this.eventDispatcher.callPlayerPlotLimit(this, calculatedLimit).limit(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ import com.plotsquared.core.plot.flag.types.BooleanFlag; | |||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | import org.checkerframework.checker.nullness.qual.NonNull; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @since 7.2.1 |  * @since TODO | ||||||
|  */ |  */ | ||||||
| public class EditSignFlag extends BooleanFlag<EditSignFlag> { | public class EditSignFlag extends BooleanFlag<EditSignFlag> { | ||||||
|     public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true); |     public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true); | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ 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; | ||||||
| @@ -308,6 +309,12 @@ 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 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 | ||||||
|   | |||||||
| @@ -1,31 +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.util.query; |  | ||||||
|  |  | ||||||
| import com.plotsquared.core.plot.Plot; |  | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; |  | ||||||
|  |  | ||||||
| class HasOwnerFilter implements PlotFilter { |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public boolean accepts(final @NonNull Plot plot) { |  | ||||||
|         return plot.hasOwner(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -219,16 +219,6 @@ public final class PlotQuery implements Iterable<Plot> { | |||||||
|         return this.addFilter(new OwnersIncludeFilter(owner.getUUID())); |         return this.addFilter(new OwnersIncludeFilter(owner.getUUID())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Query only for plots that have an owner |  | ||||||
|      * |  | ||||||
|      * @return The query instance |  | ||||||
|      * @since 7.2.1 |  | ||||||
|      */ |  | ||||||
|  |  | ||||||
|     public @NonNull PlotQuery hasOwner() { |  | ||||||
|         return this.addFilter(new HasOwnerFilter()); |  | ||||||
|     } |  | ||||||
|     /** |     /** | ||||||
|      * Query for plots with a specific alias |      * Query for plots with a specific alias | ||||||
|      * |      * | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ plugins { | |||||||
| } | } | ||||||
|  |  | ||||||
| group = "com.intellectualsites.plotsquared" | group = "com.intellectualsites.plotsquared" | ||||||
| version = "7.2.1" | version = "7.2.1-SNAPSHOT" | ||||||
|  |  | ||||||
| if (!File("$rootDir/.git").exists()) { | if (!File("$rootDir/.git").exists()) { | ||||||
|     logger.lifecycle(""" |     logger.lifecycle(""" | ||||||
| @@ -225,7 +225,7 @@ tasks.getByName<Jar>("jar") { | |||||||
|     enabled = false |     enabled = false | ||||||
| } | } | ||||||
|  |  | ||||||
| val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.4") | val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.2") | ||||||
| tasks { | tasks { | ||||||
|     register("cacheLatestFaweArtifact") { |     register("cacheLatestFaweArtifact") { | ||||||
|         val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL() |         val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user