mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 03:03:43 +01:00 
			
		
		
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			feature/v7
			...
			fix/missin
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					932b7d1a4e | ||
| 
						 | 
					f867867a42 | ||
| 
						 | 
					59eefd6865 | ||
| 
						 | 
					587a286d05 | ||
| 
						 | 
					e10caf6aa0 | ||
| 
						 | 
					08b325e37d | ||
| 
						 | 
					c394108ba6 | ||
| 
						 | 
					31e89019f1 | ||
| 
						 | 
					3a7075e28d | ||
| 
						 | 
					8373b7874e | ||
| 
						 | 
					fe13882b97 | 
							
								
								
									
										1
									
								
								.github/renovate.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/renovate.json
									
									
									
									
										vendored
									
									
								
							@@ -4,6 +4,7 @@
 | 
				
			|||||||
    "config:base",
 | 
					    "config:base",
 | 
				
			||||||
    ":semanticCommitsDisabled"
 | 
					    ":semanticCommitsDisabled"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 | 
					  "automerge": true,
 | 
				
			||||||
  "labels": [
 | 
					  "labels": [
 | 
				
			||||||
    "dependencies"
 | 
					    "dependencies"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,7 @@ import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
 | 
				
			|||||||
import com.plotsquared.core.util.ChunkManager;
 | 
					import com.plotsquared.core.util.ChunkManager;
 | 
				
			||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
 | 
					import com.sk89q.worldedit.bukkit.BukkitAdapter;
 | 
				
			||||||
import com.sk89q.worldedit.math.BlockVector2;
 | 
					import com.sk89q.worldedit.math.BlockVector2;
 | 
				
			||||||
 | 
					import com.sk89q.worldedit.math.BlockVector3;
 | 
				
			||||||
import org.apache.logging.log4j.LogManager;
 | 
					import org.apache.logging.log4j.LogManager;
 | 
				
			||||||
import org.apache.logging.log4j.Logger;
 | 
					import org.apache.logging.log4j.Logger;
 | 
				
			||||||
import org.bukkit.HeightMap;
 | 
					import org.bukkit.HeightMap;
 | 
				
			||||||
@@ -420,7 +421,11 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
 | 
				
			|||||||
        if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
 | 
					        if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
 | 
				
			||||||
            return lastPlotArea;
 | 
					            return lastPlotArea;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
 | 
					        BlockVector3 loc = BlockVector3.at(chunkX << 4, 0, chunkZ << 4);
 | 
				
			||||||
 | 
					        if (lastPlotArea != null && lastPlotArea.getRegion().contains(loc) && lastPlotArea.getRegion().contains(loc)) {
 | 
				
			||||||
 | 
					            return lastPlotArea;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        PlotArea area = UncheckedWorldLocation.at(name, loc).getPlotArea();
 | 
				
			||||||
        if (area == null) {
 | 
					        if (area == null) {
 | 
				
			||||||
            throw new IllegalStateException(String.format(
 | 
					            throw new IllegalStateException(String.format(
 | 
				
			||||||
                    "Cannot generate chunk that does not belong to a plot area. World: %s",
 | 
					                    "Cannot generate chunk that does not belong to a plot area. World: %s",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ import com.plotsquared.core.plot.Plot;
 | 
				
			|||||||
import com.plotsquared.core.plot.PlotArea;
 | 
					import com.plotsquared.core.plot.PlotArea;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
 | 
				
			||||||
 | 
					import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag;
 | 
				
			||||||
import com.plotsquared.core.util.PlotFlagUtil;
 | 
					import com.plotsquared.core.util.PlotFlagUtil;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
@@ -96,12 +97,12 @@ public class BlockEventListener117 implements Listener {
 | 
				
			|||||||
                area,
 | 
					                area,
 | 
				
			||||||
                MiscInteractFlag.class,
 | 
					                MiscInteractFlag.class,
 | 
				
			||||||
                true
 | 
					                true
 | 
				
			||||||
        ) || plot != null && !plot.getFlag(
 | 
					        ) || plot != null && (!plot.getFlag(MiscInteractFlag.class) || !plot.getFlag(SculkSensorInteractFlag.class))) {
 | 
				
			||||||
                MiscInteractFlag.class)) {
 | 
					 | 
				
			||||||
            if (plotPlayer != null) {
 | 
					            if (plotPlayer != null) {
 | 
				
			||||||
                if (plot != null) {
 | 
					                if (plot != null) {
 | 
				
			||||||
                    if (!plot.isAdded(plotPlayer.getUUID())) {
 | 
					                    if (!plot.isAdded(plotPlayer.getUUID())) {
 | 
				
			||||||
                        plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false");
 | 
					                        plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because both " +
 | 
				
			||||||
 | 
					                                "sculk-sensor-interact and misc-interact = false");
 | 
				
			||||||
                        event.setCancelled(true);
 | 
					                        event.setCancelled(true);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -112,13 +113,15 @@ public class BlockEventListener117 implements Listener {
 | 
				
			|||||||
                if (plot != null) {
 | 
					                if (plot != null) {
 | 
				
			||||||
                    if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
 | 
					                    if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
 | 
				
			||||||
                        plot.debug(
 | 
					                        plot.debug(
 | 
				
			||||||
                                "A thrown item couldn't trigger sculk sensors because misc-interact = false and the item's owner could not be resolved.");
 | 
					                                "A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
 | 
				
			||||||
 | 
					                                        "misc-interact = false and the item's owner could not be resolved.");
 | 
				
			||||||
                        event.setCancelled(true);
 | 
					                        event.setCancelled(true);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (!plot.isAdded(itemThrower)) {
 | 
					                    if (!plot.isAdded(itemThrower)) {
 | 
				
			||||||
                        if (!plot.isAdded(itemThrower)) {
 | 
					                        if (!plot.isAdded(itemThrower)) {
 | 
				
			||||||
                            plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false");
 | 
					                            plot.debug("A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
 | 
				
			||||||
 | 
					                                    "misc-interact = false");
 | 
				
			||||||
                            event.setCancelled(true);
 | 
					                            event.setCancelled(true);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -137,7 +140,6 @@ public class BlockEventListener117 implements Listener {
 | 
				
			|||||||
        if (area == null) {
 | 
					        if (area == null) {
 | 
				
			||||||
            for (int i = blocks.size() - 1; i >= 0; i--) {
 | 
					            for (int i = blocks.size() - 1; i >= 0; i--) {
 | 
				
			||||||
                Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
 | 
					                Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
 | 
				
			||||||
                blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
 | 
					 | 
				
			||||||
                if (blockLocation.isPlotArea()) {
 | 
					                if (blockLocation.isPlotArea()) {
 | 
				
			||||||
                    blocks.remove(i);
 | 
					                    blocks.remove(i);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1167,7 +1167,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (type.isEdible()) {
 | 
					                if (type.isEdible()) {
 | 
				
			||||||
                    //Allow all players to eat while also allowing the block place event ot be fired
 | 
					                    //Allow all players to eat while also allowing the block place event to be fired
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (type == Material.ARMOR_STAND) {
 | 
					                if (type == Material.ARMOR_STAND) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,15 +112,15 @@ public class Kick extends SubCommand {
 | 
				
			|||||||
                for (PlotPlayer<?> player2 : players) {
 | 
					                for (PlotPlayer<?> player2 : players) {
 | 
				
			||||||
                    if (!plot.equals(player2.getCurrentPlot())) {
 | 
					                    if (!plot.equals(player2.getCurrentPlot())) {
 | 
				
			||||||
                        player.sendMessage(
 | 
					                        player.sendMessage(
 | 
				
			||||||
                                TranslatableCaption.of("errors.invalid_player"),
 | 
					                                TranslatableCaption.of("kick.player_not_in_plot"),
 | 
				
			||||||
                                TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
 | 
					                                TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
 | 
				
			||||||
                        );
 | 
					                        );
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (player2.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
 | 
					                    if (player2.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
 | 
				
			||||||
                        player.sendMessage(
 | 
					                        player.sendMessage(
 | 
				
			||||||
                                TranslatableCaption.of("cluster.cannot_kick_player"),
 | 
					                                TranslatableCaption.of("kick.cannot_kick_player"),
 | 
				
			||||||
                                TagResolver.resolver("name", Tag.inserting(Component.text(player2.getName())))
 | 
					                                TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
 | 
				
			||||||
                        );
 | 
					                        );
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,8 +69,8 @@ public class HybridGen extends IndependentPlotGenerator {
 | 
				
			|||||||
            EnumSet<SchematicFeature> features
 | 
					            EnumSet<SchematicFeature> features
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        int minY; // Math.min(world.PLOT_HEIGHT, world.ROAD_HEIGHT);
 | 
					        int minY; // Math.min(world.PLOT_HEIGHT, world.ROAD_HEIGHT);
 | 
				
			||||||
        if ((features.contains(SchematicFeature.ROAD) && Settings.Schematics.PASTE_ROAD_ON_TOP)
 | 
					        boolean isRoad = features.contains(SchematicFeature.ROAD);
 | 
				
			||||||
                || (!features.contains(SchematicFeature.ROAD) && Settings.Schematics.PASTE_ON_TOP)) {
 | 
					        if ((isRoad && Settings.Schematics.PASTE_ROAD_ON_TOP) || (!isRoad && Settings.Schematics.PASTE_ON_TOP)) {
 | 
				
			||||||
            minY = world.SCHEM_Y;
 | 
					            minY = world.SCHEM_Y;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            minY = world.getMinBuildHeight();
 | 
					            minY = world.getMinBuildHeight();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -162,6 +162,7 @@ public class HybridPlotManager extends ClassicPlotManager {
 | 
				
			|||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            minY = hybridPlotWorld.getMinBuildHeight();
 | 
					            minY = hybridPlotWorld.getMinBuildHeight();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        int schemYDiff = (isRoad ? hybridPlotWorld.getRoadYStart() : hybridPlotWorld.getPlotYStart()) - minY;
 | 
				
			||||||
        BaseBlock airBlock = BlockTypes.AIR.getDefaultState().toBaseBlock();
 | 
					        BaseBlock airBlock = BlockTypes.AIR.getDefaultState().toBaseBlock();
 | 
				
			||||||
        for (int x = pos1.getX(); x <= pos2.getX(); x++) {
 | 
					        for (int x = pos1.getX(); x <= pos2.getX(); x++) {
 | 
				
			||||||
            short absX = (short) ((x - hybridPlotWorld.ROAD_OFFSET_X) % size);
 | 
					            short absX = (short) ((x - hybridPlotWorld.ROAD_OFFSET_X) % size);
 | 
				
			||||||
@@ -178,10 +179,14 @@ public class HybridPlotManager extends ClassicPlotManager {
 | 
				
			|||||||
                    for (int y = 0; y < blocks.length; y++) {
 | 
					                    for (int y = 0; y < blocks.length; y++) {
 | 
				
			||||||
                        if (blocks[y] != null) {
 | 
					                        if (blocks[y] != null) {
 | 
				
			||||||
                            queue.setBlock(x, minY + y, z, blocks[y]);
 | 
					                            queue.setBlock(x, minY + y, z, blocks[y]);
 | 
				
			||||||
                        } else if (!isRoad) {
 | 
					                        } else if (y > schemYDiff) {
 | 
				
			||||||
                            // This is necessary, otherwise any blocks not specified in the schematic will remain after a clear
 | 
					                            // This is necessary, otherwise any blocks not specified in the schematic will remain after a clear.
 | 
				
			||||||
                            //  Do not set air for road as this may cause cavernous roads when debugroadregen is used
 | 
					                            // This should only be done where the schematic has actually "started"
 | 
				
			||||||
                            queue.setBlock(x, minY + y, z, airBlock);
 | 
					                            queue.setBlock(x, minY + y, z, airBlock);
 | 
				
			||||||
 | 
					                        } else if (isRoad) {
 | 
				
			||||||
 | 
					                            queue.setBlock(x, minY + y, z, hybridPlotWorld.ROAD_BLOCK.toPattern());
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            queue.setBlock(x, minY + y, z, hybridPlotWorld.MAIN_BLOCK.toPattern());
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,6 +76,9 @@ public class HybridPlotWorld extends ClassicPlotWorld {
 | 
				
			|||||||
     * The Y level at which schematic generation will start, lowest of either road or plot schematic generation.
 | 
					     * The Y level at which schematic generation will start, lowest of either road or plot schematic generation.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public int SCHEM_Y;
 | 
					    public int SCHEM_Y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private int plotY;
 | 
				
			||||||
 | 
					    private int roadY;
 | 
				
			||||||
    private Location SIGN_LOCATION;
 | 
					    private Location SIGN_LOCATION;
 | 
				
			||||||
    private File root = null;
 | 
					    private File root = null;
 | 
				
			||||||
    private int lastOverlayHeightError = Integer.MIN_VALUE;
 | 
					    private int lastOverlayHeightError = Integer.MIN_VALUE;
 | 
				
			||||||
@@ -252,13 +255,13 @@ public class HybridPlotWorld extends ClassicPlotWorld {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        SCHEM_Y = schematicStartHeight();
 | 
					        SCHEM_Y = schematicStartHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // plotY and roadY are important to allow plot and/or road schematic "overflow" into each other without causing AIOOB
 | 
					        // plotY and roadY are important to allow plot and/or road schematic "overflow" into each other
 | 
				
			||||||
        //  exceptions when attempting either to set blocks to, or get block from G_SCH
 | 
					        // without causing AIOOB exceptions when attempting either to set blocks to, or get block from G_SCH
 | 
				
			||||||
        // Default plot schematic start height, normalized to the minimum height schematics are pasted from.
 | 
					        // Default plot schematic start height, normalized to the minimum height schematics are pasted from.
 | 
				
			||||||
        int plotY = PLOT_HEIGHT - SCHEM_Y;
 | 
					        plotY = PLOT_HEIGHT - SCHEM_Y;
 | 
				
			||||||
        int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT;
 | 
					        int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT;
 | 
				
			||||||
        // Default road schematic start height, normalized to the minimum height schematics are pasted from.
 | 
					        // Default road schematic start height, normalized to the minimum height schematics are pasted from.
 | 
				
			||||||
        int roadY = minRoadWall - SCHEM_Y;
 | 
					        roadY = minRoadWall - SCHEM_Y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1;
 | 
					        int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -267,14 +270,15 @@ public class HybridPlotWorld extends ClassicPlotWorld {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // SCHEM_Y should be normalised to the plot "start" height
 | 
					        // SCHEM_Y should be normalised to the plot "start" height
 | 
				
			||||||
        if (schematic3 != null) {
 | 
					        if (schematic3 != null) {
 | 
				
			||||||
            plotSchemHeight = maxSchematicHeight = schematic3.getClipboard().getDimensions().getY();
 | 
					            plotSchemHeight = schematic3.getClipboard().getDimensions().getY();
 | 
				
			||||||
            if (maxSchematicHeight == worldGenHeight) {
 | 
					            if (plotSchemHeight == worldGenHeight) {
 | 
				
			||||||
                SCHEM_Y = getMinGenHeight();
 | 
					                SCHEM_Y = getMinGenHeight();
 | 
				
			||||||
                plotY = 0;
 | 
					                plotY = 0;
 | 
				
			||||||
            } else if (!Settings.Schematics.PASTE_ON_TOP) {
 | 
					            } else if (!Settings.Schematics.PASTE_ON_TOP) {
 | 
				
			||||||
                SCHEM_Y = getMinBuildHeight();
 | 
					                SCHEM_Y = getMinBuildHeight();
 | 
				
			||||||
                plotY = 0;
 | 
					                plotY = 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            maxSchematicHeight = plotY + plotSchemHeight;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int roadSchemHeight;
 | 
					        int roadSchemHeight;
 | 
				
			||||||
@@ -554,4 +558,24 @@ public class HybridPlotWorld extends ClassicPlotWorld {
 | 
				
			|||||||
        return this.root;
 | 
					        return this.root;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the y value where the plot schematic should be pasted from.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return plot schematic y start value
 | 
				
			||||||
 | 
					     * @since TODO
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public int getPlotYStart() {
 | 
				
			||||||
 | 
					        return SCHEM_Y + plotY;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the y value where the road schematic should be pasted from.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return road schematic y start value
 | 
				
			||||||
 | 
					     * @since TODO
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public int getRoadYStart() {
 | 
				
			||||||
 | 
					        return SCHEM_Y + roadY;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -668,7 +668,7 @@ public class HybridUtils {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (condition) {
 | 
					                    if (condition) {
 | 
				
			||||||
                        BaseBlock[] blocks = plotWorld.G_SCH.get(MathMan.pair(absX, absZ));
 | 
					                        BaseBlock[] blocks = plotWorld.G_SCH.get(MathMan.pair(absX, absZ));
 | 
				
			||||||
                        int minY = Settings.Schematics.PASTE_ROAD_ON_TOP ? plotWorld.SCHEM_Y : area.getMinGenHeight() + 1;
 | 
					                        int minY = plotWorld.getRoadYStart();
 | 
				
			||||||
                        int maxDy = Math.max(extend, blocks.length);
 | 
					                        int maxDy = Math.max(extend, blocks.length);
 | 
				
			||||||
                        for (int dy = 0; dy < maxDy; dy++) {
 | 
					                        for (int dy = 0; dy < maxDy; dy++) {
 | 
				
			||||||
                            if (dy > blocks.length - 1) {
 | 
					                            if (dy > blocks.length - 1) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,19 @@ public final class UncheckedWorldLocation extends Location {
 | 
				
			|||||||
        return new UncheckedWorldLocation(world, x, y, z);
 | 
					        return new UncheckedWorldLocation(world, x, y, z);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Construct a new location with yaw and pitch equal to 0
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param world World
 | 
				
			||||||
 | 
					     * @param loc   Coordinates
 | 
				
			||||||
 | 
					     * @return New location
 | 
				
			||||||
 | 
					     * @since 6.9.0
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @DoNotUse
 | 
				
			||||||
 | 
					    public static @NonNull UncheckedWorldLocation at(final @NonNull String world, BlockVector3 loc) {
 | 
				
			||||||
 | 
					        return new UncheckedWorldLocation(world, loc.getX(), loc.getY(), loc.getZ());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    @DoNotUse
 | 
					    @DoNotUse
 | 
				
			||||||
    public @NonNull String getWorldName() {
 | 
					    public @NonNull String getWorldName() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,6 +91,7 @@ import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
 | 
				
			|||||||
import com.plotsquared.core.plot.flag.implementations.PveFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.PveFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.PvpFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.PvpFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.RedstoneFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.RedstoneFlag;
 | 
				
			||||||
 | 
					import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.SnowFormFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.SnowFormFlag;
 | 
				
			||||||
import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag;
 | 
					import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag;
 | 
				
			||||||
@@ -172,6 +173,7 @@ public final class GlobalFlagContainer extends FlagContainer {
 | 
				
			|||||||
        this.addFlag(MobBreakFlag.MOB_BREAK_FALSE);
 | 
					        this.addFlag(MobBreakFlag.MOB_BREAK_FALSE);
 | 
				
			||||||
        this.addFlag(MobPlaceFlag.MOB_PLACE_FALSE);
 | 
					        this.addFlag(MobPlaceFlag.MOB_PLACE_FALSE);
 | 
				
			||||||
        this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE);
 | 
					        this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE);
 | 
				
			||||||
 | 
					        this.addFlag(SculkSensorInteractFlag.SCULK_SENSOR_INTERACT_FALSE);
 | 
				
			||||||
        this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE);
 | 
					        this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE);
 | 
				
			||||||
        this.addFlag(MycelGrowFlag.MYCEL_GROW_TRUE);
 | 
					        this.addFlag(MycelGrowFlag.MYCEL_GROW_TRUE);
 | 
				
			||||||
        this.addFlag(NotifyEnterFlag.NOTIFY_ENTER_FALSE);
 | 
					        this.addFlag(NotifyEnterFlag.NOTIFY_ENTER_FALSE);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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 SculkSensorInteractFlag extends BooleanFlag<SculkSensorInteractFlag> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static final SculkSensorInteractFlag SCULK_SENSOR_INTERACT_TRUE = new SculkSensorInteractFlag(true);
 | 
				
			||||||
 | 
					    public static final SculkSensorInteractFlag SCULK_SENSOR_INTERACT_FALSE = new SculkSensorInteractFlag(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private SculkSensorInteractFlag(boolean value) {
 | 
				
			||||||
 | 
					        super(value, TranslatableCaption.of("flags.flag_description_sculk_sensor_interact"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected SculkSensorInteractFlag flagOf(@NonNull Boolean value) {
 | 
				
			||||||
 | 
					        return value ? SCULK_SENSOR_INTERACT_TRUE : SCULK_SENSOR_INTERACT_FALSE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -29,17 +29,17 @@ import org.checkerframework.checker.nullness.qual.NonNull;
 | 
				
			|||||||
import org.checkerframework.checker.nullness.qual.Nullable;
 | 
					import org.checkerframework.checker.nullness.qual.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.HashMap;
 | 
					 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					import java.util.concurrent.ConcurrentHashMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Singleton
 | 
					@Singleton
 | 
				
			||||||
public class DefaultPlotAreaManager implements PlotAreaManager {
 | 
					public class DefaultPlotAreaManager implements PlotAreaManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final PlotArea[] noPlotAreas = new PlotArea[0];
 | 
					    final PlotArea[] noPlotAreas = new PlotArea[0];
 | 
				
			||||||
    private final Map<String, PlotWorld> plotWorlds = new HashMap<>();
 | 
					    private final Map<String, PlotWorld> plotWorlds = new ConcurrentHashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public @NonNull PlotArea[] getAllPlotAreas() {
 | 
					    public @NonNull PlotArea[] getAllPlotAreas() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
  "cluster.cluster_deleted": "<prefix><dark_aqua>Successfully deleted the cluster </dark_aqua><gold><cluster></gold><dark_aqua>.</dark_aqua>",
 | 
					  "cluster.cluster_deleted": "<prefix><dark_aqua>Successfully deleted the cluster </dark_aqua><gold><cluster></gold><dark_aqua>.</dark_aqua>",
 | 
				
			||||||
  "cluster.cluster_resized": "<prefix><dark_aqua>Successfully resized the cluster.</dark_aqua>",
 | 
					  "cluster.cluster_resized": "<prefix><dark_aqua>Successfully resized the cluster.</dark_aqua>",
 | 
				
			||||||
  "cluster.cluster_added_user": "<prefix><dark_aqua>Successfully added user to the cluster.</dark_aqua>",
 | 
					  "cluster.cluster_added_user": "<prefix><dark_aqua>Successfully added user to the cluster.</dark_aqua>",
 | 
				
			||||||
  "cluster.cannot_kick_player": "<prefix><red>You cannot kick that player: </red><gray><name></gray>",
 | 
					  "cluster.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><name></gray>.</red>",
 | 
				
			||||||
  "cluster.cluster_invited": "<prefix><gold>You have been invited to the following cluster: </gold><gray><cluster>.</gray>",
 | 
					  "cluster.cluster_invited": "<prefix><gold>You have been invited to the following cluster: </gold><gray><cluster>.</gray>",
 | 
				
			||||||
  "cluster.cluster_removed": "<prefix><gold>You have been removed from cluster: </gold><gray><cluster>.</gray>",
 | 
					  "cluster.cluster_removed": "<prefix><gold>You have been removed from cluster: </gold><gray><cluster>.</gray>",
 | 
				
			||||||
  "cluster.cluster_kicked_user": "<prefix><dark_aqua>Successfully kicked the user from the cluster.</dark_aqua>",
 | 
					  "cluster.cluster_kicked_user": "<prefix><dark_aqua>Successfully kicked the user from the cluster.</dark_aqua>",
 | 
				
			||||||
@@ -411,6 +411,8 @@
 | 
				
			|||||||
  "deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>",
 | 
					  "deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>",
 | 
				
			||||||
  "deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>",
 | 
					  "deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>",
 | 
				
			||||||
  "deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>",
 | 
					  "deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>",
 | 
				
			||||||
 | 
					  "kick.player_not_in_plot": "<prefix><red>The player <gray><player></gray> is not on this plot.</red>",
 | 
				
			||||||
 | 
					  "kick.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><player></gray>.</red>",
 | 
				
			||||||
  "kick.you_got_kicked": "<prefix><dark_aqua>You got kicked from the plot!</dark_aqua>",
 | 
					  "kick.you_got_kicked": "<prefix><dark_aqua>You got kicked from the plot!</dark_aqua>",
 | 
				
			||||||
  "trusted.trusted_added": "<prefix><dark_aqua>You successfully trusted a user to the plot.</dark_aqua>",
 | 
					  "trusted.trusted_added": "<prefix><dark_aqua>You successfully trusted a user to the plot.</dark_aqua>",
 | 
				
			||||||
  "trusted.plot_removed_user": "<prefix><red>Plot <plot> of which you were added to has been deleted due to owner inactivity.</red>",
 | 
					  "trusted.plot_removed_user": "<prefix><red>Plot <plot> of which you were added to has been deleted due to owner inactivity.</red>",
 | 
				
			||||||
@@ -572,6 +574,7 @@
 | 
				
			|||||||
  "flags.flag_description_misc_break": "<gray>Set to `true` to allow guests to break miscellaneous items.</gray>",
 | 
					  "flags.flag_description_misc_break": "<gray>Set to `true` to allow guests to break miscellaneous items.</gray>",
 | 
				
			||||||
  "flags.flag_description_misc_cap": "<gray>Set to an integer value to limit the amount of miscellaneous entities on the plot.</gray>",
 | 
					  "flags.flag_description_misc_cap": "<gray>Set to an integer value to limit the amount of miscellaneous entities on the plot.</gray>",
 | 
				
			||||||
  "flags.flag_description_misc_interact": "<gray>Set to `true` to allow guests to interact with miscellaneous items.</gray>",
 | 
					  "flags.flag_description_misc_interact": "<gray>Set to `true` to allow guests to interact with miscellaneous items.</gray>",
 | 
				
			||||||
 | 
					  "flags.flag_description_sculk_sensor_interact": "<gray>Set to `true` to allow guests to interact with sculk sensors.</gray>",
 | 
				
			||||||
  "flags.flag_description_misc_place": "<gray>Set to `true` to allow guests to place miscellaneous items.</gray>",
 | 
					  "flags.flag_description_misc_place": "<gray>Set to `true` to allow guests to place miscellaneous items.</gray>",
 | 
				
			||||||
  "flags.flag_description_mob_break": "<gray>Set to `true` to allow mobs to break blocks within the plot.</gray>",
 | 
					  "flags.flag_description_mob_break": "<gray>Set to `true` to allow mobs to break blocks within the plot.</gray>",
 | 
				
			||||||
  "flags.flag_description_mob_cap": "<gray>Set to an integer value to limit the amount of mobs on the plot.</gray>",
 | 
					  "flags.flag_description_mob_cap": "<gray>Set to an integer value to limit the amount of mobs on the plot.</gray>",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,7 @@ subprojects {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dependencies {
 | 
					    dependencies {
 | 
				
			||||||
        implementation(platform("com.intellectualsites.bom:bom-newest:1.29"))
 | 
					        implementation(platform("com.intellectualsites.bom:bom-newest:1.31"))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dependencies {
 | 
					    dependencies {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ guice = "7.0.0"
 | 
				
			|||||||
spotbugs = "4.7.3"
 | 
					spotbugs = "4.7.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Plugins
 | 
					# Plugins
 | 
				
			||||||
worldedit = "7.2.14"
 | 
					worldedit = "7.2.15"
 | 
				
			||||||
placeholderapi = "2.11.3"
 | 
					placeholderapi = "2.11.3"
 | 
				
			||||||
luckperms = "5.4"
 | 
					luckperms = "5.4"
 | 
				
			||||||
essentialsx = "2.20.0"
 | 
					essentialsx = "2.20.0"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,7 @@
 | 
				
			|||||||
distributionBase=GRADLE_USER_HOME
 | 
					distributionBase=GRADLE_USER_HOME
 | 
				
			||||||
distributionPath=wrapper/dists
 | 
					distributionPath=wrapper/dists
 | 
				
			||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
 | 
					distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
 | 
				
			||||||
networkTimeout=10000
 | 
					networkTimeout=10000
 | 
				
			||||||
 | 
					validateDistributionUrl=true
 | 
				
			||||||
zipStoreBase=GRADLE_USER_HOME
 | 
					zipStoreBase=GRADLE_USER_HOME
 | 
				
			||||||
zipStorePath=wrapper/dists
 | 
					zipStorePath=wrapper/dists
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							@@ -130,10 +130,13 @@ location of your Java installation."
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    JAVACMD=java
 | 
					    JAVACMD=java
 | 
				
			||||||
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
					    if ! command -v java >/dev/null 2>&1
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please set the JAVA_HOME variable in your environment to match the
 | 
					Please set the JAVA_HOME variable in your environment to match the
 | 
				
			||||||
location of your Java installation."
 | 
					location of your Java installation."
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Increase the maximum file descriptors if we can.
 | 
					# Increase the maximum file descriptors if we can.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user