mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-03 02:33:43 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			feat/plotB
			...
			refactor/v
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3e889b4d64 | 
							
								
								
									
										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.
 | 
			
		||||
      multiple: false
 | 
			
		||||
      options:
 | 
			
		||||
        - '1.20.4'
 | 
			
		||||
        - '1.20.2'
 | 
			
		||||
        - '1.20'
 | 
			
		||||
        - '1.19.4'
 | 
			
		||||
        - '1.19.3'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							@@ -27,10 +27,10 @@ jobs:
 | 
			
		||||
          distribution: temurin
 | 
			
		||||
          java-version: 17
 | 
			
		||||
      - name: Initialize CodeQL
 | 
			
		||||
        uses: github/codeql-action/init@v3
 | 
			
		||||
        uses: github/codeql-action/init@v2
 | 
			
		||||
        with:
 | 
			
		||||
          languages: ${{ matrix.language }}
 | 
			
		||||
      - name: Autobuild
 | 
			
		||||
        uses: github/codeql-action/autobuild@v3
 | 
			
		||||
        uses: github/codeql-action/autobuild@v2
 | 
			
		||||
      - 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:"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    relocate("net.kyori.option", "com.plotsquared.core.configuration.option")
 | 
			
		||||
    relocate("net.kyori.adventure", "com.plotsquared.core.configuration.adventure")
 | 
			
		||||
    relocate("net.kyori.examination", "com.plotsquared.core.configuration.examination")
 | 
			
		||||
    relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib")
 | 
			
		||||
@@ -106,7 +105,7 @@ tasks {
 | 
			
		||||
        opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
 | 
			
		||||
        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://checkerframework.org/api/")
 | 
			
		||||
        opt.links("https://checkerframework.org/api/")
 | 
			
		||||
        opt.isLinkSource = true
 | 
			
		||||
        opt.bottom(File("$rootDir/javadocfooter.html").readText())
 | 
			
		||||
        opt.isUse = true
 | 
			
		||||
 
 | 
			
		||||
@@ -261,10 +261,7 @@ public class BlockEventListener implements Listener {
 | 
			
		||||
                final BlockFace facing = piston.getFacing();
 | 
			
		||||
                location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
 | 
			
		||||
                Plot newPlot = area.getOwnedPlotAbs(location);
 | 
			
		||||
                if (plot.equals(newPlot)) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (!plot.isMerged() || !plot.getConnectedPlots().contains(newPlot)) {
 | 
			
		||||
                if (!plot.equals(newPlot)) {
 | 
			
		||||
                    event.setCancelled(true);
 | 
			
		||||
                    plot.debug("Prevented piston update because of invalid edge piston detection");
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,6 @@ import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.EntityChangeBlockFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.ProjectileChangeBlockFlag;
 | 
			
		||||
import com.plotsquared.core.plot.world.PlotAreaManager;
 | 
			
		||||
import com.plotsquared.core.util.EventDispatcher;
 | 
			
		||||
import com.plotsquared.core.util.PlotFlagUtil;
 | 
			
		||||
@@ -359,13 +358,13 @@ public class EntityEventListener implements Listener {
 | 
			
		||||
            if (shooter instanceof Player) {
 | 
			
		||||
                PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
 | 
			
		||||
                if (plot == null) {
 | 
			
		||||
                    if (area.isRoadFlags() && !area.getRoadFlag(ProjectileChangeBlockFlag.class) && !pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
 | 
			
		||||
                    if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
 | 
			
		||||
                        entity.remove();
 | 
			
		||||
                        event.setCancelled(true);
 | 
			
		||||
                    }
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (plot.isAdded(pp.getUUID()) || plot.getFlag(ProjectileChangeBlockFlag.class) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
 | 
			
		||||
                if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                entity.remove();
 | 
			
		||||
 
 | 
			
		||||
@@ -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.DoneFlag;
 | 
			
		||||
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.HangingPlaceFlag;
 | 
			
		||||
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.BlockFace;
 | 
			
		||||
import org.bukkit.block.BlockState;
 | 
			
		||||
import org.bukkit.block.Sign;
 | 
			
		||||
import org.bukkit.block.data.Waterlogged;
 | 
			
		||||
import org.bukkit.command.PluginCommand;
 | 
			
		||||
import org.bukkit.entity.ArmorStand;
 | 
			
		||||
@@ -177,33 +175,6 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
            Material.WRITABLE_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 WorldEdit worldEdit;
 | 
			
		||||
    private final PlotAreaManager plotAreaManager;
 | 
			
		||||
@@ -236,40 +207,6 @@ public class PlayerEventListener implements Listener {
 | 
			
		||||
        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.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
 | 
			
		||||
                        event.setCancelled(true);
 | 
			
		||||
                    }
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (plot.isAdded(event.getPlayer().getUniqueId())) {
 | 
			
		||||
                    return; // allow for added players
 | 
			
		||||
                }
 | 
			
		||||
                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");
 | 
			
		||||
                    event.setCancelled(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler(ignoreCancelled = true)
 | 
			
		||||
    public void onEffect(@NonNull EntityPotionEffectEvent event) {
 | 
			
		||||
        if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@ package com.plotsquared.bukkit.listener;
 | 
			
		||||
 | 
			
		||||
import com.plotsquared.bukkit.util.BukkitUtil;
 | 
			
		||||
import com.plotsquared.core.location.Location;
 | 
			
		||||
import com.plotsquared.core.permissions.Permission;
 | 
			
		||||
import com.plotsquared.core.plot.Plot;
 | 
			
		||||
import com.plotsquared.core.plot.PlotArea;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
 | 
			
		||||
@@ -32,7 +31,7 @@ import org.bukkit.event.player.PlayerSignOpenEvent;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * For events since 1.20.1
 | 
			
		||||
 * @since 7.2.1
 | 
			
		||||
 * @since TODO
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerEventListener1201 implements Listener {
 | 
			
		||||
 | 
			
		||||
@@ -47,8 +46,7 @@ public class PlayerEventListener1201 implements Listener {
 | 
			
		||||
        }
 | 
			
		||||
        Plot plot = location.getOwnedPlot();
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)
 | 
			
		||||
                    && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
 | 
			
		||||
            if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) {
 | 
			
		||||
                event.setCancelled(true);
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
@@ -56,8 +54,7 @@ public class PlayerEventListener1201 implements Listener {
 | 
			
		||||
        if (plot.isAdded(event.getPlayer().getUniqueId())) {
 | 
			
		||||
            return; // allow for added players
 | 
			
		||||
        }
 | 
			
		||||
        if (!plot.getFlag(EditSignFlag.class)
 | 
			
		||||
                && !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) {
 | 
			
		||||
        if (!plot.getFlag(EditSignFlag.class)) {
 | 
			
		||||
            plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false");
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -47,21 +47,7 @@ public class TranslationUpdateManager {
 | 
			
		||||
        String usedGrants = "usedGrants";
 | 
			
		||||
        String usedGrantsReplacement = "used_grants";
 | 
			
		||||
        String remainingGrants = "remainingGrants";
 | 
			
		||||
        String remainingGrantsReplacement = "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>";
 | 
			
		||||
        String rremainingGrantsReplacement = "remaining_grants";
 | 
			
		||||
 | 
			
		||||
        try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
 | 
			
		||||
            paths
 | 
			
		||||
@@ -72,13 +58,7 @@ public class TranslationUpdateManager {
 | 
			
		||||
                        replaceInFile(p, minHeight, minheightReplacement);
 | 
			
		||||
                        replaceInFile(p, maxHeight, maxheightReplacement);
 | 
			
		||||
                        replaceInFile(p, usedGrants, usedGrantsReplacement);
 | 
			
		||||
                        replaceInFile(p, remainingGrants, remainingGrantsReplacement);
 | 
			
		||||
                        replaceInFile(p, minimumRadius, minimumRadiusReplacement);
 | 
			
		||||
                        replaceInFile(p, maximumMoves, maximumMovesReplacement);
 | 
			
		||||
                        replaceInFile(p, userMove, userMoveReplacement);
 | 
			
		||||
                        replaceInFile(p, listInfoUnknown, listInfoUnknownReplacement);
 | 
			
		||||
                        replaceInFile(p, listInfoServer, listInfoServerReplacement);
 | 
			
		||||
                        replaceInFile(p, listInfoEveryone, listInfoEveryoneReplacement);
 | 
			
		||||
                        replaceInFile(p, remainingGrants, rremainingGrantsReplacement);
 | 
			
		||||
                    });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -71,7 +71,7 @@ tasks {
 | 
			
		||||
        opt.links("https://jd.advntr.dev/api/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://checkerframework.org/api/")
 | 
			
		||||
        opt.links("https://checkerframework.org/api/")
 | 
			
		||||
        opt.isLinkSource = true
 | 
			
		||||
        opt.bottom(File("$rootDir/javadocfooter.html").readText())
 | 
			
		||||
        opt.isUse = true
 | 
			
		||||
 
 | 
			
		||||
@@ -21,9 +21,8 @@ package com.plotsquared.core.command;
 | 
			
		||||
import com.google.inject.Inject;
 | 
			
		||||
import com.plotsquared.core.PlotSquared;
 | 
			
		||||
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.player.OfflinePlotPlayer;
 | 
			
		||||
import com.plotsquared.core.player.PlotPlayer;
 | 
			
		||||
import com.plotsquared.core.plot.Plot;
 | 
			
		||||
import com.plotsquared.core.plot.PlotArea;
 | 
			
		||||
@@ -89,30 +88,22 @@ public class Buy extends Command {
 | 
			
		||||
                TranslatableCaption.of("permission.cant_claim_more_plots"),
 | 
			
		||||
                TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
 | 
			
		||||
        );
 | 
			
		||||
        double priceFlag = plot.getFlag(PriceFlag.class);
 | 
			
		||||
        if (priceFlag <= 0) {
 | 
			
		||||
        double price = plot.getFlag(PriceFlag.class);
 | 
			
		||||
        if (price <= 0) {
 | 
			
		||||
            throw new CommandException(TranslatableCaption.of("economy.not_for_sale"));
 | 
			
		||||
        }
 | 
			
		||||
        checkTrue(
 | 
			
		||||
                this.econHandler.isSupported(),
 | 
			
		||||
                TranslatableCaption.of("economy.vault_or_consumer_null")
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        PlayerBuyPlotEvent event = this.eventDispatcher.callPlayerBuyPlot(player, plot, priceFlag);
 | 
			
		||||
        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(
 | 
			
		||||
        checkTrue(
 | 
			
		||||
                this.econHandler.getMoney(player) >= price,
 | 
			
		||||
                TranslatableCaption.of("economy.cannot_afford_plot"),
 | 
			
		||||
                TagResolver.builder()
 | 
			
		||||
                        .tag("money", Tag.inserting(Component.text(this.econHandler.format(price))))
 | 
			
		||||
                        .tag("balance", Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player)))))
 | 
			
		||||
                        .build()
 | 
			
		||||
        );
 | 
			
		||||
        }
 | 
			
		||||
        this.econHandler.withdrawMoney(player, price);
 | 
			
		||||
        // Failure
 | 
			
		||||
        // Success
 | 
			
		||||
@@ -122,8 +113,7 @@ public class Buy extends Command {
 | 
			
		||||
                    TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            OfflinePlotPlayer previousOwner = PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs());
 | 
			
		||||
            this.econHandler.depositMoney(previousOwner, price);
 | 
			
		||||
            this.econHandler.depositMoney(PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs()), price);
 | 
			
		||||
 | 
			
		||||
            PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs());
 | 
			
		||||
            if (owner != null) {
 | 
			
		||||
@@ -137,8 +127,9 @@ public class Buy extends Command {
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
            PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class);
 | 
			
		||||
            if (this.eventDispatcher.callFlagRemove(plotFlag, plot).getEventResult() != Result.DENY) {
 | 
			
		||||
                plot.removeFlag(plotFlag);
 | 
			
		||||
            PlotFlagRemoveEvent event = this.eventDispatcher.callFlagRemove(plotFlag, plot);
 | 
			
		||||
            if (event.getEventResult() != Result.DENY) {
 | 
			
		||||
                plot.removeFlag(event.getFlag());
 | 
			
		||||
            }
 | 
			
		||||
            plot.setOwner(player.getUUID());
 | 
			
		||||
            plot.getPlotModificationManager().setSign(player.getName());
 | 
			
		||||
@@ -146,7 +137,6 @@ public class Buy extends Command {
 | 
			
		||||
                    TranslatableCaption.of("working.claimed"),
 | 
			
		||||
                    TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
 | 
			
		||||
            );
 | 
			
		||||
            this.eventDispatcher.callPostPlayerBuyPlot(player, previousOwner, plot, price);
 | 
			
		||||
            whenDone.run(Buy.this, CommandResult.SUCCESS);
 | 
			
		||||
        }, () -> {
 | 
			
		||||
            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.minimum_radius"),
 | 
			
		||||
                        TagResolver.resolver("minimum_radius", Tag.inserting(Component.text(minimumRadius)))
 | 
			
		||||
                        TagResolver.resolver("minimumRadius", Tag.inserting(Component.text(minimumRadius)))
 | 
			
		||||
                );
 | 
			
		||||
                player.sendMessage(
 | 
			
		||||
                        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(
 | 
			
		||||
@@ -269,7 +269,7 @@ public class Condense extends SubCommand {
 | 
			
		||||
                );
 | 
			
		||||
                player.sendMessage(
 | 
			
		||||
                        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.radius_measured"));
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,7 @@ public class Done extends SubCommand {
 | 
			
		||||
                TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
 | 
			
		||||
        );
 | 
			
		||||
        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);
 | 
			
		||||
            plot.removeRunning();
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -465,7 +465,7 @@ public class ListCmd extends SubCommand {
 | 
			
		||||
                TextComponent.Builder builder = Component.text();
 | 
			
		||||
                if (plot.getFlag(ServerPlotFlag.class)) {
 | 
			
		||||
                    TagResolver serverResolver = TagResolver.resolver(
 | 
			
		||||
                            "server",
 | 
			
		||||
                            "info.server",
 | 
			
		||||
                            Tag.inserting(TranslatableCaption.of("info.server").toComponent(player))
 | 
			
		||||
                    );
 | 
			
		||||
                    builder.append(MINI_MESSAGE.deserialize(server, serverResolver));
 | 
			
		||||
@@ -483,13 +483,13 @@ public class ListCmd extends SubCommand {
 | 
			
		||||
                                builder.append(MINI_MESSAGE.deserialize(online, resolver));
 | 
			
		||||
                            } else if (uuidMapping.username().equalsIgnoreCase("unknown")) {
 | 
			
		||||
                                TagResolver unknownResolver = TagResolver.resolver(
 | 
			
		||||
                                        "unknown",
 | 
			
		||||
                                        "info.unknown",
 | 
			
		||||
                                        Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
 | 
			
		||||
                                );
 | 
			
		||||
                                builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
 | 
			
		||||
                            } else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) {
 | 
			
		||||
                                TagResolver everyoneResolver = TagResolver.resolver(
 | 
			
		||||
                                        "everyone",
 | 
			
		||||
                                        "info.everyone",
 | 
			
		||||
                                        Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
 | 
			
		||||
                                );
 | 
			
		||||
                                builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver));
 | 
			
		||||
 
 | 
			
		||||
@@ -18,34 +18,17 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.plotsquared.core.events;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import org.checkerframework.checker.nullness.qual.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * PlotSquared event with {@link Result} to cancel, force, or allow.
 | 
			
		||||
 */
 | 
			
		||||
public interface CancellablePlotEvent {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The currently set {@link Result} for this event (as set by potential previous event listeners).
 | 
			
		||||
     *
 | 
			
		||||
     * @return the current result.
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable Result getEventResult();
 | 
			
		||||
    Result getEventResult();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the {@link Result} for this event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param eventResult the new result.
 | 
			
		||||
     */
 | 
			
		||||
    void setEventResult(@Nullable Result eventResult);
 | 
			
		||||
    void setEventResult(Result eventResult);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @deprecated No usage and not null-safe
 | 
			
		||||
     */
 | 
			
		||||
    @Deprecated(since = "TODO")
 | 
			
		||||
    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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
     *
 | 
			
		||||
     * @return LocationTransformer
 | 
			
		||||
     * @since 7.2.1
 | 
			
		||||
     * @since TODO
 | 
			
		||||
     */
 | 
			
		||||
    public @Nullable UnaryOperator<Location> getLocationTransformer() {
 | 
			
		||||
        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.
 | 
			
		||||
     *
 | 
			
		||||
     * @param locationTransformer The new transformer
 | 
			
		||||
     * @since 7.2.1
 | 
			
		||||
     * @since TODO
 | 
			
		||||
     */
 | 
			
		||||
    public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) {
 | 
			
		||||
        this.locationTransformer = locationTransformer;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -59,9 +59,6 @@ public enum Permission implements ComponentLike {
 | 
			
		||||
    PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED("plots.admin.vehicle.break.unowned"),
 | 
			
		||||
    PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER("plots.admin.vehicle.break.other"),
 | 
			
		||||
    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_BUILD_ROAD("plots.admin.build.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)
 | 
			
		||||
     */
 | 
			
		||||
    public int getAllowedPlots() {
 | 
			
		||||
        final int calculatedLimit = hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
 | 
			
		||||
        return this.eventDispatcher.callPlayerPlotLimit(this, calculatedLimit).limit();
 | 
			
		||||
        return hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,6 @@ import com.plotsquared.core.plot.flag.implementations.PlayerInteractFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.PlotTitleFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.PriceFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.ProjectileChangeBlockFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.PveFlag;
 | 
			
		||||
import com.plotsquared.core.plot.flag.implementations.PvpFlag;
 | 
			
		||||
@@ -186,7 +185,6 @@ public final class GlobalFlagContainer extends FlagContainer {
 | 
			
		||||
        this.addFlag(NoWorldeditFlag.NO_WORLDEDIT_FALSE);
 | 
			
		||||
        this.addFlag(PlayerInteractFlag.PLAYER_INTERACT_FALSE);
 | 
			
		||||
        this.addFlag(PreventCreativeCopyFlag.PREVENT_CREATIVE_COPY_FALSE);
 | 
			
		||||
        this.addFlag(ProjectileChangeBlockFlag.PROJECTILE_CHANGE_BLOCK_FALSE);
 | 
			
		||||
        this.addFlag(PveFlag.PVE_FALSE);
 | 
			
		||||
        this.addFlag(PvpFlag.PVP_FALSE);
 | 
			
		||||
        this.addFlag(RedstoneFlag.REDSTONE_TRUE);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ import com.plotsquared.core.plot.flag.types.BooleanFlag;
 | 
			
		||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @since 7.2.1
 | 
			
		||||
 * @since TODO
 | 
			
		||||
 */
 | 
			
		||||
public class EditSignFlag extends BooleanFlag<EditSignFlag> {
 | 
			
		||||
    public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +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.plot.flag.implementations;
 | 
			
		||||
 | 
			
		||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
 | 
			
		||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
 | 
			
		||||
import org.checkerframework.checker.nullness.qual.NonNull;
 | 
			
		||||
 | 
			
		||||
public class ProjectileChangeBlockFlag extends BooleanFlag<ProjectileChangeBlockFlag> {
 | 
			
		||||
 | 
			
		||||
    public static final ProjectileChangeBlockFlag PROJECTILE_CHANGE_BLOCK_TRUE = new ProjectileChangeBlockFlag(true);
 | 
			
		||||
    public static final ProjectileChangeBlockFlag PROJECTILE_CHANGE_BLOCK_FALSE = new ProjectileChangeBlockFlag(false);
 | 
			
		||||
 | 
			
		||||
    private ProjectileChangeBlockFlag(boolean value) {
 | 
			
		||||
        super(value, TranslatableCaption.of("flags.flag_description_projectile_change_block"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected ProjectileChangeBlockFlag flagOf(@NonNull Boolean value) {
 | 
			
		||||
        return value ? PROJECTILE_CHANGE_BLOCK_TRUE : PROJECTILE_CHANGE_BLOCK_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -25,13 +25,11 @@ import com.plotsquared.core.configuration.Settings;
 | 
			
		||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
 | 
			
		||||
import com.plotsquared.core.events.PlayerAutoPlotEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerAutoPlotsChosenEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerBuyPlotEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerClaimPlotEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerEnterPlotEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerLeavePlotEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerPlotHelperEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerPlotLimitEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
 | 
			
		||||
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
 | 
			
		||||
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.TeleportCause;
 | 
			
		||||
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.PostPlotDeleteEvent;
 | 
			
		||||
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.Location;
 | 
			
		||||
import com.plotsquared.core.permissions.Permission;
 | 
			
		||||
import com.plotsquared.core.player.OfflinePlotPlayer;
 | 
			
		||||
import com.plotsquared.core.player.PlotPlayer;
 | 
			
		||||
import com.plotsquared.core.plot.Plot;
 | 
			
		||||
import com.plotsquared.core.plot.PlotArea;
 | 
			
		||||
@@ -312,23 +308,6 @@ public class EventDispatcher {
 | 
			
		||||
        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) {
 | 
			
		||||
        if (player == null) {
 | 
			
		||||
            return; //possible future warning message to figure out where we are retrieving null
 | 
			
		||||
@@ -396,10 +375,14 @@ public class EventDispatcher {
 | 
			
		||||
                            return true;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms);
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                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);
 | 
			
		||||
                for (final BlockTypeWrapper blockTypeWrapper : use) {
 | 
			
		||||
@@ -408,7 +391,7 @@ public class EventDispatcher {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
 | 
			
		||||
                if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), false)) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                // 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 player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, false);
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), false
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                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)) {
 | 
			
		||||
                    return true;
 | 
			
		||||
@@ -448,14 +435,21 @@ public class EventDispatcher {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false);
 | 
			
		||||
                return player.hasPermission(
 | 
			
		||||
                        Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
 | 
			
		||||
                        false
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
            case SPAWN_MOB -> {
 | 
			
		||||
                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()) {
 | 
			
		||||
                    return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms);
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                if (plot.getFlag(MobPlaceFlag.class)) {
 | 
			
		||||
                    return true;
 | 
			
		||||
@@ -467,7 +461,10 @@ public class EventDispatcher {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
 | 
			
		||||
                if (player.hasPermission(
 | 
			
		||||
                        Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
 | 
			
		||||
                        false
 | 
			
		||||
                )) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                if (notifyPerms) {
 | 
			
		||||
@@ -487,10 +484,14 @@ public class EventDispatcher {
 | 
			
		||||
            }
 | 
			
		||||
            case PLACE_MISC -> {
 | 
			
		||||
                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()) {
 | 
			
		||||
                    return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms);
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                if (plot.getFlag(MiscPlaceFlag.class)) {
 | 
			
		||||
                    return true;
 | 
			
		||||
@@ -502,7 +503,10 @@ public class EventDispatcher {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
 | 
			
		||||
                if (player.hasPermission(
 | 
			
		||||
                        Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
 | 
			
		||||
                        false
 | 
			
		||||
                )) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                if (notifyPerms) {
 | 
			
		||||
@@ -522,28 +526,16 @@ public class EventDispatcher {
 | 
			
		||||
            }
 | 
			
		||||
            case PLACE_VEHICLE -> {
 | 
			
		||||
                if (plot == null) {
 | 
			
		||||
                    return player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_ROAD, 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)
 | 
			
		||||
                                    )
 | 
			
		||||
                            )
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                if (!plot.hasOwner()) {
 | 
			
		||||
                    return player.hasPermission(
 | 
			
		||||
                            Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                return plot.getFlag(VehiclePlaceFlag.class);
 | 
			
		||||
            }
 | 
			
		||||
            default -> {
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -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()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 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
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,6 @@
 | 
			
		||||
  "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_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.setup_not_started": "<prefix><gold>No setup started.</gold>",
 | 
			
		||||
  "setup.setup_init": "<prefix><gold>Usage: </gold><gray>/plot setup <value></gray>",
 | 
			
		||||
@@ -249,11 +248,11 @@
 | 
			
		||||
  "condense.skipping": "<prefix><red>Skipping complex plot: </red><gold><plot></gold><red>.</red>",
 | 
			
		||||
  "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.minimum_radius": "<gold>Minimum radius: </gold><gray><minimum_radius></gray>",
 | 
			
		||||
  "condense.maximum_moved": "<gold>Maximum moved: </gold><gray><maximum_moves></gray>",
 | 
			
		||||
  "condense.minimum_radius": "<gold>Minimum radius: </gold><gray><minimumRadius></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_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.radius_measured": "<yellow> - Radius is measured in plot width.</yellow>",
 | 
			
		||||
  "database.starting_conversion": "<prefix><gold>Starting...</gold>",
 | 
			
		||||
@@ -382,9 +381,9 @@
 | 
			
		||||
  "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_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_server": "<hover:show_text:'<red>The plot is owned by the server</red>'><white><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_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><info.server></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_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>",
 | 
			
		||||
@@ -590,7 +589,6 @@
 | 
			
		||||
  "flags.flag_description_place": "<gray>Define a list of materials players should be able to place in the plot.</gray>",
 | 
			
		||||
  "flags.flag_description_player_interact": "<gray>Set to `true` to allow guests to interact with players in the plot.</gray>",
 | 
			
		||||
  "flags.flag_description_price": "<gray>Set a price for a plot. Must be a positive decimal number.</gray>",
 | 
			
		||||
  "flags.flag_description_projectile_change_block": "<gray>Set to `true` to allow projectiles to change blocks (tnt, etc.) on the plot.</gray>",
 | 
			
		||||
  "flags.flag_description_pve": "<gray>Set to `true` to enable PVE inside the plot.</gray>",
 | 
			
		||||
  "flags.flag_description_pvp": "<gray>Set to `true` to enable PVP inside the plot.</gray>",
 | 
			
		||||
  "flags.flag_description_redstone": "<gray>Set to `false` to disable redstone in the plot.</gray>",
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ plugins {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
group = "com.intellectualsites.plotsquared"
 | 
			
		||||
version = "7.3.2-SNAPSHOT"
 | 
			
		||||
version = "7.2.1-SNAPSHOT"
 | 
			
		||||
 | 
			
		||||
if (!File("$rootDir/.git").exists()) {
 | 
			
		||||
    logger.lifecycle("""
 | 
			
		||||
@@ -225,7 +225,7 @@ tasks.getByName<Jar>("jar") {
 | 
			
		||||
    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 {
 | 
			
		||||
    register("cacheLatestFaweArtifact") {
 | 
			
		||||
        val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
 | 
			
		||||
 
 | 
			
		||||
@@ -2,18 +2,18 @@
 | 
			
		||||
# Platform expectations
 | 
			
		||||
paper = "1.20.2-R0.1-SNAPSHOT"
 | 
			
		||||
guice = "7.0.0"
 | 
			
		||||
spotbugs = "4.8.3"
 | 
			
		||||
checkerqual = "3.42.0"
 | 
			
		||||
spotbugs = "4.8.2"
 | 
			
		||||
checkerqual = "3.40.0"
 | 
			
		||||
gson = "2.10"
 | 
			
		||||
guava = "31.1-jre"
 | 
			
		||||
snakeyaml = "2.0"
 | 
			
		||||
adventure = "4.15.0"
 | 
			
		||||
adventure-bukkit = "4.3.2"
 | 
			
		||||
adventure = "4.14.0"
 | 
			
		||||
adventure-bukkit = "4.3.1"
 | 
			
		||||
log4j = "2.19.0"
 | 
			
		||||
 | 
			
		||||
# Plugins
 | 
			
		||||
worldedit = "7.2.18"
 | 
			
		||||
fawe = "2.8.4"
 | 
			
		||||
worldedit = "7.2.17"
 | 
			
		||||
fawe = "2.8.2"
 | 
			
		||||
placeholderapi = "2.11.5"
 | 
			
		||||
luckperms = "5.4"
 | 
			
		||||
essentialsx = "2.20.1"
 | 
			
		||||
@@ -35,7 +35,7 @@ serverlib = "2.3.4"
 | 
			
		||||
# Gradle plugins
 | 
			
		||||
shadow = "8.1.1"
 | 
			
		||||
grgit = "4.1.1"
 | 
			
		||||
spotless = "6.23.3"
 | 
			
		||||
spotless = "6.23.2"
 | 
			
		||||
nexus = "1.3.0"
 | 
			
		||||
runPaper = "2.2.2"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user