mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-31 17:43:44 +01:00 
			
		
		
		
	Compare commits
	
		
			19 Commits
		
	
	
		
			fix/v6/fix
			...
			renovate/c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e4948376e7 | ||
|   | 75f31c5bf6 | ||
|   | 954c813cef | ||
|   | 05e055e9cf | ||
|   | 2ea21c150f | ||
|   | c2fd4edad5 | ||
|   | 78b8696778 | ||
|   | e653961385 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | b21d12fd52 | ||
|   | 7557df96c7 | ||
|   | 61797c3aff | ||
|   | 78125ff1e2 | ||
|   | d7c8715b25 | ||
|   | 34f005c244 | ||
|   | 6fbd1376ca | ||
|   | 951767dc64 | ||
|   | 16928b05f1 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | fff14b05cb | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | e619c867e9 | 
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -12,7 +12,7 @@ jobs: | ||||
|       - name: Validate Gradle Wrapper" | ||||
|         uses: gradle/wrapper-validation-action@v1.0.4 | ||||
|       - name: Setup Java | ||||
|         uses: actions/setup-java@v2.5.0 | ||||
|         uses: actions/setup-java@v3.0.0 | ||||
|         with: | ||||
|           distribution: temurin | ||||
|           java-version: 17 | ||||
|   | ||||
							
								
								
									
										37
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| name: "CodeQL" | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: [ v6 ] | ||||
|   pull_request: | ||||
|     # The branches below must be a subset of the branches above | ||||
|     branches: [ v6 ] | ||||
|  | ||||
| jobs: | ||||
|   analyze: | ||||
|     name: Analyze | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       actions: read | ||||
|       contents: read | ||||
|       security-events: write | ||||
|  | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         language: [ 'java' ] | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v1 | ||||
|         with: | ||||
|           languages: ${{ matrix.language }} | ||||
|  | ||||
|       - name: Autobuild | ||||
|         uses: github/codeql-action/autobuild@v1 | ||||
|  | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@v1 | ||||
							
								
								
									
										20
									
								
								.github/workflows/rebase.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/rebase.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| name: Rebase Pull Request | ||||
| on: | ||||
|   issue_comment: | ||||
|     types: [created] | ||||
|  | ||||
| jobs: | ||||
|   rebase: | ||||
|     name: Rebase | ||||
|     if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && github.event.comment.author_association == 'MEMBER' | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout Repository | ||||
|         uses: actions/checkout@v2.4.0 | ||||
|         with: | ||||
|           token: ${{ secrets.REBASE_TOKEN }} | ||||
|           fetch-depth: 0 | ||||
|       - name: Automatic Rebase | ||||
|         uses: cirrus-actions/rebase@1.5 | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.REBASE_TOKEN }} | ||||
							
								
								
									
										2
									
								
								.github/workflows/release-drafter.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/release-drafter.yml
									
									
									
									
										vendored
									
									
								
							| @@ -14,6 +14,6 @@ jobs: | ||||
|     if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: release-drafter/release-drafter@v5.17.6 | ||||
|       - uses: release-drafter/release-drafter@v5.18.1 | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|   | ||||
| @@ -74,6 +74,7 @@ import org.bukkit.GameMode; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.block.BlockFace; | ||||
| import org.bukkit.block.BlockState; | ||||
| import org.bukkit.block.data.BlockData; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.Fireball; | ||||
| @@ -92,6 +93,7 @@ import org.bukkit.event.block.BlockFormEvent; | ||||
| import org.bukkit.event.block.BlockFromToEvent; | ||||
| import org.bukkit.event.block.BlockGrowEvent; | ||||
| import org.bukkit.event.block.BlockIgniteEvent; | ||||
| import org.bukkit.event.block.BlockMultiPlaceEvent; | ||||
| import org.bukkit.event.block.BlockPhysicsEvent; | ||||
| import org.bukkit.event.block.BlockPistonExtendEvent; | ||||
| import org.bukkit.event.block.BlockPistonRetractEvent; | ||||
| @@ -277,7 +279,7 @@ public class BlockEventListener implements Listener { | ||||
|         BukkitPlayer pp = BukkitUtil.adapt(player); | ||||
|         Plot plot = area.getPlot(location); | ||||
|         if (plot != null) { | ||||
|             if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area | ||||
|             if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area | ||||
|                     .getMinBuildHeight()) && !Permissions | ||||
|                     .hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) { | ||||
|                 event.setCancelled(true); | ||||
| @@ -362,7 +364,7 @@ public class BlockEventListener implements Listener { | ||||
|                     event.setCancelled(true); | ||||
|                     return; | ||||
|                 } | ||||
|             } else if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area | ||||
|             } else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area | ||||
|                     .getMinBuildHeight()) && !Permissions | ||||
|                     .hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) { | ||||
|                 event.setCancelled(true); | ||||
| @@ -1208,4 +1210,51 @@ public class BlockEventListener implements Listener { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* | ||||
|      * BlockMultiPlaceEvent is called unrelated to the BlockPlaceEvent itself and therefore doesn't respect the cancellation. | ||||
|      */ | ||||
|     @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) | ||||
|     public void onBlockMultiPlace(BlockMultiPlaceEvent event) { | ||||
|         // Check if the generic block place event would be cancelled | ||||
|         blockCreate(event); | ||||
|         if (event.isCancelled()) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer()); | ||||
|         Location placedLocation = BukkitUtil.adapt(event.getBlockReplacedState().getLocation()); | ||||
|         PlotArea area = placedLocation.getPlotArea(); | ||||
|         if (area == null) { | ||||
|             return; | ||||
|         } | ||||
|         Plot plot = placedLocation.getPlot(); | ||||
|  | ||||
|         for (final BlockState state : event.getReplacedBlockStates()) { | ||||
|             Location currentLocation = BukkitUtil.adapt(state.getLocation()); | ||||
|             if (!Permissions.hasPermission( | ||||
|                     pp, | ||||
|                     Permission.PERMISSION_ADMIN_BUILD_ROAD | ||||
|             ) && !(Objects.equals(currentLocation.getPlot(), plot))) { | ||||
|                 pp.sendMessage( | ||||
|                         TranslatableCaption.of("permission.no_permission_event"), | ||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD)) | ||||
|                 ); | ||||
|                 event.setCancelled(true); | ||||
|                 break; | ||||
|             } | ||||
|             if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) { | ||||
|                 continue; | ||||
|             } | ||||
|             if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) { | ||||
|                 pp.sendMessage( | ||||
|                         TranslatableCaption.of("height.height_limit"), | ||||
|                         Template.of("minHeight", String.valueOf(area.getMinBuildHeight())), | ||||
|                         Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight())) | ||||
|                 ); | ||||
|                 event.setCancelled(true); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -36,6 +36,7 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||
| import io.papermc.lib.PaperLib; | ||||
| import org.bukkit.Chunk; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.entity.ArmorStand; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.EntityType; | ||||
| @@ -191,8 +192,32 @@ public class EntitySpawnListener implements Listener { | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onTeleport(EntityTeleportEvent event) { | ||||
|         Entity ent = event.getEntity(); | ||||
|         if (ent instanceof Vehicle || ent instanceof ArmorStand) { | ||||
|         Entity entity = event.getEntity(); | ||||
|         Entity fromLocation = event.getEntity(); | ||||
|         Block toLocation = event.getTo().getBlock(); | ||||
|         final Location fromLocLocation = BukkitUtil.adapt(fromLocation.getLocation()); | ||||
|         final PlotArea fromArea = fromLocLocation.getPlotArea(); | ||||
|         Location toLocLocation = BukkitUtil.adapt(toLocation.getLocation()); | ||||
|         PlotArea toArea = toLocLocation.getPlotArea(); | ||||
|  | ||||
|         if (toArea == null) { | ||||
|             if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         Plot toPlot = toArea.getOwnedPlot(toLocLocation); | ||||
|         if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) { | ||||
|             final Plot fromPlot = fromArea.getOwnedPlot(fromLocLocation); | ||||
|  | ||||
|             if (fromPlot != null || toPlot != null) { | ||||
|                 if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) { | ||||
|                     event.setCancelled(true); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         if (entity instanceof Vehicle || entity instanceof ArmorStand) { | ||||
|             testNether(event.getEntity()); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -83,34 +83,31 @@ public class BukkitWorld implements World<org.bukkit.World> { | ||||
|         return this.world.getName(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals(final Object o) { | ||||
|         if (o == this) { | ||||
|         if (this == o) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(o instanceof final BukkitWorld other)) { | ||||
|         if (o == null || getClass() != o.getClass()) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!other.canEqual(this)) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!Objects.equals(this.world, other.world)) { | ||||
|             return false; | ||||
|         } | ||||
|         return true; | ||||
|         final BukkitWorld that = (BukkitWorld) o; | ||||
|         return world.equals(that.world); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return world.hashCode(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method is not meant to be invoked or overridden, with no replacement. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     protected boolean canEqual(final Object other) { | ||||
|         return other instanceof BukkitWorld; | ||||
|     } | ||||
|  | ||||
|     public int hashCode() { | ||||
|         final int PRIME = 59; | ||||
|         int result = 1; | ||||
|         final Object $world = this.world; | ||||
|         result = result * PRIME + ($world == null ? 43 : $world.hashCode()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     public String toString() { | ||||
|         return "BukkitWorld(world=" + this.world + ")"; | ||||
|     } | ||||
|   | ||||
| @@ -28,6 +28,7 @@ package com.plotsquared.core.command; | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.configuration.caption.LocaleHolder; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| /** | ||||
| @@ -95,4 +96,16 @@ public enum CommandCategory implements Caption { | ||||
|     public String getComponent(@NonNull LocaleHolder localeHolder) { | ||||
|         return this.caption.getComponent(localeHolder); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Checks if a player has access to this command category | ||||
|      * | ||||
|      * @param player The player to check against | ||||
|      * @return {@code true} if at least one command of this category can be executed by the player, {@code false} otherwise | ||||
|      * @since 6.5.0 | ||||
|      */ | ||||
|     boolean canAccess(PlotPlayer<?> player) { | ||||
|         return !MainCommand.getInstance().getCommands(this, player).isEmpty(); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -37,11 +37,11 @@ import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.TextComponent; | ||||
| import net.kyori.adventure.text.minimessage.Template; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Locale; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
| import java.util.stream.Collectors; | ||||
| import java.util.stream.Stream; | ||||
|  | ||||
| @CommandDeclaration(command = "help", | ||||
|         aliases = "?", | ||||
| @@ -119,6 +119,9 @@ public class Help extends Command { | ||||
|                 TextComponent.Builder builder = Component.text(); | ||||
|                 builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player))); | ||||
|                 for (CommandCategory c : CommandCategory.values()) { | ||||
|                     if (!c.canAccess(player)) { | ||||
|                         continue; | ||||
|                     } | ||||
|                     builder.append(Component.newline()).append(MINI_MESSAGE | ||||
|                             .parse( | ||||
|                                     TranslatableCaption.of("help.help_info_item").getComponent(player), | ||||
| @@ -152,12 +155,26 @@ public class Help extends Command { | ||||
|  | ||||
|     @Override | ||||
|     public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) { | ||||
|         return Stream.of("claiming", "teleport", "settings", "chat", "schematic", "appearance", "info", "debug", | ||||
|                         "administration", "all" | ||||
|                 ) | ||||
|                 .filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH))) | ||||
|                 .map(value -> new Command(null, false, value, "", RequiredType.NONE, null) { | ||||
|                 }).collect(Collectors.toList()); | ||||
|         final String argument = args[0].toLowerCase(Locale.ENGLISH); | ||||
|         List<Command> result = new ArrayList<>(); | ||||
|  | ||||
|         for (final CommandCategory category : CommandCategory.values()) { | ||||
|             if (!category.canAccess(player)) { | ||||
|                 continue; | ||||
|             } | ||||
|             String name = category.name().toLowerCase(); | ||||
|             if (!name.startsWith(argument)) { | ||||
|                 continue; | ||||
|             } | ||||
|             result.add(new Command(null, false, name, "", RequiredType.NONE, null) { | ||||
|             }); | ||||
|         } | ||||
|         // add the category "all" | ||||
|         if ("all".startsWith(argument)) { | ||||
|             result.add(new Command(null, false, "all", "", RequiredType.NONE, null) { | ||||
|             }); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -128,7 +128,7 @@ public class ComponentPresetManager { | ||||
|                             0, | ||||
|                             "", | ||||
|                             "<rainbow:2>Disco Floor</rainbow>", | ||||
|                             Arrays.asList("<gold>Spice up your plot floor</gold>"), | ||||
|                             List.of("<gold>Spice up your plot floor</gold>"), | ||||
|                             ItemTypes.YELLOW_WOOL | ||||
|                     )); | ||||
|             yamlConfiguration.set("presets", defaultPreset.stream().map(ComponentPreset::serialize).collect(Collectors.toList())); | ||||
| @@ -181,6 +181,10 @@ public class ComponentPresetManager { | ||||
|             } | ||||
|             allowedPresets.add(componentPreset); | ||||
|         } | ||||
|         if (allowedPresets.isEmpty()) { | ||||
|             player.sendMessage(TranslatableCaption.of("preset.empty")); | ||||
|             return null; | ||||
|         } | ||||
|         final int size = (int) Math.ceil((double) allowedPresets.size() / 9.0D); | ||||
|         final PlotInventory plotInventory = new PlotInventory(this.inventoryUtil, player, size, | ||||
|                 TranslatableCaption.of("preset.title").getComponent(player)) { | ||||
| @@ -210,7 +214,13 @@ public class ComponentPresetManager { | ||||
|                     return false; | ||||
|                 } | ||||
|  | ||||
|                 if (componentPreset.getCost() > 0.0D && econHandler.isEnabled(plot.getArea())) { | ||||
|                 if (componentPreset.getCost() > 0.0D) { | ||||
|                     if (!econHandler.isEnabled(plot.getArea())) { | ||||
|                         getPlayer().sendMessage( | ||||
|                                 TranslatableCaption.of("preset.economy_disabled"), | ||||
|                                 Template.of("preset", componentPreset.getDisplayName())); | ||||
|                         return false; | ||||
|                     } | ||||
|                     if (econHandler.getMoney(getPlayer()) < componentPreset.getCost()) { | ||||
|                         getPlayer().sendMessage(TranslatableCaption.of("preset.preset_cannot_afford")); | ||||
|                         return false; | ||||
| @@ -246,11 +256,16 @@ public class ComponentPresetManager { | ||||
|         for (int i = 0; i < allowedPresets.size(); i++) { | ||||
|             final ComponentPreset preset = allowedPresets.get(i); | ||||
|             final List<String> lore = new ArrayList<>(); | ||||
|             if (preset.getCost() > 0 && this.econHandler.isEnabled(plot.getArea())) { | ||||
|                 lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse( | ||||
|                         TranslatableCaption.of("preset.preset_lore_cost").getComponent(player), | ||||
|                         Template.of("cost", String.format("%.2f", preset.getCost())) | ||||
|                 ))); | ||||
|             if (preset.getCost() > 0) { | ||||
|                 if (!this.econHandler.isEnabled(plot.getArea())) { | ||||
|                     lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse( | ||||
|                             TranslatableCaption.of("preset.preset_lore_economy_disabled").getComponent(player)))); | ||||
|                 } else { | ||||
|                     lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse( | ||||
|                             TranslatableCaption.of("preset.preset_lore_cost").getComponent(player), | ||||
|                             Template.of("cost", String.format("%.2f", preset.getCost())) | ||||
|                     ))); | ||||
|                 } | ||||
|             } | ||||
|             lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse( | ||||
|                     TranslatableCaption.of("preset.preset_lore_component").getComponent(player), | ||||
|   | ||||
| @@ -174,21 +174,9 @@ public class PlotListener { | ||||
|             String greeting = plot.getFlag(GreetingFlag.class); | ||||
|             if (!greeting.isEmpty()) { | ||||
|                 if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) { | ||||
|                     player.sendMessage( | ||||
|                             TranslatableCaption.of("flags.greeting_flag_format"), | ||||
|                             Template.of("world", plot.getWorldName()), | ||||
|                             Template.of("plot_id", plot.getId().toString()), | ||||
|                             Template.of("alias", plot.getAlias()), | ||||
|                             Template.of("greeting", greeting) | ||||
|                     ); | ||||
|                     plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendMessage); | ||||
|                 } else { | ||||
|                     player.sendActionBar( | ||||
|                             TranslatableCaption.of("flags.greeting_flag_format"), | ||||
|                             Template.of("world", plot.getWorldName()), | ||||
|                             Template.of("plot_id", plot.getId().toString()), | ||||
|                             Template.of("alias", plot.getAlias()), | ||||
|                             Template.of("greeting", greeting) | ||||
|                     ); | ||||
|                     plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendActionBar); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -413,21 +401,9 @@ public class PlotListener { | ||||
|                 String farewell = plot.getFlag(FarewellFlag.class); | ||||
|                 if (!farewell.isEmpty()) { | ||||
|                     if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) { | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("flags.farewell_flag_format"), | ||||
|                                 Template.of("world", plot.getWorldName()), | ||||
|                                 Template.of("plot_id", plot.getId().toString()), | ||||
|                                 Template.of("alias", plot.getAlias()), | ||||
|                                 Template.of("farewell", farewell) | ||||
|                         ); | ||||
|                         plot.format(StaticCaption.of(farewell), player, false).thenAcceptAsync(player::sendMessage); | ||||
|                     } else { | ||||
|                         player.sendActionBar( | ||||
|                                 TranslatableCaption.of("flags.farewell_flag_format"), | ||||
|                                 Template.of("world", plot.getWorldName()), | ||||
|                                 Template.of("plot_id", plot.getId().toString()), | ||||
|                                 Template.of("alias", plot.getAlias()), | ||||
|                                 Template.of("farewell", farewell) | ||||
|                         ); | ||||
|                         plot.format(StaticCaption.of(farewell), player, false).thenAcceptAsync(player::sendActionBar); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|   | ||||
| @@ -121,7 +121,7 @@ public class PlotInventory { | ||||
|      * @param item  the item to place | ||||
|      * @return {@code true} if the item could be placed, otherwise {@code false} | ||||
|      * @see InventoryUtil#setItemChecked(PlotInventory, int, PlotItemStack) | ||||
|      * @since TODO | ||||
|      * @since 6.5.0 | ||||
|      */ | ||||
|     public boolean setItemChecked(int index, PlotItemStack item) { | ||||
|         if (!this.inventoryUtil.setItemChecked(this, index, item)) { | ||||
|   | ||||
| @@ -54,7 +54,7 @@ public class PlotItemStack { | ||||
|      * @param amount Amount of items in the stack | ||||
|      * @param name   The display name of the item stack | ||||
|      * @param lore   The item stack lore | ||||
|      * @since TODO | ||||
|      * @since 6.5.0 | ||||
|      */ | ||||
|     public PlotItemStack( | ||||
|             final ItemType type, final int amount, final String name, | ||||
|   | ||||
| @@ -105,31 +105,29 @@ public abstract class PlotWorld { | ||||
|         return this.world; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals(final Object o) { | ||||
|         if (o == this) { | ||||
|         if (this == o) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(o instanceof final PlotWorld other)) { | ||||
|         if (o == null || getClass() != o.getClass()) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!other.canEqual(this)) { | ||||
|             return false; | ||||
|         } | ||||
|         final Object this$world = this.getWorld(); | ||||
|         final Object other$world = other.getWorld(); | ||||
|         return Objects.equals(this$world, other$world); | ||||
|         final PlotWorld plotWorld = (PlotWorld) o; | ||||
|         return world.equals(plotWorld.world); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return world.hashCode(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method is not meant to be invoked or overridden, with no replacement. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     protected boolean canEqual(final Object other) { | ||||
|         return other instanceof PlotWorld; | ||||
|     } | ||||
|  | ||||
|     public int hashCode() { | ||||
|         final int PRIME = 59; | ||||
|         int result = 1; | ||||
|         final Object $world = this.getWorld(); | ||||
|         result = result * PRIME + ($world == null ? 43 : $world.hashCode()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -136,18 +136,18 @@ public class ExpireManager { | ||||
|     } | ||||
|  | ||||
|     public void confirmExpiry(final PlotPlayer<?> pp) { | ||||
|         try (final MetaDataAccess<Boolean> metaDataAccess = pp.accessTemporaryMetaData( | ||||
|                 PlayerMetaDataKeys.TEMPORARY_IGNORE_EXPIRE_TASK)) { | ||||
|             if (metaDataAccess.isPresent()) { | ||||
|                 return; | ||||
|             } | ||||
|             if (plotsToDelete != null && !plotsToDelete.isEmpty() && pp.hasPermission("plots.admin.command.autoclear")) { | ||||
|                 final int num = plotsToDelete.size(); | ||||
|                 while (!plotsToDelete.isEmpty()) { | ||||
|                     Iterator<Plot> iter = plotsToDelete.iterator(); | ||||
|                     final Plot current = iter.next(); | ||||
|                     if (!isExpired(new ArrayDeque<>(tasks), current).isEmpty()) { | ||||
|                         TaskManager.runTask(() -> { | ||||
|         TaskManager.runTask(() -> { | ||||
|             try (final MetaDataAccess<Boolean> metaDataAccess = pp.accessTemporaryMetaData( | ||||
|                     PlayerMetaDataKeys.TEMPORARY_IGNORE_EXPIRE_TASK)) { | ||||
|                 if (metaDataAccess.isPresent()) { | ||||
|                     return; | ||||
|                 } | ||||
|                 if (plotsToDelete != null && !plotsToDelete.isEmpty() && pp.hasPermission("plots.admin.command.autoclear")) { | ||||
|                     final int num = plotsToDelete.size(); | ||||
|                     while (!plotsToDelete.isEmpty()) { | ||||
|                         Iterator<Plot> iter = plotsToDelete.iterator(); | ||||
|                         final Plot current = iter.next(); | ||||
|                         if (!isExpired(new ArrayDeque<>(tasks), current).isEmpty()) { | ||||
|                             metaDataAccess.set(true); | ||||
|                             current.getCenter(pp::teleport); | ||||
|                             metaDataAccess.remove(); | ||||
| @@ -171,15 +171,15 @@ public class ExpireManager { | ||||
|                                     cmd_keep, | ||||
|                                     cmd_no_show_expir | ||||
|                             ); | ||||
|                         }); | ||||
|                         return; | ||||
|                     } else { | ||||
|                         iter.remove(); | ||||
|                             return; | ||||
|                         } else { | ||||
|                             iter.remove(); | ||||
|                         } | ||||
|                     } | ||||
|                     plotsToDelete.clear(); | ||||
|                 } | ||||
|                 plotsToDelete.clear(); | ||||
|             } | ||||
|         } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -307,6 +307,7 @@ public class ExpireManager { | ||||
|         this.running = 2; | ||||
|         TaskManager.runTaskAsync(new Runnable() { | ||||
|             private ConcurrentLinkedDeque<Plot> plots = null; | ||||
|  | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 final Runnable task = this; | ||||
|   | ||||
| @@ -371,33 +371,31 @@ public class FlagContainer { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals(final Object o) { | ||||
|         if (o == this) { | ||||
|         if (this == o) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(o instanceof final FlagContainer other)) { | ||||
|         if (o == null || getClass() != o.getClass()) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!other.canEqual(this)) { | ||||
|             return false; | ||||
|         } | ||||
|         final Object this$flagMap = this.getFlagMap(); | ||||
|         final Object other$flagMap = other.getFlagMap(); | ||||
|         return Objects.equals(this$flagMap, other$flagMap); | ||||
|         final FlagContainer that = (FlagContainer) o; | ||||
|         return flagMap.equals(that.flagMap); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return flagMap.hashCode(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method is not meant to be invoked or overridden, with no replacement. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     protected boolean canEqual(final Object other) { | ||||
|         return other instanceof FlagContainer; | ||||
|     } | ||||
|  | ||||
|     public int hashCode() { | ||||
|         final int PRIME = 59; | ||||
|         int result = 1; | ||||
|         final Object $flagMap = this.getFlagMap(); | ||||
|         result = result * PRIME + ($flagMap == null ? 43 : $flagMap.hashCode()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update event types used in {@link PlotFlagUpdateHandler}. | ||||
|      */ | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * A plot flag is any property that can be assigned | ||||
| @@ -200,34 +201,30 @@ public abstract class PlotFlag<T, F extends PlotFlag<T, F>> { | ||||
|         return Collections.emptyList(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals(final Object o) { | ||||
|         if (o == this) { | ||||
|         if (this == o) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(o instanceof final PlotFlag<?, ?> other)) { | ||||
|         if (o == null || getClass() != o.getClass()) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!other.canEqual(this)) { | ||||
|             return false; | ||||
|         } | ||||
|         final Object this$value = this.getValue(); | ||||
|         final Object other$value = other.getValue(); | ||||
|         if (this$value == null ? other$value != null : !this$value.equals(other$value)) { | ||||
|             return false; | ||||
|         } | ||||
|         return true; | ||||
|         final PlotFlag<?, ?> plotFlag = (PlotFlag<?, ?>) o; | ||||
|         return value.equals(plotFlag.value); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return value.hashCode(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method is not meant to be invoked or overridden, with no replacement. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     protected boolean canEqual(final Object other) { | ||||
|         return other instanceof PlotFlag; | ||||
|     } | ||||
|  | ||||
|     public int hashCode() { | ||||
|         final int PRIME = 59; | ||||
|         int result = 1; | ||||
|         final Object $value = this.getValue(); | ||||
|         result = result * PRIME + ($value == null ? 43 : $value.hashCode()); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -45,7 +45,7 @@ public abstract class InventoryUtil { | ||||
|      * @param index The index where to place the item | ||||
|      * @param item The item to place into the inventory | ||||
|      * @return {@code true} if the item could be placed, {@code false} otherwise (e.g. item not available in current version) | ||||
|      * @since TODO | ||||
|      * @since 6.5.0 | ||||
|      */ | ||||
|     public abstract boolean setItemChecked( | ||||
|             final PlotInventory plotInventory, final int index, | ||||
|   | ||||
| @@ -52,8 +52,7 @@ public class HelpMenu { | ||||
|     } | ||||
|  | ||||
|     public HelpMenu getCommands() { | ||||
|         this.commands = | ||||
|                 MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller); | ||||
|         this.commands = MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -51,38 +51,29 @@ public class UUIDMapping { | ||||
|         return this.uuid; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean equals(final Object o) { | ||||
|         if (o == this) { | ||||
|         if (this == o) { | ||||
|             return true; | ||||
|         } | ||||
|         if (!(o instanceof final UUIDMapping other)) { | ||||
|         if (o == null || getClass() != o.getClass()) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!other.canEqual(this)) { | ||||
|             return false; | ||||
|         } | ||||
|         final Object this$uuid = this.getUuid(); | ||||
|         final Object other$uuid = other.getUuid(); | ||||
|         if (!Objects.equals(this$uuid, other$uuid)) { | ||||
|             return false; | ||||
|         } | ||||
|         final Object this$username = this.getUsername(); | ||||
|         final Object other$username = other.getUsername(); | ||||
|         return Objects.equals(this$username, other$username); | ||||
|         final UUIDMapping that = (UUIDMapping) o; | ||||
|         return uuid.equals(that.uuid) && username.equals(that.username); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return Objects.hash(uuid, username); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method is not meant to be invoked or overridden, with no replacement. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     protected boolean canEqual(final Object other) { | ||||
|         return other instanceof UUIDMapping; | ||||
|     } | ||||
|  | ||||
|     public int hashCode() { | ||||
|         final int PRIME = 59; | ||||
|         int result = 1; | ||||
|         final Object $uuid = this.getUuid(); | ||||
|         result = result * PRIME + $uuid.hashCode(); | ||||
|         final Object $username = this.getUsername(); | ||||
|         result = result * PRIME + $username.hashCode(); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -460,9 +460,12 @@ | ||||
|   "backups.backup_automatic_failure": "<prefix><red>The automatic backup process failed. Your pending action has been canceled. Reason: </red><gray><reason></gray>", | ||||
|   "preset.preset_cannot_afford": "<prefix><red>You cannot afford that preset.</red>", | ||||
|   "preset.preset_invalid": "<prefix><red>Could not generate a pattern from that preset.</red>", | ||||
|   "preset.preset_lore_cost": "<prefix><gray>Cost: </gray><gold><cost></gold>", | ||||
|   "preset.preset_lore_cost": "<gray>Cost: </gray><gold><cost></gold>", | ||||
|   "preset.preset_lore_economy_disabled": "<gray>Cost: </gray><red>Economy is disabled</red>", | ||||
|   "preset.preset_lore_component": "<gray>Component: </gray><gold><component></gold>", | ||||
|   "preset.title": "Plot Components", | ||||
|   "preset.empty": "<prefix><red>No plot component presets available.</red>", | ||||
|   "preset.economy_disabled": "<prefix><red>The component preset '<preset>' has a price set but economy is disabled.</red>", | ||||
|   "generic.generic_other": "<gray>other</gray>", | ||||
|   "generic.generic_merged": "<gray>merged</gray>", | ||||
|   "generic.generic_unowned": "<gray>unowned</gray>", | ||||
| @@ -620,8 +623,6 @@ | ||||
|   "flags.flag_error_title": "Flag value must be in the format </red><grey>\"A title\" \"The subtitle\"</grey><red>.", | ||||
|   "flags.area_flags": "<prefix><gray>Area flags: </gray><dark_aqua><flags></dark_aqua>", | ||||
|   "flags.road_flags": "<prefix><gray>Road flags: </gray><dark_aqua><flags></dark_aqua>", | ||||
|   "flags.greeting_flag_format": "<prefix><gold>[<world>;<plot_id>]:</gold> <greeting>", | ||||
|   "flags.farewell_flag_format": "<prefix><gold>[<world>;<plot_id>]:</gold> <farewell>", | ||||
|   "commands.description.add": "<gray>Allow a user to build in a plot while the plot owner is online.</gray>", | ||||
|   "commands.description.alias": "<gray>Set the plot alias.</gray>", | ||||
|   "commands.description.area": "<gray>Create a new plot area.</gray>", | ||||
|   | ||||
| @@ -18,7 +18,7 @@ plugins { | ||||
|     idea | ||||
| } | ||||
|  | ||||
| version = "6.4.1-SNAPSHOT" | ||||
| version = "6.5.2-SNAPSHOT" | ||||
|  | ||||
| allprojects { | ||||
|     group = "com.plotsquared" | ||||
|   | ||||
| @@ -6,7 +6,7 @@ guava = "31.0.1-jre" # Version set by Minecraft | ||||
|  | ||||
| # Platform expectations | ||||
| paper = "1.18.1-R0.1-SNAPSHOT" | ||||
| checker-qual = "3.21.1" | ||||
| checker-qual = "3.21.2" | ||||
| guice = "5.1.0" | ||||
| findbugs = "3.0.1" | ||||
| snakeyaml = "1.30" # Version set by Bukkit | ||||
| @@ -21,14 +21,14 @@ worldedit = "7.2.9" | ||||
| fawe = "2.0.1" | ||||
| vault = "1.7.1" | ||||
| placeholderapi = "2.11.1" | ||||
| luckperms = "5.3" | ||||
| luckperms = "5.4" | ||||
| essentialsx = "2.19.2" | ||||
| mvdwapi = "3.1.1" | ||||
|  | ||||
| # Third party | ||||
| prtree = "2.0.0" | ||||
| aopalliance = "1.0" | ||||
| cloud-services = "1.6.1" | ||||
| cloud-services = "1.6.2" | ||||
| arkitektonika = "2.1.1" | ||||
| paster = "1.1.4" | ||||
| bstats = "3.0.0" | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
|   | ||||
| @@ -5,5 +5,4 @@ include("Core", "Bukkit") | ||||
| project(":Core").name = "PlotSquared-Core" | ||||
| project(":Bukkit").name = "PlotSquared-Bukkit" | ||||
|  | ||||
| enableFeaturePreview("VERSION_CATALOGS") | ||||
| enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user