mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-30 00:53:44 +01:00 
			
		
		
		
	Compare commits
	
		
			34 Commits
		
	
	
		
			feature/v6
			...
			docs/plot-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 1646f2f426 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 3a8fae47a0 | ||
|   | 70cb1cd100 | ||
|   | 2067cc1670 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | e6338976dd | ||
|   | 90ebd5d5ed | ||
|   | c973ee8649 | ||
|   | c1543f034c | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 6baf339ecb | ||
|   | 11906ef1c9 | ||
|   | ee8902154a | ||
|   | b5bc1988e5 | ||
|   | 2147012beb | ||
|   | 52bb561689 | ||
|   | 25ce7a83f1 | ||
|   | 55c8a590e7 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 28bd993680 | ||
|   | 8330f37d8a | ||
|   | 985fae65b6 | ||
|   | db2d590e8e | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | c8d356783a | ||
|   | 4947450ff0 | ||
|   | de4e91ff62 | ||
|   | fe5e3d5f6d | ||
|   | b8b3098022 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 0ae8fc46b8 | ||
|   | e0762f63a8 | ||
|   | 9f3850000c | ||
|   | 76c6be9ba7 | ||
|   | 308a5aa781 | ||
|   | e244527538 | ||
|   | 11dd013333 | ||
|   | b740d5854c | ||
|   | d5445cfbef | 
| @@ -24,7 +24,7 @@ dependencies { | |||||||
|     implementation("org.bstats:bstats-bukkit") |     implementation("org.bstats:bstats-bukkit") | ||||||
|  |  | ||||||
|     // Paper |     // Paper | ||||||
|     compileOnly(libs.paper) |     compileOnly("io.papermc.paper:paper-api") | ||||||
|     implementation("io.papermc:paperlib") |     implementation("io.papermc:paperlib") | ||||||
|  |  | ||||||
|     // Plugins |     // Plugins | ||||||
|   | |||||||
| @@ -849,11 +849,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                             // managed elsewhere |                             // managed elsewhere | ||||||
|                             continue; |                             continue; | ||||||
|                         case "SHULKER": |                         case "SHULKER": | ||||||
|                             if (Settings.Enabled_Components.KILL_ROAD_MOBS) { |                             if (Settings.Enabled_Components.KILL_ROAD_MOBS && (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null)) { | ||||||
|                                 LivingEntity livingEntity = (LivingEntity) entity; |                                 LivingEntity livingEntity = (LivingEntity) entity; | ||||||
|                                 List<MetadataValue> meta = entity.getMetadata("shulkerPlot"); |                                 List<MetadataValue> meta = entity.getMetadata("shulkerPlot"); | ||||||
|                                 if (!meta.isEmpty()) { |                                 if (!meta.isEmpty()) { | ||||||
|                                     if (livingEntity.isLeashed()) { |                                     if (livingEntity.isLeashed() && !Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS) { | ||||||
|                                         continue; |                                         continue; | ||||||
|                                     } |                                     } | ||||||
|                                     List<MetadataValue> keep = entity.getMetadata("keep"); |                                     List<MetadataValue> keep = entity.getMetadata("keep"); | ||||||
| @@ -866,10 +866,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                         com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); |                                         com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); | ||||||
|                                         PlotArea area = pLoc.getPlotArea(); |                                         PlotArea area = pLoc.getPlotArea(); | ||||||
|                                         if (area != null) { |                                         if (area != null) { | ||||||
|                                             PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); |                                             Plot currentPlot = area.getPlotAbs(pLoc); | ||||||
|                                             if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot( |                                             if (currentPlot == null || !originalPlotId.equals(currentPlot.getId())) { | ||||||
|                                                             originalPlotId) |  | ||||||
|                                                     .equals(area.getPlot(currentPlotId)))) { |  | ||||||
|                                                 if (entity.hasMetadata("ps-tmp-teleport")) { |                                                 if (entity.hasMetadata("ps-tmp-teleport")) { | ||||||
|                                                     continue; |                                                     continue; | ||||||
|                                                 } |                                                 } | ||||||
| @@ -883,11 +881,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                     com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); |                                     com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation()); | ||||||
|                                     PlotArea area = pLoc.getPlotArea(); |                                     PlotArea area = pLoc.getPlotArea(); | ||||||
|                                     if (area != null) { |                                     if (area != null) { | ||||||
|                                         PlotId currentPlotId = area.getPlotAbs(pLoc).getId(); |                                         Plot currentPlot = area.getPlotAbs(pLoc); | ||||||
|                                         if (currentPlotId != null) { |                                         if (currentPlot != null) { | ||||||
|                                             entity.setMetadata( |                                             entity.setMetadata( | ||||||
|                                                     "shulkerPlot", |                                                     "shulkerPlot", | ||||||
|                                                     new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId) |                                                     new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlot.getId()) | ||||||
|                                             ); |                                             ); | ||||||
|                                         } |                                         } | ||||||
|                                     } |                                     } | ||||||
| @@ -973,7 +971,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                                 || !entity.hasMetadata("keep")) { |                                                 || !entity.hasMetadata("keep")) { | ||||||
|                                             Entity passenger = entity.getPassenger(); |                                             Entity passenger = entity.getPassenger(); | ||||||
|                                             if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS |                                             if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS | ||||||
|                                                     || !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) { |                                                     || !((passenger instanceof Player) || livingEntity.isLeashed())) | ||||||
|  |                                                     && (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null) | ||||||
|  |                                                     && entity.getMetadata("keep").isEmpty()) { | ||||||
|                                                 if (entity.hasMetadata("ps-tmp-teleport")) { |                                                 if (entity.hasMetadata("ps-tmp-teleport")) { | ||||||
|                                                     continue; |                                                     continue; | ||||||
|                                                 } |                                                 } | ||||||
| @@ -983,8 +983,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl | |||||||
|                                         } |                                         } | ||||||
|                                     } else { |                                     } else { | ||||||
|                                         Entity passenger = entity.getPassenger(); |                                         Entity passenger = entity.getPassenger(); | ||||||
|                                         if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS |                                         if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS || !(passenger instanceof Player)) | ||||||
|                                                 || !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) { |                                                 && (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS && entity.getCustomName() != null) | ||||||
|  |                                                 && entity.getMetadata("keep").isEmpty()) { | ||||||
|                                             if (entity.hasMetadata("ps-tmp-teleport")) { |                                             if (entity.hasMetadata("ps-tmp-teleport")) { | ||||||
|                                                 continue; |                                                 continue; | ||||||
|                                             } |                                             } | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ import com.plotsquared.core.plot.flag.types.BlockTypeWrapper; | |||||||
| import com.plotsquared.core.plot.flag.types.BooleanFlag; | import com.plotsquared.core.plot.flag.types.BooleanFlag; | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.util.Permissions; | 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.TaskManager; | ||||||
| import com.plotsquared.core.util.task.TaskTime; | import com.plotsquared.core.util.task.TaskTime; | ||||||
| import com.sk89q.worldedit.WorldEdit; | import com.sk89q.worldedit.WorldEdit; | ||||||
| @@ -166,7 +167,7 @@ public class BlockEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && !area.getRoadFlag(RedstoneFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) { | ||||||
|                 event.setNewCurrent(0); |                 event.setNewCurrent(0); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
| @@ -1084,7 +1085,10 @@ public class BlockEventListener implements Listener { | |||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (plot == null) { |             if (plot == null) { | ||||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) { |                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                         pp, | ||||||
|  |                         Permission.PERMISSION_ADMIN_BUILD_ROAD | ||||||
|  |                 )) { | ||||||
|                     pp.sendMessage( |                     pp.sendMessage( | ||||||
|                             TranslatableCaption.of("permission.no_permission_event"), |                             TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD)) |                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD)) | ||||||
| @@ -1092,7 +1096,10 @@ public class BlockEventListener implements Listener { | |||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                 } |                 } | ||||||
|             } else if (!plot.hasOwner()) { |             } else if (!plot.hasOwner()) { | ||||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) { |                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                         pp, | ||||||
|  |                         Permission.PERMISSION_ADMIN_BUILD_UNOWNED | ||||||
|  |                 )) { | ||||||
|                     pp.sendMessage( |                     pp.sendMessage( | ||||||
|                             TranslatableCaption.of("permission.no_permission_event"), |                             TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) |                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ import com.plotsquared.core.plot.Plot; | |||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; | import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; | ||||||
|  | import com.plotsquared.core.util.PlotFlagUtil; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| @@ -91,7 +92,8 @@ public class BlockEventListener117 implements Listener { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null || !plot.getFlag(MiscInteractFlag.class)) { |         if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag( | ||||||
|  |                 MiscInteractFlag.class)) { | ||||||
|             if (plotPlayer != null) { |             if (plotPlayer != null) { | ||||||
|                 if (plot != null) { |                 if (plot != null) { | ||||||
|                     if (!plot.isAdded(plotPlayer.getUUID())) { |                     if (!plot.isAdded(plotPlayer.getUUID())) { | ||||||
| @@ -104,6 +106,12 @@ public class BlockEventListener117 implements Listener { | |||||||
|             if (entity instanceof Item item) { |             if (entity instanceof Item item) { | ||||||
|                 UUID itemThrower = item.getThrower(); |                 UUID itemThrower = item.getThrower(); | ||||||
|                 if (plot != null) { |                 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)) { | ||||||
|                         if (!plot.isAdded(itemThrower)) { |                         if (!plot.isAdded(itemThrower)) { | ||||||
|                             plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false"); |                             plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false"); | ||||||
|   | |||||||
| @@ -38,6 +38,7 @@ import com.plotsquared.core.plot.flag.implementations.InvincibleFlag; | |||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.util.EventDispatcher; | import com.plotsquared.core.util.EventDispatcher; | ||||||
| import com.plotsquared.core.util.Permissions; | import com.plotsquared.core.util.Permissions; | ||||||
|  | import com.plotsquared.core.util.PlotFlagUtil; | ||||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||||
| import com.sk89q.worldedit.world.block.BlockType; | import com.sk89q.worldedit.world.block.BlockType; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| @@ -261,7 +262,7 @@ public class EntityEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && area.getRoadFlag(InvincibleFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, InvincibleFlag.class, true)) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; | |||||||
| import com.plotsquared.core.plot.flag.types.BooleanFlag; | import com.plotsquared.core.plot.flag.types.BooleanFlag; | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.util.Permissions; | import com.plotsquared.core.util.Permissions; | ||||||
|  | import com.plotsquared.core.util.PlotFlagUtil; | ||||||
| import net.kyori.adventure.text.minimessage.Template; | import net.kyori.adventure.text.minimessage.Template; | ||||||
| import org.bukkit.Chunk; | import org.bukkit.Chunk; | ||||||
| import org.bukkit.block.Block; | import org.bukkit.block.Block; | ||||||
| @@ -326,14 +327,18 @@ public class PaperListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Location location = BukkitUtil.adapt(entity.getLocation()); |         Location location = BukkitUtil.adapt(entity.getLocation()); | ||||||
|         if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { |         PlotArea area = location.getPlotArea(); | ||||||
|  |         if (area == null) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); |         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|  |  | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) { |             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                     pp, | ||||||
|  |                     Permission.PERMISSION_ADMIN_PROJECTILE_ROAD | ||||||
|  |             )) { | ||||||
|                 pp.sendMessage( |                 pp.sendMessage( | ||||||
|                         TranslatableCaption.of("permission.no_permission_event"), |                         TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) |                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) | ||||||
|   | |||||||
| @@ -48,6 +48,10 @@ import org.bukkit.event.EventHandler; | |||||||
| import org.bukkit.event.block.BlockPlaceEvent; | import org.bukkit.event.block.BlockPlaceEvent; | ||||||
| import org.checkerframework.checker.nullness.qual.NonNull; | 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 { | public class PaperListener113 extends PaperListener { | ||||||
|  |  | ||||||
|     @Inject |     @Inject | ||||||
|   | |||||||
| @@ -68,6 +68,7 @@ import com.plotsquared.core.plot.world.PlotAreaManager; | |||||||
| import com.plotsquared.core.util.EventDispatcher; | import com.plotsquared.core.util.EventDispatcher; | ||||||
| import com.plotsquared.core.util.MathMan; | import com.plotsquared.core.util.MathMan; | ||||||
| import com.plotsquared.core.util.Permissions; | import com.plotsquared.core.util.Permissions; | ||||||
|  | import com.plotsquared.core.util.PlotFlagUtil; | ||||||
| import com.plotsquared.core.util.PremiumVerification; | import com.plotsquared.core.util.PremiumVerification; | ||||||
| import com.plotsquared.core.util.entity.EntityCategories; | import com.plotsquared.core.util.entity.EntityCategories; | ||||||
| import com.plotsquared.core.util.task.TaskManager; | import com.plotsquared.core.util.task.TaskManager; | ||||||
| @@ -889,8 +890,7 @@ public class PlayerEventListener implements Listener { | |||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 PlotArea area = pp.getPlotAreaAbs(); |                 PlotArea area = pp.getPlotAreaAbs(); | ||||||
|                 if (area != null && area.isRoadFlags() && area |                 if (area != null && PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, PreventCreativeCopyFlag.class, true)) { | ||||||
|                         .getRoadFlag(PreventCreativeCopyFlag.class)) { |  | ||||||
|                     final ItemStack newStack = |                     final ItemStack newStack = | ||||||
|                             new ItemStack(newItem.getType(), newItem.getAmount()); |                             new ItemStack(newItem.getType(), newItem.getAmount()); | ||||||
|                     event.setCursor(newStack); |                     event.setCursor(newStack); | ||||||
| @@ -998,8 +998,10 @@ public class PlayerEventListener implements Listener { | |||||||
|         Plot plot = location.getPlotAbs(); |         Plot plot = location.getPlotAbs(); | ||||||
|         BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer()); |         BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer()); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (!area.isRoadFlags() && !area.getRoadFlag(MiscInteractFlag.class) && !Permissions |             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) && !Permissions.hasPermission( | ||||||
|                     .hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) { |                     pp, | ||||||
|  |                     Permission.PERMISSION_ADMIN_INTERACT_ROAD | ||||||
|  |             )) { | ||||||
|                 pp.sendMessage( |                 pp.sendMessage( | ||||||
|                         TranslatableCaption.of("permission.no_permission_event"), |                         TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) |                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) | ||||||
| @@ -1009,9 +1011,7 @@ public class PlayerEventListener implements Listener { | |||||||
|         } else { |         } else { | ||||||
|             if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { |             if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { | ||||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) { |                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) { | ||||||
|                     pp.sendMessage( |                     pp.sendMessage(TranslatableCaption.of("done.building_restricted")); | ||||||
|                             TranslatableCaption.of("done.building_restricted") |  | ||||||
|                     ); |  | ||||||
|                     e.setCancelled(true); |                     e.setCancelled(true); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
| @@ -1594,7 +1594,10 @@ public class PlayerEventListener implements Listener { | |||||||
|             BukkitPlayer pp = BukkitUtil.adapt(p); |             BukkitPlayer pp = BukkitUtil.adapt(p); | ||||||
|             Plot plot = area.getPlot(location); |             Plot plot = area.getPlot(location); | ||||||
|             if (plot == null) { |             if (plot == null) { | ||||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) { |                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, VehicleBreakFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                         pp, | ||||||
|  |                         Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD | ||||||
|  |                 )) { | ||||||
|                     pp.sendMessage( |                     pp.sendMessage( | ||||||
|                             TranslatableCaption.of("permission.no_permission_event"), |                             TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) |                             Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) | ||||||
| @@ -1642,7 +1645,7 @@ public class PlayerEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && !area.getRoadFlag(ItemDropFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ItemDropFlag.class, false)) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
| @@ -1668,7 +1671,7 @@ public class PlayerEventListener implements Listener { | |||||||
|             } |             } | ||||||
|             Plot plot = location.getOwnedPlot(); |             Plot plot = location.getOwnedPlot(); | ||||||
|             if (plot == null) { |             if (plot == null) { | ||||||
|                 if (area.isRoadFlags() && area.getRoadFlag(DropProtectionFlag.class)) { |                 if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DropProtectionFlag.class, true)) { | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                 } |                 } | ||||||
|                 return; |                 return; | ||||||
| @@ -1690,19 +1693,17 @@ public class PlayerEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && area.getRoadFlag(KeepInventoryFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, KeepInventoryFlag.class, true)) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (plot.getFlag(KeepInventoryFlag.class)) { |  | ||||||
|         if (plot.getFlag(KeepInventoryFlag.class)) { |         if (plot.getFlag(KeepInventoryFlag.class)) { | ||||||
|             plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true"); |             plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true"); | ||||||
|             event.getDrops().clear(); |             event.getDrops().clear(); | ||||||
|             event.setKeepInventory(true); |             event.setKeepInventory(true); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility |     @SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility | ||||||
|     @EventHandler |     @EventHandler | ||||||
| @@ -1725,18 +1726,16 @@ public class PlayerEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && area.getRoadFlag(DenyPortalTravelFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalTravelFlag.class, true)) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (plot.getFlag(DenyPortalTravelFlag.class)) { |  | ||||||
|         if (plot.getFlag(DenyPortalTravelFlag.class)) { |         if (plot.getFlag(DenyPortalTravelFlag.class)) { | ||||||
|             plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true"); |             plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true"); | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @EventHandler |     @EventHandler | ||||||
|     public void onPortalCreation(PortalCreateEvent event) { |     public void onPortalCreation(PortalCreateEvent event) { | ||||||
| @@ -1772,7 +1771,7 @@ public class PlayerEventListener implements Listener { | |||||||
|             } |             } | ||||||
|             Plot plot = location.getOwnedPlot(); |             Plot plot = location.getOwnedPlot(); | ||||||
|             if (plot == null) { |             if (plot == null) { | ||||||
|                 if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) { |                 if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalsFlag.class, true)) { | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
| @@ -1801,17 +1800,15 @@ public class PlayerEventListener implements Listener { | |||||||
|         } |         } | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (area.isRoadFlags() && area.getRoadFlag(LecternReadBookFlag.class)) { |             if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, LecternReadBookFlag.class, true)) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (plot.getFlag(LecternReadBookFlag.class)) { |  | ||||||
|         if (plot.getFlag(LecternReadBookFlag.class)) { |         if (plot.getFlag(LecternReadBookFlag.class)) { | ||||||
|             plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true"); |             plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true"); | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     } |  | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ import com.plotsquared.core.plot.PlotHandler; | |||||||
| import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; | import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.util.Permissions; | import com.plotsquared.core.util.Permissions; | ||||||
|  | import com.plotsquared.core.util.PlotFlagUtil; | ||||||
| import net.kyori.adventure.text.minimessage.Template; | import net.kyori.adventure.text.minimessage.Template; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| import org.bukkit.entity.LivingEntity; | import org.bukkit.entity.LivingEntity; | ||||||
| @@ -97,14 +98,18 @@ public class ProjectileEventListener implements Listener { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Location location = BukkitUtil.adapt(entity.getLocation()); |         Location location = BukkitUtil.adapt(entity.getLocation()); | ||||||
|         if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { |         PlotArea area = location.getPlotArea(); | ||||||
|  |         if (area == null) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); |         PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); | ||||||
|         Plot plot = location.getOwnedPlot(); |         Plot plot = location.getOwnedPlot(); | ||||||
|  |  | ||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) { |             if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                     pp, | ||||||
|  |                     Permission.PERMISSION_ADMIN_PROJECTILE_ROAD | ||||||
|  |             )) { | ||||||
|                 pp.sendMessage( |                 pp.sendMessage( | ||||||
|                         TranslatableCaption.of("permission.no_permission_event"), |                         TranslatableCaption.of("permission.no_permission_event"), | ||||||
|                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) |                         Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) | ||||||
| @@ -154,6 +159,8 @@ public class ProjectileEventListener implements Listener { | |||||||
|                     if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) { |                     if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) { | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |                 } else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) { | ||||||
|  |                     return; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 entity.remove(); |                 entity.remove(); | ||||||
| @@ -163,7 +170,10 @@ public class ProjectileEventListener implements Listener { | |||||||
|  |  | ||||||
|             PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter); |             PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter); | ||||||
|             if (plot == null) { |             if (plot == null) { | ||||||
|                 if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) { |                 if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission( | ||||||
|  |                         pp, | ||||||
|  |                         Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED | ||||||
|  |                 )) { | ||||||
|                     entity.remove(); |                     entity.remove(); | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                 } |                 } | ||||||
| @@ -194,7 +204,6 @@ public class ProjectileEventListener implements Listener { | |||||||
|             if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) { |             if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) { | ||||||
|                 entity.remove(); |                 entity.remove(); | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|                 return; |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -183,7 +183,11 @@ public class GenChunk extends ScopedQueueCoordinator { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) { |     public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) { | ||||||
|         return setBlock(x, y, z, PatternUtil.apply(Preconditions.checkNotNull(pattern, "Pattern may not be null"), x, y, z)); |         final BaseBlock block = PatternUtil.apply(Preconditions.checkNotNull( | ||||||
|  |                 pattern, | ||||||
|  |                 "Pattern may not be null" | ||||||
|  |         ), x + (chunkX << 4), y, z + (chunkZ << 4)); | ||||||
|  |         return setBlock(x, y, z, block); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator { | |||||||
|     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName()); |     private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName()); | ||||||
|  |  | ||||||
|     private final LimitedRegion limitedRegion; |     private final LimitedRegion limitedRegion; | ||||||
|  |     private boolean useOtherRestoreTagMethod = false; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @since 6.9.0 |      * @since 6.9.0 | ||||||
| @@ -65,10 +66,18 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator { | |||||||
|             CompoundTag tag = id.getNbtData(); |             CompoundTag tag = id.getNbtData(); | ||||||
|             StateWrapper sw = new StateWrapper(tag); |             StateWrapper sw = new StateWrapper(tag); | ||||||
|             try { |             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) { |             } catch (IllegalArgumentException e) { | ||||||
|                 LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e); |                 LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e); | ||||||
|                 return false; |                 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; |         return result; | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator; | |||||||
| import com.plotsquared.core.location.World; | import com.plotsquared.core.location.World; | ||||||
| import com.plotsquared.core.permissions.PermissionHandler; | import com.plotsquared.core.permissions.PermissionHandler; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
|  | import com.plotsquared.core.plot.expiration.ExpireManager; | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.queue.GlobalBlockQueue; | import com.plotsquared.core.queue.GlobalBlockQueue; | ||||||
| import com.plotsquared.core.util.ChunkManager; | import com.plotsquared.core.util.ChunkManager; | ||||||
| @@ -284,6 +285,16 @@ public interface PlotPlatform<P> extends LocaleHolder { | |||||||
|         return injector().getInstance(ChunkManager.class); |         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. |      * Get the {@link PlotAreaManager} implementation. | ||||||
|      * |      * | ||||||
|   | |||||||
| @@ -290,11 +290,11 @@ public class PlotSquared { | |||||||
|  |  | ||||||
|     public void startExpiryTasks() { |     public void startExpiryTasks() { | ||||||
|         if (Settings.Enabled_Components.PLOT_EXPIRY) { |         if (Settings.Enabled_Components.PLOT_EXPIRY) { | ||||||
|             ExpireManager.IMP = new ExpireManager(this.eventDispatcher); |             ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||||
|             ExpireManager.IMP.runAutomatedTask(); |             expireManager.runAutomatedTask(); | ||||||
|             for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) { |             for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) { | ||||||
|                 ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager()); |                 ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager()); | ||||||
|                 ExpireManager.IMP.addTask(task); |                 expireManager.addTask(task); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -645,7 +645,8 @@ public class PlotSquared { | |||||||
|         } else { |         } else { | ||||||
|             list = new ArrayList<>(input); |             list = new ArrayList<>(input); | ||||||
|         } |         } | ||||||
|         list.sort(Comparator.comparingLong(a -> ExpireManager.IMP.getTimestamp(a.getOwnerAbs()))); |         ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||||
|  |         list.sort(Comparator.comparingLong(a -> expireManager.getTimestamp(a.getOwnerAbs()))); | ||||||
|         return list; |         return list; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
| package com.plotsquared.core.command; | package com.plotsquared.core.command; | ||||||
|  |  | ||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
|  | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.caption.StaticCaption; | import com.plotsquared.core.configuration.caption.StaticCaption; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.events.PlotFlagRemoveEvent; | import com.plotsquared.core.events.PlotFlagRemoveEvent; | ||||||
| @@ -139,10 +140,7 @@ public class DebugExec extends SubCommand { | |||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 case "start-expire" -> { |                 case "start-expire" -> { | ||||||
|                     if (ExpireManager.IMP == null) { |                     if (PlotSquared.platform().expireManager().runAutomatedTask()) { | ||||||
|                         ExpireManager.IMP = new ExpireManager(this.eventDispatcher); |  | ||||||
|                     } |  | ||||||
|                     if (ExpireManager.IMP.runAutomatedTask()) { |  | ||||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_started")); |                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_started")); | ||||||
|                     } else { |                     } else { | ||||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started")); |                         player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started")); | ||||||
| @@ -150,7 +148,7 @@ public class DebugExec extends SubCommand { | |||||||
|                     return true; |                     return true; | ||||||
|                 } |                 } | ||||||
|                 case "stop-expire" -> { |                 case "stop-expire" -> { | ||||||
|                     if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) { |                     if (!PlotSquared.platform().expireManager().cancelTask()) { | ||||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.task_halted")); |                         player.sendMessage(TranslatableCaption.of("debugexec.task_halted")); | ||||||
|                     } else { |                     } else { | ||||||
|                         player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled")); |                         player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled")); | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ | |||||||
| package com.plotsquared.core.command; | package com.plotsquared.core.command; | ||||||
|  |  | ||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
|  | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.Settings; | import com.plotsquared.core.configuration.Settings; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.events.PlotDoneEvent; | import com.plotsquared.core.events.PlotDoneEvent; | ||||||
| @@ -29,7 +30,6 @@ import com.plotsquared.core.location.Location; | |||||||
| import com.plotsquared.core.permissions.Permission; | import com.plotsquared.core.permissions.Permission; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | 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.expiration.PlotAnalysis; | ||||||
| import com.plotsquared.core.plot.flag.PlotFlag; | import com.plotsquared.core.plot.flag.PlotFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.DoneFlag; | import com.plotsquared.core.plot.flag.implementations.DoneFlag; | ||||||
| @@ -94,7 +94,7 @@ public class Done extends SubCommand { | |||||||
|                 Template.of("plot", plot.getId().toString()) |                 Template.of("plot", plot.getId().toString()) | ||||||
|         ); |         ); | ||||||
|         final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done"); |         final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done"); | ||||||
|         if (ExpireManager.IMP == null || doneRequirements == null) { |         if (PlotSquared.platform().expireManager() == null || doneRequirements == null) { | ||||||
|             finish(plot, player, true); |             finish(plot, player, true); | ||||||
|             plot.removeRunning(); |             plot.removeRunning(); | ||||||
|         } else { |         } else { | ||||||
|   | |||||||
| @@ -30,7 +30,6 @@ import com.plotsquared.core.permissions.Permission; | |||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.PlotArea; | 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.DoneFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.PriceFlag; | import com.plotsquared.core.plot.flag.implementations.PriceFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag; | import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag; | ||||||
| @@ -240,7 +239,7 @@ public class ListCmd extends SubCommand { | |||||||
|                     ); |                     ); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|                 if (ExpireManager.IMP == null) { |                 if (PlotSquared.platform().expireManager() == null) { | ||||||
|                     plotConsumer.accept(PlotQuery.newQuery().noPlots()); |                     plotConsumer.accept(PlotQuery.newQuery().noPlots()); | ||||||
|                 } else { |                 } else { | ||||||
|                     plotConsumer.accept(PlotQuery.newQuery().expiredPlots()); |                     plotConsumer.accept(PlotQuery.newQuery().expiredPlots()); | ||||||
|   | |||||||
| @@ -282,7 +282,28 @@ public class Merge extends SubCommand { | |||||||
|                 run.run(); |                 run.run(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!force && !isOnline) { |         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; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|             player.sendMessage(TranslatableCaption.of("merge.no_available_automerge")); |             player.sendMessage(TranslatableCaption.of("merge.no_available_automerge")); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -25,7 +25,6 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption; | |||||||
| import com.plotsquared.core.location.Location; | import com.plotsquared.core.location.Location; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | import com.plotsquared.core.player.PlotPlayer; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.expiration.ExpireManager; |  | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.queue.GlobalBlockQueue; | import com.plotsquared.core.queue.GlobalBlockQueue; | ||||||
| import com.plotsquared.core.queue.QueueCoordinator; | import com.plotsquared.core.queue.QueueCoordinator; | ||||||
| @@ -92,8 +91,8 @@ public class Trim extends SubCommand { | |||||||
|         } |         } | ||||||
|         TranslatableCaption.of("trim.trim_starting"); |         TranslatableCaption.of("trim.trim_starting"); | ||||||
|         final List<Plot> plots = PlotQuery.newQuery().inWorld(world).asList(); |         final List<Plot> plots = PlotQuery.newQuery().inWorld(world).asList(); | ||||||
|         if (ExpireManager.IMP != null) { |         if (PlotSquared.platform().expireManager() != null) { | ||||||
|             plots.removeAll(ExpireManager.IMP.getPendingExpired()); |             plots.removeAll(PlotSquared.platform().expireManager().getPendingExpired()); | ||||||
|         } |         } | ||||||
|         result.value1 = new HashSet<>(PlotSquared.platform().worldUtil().getChunkChunks(world)); |         result.value1 = new HashSet<>(PlotSquared.platform().worldUtil().getChunkChunks(world)); | ||||||
|         result.value2 = new HashSet<>(); |         result.value2 = new HashSet<>(); | ||||||
|   | |||||||
| @@ -759,6 +759,8 @@ public class Settings extends Config { | |||||||
|         @Comment("Also kill any road mobs that are being ridden, or are leashed") |         @Comment("Also kill any road mobs that are being ridden, or are leashed") | ||||||
|         public static boolean |         public static boolean | ||||||
|                 KILL_OWNED_ROAD_MOBS = false; |                 KILL_OWNED_ROAD_MOBS = false; | ||||||
|  |         @Comment("Also kill any road mobs that are named") | ||||||
|  |         public static boolean KILL_NAMED_ROAD_MOBS = false; | ||||||
|         @Comment("Kill items on roads (Stick, Paper, etc.)") |         @Comment("Kill items on roads (Stick, Paper, etc.)") | ||||||
|         public static boolean KILL_ROAD_ITEMS = false; |         public static boolean KILL_ROAD_ITEMS = false; | ||||||
|         @Comment("Kill vehicles on roads (Boat, Minecart, etc.)") |         @Comment("Kill vehicles on roads (Boat, Minecart, etc.)") | ||||||
|   | |||||||
| @@ -53,7 +53,10 @@ final class ClassLoaderCaptionProvider implements DefaultCaptionProvider { | |||||||
|         try { |         try { | ||||||
|             final InputStream stream = this.classLoader.getResourceAsStream(url); |             final InputStream stream = this.classLoader.getResourceAsStream(url); | ||||||
|             if (stream == null) { |             if (stream == null) { | ||||||
|                 LOGGER.warn("No resource for locale '{}' found", locale); |                 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); | ||||||
|                 return null; |                 return null; | ||||||
|             } |             } | ||||||
|             try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { |             try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { | ||||||
|   | |||||||
| @@ -174,8 +174,9 @@ public class HybridPlotManager extends ClassicPlotManager { | |||||||
|                     for (int y = 0; y < blocks.length; y++) { |                     for (int y = 0; y < blocks.length; y++) { | ||||||
|                         if (blocks[y] != null) { |                         if (blocks[y] != null) { | ||||||
|                             queue.setBlock(x, minY + y, z, blocks[y]); |                             queue.setBlock(x, minY + y, z, blocks[y]); | ||||||
|                         } else { |                         } else if (!isRoad) { | ||||||
|                             // This is necessary, otherwise any blocks not specified in the schematic will remain after a clear |                             // This is necessary, otherwise any blocks not specified in the schematic will remain after a clear | ||||||
|  |                             //  Do not set air for road as this may cause cavernous roads when debugroadregen is used | ||||||
|                             queue.setBlock(x, minY + y, z, airBlock); |                             queue.setBlock(x, minY + y, z, airBlock); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|   | |||||||
| @@ -21,7 +21,6 @@ package com.plotsquared.core.generator; | |||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import com.google.inject.assistedinject.Assisted; | import com.google.inject.assistedinject.Assisted; | ||||||
| import com.intellectualsites.annotations.DoNotUse; | import com.intellectualsites.annotations.DoNotUse; | ||||||
| import com.intellectualsites.annotations.NotPublic; |  | ||||||
| import com.plotsquared.core.PlotSquared; | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.ConfigurationSection; | import com.plotsquared.core.configuration.ConfigurationSection; | ||||||
| import com.plotsquared.core.configuration.Settings; | import com.plotsquared.core.configuration.Settings; | ||||||
| @@ -75,6 +74,9 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|     public short PATH_WIDTH_UPPER; |     public short PATH_WIDTH_UPPER; | ||||||
|     public HashMap<Integer, BaseBlock[]> G_SCH; |     public HashMap<Integer, BaseBlock[]> G_SCH; | ||||||
|     public HashMap<Integer, BiomeType> G_SCH_B; |     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; |     public int SCHEM_Y; | ||||||
|     private Location SIGN_LOCATION; |     private Location SIGN_LOCATION; | ||||||
|     private File root = null; |     private File root = null; | ||||||
| @@ -267,34 +269,67 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|         int oddshift = (this.ROAD_WIDTH & 1); |         int oddshift = (this.ROAD_WIDTH & 1); | ||||||
|  |  | ||||||
|         SCHEM_Y = schematicStartHeight(); |         SCHEM_Y = schematicStartHeight(); | ||||||
|  |  | ||||||
|  |         // plotY and roadY are important to allow plot and/or road schematic "overflow" into each other without causing AIOOB | ||||||
|  |         //  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 plotY = PLOT_HEIGHT - SCHEM_Y; | ||||||
|         int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT; |         int minRoadWall = Settings.Schematics.USE_WALL_IN_ROAD_SCHEM_HEIGHT ? Math.min(ROAD_HEIGHT, WALL_HEIGHT) : ROAD_HEIGHT; | ||||||
|  |         // Default road schematic start height, normalized to the minimum height schematics are pasted from. | ||||||
|         int roadY = minRoadWall - SCHEM_Y; |         int roadY = minRoadWall - SCHEM_Y; | ||||||
|  |  | ||||||
|         int worldHeight = getMaxGenHeight() - getMinGenHeight() + 1; |         int worldGenHeight = getMaxGenHeight() - getMinGenHeight() + 1; | ||||||
|  |  | ||||||
|  |         int maxSchematicHeight = 0; | ||||||
|  |         int plotSchemHeight = 0; | ||||||
|  |  | ||||||
|         // SCHEM_Y should be normalised to the plot "start" height |         // SCHEM_Y should be normalised to the plot "start" height | ||||||
|         if (schematic3 != null) { |         if (schematic3 != null) { | ||||||
|             if (schematic3.getClipboard().getDimensions().getY() == worldHeight) { |             plotSchemHeight = maxSchematicHeight = schematic3.getClipboard().getDimensions().getY(); | ||||||
|                 SCHEM_Y = plotY = 0; |             if (maxSchematicHeight == worldGenHeight) { | ||||||
|  |                 SCHEM_Y = getMinGenHeight(); | ||||||
|  |                 plotY = 0; | ||||||
|             } else if (!Settings.Schematics.PASTE_ON_TOP) { |             } else if (!Settings.Schematics.PASTE_ON_TOP) { | ||||||
|                 SCHEM_Y = plotY = getMinBuildHeight() - getMinGenHeight(); |                 SCHEM_Y = getMinBuildHeight(); | ||||||
|  |                 plotY = 0; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         int roadSchemHeight; | ||||||
|  |  | ||||||
|         if (schematic1 != null) { |         if (schematic1 != null) { | ||||||
|             if (schematic1.getClipboard().getDimensions().getY() == worldHeight) { |             roadSchemHeight = Math.max( | ||||||
|                 SCHEM_Y = roadY = getMinGenHeight(); |                     schematic1.getClipboard().getDimensions().getY(), | ||||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight |                     schematic2.getClipboard().getDimensions().getY() | ||||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { |             ); | ||||||
|                     plotY = PLOT_HEIGHT; |             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(); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { |             } else if (!Settings.Schematics.PASTE_ROAD_ON_TOP) { | ||||||
|                 SCHEM_Y = roadY = getMinBuildHeight(); |                 if (SCHEM_Y == getMinGenHeight()) { // Only possible if plot schematic is enabled | ||||||
|                 if (schematic3 != null && schematic3.getClipboard().getDimensions().getY() != worldHeight |                     // Plot is still the lowest schematic, normalize roadY to it | ||||||
|                         && !Settings.Schematics.PASTE_ON_TOP) { |                     roadY = getMinBuildHeight() - getMinGenHeight(); | ||||||
|                     plotY = PLOT_HEIGHT; |                 } 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); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 roadY = minRoadWall - SCHEM_Y; | ||||||
|  |                 maxSchematicHeight = Math.max(maxSchematicHeight, roadY + roadSchemHeight); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -331,7 +366,6 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                                 y + min.getBlockY(), |                                 y + min.getBlockY(), | ||||||
|                                 z + min.getBlockZ() |                                 z + min.getBlockZ() | ||||||
|                         )); |                         )); | ||||||
|                         if (!id.getBlockType().getMaterial().isAir()) { |  | ||||||
|                         schem3PopulationNeeded |= id.hasNbtData(); |                         schem3PopulationNeeded |= id.hasNbtData(); | ||||||
|                         addOverlayBlock( |                         addOverlayBlock( | ||||||
|                                 (short) (x + shift + oddshift + centerShiftX), |                                 (short) (x + shift + oddshift + centerShiftX), | ||||||
| @@ -339,10 +373,9 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                                 (short) (z + shift + oddshift + centerShiftZ), |                                 (short) (z + shift + oddshift + centerShiftZ), | ||||||
|                                 id, |                                 id, | ||||||
|                                 false, |                                 false, | ||||||
|                                     h3 |                                 maxSchematicHeight | ||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
|                     } |  | ||||||
|                     if (blockArrayClipboard3.hasBiomes()) { |                     if (blockArrayClipboard3.hasBiomes()) { | ||||||
|                         BiomeType biome = blockArrayClipboard3.getBiome(BlockVector2.at( |                         BiomeType biome = blockArrayClipboard3.getBiome(BlockVector2.at( | ||||||
|                                 x + min.getBlockX(), |                                 x + min.getBlockX(), | ||||||
| @@ -391,19 +424,24 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                             y + min.getBlockY(), |                             y + min.getBlockY(), | ||||||
|                             z + min.getBlockZ() |                             z + min.getBlockZ() | ||||||
|                     )); |                     )); | ||||||
|                     if (!id.getBlockType().getMaterial().isAir()) { |  | ||||||
|                     schem1PopulationNeeded |= id.hasNbtData(); |                     schem1PopulationNeeded |= id.hasNbtData(); | ||||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z + shift + oddshift), id, false, h1); |                     addOverlayBlock( | ||||||
|  |                             (short) (x - shift), | ||||||
|  |                             (short) (y + roadY), | ||||||
|  |                             (short) (z + shift + oddshift), | ||||||
|  |                             id, | ||||||
|  |                             false, | ||||||
|  |                             maxSchematicHeight | ||||||
|  |                     ); | ||||||
|                     addOverlayBlock( |                     addOverlayBlock( | ||||||
|                             (short) (z + shift + oddshift), |                             (short) (z + shift + oddshift), | ||||||
|                             (short) (y + roadY), |                             (short) (y + roadY), | ||||||
|                             (short) (shift - x + (oddshift - 1)), |                             (short) (shift - x + (oddshift - 1)), | ||||||
|                             id, |                             id, | ||||||
|                             true, |                             true, | ||||||
|                                 h1 |                             maxSchematicHeight | ||||||
|                     ); |                     ); | ||||||
|                 } |                 } | ||||||
|                 } |  | ||||||
|                 if (blockArrayClipboard1.hasBiomes()) { |                 if (blockArrayClipboard1.hasBiomes()) { | ||||||
|                     BiomeType biome = blockArrayClipboard1.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); |                     BiomeType biome = blockArrayClipboard1.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||||
|                     addOverlayBiome((short) (x - shift), (short) (z + shift + oddshift), biome); |                     addOverlayBiome((short) (x - shift), (short) (z + shift + oddshift), biome); | ||||||
| @@ -430,10 +468,15 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|                             y + min.getBlockY(), |                             y + min.getBlockY(), | ||||||
|                             z + min.getBlockZ() |                             z + min.getBlockZ() | ||||||
|                     )); |                     )); | ||||||
|                     if (!id.getBlockType().getMaterial().isAir()) { |  | ||||||
|                     schem2PopulationNeeded |= id.hasNbtData(); |                     schem2PopulationNeeded |= id.hasNbtData(); | ||||||
|                         addOverlayBlock((short) (x - shift), (short) (y + roadY), (short) (z - shift), id, false, h2); |                     addOverlayBlock( | ||||||
|                     } |                             (short) (x - shift), | ||||||
|  |                             (short) (y + roadY), | ||||||
|  |                             (short) (z - shift), | ||||||
|  |                             id, | ||||||
|  |                             false, | ||||||
|  |                             maxSchematicHeight | ||||||
|  |                     ); | ||||||
|                 } |                 } | ||||||
|                 if (blockArrayClipboard2.hasBiomes()) { |                 if (blockArrayClipboard2.hasBiomes()) { | ||||||
|                     BiomeType biome = blockArrayClipboard2.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); |                     BiomeType biome = blockArrayClipboard2.getBiome(BlockVector2.at(x + min.getBlockX(), z + min.getBlockZ())); | ||||||
| @@ -443,6 +486,10 @@ 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) { |     public void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) { | ||||||
|         if (z < 0) { |         if (z < 0) { | ||||||
|             z += this.SIZE; |             z += this.SIZE; | ||||||
| @@ -462,13 +509,22 @@ public class HybridPlotWorld extends ClassicPlotWorld { | |||||||
|         if (y >= height) { |         if (y >= height) { | ||||||
|             if (y > lastOverlayHeightError) { |             if (y > lastOverlayHeightError) { | ||||||
|                 lastOverlayHeightError = y; |                 lastOverlayHeightError = y; | ||||||
|                 LOGGER.error(String.format("Error adding overlay block. `y > height`. y=%s, height=%s", y, height)); |                 LOGGER.error( | ||||||
|  |                         "Error adding overlay block in world {}. `y > height`. y={}, height={}", | ||||||
|  |                         getWorldName(), | ||||||
|  |                         y, | ||||||
|  |                         height | ||||||
|  |                 ); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         existing[y] = id; |         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) { |     public void addOverlayBiome(short x, short z, BiomeType id) { | ||||||
|         if (z < 0) { |         if (z < 0) { | ||||||
|             z += this.SIZE; |             z += this.SIZE; | ||||||
|   | |||||||
| @@ -234,8 +234,19 @@ public class HybridUtils { | |||||||
|                         Set<BlockType> types = new HashSet<>(); |                         Set<BlockType> types = new HashSet<>(); | ||||||
|                         for (int yIndex = 0; yIndex < height; yIndex++) { |                         for (int yIndex = 0; yIndex < height; yIndex++) { | ||||||
|                             BlockState old = oldBlocks[yIndex][x][z]; // Nullable |                             BlockState old = oldBlocks[yIndex][x][z]; // Nullable | ||||||
|                             try { |  | ||||||
|                             BlockState now = newBlocks[yIndex][x][z]; // Not null |                             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))) { |                             if (!now.equals(old) && !(old == null && now.getBlockType().equals(BlockTypes.AIR))) { | ||||||
|                                 changes[i]++; |                                 changes[i]++; | ||||||
|                             } |                             } | ||||||
| @@ -270,9 +281,6 @@ public class HybridUtils { | |||||||
|                                 } |                                 } | ||||||
|                                 types.add(now.getBlockType()); |                                 types.add(now.getBlockType()); | ||||||
|                             } |                             } | ||||||
|                             } catch (NullPointerException e) { |  | ||||||
|                                 e.printStackTrace(); |  | ||||||
|                             } |  | ||||||
|                         } |                         } | ||||||
|                         variety[i] = types.size(); |                         variety[i] = types.size(); | ||||||
|                         i++; |                         i++; | ||||||
|   | |||||||
| @@ -36,7 +36,6 @@ import com.plotsquared.core.plot.PlotArea; | |||||||
| import com.plotsquared.core.plot.PlotTitle; | import com.plotsquared.core.plot.PlotTitle; | ||||||
| import com.plotsquared.core.plot.PlotWeather; | import com.plotsquared.core.plot.PlotWeather; | ||||||
| import com.plotsquared.core.plot.comment.CommentManager; | 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.GlobalFlagContainer; | ||||||
| import com.plotsquared.core.plot.flag.PlotFlag; | import com.plotsquared.core.plot.flag.PlotFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.DenyExitFlag; | import com.plotsquared.core.plot.flag.implementations.DenyExitFlag; | ||||||
| @@ -163,8 +162,8 @@ public class PlotListener { | |||||||
|             if ((last != null) && !last.getId().equals(plot.getId())) { |             if ((last != null) && !last.getId().equals(plot.getId())) { | ||||||
|                 plotExit(player, last); |                 plotExit(player, last); | ||||||
|             } |             } | ||||||
|             if (ExpireManager.IMP != null) { |             if (PlotSquared.platform().expireManager() != null) { | ||||||
|                 ExpireManager.IMP.handleEntry(player, plot); |                 PlotSquared.platform().expireManager().handleEntry(player, plot); | ||||||
|             } |             } | ||||||
|             lastPlot.set(plot); |             lastPlot.set(plot); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -162,6 +162,7 @@ public enum Permission { | |||||||
|     PERMISSION_LIST_AREA("plots.list.area"), |     PERMISSION_LIST_AREA("plots.list.area"), | ||||||
|     PERMISSION_ADMIN_COMMAND_LOAD("plots.admin.command.load"), |     PERMISSION_ADMIN_COMMAND_LOAD("plots.admin.command.load"), | ||||||
|     PERMISSION_ADMIN_COMMAND_MERGE("plots.admin.command.merge"), |     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_ADMIN_COMMAND_SET_OWNER("plots.admin.command.setowner"), | ||||||
|     PERMISSION_COMMENT("plots.comment"), |     PERMISSION_COMMENT("plots.comment"), | ||||||
|     PERMISSION_INBOX("plots.inbox"), |     PERMISSION_INBOX("plots.inbox"), | ||||||
|   | |||||||
| @@ -42,7 +42,6 @@ import com.plotsquared.core.plot.PlotArea; | |||||||
| import com.plotsquared.core.plot.PlotCluster; | import com.plotsquared.core.plot.PlotCluster; | ||||||
| import com.plotsquared.core.plot.PlotId; | import com.plotsquared.core.plot.PlotId; | ||||||
| import com.plotsquared.core.plot.PlotWeather; | 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.flag.implementations.DoneFlag; | ||||||
| import com.plotsquared.core.plot.world.PlotAreaManager; | import com.plotsquared.core.plot.world.PlotAreaManager; | ||||||
| import com.plotsquared.core.plot.world.SinglePlotArea; | import com.plotsquared.core.plot.world.SinglePlotArea; | ||||||
| @@ -618,8 +617,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer, | |||||||
|                 LOGGER.info("Plot {} was deleted + cleared due to {} getting banned", owned.getId(), getName()); |                 LOGGER.info("Plot {} was deleted + cleared due to {} getting banned", owned.getId(), getName()); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (ExpireManager.IMP != null) { |         if (PlotSquared.platform().expireManager() != null) { | ||||||
|             ExpireManager.IMP.storeDate(getUUID(), System.currentTimeMillis()); |             PlotSquared.platform().expireManager().storeDate(getUUID(), System.currentTimeMillis()); | ||||||
|         } |         } | ||||||
|         PlotSquared.platform().playerManager().removePlayer(this); |         PlotSquared.platform().playerManager().removePlayer(this); | ||||||
|         PlotSquared.platform().unregister(this); |         PlotSquared.platform().unregister(this); | ||||||
|   | |||||||
| @@ -40,7 +40,6 @@ import com.plotsquared.core.location.Location; | |||||||
| import com.plotsquared.core.permissions.Permission; | import com.plotsquared.core.permissions.Permission; | ||||||
| import com.plotsquared.core.player.ConsolePlayer; | import com.plotsquared.core.player.ConsolePlayer; | ||||||
| import com.plotsquared.core.player.PlotPlayer; | 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.expiration.PlotAnalysis; | ||||||
| import com.plotsquared.core.plot.flag.FlagContainer; | import com.plotsquared.core.plot.flag.FlagContainer; | ||||||
| import com.plotsquared.core.plot.flag.GlobalFlagContainer; | import com.plotsquared.core.plot.flag.GlobalFlagContainer; | ||||||
| @@ -1105,8 +1104,8 @@ public class Plot { | |||||||
|      * @return A boolean indicating whether or not the operation succeeded |      * @return A boolean indicating whether or not the operation succeeded | ||||||
|      */ |      */ | ||||||
|     public <V> boolean setFlag(final @NonNull PlotFlag<V, ?> flag) { |     public <V> boolean setFlag(final @NonNull PlotFlag<V, ?> flag) { | ||||||
|         if (flag instanceof KeepFlag && ExpireManager.IMP != null) { |         if (flag instanceof KeepFlag && PlotSquared.platform().expireManager() != null) { | ||||||
|             ExpireManager.IMP.updateExpired(this); |             PlotSquared.platform().expireManager().updateExpired(this); | ||||||
|         } |         } | ||||||
|         for (final Plot plot : this.getConnectedPlots()) { |         for (final Plot plot : this.getConnectedPlots()) { | ||||||
|             plot.getFlagContainer().addFlag(flag); |             plot.getFlagContainer().addFlag(flag); | ||||||
| @@ -2831,11 +2830,11 @@ public class Plot { | |||||||
|                     Component members = PlayerManager.getPlayerList(this.getMembers(), player); |                     Component members = PlayerManager.getPlayerList(this.getMembers(), player); | ||||||
|                     Component denied = PlayerManager.getPlayerList(this.getDenied(), player); |                     Component denied = PlayerManager.getPlayerList(this.getDenied(), player); | ||||||
|                     String seen; |                     String seen; | ||||||
|                     if (Settings.Enabled_Components.PLOT_EXPIRY && ExpireManager.IMP != null) { |                     if (Settings.Enabled_Components.PLOT_EXPIRY && PlotSquared.platform().expireManager() != null) { | ||||||
|                         if (this.isOnline()) { |                         if (this.isOnline()) { | ||||||
|                             seen = TranslatableCaption.of("info.now").getComponent(player); |                             seen = TranslatableCaption.of("info.now").getComponent(player); | ||||||
|                         } else { |                         } else { | ||||||
|                             int time = (int) (ExpireManager.IMP.getAge(this, false) / 1000); |                             int time = (int) (PlotSquared.platform().expireManager().getAge(this, false) / 1000); | ||||||
|                             if (time != 0) { |                             if (time != 0) { | ||||||
|                                 seen = TimeUtil.secToTime(time); |                                 seen = TimeUtil.secToTime(time); | ||||||
|                             } else { |                             } else { | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ public final class PlotId { | |||||||
|      * @return Plot ID copy |      * @return Plot ID copy | ||||||
|      * @deprecated PlotId is immutable, copy is not required. |      * @deprecated PlotId is immutable, copy is not required. | ||||||
|      */ |      */ | ||||||
|     @Deprecated(forRemoval = true, since = "TODO") |     @Deprecated(forRemoval = true, since = "6.10.2") | ||||||
|     public @NonNull PlotId copy() { |     public @NonNull PlotId copy() { | ||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -34,7 +34,9 @@ import java.util.UUID; | |||||||
|  * Generic settings class. |  * Generic settings class. | ||||||
|  * - Does not keep a reference to a parent class |  * - Does not keep a reference to a parent class | ||||||
|  * - Direct changes here will not occur in the db (Use the parent plot object for that) |  * - Direct changes here will not occur in the db (Use the parent plot object for that) | ||||||
|  |  * This class is not part of the API and may change at any time. It is recommended to use equivalent methods in the Plot class. | ||||||
|  */ |  */ | ||||||
|  | @Deprecated | ||||||
| public class PlotSettings { | public class PlotSettings { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -18,6 +18,8 @@ | |||||||
|  */ |  */ | ||||||
| package com.plotsquared.core.plot.expiration; | 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.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.caption.Caption; | import com.plotsquared.core.configuration.caption.Caption; | ||||||
| import com.plotsquared.core.configuration.caption.Templates; | import com.plotsquared.core.configuration.caption.Templates; | ||||||
| @@ -60,6 +62,10 @@ import java.util.concurrent.ConcurrentLinkedDeque; | |||||||
|  |  | ||||||
| public class ExpireManager { | public class ExpireManager { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated Use {@link PlotPlatform#expireManager()} instead | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "6.10.2") | ||||||
|     public static ExpireManager IMP; |     public static ExpireManager IMP; | ||||||
|     private final ConcurrentHashMap<UUID, Long> dates_cache; |     private final ConcurrentHashMap<UUID, Long> dates_cache; | ||||||
|     private final ConcurrentHashMap<UUID, Long> account_age_cache; |     private final ConcurrentHashMap<UUID, Long> account_age_cache; | ||||||
| @@ -71,6 +77,7 @@ public class ExpireManager { | |||||||
|      */ |      */ | ||||||
|     private int running; |     private int running; | ||||||
|  |  | ||||||
|  |     @Inject | ||||||
|     public ExpireManager(final @NonNull EventDispatcher eventDispatcher) { |     public ExpireManager(final @NonNull EventDispatcher eventDispatcher) { | ||||||
|         this.tasks = new ArrayDeque<>(); |         this.tasks = new ArrayDeque<>(); | ||||||
|         this.dates_cache = new ConcurrentHashMap<>(); |         this.dates_cache = new ConcurrentHashMap<>(); | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ | |||||||
|  */ |  */ | ||||||
| package com.plotsquared.core.plot.expiration; | package com.plotsquared.core.plot.expiration; | ||||||
|  |  | ||||||
|  | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.Settings; | import com.plotsquared.core.configuration.Settings; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| @@ -72,8 +73,9 @@ public class ExpiryTask { | |||||||
|                         min = false; |                         min = false; | ||||||
|                         diff = plots.size() - settings.REQUIRED_PLOTS; |                         diff = plots.size() - settings.REQUIRED_PLOTS; | ||||||
|                     } |                     } | ||||||
|  |                     ExpireManager expireManager = PlotSquared.platform().expireManager(); | ||||||
|                     List<Long> entireList = |                     List<Long> entireList = | ||||||
|                             plots.stream().map(plot -> ExpireManager.IMP.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN)) |                             plots.stream().map(plot -> expireManager.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN)) | ||||||
|                                     .collect(Collectors.toList()); |                                     .collect(Collectors.toList()); | ||||||
|                     List<Long> top = new ArrayList<>(diff + 1); |                     List<Long> top = new ArrayList<>(diff + 1); | ||||||
|                     if (diff > 1000) { |                     if (diff > 1000) { | ||||||
|   | |||||||
| @@ -116,7 +116,7 @@ public class BlockArrayCacheScopedQueueCoordinator extends ScopedQueueCoordinato | |||||||
|         x += offsetX; |         x += offsetX; | ||||||
|         z += offsetZ; |         z += offsetZ; | ||||||
|         if (x >= scopeMinX && x < scopeMaxX && y >= minY && y <= maxY && z >= scopeMinZ && z < scopeMaxZ) { |         if (x >= scopeMinX && x < scopeMaxX && y >= minY && y <= maxY && z >= scopeMinZ && z < scopeMaxZ) { | ||||||
|             blockStates[y - minY][x][z] = id.toImmutableState(); |             blockStates[y - minY][x - scopeMinX][z - scopeMinZ] = id.toImmutableState(); | ||||||
|         } |         } | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ package com.plotsquared.core.util; | |||||||
|  |  | ||||||
| import com.google.common.eventbus.EventBus; | import com.google.common.eventbus.EventBus; | ||||||
| import com.intellectualsites.annotations.DoNotUse; | import com.intellectualsites.annotations.DoNotUse; | ||||||
|  | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.configuration.Settings; | import com.plotsquared.core.configuration.Settings; | ||||||
| import com.plotsquared.core.configuration.caption.TranslatableCaption; | import com.plotsquared.core.configuration.caption.TranslatableCaption; | ||||||
| import com.plotsquared.core.events.PlayerAutoPlotEvent; | import com.plotsquared.core.events.PlayerAutoPlotEvent; | ||||||
| @@ -59,7 +60,6 @@ import com.plotsquared.core.plot.Plot; | |||||||
| import com.plotsquared.core.plot.PlotArea; | import com.plotsquared.core.plot.PlotArea; | ||||||
| import com.plotsquared.core.plot.PlotId; | import com.plotsquared.core.plot.PlotId; | ||||||
| import com.plotsquared.core.plot.Rating; | 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.PlotFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag; | import com.plotsquared.core.plot.flag.implementations.DeviceInteractFlag; | ||||||
| import com.plotsquared.core.plot.flag.implementations.MiscPlaceFlag; | import com.plotsquared.core.plot.flag.implementations.MiscPlaceFlag; | ||||||
| @@ -300,8 +300,8 @@ public class EventDispatcher { | |||||||
|         if (player == null) { |         if (player == null) { | ||||||
|             return; //possible future warning message to figure out where we are retrieving null |             return; //possible future warning message to figure out where we are retrieving null | ||||||
|         } |         } | ||||||
|         if (ExpireManager.IMP != null) { |         if (PlotSquared.platform().expireManager() != null) { | ||||||
|             ExpireManager.IMP.handleJoin(player); |             PlotSquared.platform().expireManager().handleJoin(player); | ||||||
|         } |         } | ||||||
|         if (this.worldEdit != null) { |         if (this.worldEdit != null) { | ||||||
|             if (player.getAttribute("worldedit")) { |             if (player.getAttribute("worldedit")) { | ||||||
|   | |||||||
| @@ -29,7 +29,6 @@ import com.sk89q.worldedit.extension.input.ParserContext; | |||||||
| import com.sk89q.worldedit.extension.platform.Actor; | import com.sk89q.worldedit.extension.platform.Actor; | ||||||
| import com.sk89q.worldedit.function.pattern.BlockPattern; | import com.sk89q.worldedit.function.pattern.BlockPattern; | ||||||
| import com.sk89q.worldedit.function.pattern.Pattern; | import com.sk89q.worldedit.function.pattern.Pattern; | ||||||
| import com.sk89q.worldedit.function.pattern.RandomPattern; |  | ||||||
| import com.sk89q.worldedit.math.BlockVector3; | import com.sk89q.worldedit.math.BlockVector3; | ||||||
| import com.sk89q.worldedit.world.block.BaseBlock; | import com.sk89q.worldedit.world.block.BaseBlock; | ||||||
| import com.sk89q.worldedit.world.block.BlockState; | import com.sk89q.worldedit.world.block.BlockState; | ||||||
| @@ -44,7 +43,7 @@ public class PatternUtil { | |||||||
|  |  | ||||||
|     public static BaseBlock apply(@NonNull Pattern pattern, int x, int y, int z) { |     public static BaseBlock apply(@NonNull Pattern pattern, int x, int y, int z) { | ||||||
|         Preconditions.checkNotNull(pattern, "Pattern may not be null"); |         Preconditions.checkNotNull(pattern, "Pattern may not be null"); | ||||||
|         if (pattern instanceof BlockPattern || pattern instanceof RandomPattern |         if (pattern instanceof BlockPattern | ||||||
|                 || pattern instanceof BlockState || pattern instanceof BlockType |                 || pattern instanceof BlockState || pattern instanceof BlockType | ||||||
|                 || pattern instanceof BaseBlock) { |                 || pattern instanceof BaseBlock) { | ||||||
|             return pattern.applyBlock(BlockVector3.ZERO); |             return pattern.applyBlock(BlockVector3.ZERO); | ||||||
|   | |||||||
| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * 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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -36,7 +36,8 @@ import java.util.regex.Pattern; | |||||||
|  |  | ||||||
| public class StringMan { | public class StringMan { | ||||||
|  |  | ||||||
|     private static final Pattern STRING_SPLIT_PATTERN = Pattern.compile("(?<quoted>\"[\\w ]+\")|(?<single>\\w+)"); |     // Stolen from https://stackoverflow.com/a/366532/12620913 | Debug: https://regex101.com/r/DudJLb/1 | ||||||
|  |     private static final Pattern STRING_SPLIT_PATTERN = Pattern.compile("[^\\s\"]+|\"([^\"]*)\""); | ||||||
|  |  | ||||||
|     public static String replaceFromMap(String string, Map<String, String> replacements) { |     public static String replaceFromMap(String string, Map<String, String> replacements) { | ||||||
|         StringBuilder sb = new StringBuilder(string); |         StringBuilder sb = new StringBuilder(string); | ||||||
| @@ -355,7 +356,7 @@ public class StringMan { | |||||||
|         var matcher = StringMan.STRING_SPLIT_PATTERN.matcher(message); |         var matcher = StringMan.STRING_SPLIT_PATTERN.matcher(message); | ||||||
|         List<String> splitMessages = new ArrayList<>(); |         List<String> splitMessages = new ArrayList<>(); | ||||||
|         while (matcher.find()) { |         while (matcher.find()) { | ||||||
|             splitMessages.add(matcher.group(0).replaceAll("\"", "")); |             splitMessages.add(matcher.group(matcher.groupCount() - 1).replaceAll("\"", "")); | ||||||
|         } |         } | ||||||
|         return splitMessages; |         return splitMessages; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -18,8 +18,8 @@ | |||||||
|  */ |  */ | ||||||
| package com.plotsquared.core.util.query; | package com.plotsquared.core.util.query; | ||||||
|  |  | ||||||
|  | import com.plotsquared.core.PlotSquared; | ||||||
| import com.plotsquared.core.plot.Plot; | import com.plotsquared.core.plot.Plot; | ||||||
| import com.plotsquared.core.plot.expiration.ExpireManager; |  | ||||||
|  |  | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
|  |  | ||||||
| @@ -27,7 +27,7 @@ class ExpiredPlotProvider implements PlotProvider { | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Collection<Plot> getPlots() { |     public Collection<Plot> getPlots() { | ||||||
|         return ExpireManager.IMP.getPendingExpired(); |         return PlotSquared.platform().expireManager().getPendingExpired(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -101,7 +101,7 @@ public class FlagTest { | |||||||
|     public void shouldSuccessfullyParseTitleFlagWithTitleEmptyAndSubTitleSingleWord() { |     public void shouldSuccessfullyParseTitleFlagWithTitleEmptyAndSubTitleSingleWord() { | ||||||
|         Assertions.assertDoesNotThrow(() -> { |         Assertions.assertDoesNotThrow(() -> { | ||||||
|             var title = PlotTitleFlag.TITLE_FLAG_DEFAULT.parse("\"\" \"single\"").getValue(); |             var title = PlotTitleFlag.TITLE_FLAG_DEFAULT.parse("\"\" \"single\"").getValue(); | ||||||
|             Assertions.assertEquals(" ", title.title()); |             Assertions.assertEquals("", title.title()); | ||||||
|             Assertions.assertEquals("single", title.subtitle()); |             Assertions.assertEquals("single", title.subtitle()); | ||||||
|         }, "Should not throw a FlagParseException"); |         }, "Should not throw a FlagParseException"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -32,7 +32,9 @@ public class StringManTest { | |||||||
|                 new Message("title", List.of("title")), |                 new Message("title", List.of("title")), | ||||||
|                 new Message("title \"sub title\"", List.of("title", "sub title")), |                 new Message("title \"sub title\"", List.of("title", "sub title")), | ||||||
|                 new Message("\"a title\" subtitle", List.of("a title", "subtitle")), |                 new Message("\"a title\" subtitle", List.of("a title", "subtitle")), | ||||||
|                 new Message("\"title\" \"subtitle\"", List.of("title", "subtitle")) |                 new Message("\"title\" \"subtitle\"", List.of("title", "subtitle")), | ||||||
|  |                 new Message("\"How <bold>bold</bold> of you\" \"to assume I like <rainbow>rainbows</rainbow>\"", | ||||||
|  |                         List.of("How <bold>bold</bold> of you", "to assume I like <rainbow>rainbows</rainbow>")) | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         for (Message message : messages) { |         for (Message message : messages) { | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ plugins { | |||||||
| } | } | ||||||
|  |  | ||||||
| group = "com.plotsquared" | group = "com.plotsquared" | ||||||
| version = "6.10.2-SNAPSHOT" | version = "6.10.6-SNAPSHOT" | ||||||
|  |  | ||||||
| subprojects { | subprojects { | ||||||
|     group = rootProject.group |     group = rootProject.group | ||||||
| @@ -65,7 +65,7 @@ subprojects { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     dependencies { |     dependencies { | ||||||
|         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.16")) |         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.20")) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     dependencies { |     dependencies { | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| [versions] | [versions] | ||||||
| # Platform expectations | # Platform expectations | ||||||
| paper = "1.18.1-R0.1-SNAPSHOT" |  | ||||||
| guice = "5.1.0" | guice = "5.1.0" | ||||||
| spotbugs = "4.7.2" | spotbugs = "4.7.3" | ||||||
|  |  | ||||||
| # Plugins | # Plugins | ||||||
| worldedit = "7.2.12" | worldedit = "7.2.12" | ||||||
| @@ -26,9 +25,6 @@ licenser = "0.6.1" | |||||||
| nexus = "1.1.0" | nexus = "1.1.0" | ||||||
|  |  | ||||||
| [libraries] | [libraries] | ||||||
| # Platform expectations |  | ||||||
| paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" } |  | ||||||
|  |  | ||||||
| # Platform expectations | # Platform expectations | ||||||
| guice = { group = "com.google.inject", name = "guice", version.ref = "guice" } | guice = { group = "com.google.inject", name = "guice", version.ref = "guice" } | ||||||
| guiceassistedinject = { group = "com.google.inject.extensions", name = "guice-assistedinject", 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,5 +1,6 @@ | |||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip | ||||||
|  | networkTimeout=10000 | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							| @@ -55,7 +55,7 @@ | |||||||
| #       Darwin, MinGW, and NonStop. | #       Darwin, MinGW, and NonStop. | ||||||
| # | # | ||||||
| #   (3) This script is generated from the Groovy template | #   (3) This script is generated from the Groovy template | ||||||
| #       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | #       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt | ||||||
| #       within the Gradle project. | #       within the Gradle project. | ||||||
| # | # | ||||||
| #       You can find Gradle at https://github.com/gradle/gradle/. | #       You can find Gradle at https://github.com/gradle/gradle/. | ||||||
| @@ -80,10 +80,10 @@ do | |||||||
|     esac |     esac | ||||||
| done | done | ||||||
|  |  | ||||||
| APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | # This is normally unused | ||||||
|  | # shellcheck disable=SC2034 | ||||||
| APP_NAME="Gradle" |  | ||||||
| APP_BASE_NAME=${0##*/} | APP_BASE_NAME=${0##*/} | ||||||
|  | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit | ||||||
|  |  | ||||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | # 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"' | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | ||||||
| @@ -143,12 +143,16 @@ fi | |||||||
| if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then | ||||||
|     case $MAX_FD in #( |     case $MAX_FD in #( | ||||||
|       max*) |       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 ) || |         MAX_FD=$( ulimit -H -n ) || | ||||||
|             warn "Could not query maximum file descriptor limit" |             warn "Could not query maximum file descriptor limit" | ||||||
|     esac |     esac | ||||||
|     case $MAX_FD in  #( |     case $MAX_FD in  #( | ||||||
|       '' | soft) :;; #( |       '' | 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" || |         ulimit -n "$MAX_FD" || | ||||||
|             warn "Could not set maximum file descriptor limit to $MAX_FD" |             warn "Could not set maximum file descriptor limit to $MAX_FD" | ||||||
|     esac |     esac | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							| @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal | |||||||
|  |  | ||||||
| set DIRNAME=%~dp0 | set DIRNAME=%~dp0 | ||||||
| if "%DIRNAME%"=="" set DIRNAME=. | if "%DIRNAME%"=="" set DIRNAME=. | ||||||
|  | @rem This is normally unused | ||||||
| set APP_BASE_NAME=%~n0 | set APP_BASE_NAME=%~n0 | ||||||
| set APP_HOME=%DIRNAME% | set APP_HOME=%DIRNAME% | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user