mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-30 17:13:43 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			debug/home
			...
			fix/v6/com
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 42f0b70e85 | 
| @@ -24,7 +24,7 @@ dependencies { | ||||
|     implementation("org.bstats:bstats-bukkit") | ||||
|  | ||||
|     // Paper | ||||
|     compileOnly("io.papermc.paper:paper-api") | ||||
|     compileOnly(libs.paper) | ||||
|     implementation("io.papermc:paperlib") | ||||
|  | ||||
|     // Plugins | ||||
|   | ||||
| @@ -866,8 +866,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | ||||
|                                         com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); | ||||
|                                         PlotArea area = pLoc.getPlotArea(); | ||||
|                                         if (area != null) { | ||||
|                                             Plot currentPlot = area.getPlotAbs(pLoc); | ||||
|                                             if (currentPlot == null || !originalPlotId.equals(currentPlot.getId())) { | ||||
|                                             PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); | ||||
|                                             if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot( | ||||
|                                                             originalPlotId) | ||||
|                                                     .equals(area.getPlot(currentPlotId)))) { | ||||
|                                                 if (entity.hasMetadata("ps-tmp-teleport")) { | ||||
|                                                     continue; | ||||
|                                                 } | ||||
| @@ -881,11 +883,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | ||||
|                                     com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); | ||||
|                                     PlotArea area = pLoc.getPlotArea(); | ||||
|                                     if (area != null) { | ||||
|                                         Plot currentPlot = area.getPlotAbs(pLoc); | ||||
|                                         if (currentPlot != null) { | ||||
|                                         PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); | ||||
|                                         if (currentPlotId != null) { | ||||
|                                             entity.setMetadata( | ||||
|                                                     "shulkerPlot", | ||||
|                                                     new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlot.getId()) | ||||
|                                                     new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId) | ||||
|                                             ); | ||||
|                                         } | ||||
|                                     } | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import org.bukkit.Chunk; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.generator.BlockPopulator; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.Random; | ||||
|  | ||||
| @@ -50,7 +51,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void populate(@NonNull final World world, @NonNull final Random random, @NonNull final Chunk source) { | ||||
|     public void populate(@NotNull final World world, @NotNull final Random random, @NotNull final Chunk source) { | ||||
|         int chunkMinX = source.getX() << 4; | ||||
|         int chunkMinZ = source.getZ() << 4; | ||||
|         PlotArea area = Location.at(world.getName(), chunkMinX, 0, chunkMinZ).getPlotArea(); | ||||
|   | ||||
| @@ -56,7 +56,6 @@ import com.plotsquared.core.plot.flag.types.BlockTypeWrapper; | ||||
| import com.plotsquared.core.plot.flag.types.BooleanFlag; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.WorldEdit; | ||||
| @@ -167,7 +166,7 @@ public class BlockEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) { | ||||
|             if (area.isRoadFlags() && !area.getRoadFlag(RedstoneFlag.class)) { | ||||
|                 event.setNewCurrent(0); | ||||
|             } | ||||
|             return; | ||||
| @@ -1085,10 +1084,7 @@ public class BlockEventListener implements Listener { | ||||
|                 return; | ||||
|             } | ||||
|             if (plot == null) { | ||||
|                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission( | ||||
|                         pp, | ||||
|                         Permission.PERMISSION_ADMIN_BUILD_ROAD | ||||
|                 )) { | ||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) { | ||||
|                     pp.sendMessage( | ||||
|                             TranslatableCaption.of("permission.no_permission_event"), | ||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD)) | ||||
| @@ -1096,10 +1092,7 @@ public class BlockEventListener implements Listener { | ||||
|                     event.setCancelled(true); | ||||
|                 } | ||||
|             } else if (!plot.hasOwner()) { | ||||
|                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission( | ||||
|                         pp, | ||||
|                         Permission.PERMISSION_ADMIN_BUILD_UNOWNED | ||||
|                 )) { | ||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) { | ||||
|                     pp.sendMessage( | ||||
|                             TranslatableCaption.of("permission.no_permission_event"), | ||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) | ||||
|   | ||||
| @@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.block.Block; | ||||
| import org.bukkit.entity.Entity; | ||||
| @@ -92,8 +91,7 @@ public class BlockEventListener117 implements Listener { | ||||
|         } | ||||
|  | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag( | ||||
|                 MiscInteractFlag.class)) { | ||||
|         if (plot == null || !plot.getFlag(MiscInteractFlag.class)) { | ||||
|             if (plotPlayer != null) { | ||||
|                 if (plot != null) { | ||||
|                     if (!plot.isAdded(plotPlayer.getUUID())) { | ||||
| @@ -106,12 +104,6 @@ public class BlockEventListener117 implements Listener { | ||||
|             if (entity instanceof Item item) { | ||||
|                 UUID itemThrower = item.getThrower(); | ||||
|                 if (plot != null) { | ||||
|                     if (itemThrower == null && (itemThrower = item.getOwner()) == null) { | ||||
|                         plot.debug( | ||||
|                                 "A thrown item couldn't trigger sculk sensors because misc-interact = false and the item's owner could not be resolved."); | ||||
|                         event.setCancelled(true); | ||||
|                         return; | ||||
|                     } | ||||
|                     if (!plot.isAdded(itemThrower)) { | ||||
|                         if (!plot.isAdded(itemThrower)) { | ||||
|                             plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false"); | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import com.plotsquared.core.plot.flag.implementations.InvincibleFlag; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||
| import com.sk89q.worldedit.world.block.BlockType; | ||||
| import org.bukkit.Material; | ||||
| @@ -262,7 +261,7 @@ public class EntityEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, InvincibleFlag.class, true)) { | ||||
|             if (area.isRoadFlags() && area.getRoadFlag(InvincibleFlag.class)) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
|   | ||||
| @@ -44,7 +44,6 @@ import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; | ||||
| import com.plotsquared.core.plot.flag.types.BooleanFlag; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import net.kyori.adventure.text.minimessage.Template; | ||||
| import org.bukkit.Chunk; | ||||
| import org.bukkit.block.Block; | ||||
| @@ -327,18 +326,14 @@ public class PaperListener implements Listener { | ||||
|             return; | ||||
|         } | ||||
|         Location location = BukkitUtil.adapt(entity.getLocation()); | ||||
|         PlotArea area = location.getPlotArea(); | ||||
|         if (area == null) { | ||||
|         if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { | ||||
|             return; | ||||
|         } | ||||
|         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|  | ||||
|         if (plot == null) { | ||||
|             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||
|                     pp, | ||||
|                     Permission.PERMISSION_ADMIN_PROJECTILE_ROAD | ||||
|             )) { | ||||
|             if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) { | ||||
|                 pp.sendMessage( | ||||
|                         TranslatableCaption.of("permission.no_permission_event"), | ||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) | ||||
|   | ||||
| @@ -48,10 +48,6 @@ import org.bukkit.event.EventHandler; | ||||
| import org.bukkit.event.block.BlockPlaceEvent; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| /** | ||||
|  * @deprecated P2 effectively no longer supports 1.13 | ||||
|  */ | ||||
| @Deprecated(forRemoval = true, since = "6.10.4") | ||||
| public class PaperListener113 extends PaperListener { | ||||
|  | ||||
|     @Inject | ||||
|   | ||||
| @@ -68,7 +68,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.util.EventDispatcher; | ||||
| import com.plotsquared.core.util.MathMan; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import com.plotsquared.core.util.PremiumVerification; | ||||
| import com.plotsquared.core.util.entity.EntityCategories; | ||||
| import com.plotsquared.core.util.task.TaskManager; | ||||
| @@ -890,7 +889,8 @@ public class PlayerEventListener implements Listener { | ||||
|                 } | ||||
|             } else { | ||||
|                 PlotArea area = pp.getPlotAreaAbs(); | ||||
|                 if (area != null && PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, PreventCreativeCopyFlag.class, true)) { | ||||
|                 if (area != null && area.isRoadFlags() && area | ||||
|                         .getRoadFlag(PreventCreativeCopyFlag.class)) { | ||||
|                     final ItemStack newStack = | ||||
|                             new ItemStack(newItem.getType(), newItem.getAmount()); | ||||
|                     event.setCursor(newStack); | ||||
| @@ -998,10 +998,8 @@ public class PlayerEventListener implements Listener { | ||||
|         Plot plot = location.getPlotAbs(); | ||||
|         BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer()); | ||||
|         if (plot == null) { | ||||
|             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) && !Permissions.hasPermission( | ||||
|                     pp, | ||||
|                     Permission.PERMISSION_ADMIN_INTERACT_ROAD | ||||
|             )) { | ||||
|             if (!area.isRoadFlags() && !area.getRoadFlag(MiscInteractFlag.class) && !Permissions | ||||
|                     .hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) { | ||||
|                 pp.sendMessage( | ||||
|                         TranslatableCaption.of("permission.no_permission_event"), | ||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) | ||||
| @@ -1011,7 +1009,9 @@ public class PlayerEventListener implements Listener { | ||||
|         } else { | ||||
|             if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { | ||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) { | ||||
|                     pp.sendMessage(TranslatableCaption.of("done.building_restricted")); | ||||
|                     pp.sendMessage( | ||||
|                             TranslatableCaption.of("done.building_restricted") | ||||
|                     ); | ||||
|                     e.setCancelled(true); | ||||
|                     return; | ||||
|                 } | ||||
| @@ -1594,10 +1594,7 @@ public class PlayerEventListener implements Listener { | ||||
|             BukkitPlayer pp = BukkitUtil.adapt(p); | ||||
|             Plot plot = area.getPlot(location); | ||||
|             if (plot == null) { | ||||
|                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, VehicleBreakFlag.class, true) && !Permissions.hasPermission( | ||||
|                         pp, | ||||
|                         Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD | ||||
|                 )) { | ||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) { | ||||
|                     pp.sendMessage( | ||||
|                             TranslatableCaption.of("permission.no_permission_event"), | ||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) | ||||
| @@ -1645,7 +1642,7 @@ public class PlayerEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ItemDropFlag.class, false)) { | ||||
|             if (area.isRoadFlags() && !area.getRoadFlag(ItemDropFlag.class)) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
| @@ -1671,7 +1668,7 @@ public class PlayerEventListener implements Listener { | ||||
|             } | ||||
|             Plot plot = location.getOwnedPlot(); | ||||
|             if (plot == null) { | ||||
|                 if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DropProtectionFlag.class, true)) { | ||||
|                 if (area.isRoadFlags() && area.getRoadFlag(DropProtectionFlag.class)) { | ||||
|                     event.setCancelled(true); | ||||
|                 } | ||||
|                 return; | ||||
| @@ -1693,15 +1690,17 @@ public class PlayerEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, KeepInventoryFlag.class, true)) { | ||||
|             if (area.isRoadFlags() && area.getRoadFlag(KeepInventoryFlag.class)) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         if (plot.getFlag(KeepInventoryFlag.class)) { | ||||
|             plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true"); | ||||
|             event.getDrops().clear(); | ||||
|             event.setKeepInventory(true); | ||||
|             if (plot.getFlag(KeepInventoryFlag.class)) { | ||||
|                 plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true"); | ||||
|                 event.getDrops().clear(); | ||||
|                 event.setKeepInventory(true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1726,14 +1725,16 @@ public class PlayerEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalTravelFlag.class, true)) { | ||||
|             if (area.isRoadFlags() && area.getRoadFlag(DenyPortalTravelFlag.class)) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         if (plot.getFlag(DenyPortalTravelFlag.class)) { | ||||
|             plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true"); | ||||
|             event.setCancelled(true); | ||||
|             if (plot.getFlag(DenyPortalTravelFlag.class)) { | ||||
|                 plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true"); | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1771,7 +1772,7 @@ public class PlayerEventListener implements Listener { | ||||
|             } | ||||
|             Plot plot = location.getOwnedPlot(); | ||||
|             if (plot == null) { | ||||
|                 if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalsFlag.class, true)) { | ||||
|                 if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) { | ||||
|                     event.setCancelled(true); | ||||
|                     return; | ||||
|                 } | ||||
| @@ -1800,14 +1801,16 @@ public class PlayerEventListener implements Listener { | ||||
|         } | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|         if (plot == null) { | ||||
|             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, LecternReadBookFlag.class, true)) { | ||||
|             if (area.isRoadFlags() && area.getRoadFlag(LecternReadBookFlag.class)) { | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         if (plot.getFlag(LecternReadBookFlag.class)) { | ||||
|             plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true"); | ||||
|             event.setCancelled(true); | ||||
|             if (plot.getFlag(LecternReadBookFlag.class)) { | ||||
|                 plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true"); | ||||
|                 event.setCancelled(true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -31,7 +31,6 @@ import com.plotsquared.core.plot.PlotHandler; | ||||
| import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.util.Permissions; | ||||
| import com.plotsquared.core.util.PlotFlagUtil; | ||||
| import net.kyori.adventure.text.minimessage.Template; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| @@ -98,18 +97,14 @@ public class ProjectileEventListener implements Listener { | ||||
|             return; | ||||
|         } | ||||
|         Location location = BukkitUtil.adapt(entity.getLocation()); | ||||
|         PlotArea area = location.getPlotArea(); | ||||
|         if (area == null) { | ||||
|         if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { | ||||
|             return; | ||||
|         } | ||||
|         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); | ||||
|         Plot plot = location.getOwnedPlot(); | ||||
|  | ||||
|         if (plot == null) { | ||||
|             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||
|                     pp, | ||||
|                     Permission.PERMISSION_ADMIN_PROJECTILE_ROAD | ||||
|             )) { | ||||
|             if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) { | ||||
|                 pp.sendMessage( | ||||
|                         TranslatableCaption.of("permission.no_permission_event"), | ||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) | ||||
| @@ -159,8 +154,6 @@ public class ProjectileEventListener implements Listener { | ||||
|                     if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) { | ||||
|                         return; | ||||
|                     } | ||||
|                 } else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) { | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 entity.remove(); | ||||
| @@ -170,10 +163,7 @@ public class ProjectileEventListener implements Listener { | ||||
|  | ||||
|             PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter); | ||||
|             if (plot == null) { | ||||
|                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||
|                         pp, | ||||
|                         Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED | ||||
|                 )) { | ||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) { | ||||
|                     entity.remove(); | ||||
|                     event.setCancelled(true); | ||||
|                 } | ||||
| @@ -204,6 +194,7 @@ public class ProjectileEventListener implements Listener { | ||||
|             if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) { | ||||
|                 entity.remove(); | ||||
|                 event.setCancelled(true); | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -44,7 +44,6 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator { | ||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName()); | ||||
|  | ||||
|     private final LimitedRegion limitedRegion; | ||||
|     private boolean useOtherRestoreTagMethod = false; | ||||
|  | ||||
|     /** | ||||
|      * @since 6.9.0 | ||||
| @@ -66,18 +65,10 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator { | ||||
|             CompoundTag tag = id.getNbtData(); | ||||
|             StateWrapper sw = new StateWrapper(tag); | ||||
|             try { | ||||
|                 if (useOtherRestoreTagMethod && getWorld() != null) { | ||||
|                     sw.restoreTag(getWorld().getName(), x, y, z); | ||||
|                 } else { | ||||
|                     sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock()); | ||||
|                 } | ||||
|                 sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock()); | ||||
|             } catch (IllegalArgumentException e) { | ||||
|                 LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e); | ||||
|                 return false; | ||||
|             } catch (IllegalStateException e) { | ||||
|                 useOtherRestoreTagMethod = true; | ||||
|                 LOGGER.warn("IllegalStateException attempting to populate tile entity into the world at location {},{},{}. " + | ||||
|                         "Possibly on <=1.17.1, switching to secondary method.", x, y, z, e); | ||||
|             } | ||||
|         } | ||||
|         return result; | ||||
|   | ||||
| @@ -36,7 +36,8 @@ import com.sk89q.worldedit.function.pattern.Pattern; | ||||
| import com.sk89q.worldedit.regions.CuboidRegion; | ||||
| import com.sk89q.worldedit.world.biome.BiomeType; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
|  | ||||
| import java.util.Set; | ||||
|  | ||||
| @@ -45,7 +46,10 @@ public class FaweRegionManager extends BukkitRegionManager { | ||||
|     private final FaweDelegateRegionManager delegate = new FaweDelegateRegionManager(); | ||||
|  | ||||
|     @Inject | ||||
|     public FaweRegionManager(WorldUtil worldUtil, GlobalBlockQueue blockQueue, ProgressSubscriberFactory subscriberFactory) { | ||||
|     public FaweRegionManager( | ||||
|             @NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull | ||||
|             ProgressSubscriberFactory subscriberFactory | ||||
|     ) { | ||||
|         super(worldUtil, blockQueue, subscriberFactory); | ||||
|     } | ||||
|  | ||||
| @@ -72,9 +76,9 @@ public class FaweRegionManager extends BukkitRegionManager { | ||||
|  | ||||
|     @Override | ||||
|     public boolean handleClear( | ||||
|             @NonNull Plot plot, | ||||
|             @NotNull Plot plot, | ||||
|             @Nullable Runnable whenDone, | ||||
|             @NonNull PlotManager manager, | ||||
|             @NotNull PlotManager manager, | ||||
|             final @Nullable PlotPlayer<?> player | ||||
|     ) { | ||||
|         if (!Settings.FAWE_Components.CLEAR || !(manager instanceof HybridPlotManager)) { | ||||
|   | ||||
| @@ -29,7 +29,7 @@ import com.plotsquared.core.util.SchematicHandler; | ||||
| import com.plotsquared.core.util.WorldUtil; | ||||
| import com.plotsquared.core.util.task.RunnableVal; | ||||
| import com.sk89q.jnbt.CompoundTag; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.io.InputStream; | ||||
| import java.net.URL; | ||||
| @@ -40,7 +40,7 @@ public class FaweSchematicHandler extends SchematicHandler { | ||||
|     private final FaweDelegateSchematicHandler delegate = new FaweDelegateSchematicHandler(); | ||||
|  | ||||
|     @Inject | ||||
|     public FaweSchematicHandler(WorldUtil worldUtil, ProgressSubscriberFactory subscriberFactory) { | ||||
|     public FaweSchematicHandler(@NotNull WorldUtil worldUtil, @NotNull ProgressSubscriberFactory subscriberFactory) { | ||||
|         super(worldUtil, subscriberFactory); | ||||
|     } | ||||
|  | ||||
| @@ -75,7 +75,7 @@ public class FaweSchematicHandler extends SchematicHandler { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Schematic getSchematic(@NonNull InputStream is) { | ||||
|     public Schematic getSchematic(@NotNull InputStream is) { | ||||
|         return delegate.getSchematic(is); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -32,7 +32,6 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator; | ||||
| import com.plotsquared.core.location.World; | ||||
| import com.plotsquared.core.permissions.PermissionHandler; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.queue.GlobalBlockQueue; | ||||
| import com.plotsquared.core.util.ChunkManager; | ||||
| @@ -285,16 +284,6 @@ public interface PlotPlatform<P> extends LocaleHolder { | ||||
|         return injector().getInstance(ChunkManager.class); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the {@link ExpireManager} implementation for the platform | ||||
|      * | ||||
|      * @return Expire manager | ||||
|      * @since 6.10.2 | ||||
|      */ | ||||
|     default @NonNull ExpireManager expireManager() { | ||||
|         return injector().getInstance(ExpireManager.class); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the {@link PlotAreaManager} implementation. | ||||
|      * | ||||
|   | ||||
| @@ -290,11 +290,11 @@ public class PlotSquared { | ||||
|  | ||||
|     public void startExpiryTasks() { | ||||
|         if (Settings.Enabled_Components.PLOT_EXPIRY) { | ||||
|             ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||
|             expireManager.runAutomatedTask(); | ||||
|             ExpireManager.IMP = new ExpireManager(this.eventDispatcher); | ||||
|             ExpireManager.IMP.runAutomatedTask(); | ||||
|             for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) { | ||||
|                 ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager()); | ||||
|                 expireManager.addTask(task); | ||||
|                 ExpireManager.IMP.addTask(task); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -645,8 +645,7 @@ public class PlotSquared { | ||||
|         } else { | ||||
|             list = new ArrayList<>(input); | ||||
|         } | ||||
|         ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||
|         list.sort(Comparator.comparingLong(a -> expireManager.getTimestamp(a.getOwnerAbs()))); | ||||
|         list.sort(Comparator.comparingLong(a -> ExpireManager.IMP.getTimestamp(a.getOwnerAbs()))); | ||||
|         return list; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,6 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.caption.StaticCaption; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.events.PlotFlagRemoveEvent; | ||||
| @@ -140,7 +139,10 @@ public class DebugExec extends SubCommand { | ||||
|                     return true; | ||||
|                 } | ||||
|                 case "start-expire" -> { | ||||
|                     if (PlotSquared.platform().expireManager().runAutomatedTask()) { | ||||
|                     if (ExpireManager.IMP == null) { | ||||
|                         ExpireManager.IMP = new ExpireManager(this.eventDispatcher); | ||||
|                     } | ||||
|                     if (ExpireManager.IMP.runAutomatedTask()) { | ||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_started")); | ||||
|                     } else { | ||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started")); | ||||
| @@ -148,7 +150,7 @@ public class DebugExec extends SubCommand { | ||||
|                     return true; | ||||
|                 } | ||||
|                 case "stop-expire" -> { | ||||
|                     if (!PlotSquared.platform().expireManager().cancelTask()) { | ||||
|                     if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) { | ||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.task_halted")); | ||||
|                     } else { | ||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled")); | ||||
|   | ||||
| @@ -19,7 +19,6 @@ | ||||
| package com.plotsquared.core.command; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.events.PlotDoneEvent; | ||||
| @@ -30,6 +29,7 @@ import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.permissions.Permission; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.expiration.PlotAnalysis; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||
| @@ -94,7 +94,7 @@ public class Done extends SubCommand { | ||||
|                 Template.of("plot", plot.getId().toString()) | ||||
|         ); | ||||
|         final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done"); | ||||
|         if (PlotSquared.platform().expireManager() == null || doneRequirements == null) { | ||||
|         if (ExpireManager.IMP == null || doneRequirements == null) { | ||||
|             finish(plot, player, true); | ||||
|             plot.removeRunning(); | ||||
|         } else { | ||||
|   | ||||
| @@ -35,9 +35,6 @@ import com.plotsquared.core.util.query.PlotQuery; | ||||
| import com.plotsquared.core.util.query.SortingStrategy; | ||||
| import com.plotsquared.core.util.task.RunnableVal2; | ||||
| import com.plotsquared.core.util.task.RunnableVal3; | ||||
| import jdk.jfr.Category; | ||||
| import jdk.jfr.Event; | ||||
| import jdk.jfr.Label; | ||||
| import net.kyori.adventure.text.minimessage.Template; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| @@ -62,24 +59,13 @@ public class HomeCommand extends Command { | ||||
|         this.plotAreaManager = plotAreaManager; | ||||
|     } | ||||
|  | ||||
|     @Label("Home Query") | ||||
|     @Category("PlotSquared") | ||||
|     static class HomeQueryEvent extends Event { | ||||
|         @Label("Result Size") | ||||
|         public int size; | ||||
|     } | ||||
|  | ||||
|     private void home( | ||||
|             final @NonNull PlotPlayer<?> player, | ||||
|             final @NonNull PlotQuery query, final int page, | ||||
|             final RunnableVal3<Command, Runnable, Runnable> confirm, | ||||
|             final RunnableVal2<Command, CommandResult> whenDone | ||||
|     ) { | ||||
|         final HomeQueryEvent event = new HomeQueryEvent(); | ||||
|         event.begin(); | ||||
|         List<Plot> plots = query.asList(); | ||||
|         event.size = plots.size(); | ||||
|         event.commit(); | ||||
|         if (plots.isEmpty()) { | ||||
|             player.sendMessage(TranslatableCaption.of("invalid.found_no_plots")); | ||||
|             return; | ||||
|   | ||||
| @@ -30,6 +30,7 @@ import com.plotsquared.core.permissions.Permission; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.PriceFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag; | ||||
| @@ -239,7 +240,7 @@ public class ListCmd extends SubCommand { | ||||
|                     ); | ||||
|                     return false; | ||||
|                 } | ||||
|                 if (PlotSquared.platform().expireManager() == null) { | ||||
|                 if (ExpireManager.IMP == null) { | ||||
|                     plotConsumer.accept(PlotQuery.newQuery().noPlots()); | ||||
|                 } else { | ||||
|                     plotConsumer.accept(PlotQuery.newQuery().expiredPlots()); | ||||
|   | ||||
| @@ -282,28 +282,7 @@ public class Merge extends SubCommand { | ||||
|                 run.run(); | ||||
|             } | ||||
|         } | ||||
|         if (force || !isOnline) { | ||||
|             if (force || Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_MERGE_OTHER_OFFLINE)) { | ||||
|                 if (plot.getPlotModificationManager().autoMerge(direction, maxSize - size, uuids.iterator().next(), player, terrain)) { | ||||
|                     if (this.econHandler.isEnabled(plotArea) && price > 0d) { | ||||
|                         if (!force && this.econHandler.getMoney(player) < price) { | ||||
|                             player.sendMessage( | ||||
|                                     TranslatableCaption.of("economy.cannot_afford_merge"), | ||||
|                                     Template.of("money", this.econHandler.format(price)) | ||||
|                             ); | ||||
|                             return false; | ||||
|                         } | ||||
|                         this.econHandler.withdrawMoney(player, price); | ||||
|                         player.sendMessage( | ||||
|                                 TranslatableCaption.of("economy.removed_balance"), | ||||
|                                 Template.of("money", this.econHandler.format(price)) | ||||
|                         ); | ||||
|                     } | ||||
|                     player.sendMessage(TranslatableCaption.of("merge.success_merge")); | ||||
|                     eventDispatcher.callPostMerge(player, plot); | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|         if (!force && !isOnline) { | ||||
|             player.sendMessage(TranslatableCaption.of("merge.no_available_automerge")); | ||||
|             return false; | ||||
|         } | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.queue.GlobalBlockQueue; | ||||
| import com.plotsquared.core.queue.QueueCoordinator; | ||||
| @@ -91,8 +92,8 @@ public class Trim extends SubCommand { | ||||
|         } | ||||
|         TranslatableCaption.of("trim.trim_starting"); | ||||
|         final List<Plot> plots = PlotQuery.newQuery().inWorld(world).asList(); | ||||
|         if (PlotSquared.platform().expireManager() != null) { | ||||
|             plots.removeAll(PlotSquared.platform().expireManager().getPendingExpired()); | ||||
|         if (ExpireManager.IMP != null) { | ||||
|             plots.removeAll(ExpireManager.IMP.getPendingExpired()); | ||||
|         } | ||||
|         result.value1 = new HashSet<>(PlotSquared.platform().worldUtil().getChunkChunks(world)); | ||||
|         result.value2 = new HashSet<>(); | ||||
|   | ||||
| @@ -21,15 +21,16 @@ package com.plotsquared.core.configuration.caption; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.event.ClickEvent; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.EnumSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| final class ClickStripTransform implements ComponentTransform { | ||||
|  | ||||
|     private final Set<ClickEvent.@NonNull Action> actionsToStrip; | ||||
|     private final Set<ClickEvent.@NotNull Action> actionsToStrip; | ||||
|  | ||||
|     public ClickStripTransform(final Set<ClickEvent.@NonNull Action> actionsToStrip) { | ||||
|     public ClickStripTransform(final Set<ClickEvent.@NotNull Action> actionsToStrip) { | ||||
|         this.actionsToStrip = EnumSet.copyOf(actionsToStrip); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -53,10 +53,7 @@ final class ClassLoaderCaptionProvider implements DefaultCaptionProvider { | ||||
|         try { | ||||
|             final InputStream stream = this.classLoader.getResourceAsStream(url); | ||||
|             if (stream == null) { | ||||
|                 LOGGER.info("No resource for locale '{}' found in the plugin file." + | ||||
|                                 "Please ensure you have placed the latest version of the file messages_{}.json in the 'lang' folder." + | ||||
|                                 "You may be able to find completed translations at https://intellectualsites.crowdin.com/plotsquared", | ||||
|                         locale, locale); | ||||
|                 LOGGER.warn("No resource for locale '{}' found", locale); | ||||
|                 return null; | ||||
|             } | ||||
|             try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { | ||||
|   | ||||
| @@ -174,9 +174,8 @@ public class HybridPlotManager extends ClassicPlotManager { | ||||
|                     for (int y = 0; y < blocks.length; y++) { | ||||
|                         if (blocks[y] != null) { | ||||
|                             queue.setBlock(x, minY + y, z, blocks[y]); | ||||
|                         } else if (!isRoad) { | ||||
|                         } else { | ||||
|                             // 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 | ||||
|                             queue.setBlock(x, minY + y, z, airBlock); | ||||
|                         } | ||||
|                     } | ||||
|   | ||||
| @@ -21,6 +21,7 @@ package com.plotsquared.core.generator; | ||||
| import com.google.inject.Inject; | ||||
| import com.google.inject.assistedinject.Assisted; | ||||
| import com.intellectualsites.annotations.DoNotUse; | ||||
| import com.intellectualsites.annotations.NotPublic; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.ConfigurationSection; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| @@ -74,9 +75,6 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|     public short PATH_WIDTH_UPPER; | ||||
|     public HashMap<Integer, BaseBlock[]> G_SCH; | ||||
|     public HashMap<Integer, BiomeType> G_SCH_B; | ||||
|     /** | ||||
|      * The Y level at which schematic generation will start, lowest of either road or plot schematic generation. | ||||
|      */ | ||||
|     public int SCHEM_Y; | ||||
|     private Location SIGN_LOCATION; | ||||
|     private File root = null; | ||||
| @@ -93,10 +91,10 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|     @Inject | ||||
|     public HybridPlotWorld( | ||||
|             @Assisted("world") final String worldName, | ||||
|             @javax.annotation.Nullable @Assisted("id") final String id, | ||||
|             @Nullable @Assisted("id") final String id, | ||||
|             @Assisted final @NonNull IndependentPlotGenerator generator, | ||||
|             @javax.annotation.Nullable @Assisted("min") final PlotId min, | ||||
|             @javax.annotation.Nullable @Assisted("max") final PlotId max, | ||||
|             @Nullable @Assisted("min") final PlotId min, | ||||
|             @Nullable @Assisted("max") final PlotId max, | ||||
|             @WorldConfig final @NonNull YamlConfiguration worldConfiguration, | ||||
|             final @NonNull GlobalBlockQueue blockQueue | ||||
|     ) { | ||||
| @@ -269,67 +267,34 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|         int oddshift = (this.ROAD_WIDTH & 1); | ||||
|  | ||||
|         SCHEM_Y = schematicStartHeight(); | ||||
|  | ||||
|         // plotY and roadY are important to allow plot and/or road schematic "overflow" into each other 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. | ||||
|         int plotY = PLOT_HEIGHT - SCHEM_Y; | ||||
|         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. | ||||
|         int roadY = minRoadWall - SCHEM_Y; | ||||
|  | ||||
|         int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1; | ||||
|  | ||||
|         int maxSchematicHeight = 0; | ||||
|         int plotSchemHeight = 0; | ||||
|         int worldHeight = getMaxGenHeight() - getMinGenHeight() + 1; | ||||
|  | ||||
|         // SCHEM_Y should be normalised to the plot "start" height | ||||
|         if (schematic3 != null) { | ||||
|             plotSchemHeight = maxSchematicHeight = schematic3.getClipboard().getDimensions().getY(); | ||||
|             if (maxSchematicHeight == worldGenHeight) { | ||||
|                 SCHEM_Y = getMinGenHeight(); | ||||
|                 plotY = 0; | ||||
|             if (schematic3.getClipboard().getDimensions().getY() == worldHeight) { | ||||
|                 SCHEM_Y = plotY = 0; | ||||
|             } else if (!Settings.Schematics.PASTE_ON_TOP) { | ||||
|                 SCHEM_Y = getMinBuildHeight(); | ||||
|                 plotY = 0; | ||||
|                 SCHEM_Y = plotY = getMinBuildHeight() - getMinGenHeight(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         int roadSchemHeight; | ||||
|  | ||||
|         if (schematic1 != null) { | ||||
|             roadSchemHeight = Math.max( | ||||
|                     schematic1.getClipboard().getDimensions().getY(), | ||||
|                     schematic2.getClipboard().getDimensions().getY() | ||||
|             ); | ||||
|             maxSchematicHeight = Math.max(roadSchemHeight, maxSchematicHeight); | ||||
|             if (maxSchematicHeight == worldGenHeight) { | ||||
|                 SCHEM_Y = getMinGenHeight(); | ||||
|                 roadY = 0; // Road is the lowest schematic | ||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldGenHeight) { | ||||
|                     // Road is the lowest schematic. Normalize plotY to it. | ||||
|                     if (Settings.Schematics.PASTE_ON_TOP) { | ||||
|                         plotY = PLOT_HEIGHT - getMinGenHeight(); | ||||
|                     } else { | ||||
|                         plotY = getMinBuildHeight() - getMinGenHeight(); | ||||
|                     } | ||||
|             if (schematic1.getClipboard().getDimensions().getY() == worldHeight) { | ||||
|                 SCHEM_Y = roadY = getMinGenHeight(); | ||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight | ||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { | ||||
|                     plotY = PLOT_HEIGHT; | ||||
|                 } | ||||
|             } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { | ||||
|                 if (SCHEM_Y == getMinGenHeight()) { // Only possible if plot schematic is enabled | ||||
|                     // Plot is still the lowest schematic, normalize roadY to it | ||||
|                     roadY = getMinBuildHeight() - getMinGenHeight(); | ||||
|                 } else if (schematic3 != null) { | ||||
|                     SCHEM_Y = getMinBuildHeight(); | ||||
|                     roadY = 0;// Road is the lowest schematic | ||||
|                     if (Settings.Schematics.PASTE_ON_TOP) { | ||||
|                         // Road is the lowest schematic. Normalize plotY to it. | ||||
|                         plotY = PLOT_HEIGHT - getMinBuildHeight(); | ||||
|                     } | ||||
|                     maxSchematicHeight = Math.max(maxSchematicHeight, plotY + plotSchemHeight); | ||||
|                 SCHEM_Y = roadY = getMinBuildHeight(); | ||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight | ||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { | ||||
|                     plotY = PLOT_HEIGHT; | ||||
|                 } | ||||
|             } else { | ||||
|                 roadY = minRoadWall - SCHEM_Y; | ||||
|                 maxSchematicHeight = Math.max(maxSchematicHeight, roadY + roadSchemHeight); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -366,15 +331,17 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|                                 y + min.getBlockY(), | ||||
|                                 z + min.getBlockZ() | ||||
|                         )); | ||||
|                         schem3PopulationNeeded |= id.hasNbtData(); | ||||
|                         addOverlayBlock( | ||||
|                                 (short) (x + shift + oddshift + centerShiftX), | ||||
|                                 (short) (y + plotY), | ||||
|                                 (short) (z + shift + oddshift + centerShiftZ), | ||||
|                                 id, | ||||
|                                 false, | ||||
|                                 maxSchematicHeight | ||||
|                         ); | ||||
|                         if (!id.getBlockType().getMaterial().isAir()) { | ||||
|                             schem3PopulationNeeded |= id.hasNbtData(); | ||||
|                             addOverlayBlock( | ||||
|                                     (short) (x + shift + oddshift + centerShiftX), | ||||
|                                     (short) (y + plotY), | ||||
|                                     (short) (z + shift + oddshift + centerShiftZ), | ||||
|                                     id, | ||||
|                                     false, | ||||
|                                     h3 | ||||
|                             ); | ||||
|                         } | ||||
|                     } | ||||
|                     if (blockArrayClipboard3.hasBiomes()) { | ||||
|                         BiomeType biome = blockArrayClipboard3.getBiome(BlockVector2.at( | ||||
| @@ -424,23 +391,18 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|                             y + min.getBlockY(), | ||||
|                             z + min.getBlockZ() | ||||
|                     )); | ||||
|                     schem1PopulationNeeded |= id.hasNbtData(); | ||||
|                     addOverlayBlock( | ||||
|                             (short) (x - shift), | ||||
|                             (short) (y + roadY), | ||||
|                             (short) (z + shift + oddshift), | ||||
|                             id, | ||||
|                             false, | ||||
|                             maxSchematicHeight | ||||
|                     ); | ||||
|                     addOverlayBlock( | ||||
|                             (short) (z + shift + oddshift), | ||||
|                             (short) (y + roadY), | ||||
|                             (short) (shift - x + (oddshift - 1)), | ||||
|                             id, | ||||
|                             true, | ||||
|                             maxSchematicHeight | ||||
|                     ); | ||||
|                     if (!id.getBlockType().getMaterial().isAir()) { | ||||
|                         schem1PopulationNeeded |= id.hasNbtData(); | ||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z + shift + oddshift), id, false, h1); | ||||
|                         addOverlayBlock( | ||||
|                                 (short) (z + shift + oddshift), | ||||
|                                 (short) (y + roadY), | ||||
|                                 (short) (shift - x + (oddshift - 1)), | ||||
|                                 id, | ||||
|                                 true, | ||||
|                                 h1 | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|                 if (blockArrayClipboard1.hasBiomes()) { | ||||
|                     BiomeType biome = blockArrayClipboard1.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||
| @@ -468,15 +430,10 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|                             y + min.getBlockY(), | ||||
|                             z + min.getBlockZ() | ||||
|                     )); | ||||
|                     schem2PopulationNeeded |= id.hasNbtData(); | ||||
|                     addOverlayBlock( | ||||
|                             (short) (x - shift), | ||||
|                             (short) (y + roadY), | ||||
|                             (short) (z - shift), | ||||
|                             id, | ||||
|                             false, | ||||
|                             maxSchematicHeight | ||||
|                     ); | ||||
|                     if (!id.getBlockType().getMaterial().isAir()) { | ||||
|                         schem2PopulationNeeded |= id.hasNbtData(); | ||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z - shift), id, false, h2); | ||||
|                     } | ||||
|                 } | ||||
|                 if (blockArrayClipboard2.hasBiomes()) { | ||||
|                     BiomeType biome = blockArrayClipboard2.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||
| @@ -486,10 +443,6 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method should not be available for public API usage and will be made private. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.10.2") | ||||
|     public void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) { | ||||
|         if (z < 0) { | ||||
|             z += this.SIZE; | ||||
| @@ -509,22 +462,13 @@ public class HybridPlotWorld extends ClassicPlotWorld { | ||||
|         if (y >= height) { | ||||
|             if (y > lastOverlayHeightError) { | ||||
|                 lastOverlayHeightError = y; | ||||
|                 LOGGER.error( | ||||
|                         "Error adding overlay block in world {}. `y > height`. y={}, height={}", | ||||
|                         getWorldName(), | ||||
|                         y, | ||||
|                         height | ||||
|                 ); | ||||
|                 LOGGER.error(String.format("Error adding overlay block. `y > height`. y=%s, height=%s", y, height)); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         existing[y] = id; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @deprecated This method should not be available for public API usage and will be made private. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.10.2") | ||||
|     public void addOverlayBiome(short x, short z, BiomeType id) { | ||||
|         if (z < 0) { | ||||
|             z += this.SIZE; | ||||
|   | ||||
| @@ -234,52 +234,44 @@ public class HybridUtils { | ||||
|                         Set<BlockType> types = new HashSet<>(); | ||||
|                         for (int yIndex = 0; yIndex < height; yIndex++) { | ||||
|                             BlockState old = oldBlocks[yIndex][x][z]; // Nullable | ||||
|                             BlockState now = newBlocks[yIndex][x][z]; // Not null | ||||
|                             if (now == null) { | ||||
|                                 throw new NullPointerException(String.format( | ||||
|                                         "\"now\" block null attempting to perform plot analysis. Indexes: x=%d of %d, yIndex=%d" + | ||||
|                                                 " of %d, z=%d of %d", | ||||
|                                         x, | ||||
|                                         width, | ||||
|                                         yIndex, | ||||
|                                         height, | ||||
|                                         z, | ||||
|                                         length | ||||
|                                 )); | ||||
|                             } | ||||
|                             if (!now.equals(old) && !(old == null && now.getBlockType().equals(BlockTypes.AIR))) { | ||||
|                                 changes[i]++; | ||||
|                             } | ||||
|                             if (now.getBlockType().getMaterial().isAir()) { | ||||
|                                 air[i]++; | ||||
|                             } else { | ||||
|                                 // check vertices | ||||
|                                 // modifications_adjacent | ||||
|                                 if (x > 0 && z > 0 && yIndex > 0 && x < width - 1 && z < length - 1 && yIndex < (height - 1)) { | ||||
|                                     if (newBlocks[yIndex - 1][x][z].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                                     if (newBlocks[yIndex][x - 1][z].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                                     if (newBlocks[yIndex][x][z - 1].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                                     if (newBlocks[yIndex + 1][x][z].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                                     if (newBlocks[yIndex][x + 1][z].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                                     if (newBlocks[yIndex][x][z + 1].getBlockType().getMaterial().isAir()) { | ||||
|                                         faces[i]++; | ||||
|                                     } | ||||
|                             try { | ||||
|                                 BlockState now = newBlocks[yIndex][x][z]; // Not null | ||||
|                                 if (!now.equals(old) && !(old == null && now.getBlockType().equals(BlockTypes.AIR))) { | ||||
|                                     changes[i]++; | ||||
|                                 } | ||||
|                                 if (now.getBlockType().getMaterial().isAir()) { | ||||
|                                     air[i]++; | ||||
|                                 } else { | ||||
|                                     // check vertices | ||||
|                                     // modifications_adjacent | ||||
|                                     if (x > 0 && z > 0 && yIndex > 0 && x < width - 1 && z < length - 1 && yIndex < (height - 1)) { | ||||
|                                         if (newBlocks[yIndex - 1][x][z].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                         if (newBlocks[yIndex][x - 1][z].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                         if (newBlocks[yIndex][x][z - 1].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                         if (newBlocks[yIndex + 1][x][z].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                         if (newBlocks[yIndex][x + 1][z].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                         if (newBlocks[yIndex][x][z + 1].getBlockType().getMaterial().isAir()) { | ||||
|                                             faces[i]++; | ||||
|                                         } | ||||
|                                     } | ||||
|  | ||||
|                                 if (!now.equals(now.getBlockType().getDefaultState())) { | ||||
|                                     data[i]++; | ||||
|                                     if (!now.equals(now.getBlockType().getDefaultState())) { | ||||
|                                         data[i]++; | ||||
|                                     } | ||||
|                                     types.add(now.getBlockType()); | ||||
|                                 } | ||||
|                                 types.add(now.getBlockType()); | ||||
|                             } catch (NullPointerException e) { | ||||
|                                 e.printStackTrace(); | ||||
|                             } | ||||
|                         } | ||||
|                         variety[i] = types.size(); | ||||
|   | ||||
| @@ -36,6 +36,7 @@ import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.PlotTitle; | ||||
| import com.plotsquared.core.plot.PlotWeather; | ||||
| import com.plotsquared.core.plot.comment.CommentManager; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.flag.GlobalFlagContainer; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.DenyExitFlag; | ||||
| @@ -162,8 +163,8 @@ public class PlotListener { | ||||
|             if ((last != null) && !last.getId().equals(plot.getId())) { | ||||
|                 plotExit(player, last); | ||||
|             } | ||||
|             if (PlotSquared.platform().expireManager() != null) { | ||||
|                 PlotSquared.platform().expireManager().handleEntry(player, plot); | ||||
|             if (ExpireManager.IMP != null) { | ||||
|                 ExpireManager.IMP.handleEntry(player, plot); | ||||
|             } | ||||
|             lastPlot.set(plot); | ||||
|         } | ||||
|   | ||||
| @@ -162,7 +162,6 @@ public enum Permission { | ||||
|     PERMISSION_LIST_AREA("plots.list.area"), | ||||
|     PERMISSION_ADMIN_COMMAND_LOAD("plots.admin.command.load"), | ||||
|     PERMISSION_ADMIN_COMMAND_MERGE("plots.admin.command.merge"), | ||||
|     PERMISSION_ADMIN_COMMAND_MERGE_OTHER_OFFLINE("plots.admin.command.merge.other.offline"), | ||||
|     PERMISSION_ADMIN_COMMAND_SET_OWNER("plots.admin.command.setowner"), | ||||
|     PERMISSION_COMMENT("plots.comment"), | ||||
|     PERMISSION_INBOX("plots.inbox"), | ||||
|   | ||||
| @@ -42,6 +42,7 @@ import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.PlotCluster; | ||||
| import com.plotsquared.core.plot.PlotId; | ||||
| import com.plotsquared.core.plot.PlotWeather; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import com.plotsquared.core.plot.world.SinglePlotArea; | ||||
| @@ -617,8 +618,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | ||||
|                 LOGGER.info("Plot {} was deleted + cleared due to {} getting banned", owned.getId(), getName()); | ||||
|             } | ||||
|         } | ||||
|         if (PlotSquared.platform().expireManager() != null) { | ||||
|             PlotSquared.platform().expireManager().storeDate(getUUID(), System.currentTimeMillis()); | ||||
|         if (ExpireManager.IMP != null) { | ||||
|             ExpireManager.IMP.storeDate(getUUID(), System.currentTimeMillis()); | ||||
|         } | ||||
|         PlotSquared.platform().playerManager().removePlayer(this); | ||||
|         PlotSquared.platform().unregister(this); | ||||
|   | ||||
| @@ -40,6 +40,7 @@ import com.plotsquared.core.location.Location; | ||||
| import com.plotsquared.core.permissions.Permission; | ||||
| import com.plotsquared.core.player.ConsolePlayer; | ||||
| import com.plotsquared.core.player.PlotPlayer; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.expiration.PlotAnalysis; | ||||
| import com.plotsquared.core.plot.flag.FlagContainer; | ||||
| import com.plotsquared.core.plot.flag.GlobalFlagContainer; | ||||
| @@ -68,9 +69,6 @@ import com.plotsquared.core.util.task.TaskTime; | ||||
| import com.sk89q.worldedit.math.BlockVector3; | ||||
| import com.sk89q.worldedit.regions.CuboidRegion; | ||||
| import com.sk89q.worldedit.world.biome.BiomeType; | ||||
| import jdk.jfr.Category; | ||||
| import jdk.jfr.Event; | ||||
| import jdk.jfr.Label; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.TextComponent; | ||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | ||||
| @@ -125,6 +123,9 @@ public class Plot { | ||||
|     private static final MiniMessage MINI_MESSAGE = MiniMessage.builder().build(); | ||||
|     private static final Cleaner CLEANER = Cleaner.create(); | ||||
|  | ||||
|     static Set<Plot> connected_cache; | ||||
|     static Set<CuboidRegion> regions_cache; | ||||
|  | ||||
|     static { | ||||
|         FLAG_DECIMAL_FORMAT.setMaximumFractionDigits(340); | ||||
|     } | ||||
| @@ -207,8 +208,6 @@ public class Plot { | ||||
|      */ | ||||
|     private Plot origin; | ||||
|  | ||||
|     private Set<Plot> connectedCache; | ||||
|  | ||||
|     /** | ||||
|      * Constructor for a new plot. | ||||
|      * (Only changes after plot.create() will be properly set in the database) | ||||
| @@ -578,14 +577,7 @@ public class Plot { | ||||
|             return false; | ||||
|         } | ||||
|         final Set<Plot> connected = getConnectedPlots(); | ||||
|         for (Plot current : connected) { | ||||
|             // can skip ServerPlotFlag check in getOwner() | ||||
|             // as flags are synchronized between plots | ||||
|             if (uuid.equals(current.getOwnerAbs())) { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|         return connected.stream().anyMatch(current -> uuid.equals(current.getOwner())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -1113,8 +1105,8 @@ public class Plot { | ||||
|      * @return A boolean indicating whether or not the operation succeeded | ||||
|      */ | ||||
|     public <V> boolean setFlag(final @NonNull PlotFlag<V, ?> flag) { | ||||
|         if (flag instanceof KeepFlag && PlotSquared.platform().expireManager() != null) { | ||||
|             PlotSquared.platform().expireManager().updateExpired(this); | ||||
|         if (flag instanceof KeepFlag && ExpireManager.IMP != null) { | ||||
|             ExpireManager.IMP.updateExpired(this); | ||||
|         } | ||||
|         for (final Plot plot : this.getConnectedPlots()) { | ||||
|             plot.getFlagContainer().addFlag(flag); | ||||
| @@ -1303,7 +1295,6 @@ public class Plot { | ||||
|             DBFunc.delete(current); | ||||
|             current.setOwnerAbs(null); | ||||
|             current.settings = null; | ||||
|             current.clearCache(); | ||||
|             for (final PlotPlayer<?> pp : players) { | ||||
|                 this.plotListener.plotEntry(pp, current); | ||||
|             } | ||||
| @@ -1874,7 +1865,6 @@ public class Plot { | ||||
|         this.area.removePlot(this.id); | ||||
|         this.id = plot.getId(); | ||||
|         this.area.addPlotAbs(this); | ||||
|         clearCache(); | ||||
|         DBFunc.movePlot(this, plot); | ||||
|         TaskManager.runTaskLater(whenDone, TaskTime.ticks(1L)); | ||||
|         return true; | ||||
| @@ -2139,16 +2129,17 @@ public class Plot { | ||||
|                     this.origin.origin = base; | ||||
|                     other.origin = base; | ||||
|                     this.origin = base; | ||||
|                     this.connectedCache = null; | ||||
|                     connected_cache = null; | ||||
|                 } | ||||
|             } else { | ||||
|                 if (this.origin != null) { | ||||
|                     this.origin.origin = null; | ||||
|                     this.origin = null; | ||||
|                 } | ||||
|                 this.connectedCache = null; | ||||
|                 connected_cache = null; | ||||
|             } | ||||
|             DBFunc.setMerged(this, this.getSettings().getMerged()); | ||||
|             regions_cache = null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -2183,7 +2174,8 @@ public class Plot { | ||||
|     } | ||||
|  | ||||
|     public void clearCache() { | ||||
|         this.connectedCache = null; | ||||
|         connected_cache = null; | ||||
|         regions_cache = null; | ||||
|         if (this.origin != null) { | ||||
|             this.origin.origin = null; | ||||
|             this.origin = null; | ||||
| @@ -2297,25 +2289,6 @@ public class Plot { | ||||
|         return this.area.getPlotAbs(this.id.getRelative(direction)); | ||||
|     } | ||||
|  | ||||
|     @Label("Connected Plots Search") | ||||
|     @Category("PlotSquared") | ||||
|     static class ConnectedPlotsEvent extends Event { | ||||
|  | ||||
|         public ConnectedPlotsEvent(final int x, final int y) { | ||||
|             this.x = x; | ||||
|             this.y = y; | ||||
|         } | ||||
|  | ||||
|         @Label("Plot Id X") | ||||
|         public int x; | ||||
|         @Label("Plot Id Y") | ||||
|         public int y; | ||||
|         @Label("Merged  Plots Count") | ||||
|         public int mergedSize; | ||||
|         @Label("Connected Plots Cache Miss") | ||||
|         public boolean cacheMiss; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets a set of plots connected (and including) this plot<br> | ||||
|      * - This result is cached globally | ||||
| @@ -2323,21 +2296,16 @@ public class Plot { | ||||
|      * @return a Set of Plots connected to this Plot | ||||
|      */ | ||||
|     public Set<Plot> getConnectedPlots() { | ||||
|         ConnectedPlotsEvent event = new ConnectedPlotsEvent(this.id.getX(), this.id.getY()); | ||||
|         event.begin(); | ||||
|         if (this.settings == null) { | ||||
|             event.commit(); | ||||
|             return Collections.singleton(this); | ||||
|         } | ||||
|         if (!this.isMerged()) { | ||||
|             event.commit(); | ||||
|             return Collections.singleton(this); | ||||
|         } | ||||
|         if (this.connectedCache != null && this.connectedCache.contains(this)) { | ||||
|             event.mergedSize = this.connectedCache.size(); | ||||
|             event.commit(); | ||||
|             return this.connectedCache; | ||||
|         if (connected_cache != null && connected_cache.contains(this)) { | ||||
|             return connected_cache; | ||||
|         } | ||||
|         regions_cache = null; | ||||
|  | ||||
|         HashSet<Plot> tmpSet = new HashSet<>(); | ||||
|         tmpSet.add(this); | ||||
| @@ -2442,10 +2410,7 @@ public class Plot { | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         this.connectedCache = tmpSet; | ||||
|         event.mergedSize = tmpSet.size(); | ||||
|         event.cacheMiss = true; | ||||
|         event.commit(); | ||||
|         connected_cache = tmpSet; | ||||
|         return tmpSet; | ||||
|     } | ||||
|  | ||||
| @@ -2457,15 +2422,19 @@ public class Plot { | ||||
|      * @return all regions within the plot | ||||
|      */ | ||||
|     public @NonNull Set<CuboidRegion> getRegions() { | ||||
|         if (regions_cache != null && connected_cache != null && connected_cache.contains(this)) { | ||||
|             return regions_cache; | ||||
|         } | ||||
|         if (!this.isMerged()) { | ||||
|             Location pos1 = this.getBottomAbs().withY(getArea().getMinBuildHeight()); | ||||
|             Location pos2 = this.getTopAbs().withY(getArea().getMaxBuildHeight()); | ||||
|             this.connectedCache = Sets.newHashSet(this); | ||||
|             connected_cache = Sets.newHashSet(this); | ||||
|             CuboidRegion rg = new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()); | ||||
|             return Collections.singleton(rg); | ||||
|             regions_cache = Collections.singleton(rg); | ||||
|             return regions_cache; | ||||
|         } | ||||
|         Set<Plot> plots = this.getConnectedPlots(); | ||||
|         Set<CuboidRegion> regions = new HashSet<>(); | ||||
|         Set<CuboidRegion> regions = regions_cache = new HashSet<>(); | ||||
|         Set<PlotId> visited = new HashSet<>(); | ||||
|         for (Plot current : plots) { | ||||
|             if (visited.contains(current.getId())) { | ||||
| @@ -2862,11 +2831,11 @@ public class Plot { | ||||
|                     Component members = PlayerManager.getPlayerList(this.getMembers(), player); | ||||
|                     Component denied = PlayerManager.getPlayerList(this.getDenied(), player); | ||||
|                     String seen; | ||||
|                     if (Settings.Enabled_Components.PLOT_EXPIRY && PlotSquared.platform().expireManager() != null) { | ||||
|                     if (Settings.Enabled_Components.PLOT_EXPIRY && ExpireManager.IMP != null) { | ||||
|                         if (this.isOnline()) { | ||||
|                             seen = TranslatableCaption.of("info.now").getComponent(player); | ||||
|                         } else { | ||||
|                             int time = (int) (PlotSquared.platform().expireManager().getAge(this, false) / 1000); | ||||
|                             int time = (int) (ExpireManager.IMP.getAge(this, false) / 1000); | ||||
|                             if (time != 0) { | ||||
|                                 seen = TimeUtil.secToTime(time); | ||||
|                             } else { | ||||
|   | ||||
| @@ -112,7 +112,7 @@ public final class PlotId { | ||||
|      * @return Plot ID copy | ||||
|      * @deprecated PlotId is immutable, copy is not required. | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.10.2") | ||||
|     @Deprecated(forRemoval = true, since = "TODO") | ||||
|     public @NonNull PlotId copy() { | ||||
|         return this; | ||||
|     } | ||||
|   | ||||
| @@ -263,7 +263,6 @@ public final class PlotModificationManager { | ||||
|                     return; | ||||
|                 } | ||||
|                 Plot current = queue.poll(); | ||||
|                 current.clearCache(); | ||||
|                 if (plot.getArea().getTerrain() != PlotAreaTerrainType.NONE) { | ||||
|                     try { | ||||
|                         PlotSquared.platform().regionManager().regenerateRegion( | ||||
| @@ -328,7 +327,6 @@ public final class PlotModificationManager { | ||||
|         ArrayList<PlotId> ids = new ArrayList<>(plots.size()); | ||||
|         for (Plot current : plots) { | ||||
|             current.setHome(null); | ||||
|             current.clearCache(); | ||||
|             ids.add(current.getId()); | ||||
|         } | ||||
|         this.plot.clearRatings(); | ||||
| @@ -480,7 +478,8 @@ public final class PlotModificationManager { | ||||
|                 this.plot.updateWorldBorder(); | ||||
|             } | ||||
|         } | ||||
|         this.plot.clearCache(); | ||||
|         Plot.connected_cache = null; | ||||
|         Plot.regions_cache = null; | ||||
|         this.plot.getTrusted().clear(); | ||||
|         this.plot.getMembers().clear(); | ||||
|         this.plot.getDenied().clear(); | ||||
| @@ -631,7 +630,6 @@ public final class PlotModificationManager { | ||||
|         if (queue.size() > 0) { | ||||
|             queue.enqueue(); | ||||
|         } | ||||
|         visited.forEach(Plot::clearCache); | ||||
|         return toReturn; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -18,8 +18,7 @@ | ||||
|  */ | ||||
| package com.plotsquared.core.plot; | ||||
|  | ||||
| import org.checkerframework.checker.nullness.qual.Nullable; | ||||
|  | ||||
| import javax.annotation.Nullable; | ||||
| import java.util.Objects; | ||||
|  | ||||
| public class PlotTitle { | ||||
|   | ||||
| @@ -18,8 +18,6 @@ | ||||
|  */ | ||||
| package com.plotsquared.core.plot.expiration; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| import com.plotsquared.core.PlotPlatform; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.caption.Caption; | ||||
| import com.plotsquared.core.configuration.caption.Templates; | ||||
| @@ -62,10 +60,6 @@ import java.util.concurrent.ConcurrentLinkedDeque; | ||||
|  | ||||
| public class ExpireManager { | ||||
|  | ||||
|     /** | ||||
|      * @deprecated Use {@link PlotPlatform#expireManager()} instead | ||||
|      */ | ||||
|     @Deprecated(forRemoval = true, since = "6.10.2") | ||||
|     public static ExpireManager IMP; | ||||
|     private final ConcurrentHashMap<UUID, Long> dates_cache; | ||||
|     private final ConcurrentHashMap<UUID, Long> account_age_cache; | ||||
| @@ -77,7 +71,6 @@ public class ExpireManager { | ||||
|      */ | ||||
|     private int running; | ||||
|  | ||||
|     @Inject | ||||
|     public ExpireManager(final @NonNull EventDispatcher eventDispatcher) { | ||||
|         this.tasks = new ArrayDeque<>(); | ||||
|         this.dates_cache = new ConcurrentHashMap<>(); | ||||
|   | ||||
| @@ -18,7 +18,6 @@ | ||||
|  */ | ||||
| package com.plotsquared.core.plot.expiration; | ||||
|  | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotArea; | ||||
| @@ -73,9 +72,8 @@ public class ExpiryTask { | ||||
|                         min = false; | ||||
|                         diff = plots.size() - settings.REQUIRED_PLOTS; | ||||
|                     } | ||||
|                     ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||
|                     List<Long> entireList = | ||||
|                             plots.stream().map(plot -> expireManager.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN)) | ||||
|                             plots.stream().map(plot -> ExpireManager.IMP.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN)) | ||||
|                                     .collect(Collectors.toList()); | ||||
|                     List<Long> top = new ArrayList<>(diff + 1); | ||||
|                     if (diff > 1000) { | ||||
|   | ||||
| @@ -116,7 +116,7 @@ public class BlockArrayCacheScopedQueueCoordinator extends ScopedQueueCoordinato | ||||
|         x += offsetX; | ||||
|         z += offsetZ; | ||||
|         if (x >= scopeMinX && x < scopeMaxX && y >= minY && y <= maxY && z >= scopeMinZ && z < scopeMaxZ) { | ||||
|             blockStates[y - minY][x - scopeMinX][z - scopeMinZ] = id.toImmutableState(); | ||||
|             blockStates[y - minY][x][z] = id.toImmutableState(); | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|   | ||||
| @@ -20,7 +20,6 @@ package com.plotsquared.core.util; | ||||
|  | ||||
| import com.google.common.eventbus.EventBus; | ||||
| import com.intellectualsites.annotations.DoNotUse; | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.configuration.Settings; | ||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||
| import com.plotsquared.core.events.PlayerAutoPlotEvent; | ||||
| @@ -60,6 +59,7 @@ import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.PlotId; | ||||
| import com.plotsquared.core.plot.Rating; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag; | ||||
| import com.plotsquared.core.plot.flag.implementations.MiscPlaceFlag; | ||||
| @@ -300,8 +300,8 @@ public class EventDispatcher { | ||||
|         if (player == null) { | ||||
|             return; //possible future warning message to figure out where we are retrieving null | ||||
|         } | ||||
|         if (PlotSquared.platform().expireManager() != null) { | ||||
|             PlotSquared.platform().expireManager().handleJoin(player); | ||||
|         if (ExpireManager.IMP != null) { | ||||
|             ExpireManager.IMP.handleJoin(player); | ||||
|         } | ||||
|         if (this.worldEdit != null) { | ||||
|             if (player.getAttribute("worldedit")) { | ||||
|   | ||||
| @@ -1,53 +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; | ||||
|  | ||||
| import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.flag.PlotFlag; | ||||
|  | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * Util class for generic methods relating to plot flags. | ||||
|  * | ||||
|  * @since 6.10.4 | ||||
|  */ | ||||
| public final class PlotFlagUtil { | ||||
|  | ||||
|     private PlotFlagUtil() { | ||||
|         //No-op | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Check if the value of a {@link PlotFlag} matches the given value. If | ||||
|      * road flags are disabled for the given plot area, returns false. | ||||
|      * | ||||
|      * @param flagClass boolean flag to get value of | ||||
|      * @param value     boolean value to check flag value against | ||||
|      * @param <T>       The flag value type | ||||
|      * @return true if road flag value matches with road flags enabled | ||||
|      * @since 6.10.4 | ||||
|      */ | ||||
|     public static <T> boolean isAreaRoadFlagsAndFlagEquals( | ||||
|             PlotArea area, final Class<? extends PlotFlag<T, ?>> flagClass, T value | ||||
|     ) { | ||||
|         return area.isRoadFlags() && Objects.equals(area.getRoadFlag(flagClass), value); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -18,8 +18,8 @@ | ||||
|  */ | ||||
| package com.plotsquared.core.util.query; | ||||
|  | ||||
| import com.plotsquared.core.PlotSquared; | ||||
| import com.plotsquared.core.plot.Plot; | ||||
| import com.plotsquared.core.plot.expiration.ExpireManager; | ||||
|  | ||||
| import java.util.Collection; | ||||
|  | ||||
| @@ -27,7 +27,7 @@ class ExpiredPlotProvider implements PlotProvider { | ||||
|  | ||||
|     @Override | ||||
|     public Collection<Plot> getPlots() { | ||||
|         return PlotSquared.platform().expireManager().getPendingExpired(); | ||||
|         return ExpireManager.IMP.getPendingExpired(); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -23,9 +23,9 @@ import com.plotsquared.core.plot.PlotArea; | ||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | ||||
| import org.checkerframework.checker.nullness.qual.NonNull; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| class GlobalPlotProvider implements PlotProvider { | ||||
|  | ||||
| @@ -37,7 +37,7 @@ class GlobalPlotProvider implements PlotProvider { | ||||
|  | ||||
|     @Override | ||||
|     public Collection<Plot> getPlots() { | ||||
|         final List<Plot> plots = new ArrayList<>(); | ||||
|         final Set<Plot> plots = new HashSet<>(); | ||||
|         for (final PlotArea plotArea : this.plotAreaManager.getAllPlotAreas()) { | ||||
|             plots.addAll(plotArea.getPlots()); | ||||
|         } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ plugins { | ||||
| } | ||||
|  | ||||
| group = "com.plotsquared" | ||||
| version = "6.10.6-SNAPSHOT" | ||||
| version = "6.10.2-SNAPSHOT" | ||||
|  | ||||
| subprojects { | ||||
|     group = rootProject.group | ||||
| @@ -65,7 +65,7 @@ subprojects { | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.21")) | ||||
|         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.16")) | ||||
|     } | ||||
|  | ||||
|     dependencies { | ||||
|   | ||||
| @@ -1,10 +1,11 @@ | ||||
| [versions] | ||||
| # Platform expectations | ||||
| paper = "1.18.1-R0.1-SNAPSHOT" | ||||
| guice = "5.1.0" | ||||
| spotbugs = "4.7.3" | ||||
| spotbugs = "4.7.2" | ||||
|  | ||||
| # Plugins | ||||
| worldedit = "7.2.13" | ||||
| worldedit = "7.2.12" | ||||
| placeholderapi = "2.11.2" | ||||
| luckperms = "5.4" | ||||
| essentialsx = "2.19.7" | ||||
| @@ -13,7 +14,7 @@ mvdwapi = "3.1.1" | ||||
| # Third party | ||||
| prtree = "2.0.0" | ||||
| aopalliance = "1.0" | ||||
| cloud-services = "1.8.0" | ||||
| cloud-services = "1.7.1" | ||||
| arkitektonika = "2.1.1" | ||||
| squirrelid = "0.3.1" | ||||
| http4j = "1.3" | ||||
| @@ -25,6 +26,9 @@ licenser = "0.6.1" | ||||
| nexus = "1.1.0" | ||||
|  | ||||
| [libraries] | ||||
| # Platform expectations | ||||
| paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" } | ||||
|  | ||||
| # Platform expectations | ||||
| guice = { group = "com.google.inject", name = "guice", version.ref = "guice" } | ||||
| guiceassistedinject = { group = "com.google.inject.extensions", name = "guice-assistedinject", version.ref = "guice" } | ||||
|   | ||||
							
								
								
									
										
											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,5 @@ | ||||
| distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip | ||||
| networkTimeout=10000 | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
|   | ||||
							
								
								
									
										12
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -55,7 +55,7 @@ | ||||
| #       Darwin, MinGW, and NonStop. | ||||
| # | ||||
| #   (3) This script is generated from the Groovy template | ||||
| #       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||
| #       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||
| #       within the Gradle project. | ||||
| # | ||||
| #       You can find Gradle at https://github.com/gradle/gradle/. | ||||
| @@ -80,11 +80,11 @@ do | ||||
|     esac | ||||
| done | ||||
|  | ||||
| # This is normally unused | ||||
| # shellcheck disable=SC2034 | ||||
| APP_BASE_NAME=${0##*/} | ||||
| APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | ||||
|  | ||||
| APP_NAME="Gradle" | ||||
| APP_BASE_NAME=${0##*/} | ||||
|  | ||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||||
| DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||
|  | ||||
| @@ -143,16 +143,12 @@ fi | ||||
| if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | ||||
|     case $MAX_FD in #( | ||||
|       max*) | ||||
|         # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC3045  | ||||
|         MAX_FD=$( ulimit -H -n ) || | ||||
|             warn "Could not query maximum file descriptor limit" | ||||
|     esac | ||||
|     case $MAX_FD in  #( | ||||
|       '' | soft) :;; #( | ||||
|       *) | ||||
|         # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. | ||||
|         # shellcheck disable=SC3045  | ||||
|         ulimit -n "$MAX_FD" || | ||||
|             warn "Could not set maximum file descriptor limit to $MAX_FD" | ||||
|     esac | ||||
|   | ||||
							
								
								
									
										1
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @@ -26,7 +26,6 @@ if "%OS%"=="Windows_NT" setlocal | ||||
|  | ||||
| set DIRNAME=%~dp0 | ||||
| if "%DIRNAME%"=="" set DIRNAME=. | ||||
| @rem This is normally unused | ||||
| set APP_BASE_NAME=%~n0 | ||||
| set APP_HOME=%DIRNAME% | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user