mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-10-26 15:13:45 +01:00 
			
		
		
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			build/mast
			...
			feature/v6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | d629e9eecb | ||
|   | 2802939112 | ||
|   | bf646be482 | ||
|   | cc7e17960b | ||
|   | 3c75b170f0 | ||
|   | a79c474957 | ||
|   | 4bb480a238 | ||
|   | 9ffa935c0c | ||
|   | 0a32268784 | ||
|   | ae3b8c06f6 | ||
|   | 713c4ad0d2 | 
							
								
								
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -27,14 +27,12 @@ body: | |||||||
|       description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first. |       description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first. | ||||||
|       multiple: false |       multiple: false | ||||||
|       options: |       options: | ||||||
|  |         - '1.19' | ||||||
|         - '1.18.2' |         - '1.18.2' | ||||||
|         - '1.18.1' |         - '1.18.1' | ||||||
|         - '1.18' |         - '1.18' | ||||||
|         - '1.17.1' |         - '1.17.1' | ||||||
|         - '1.16.5' |         - '1.16.5' | ||||||
|         - '1.15.2' |  | ||||||
|         - '1.14.4' |  | ||||||
|         - '1.13.2' |  | ||||||
|     validations: |     validations: | ||||||
|       required: true |       required: true | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,20 +21,20 @@ dependencies { | |||||||
|     api(projects.plotSquaredCore) |     api(projects.plotSquaredCore) | ||||||
|  |  | ||||||
|     // Metrics |     // Metrics | ||||||
|     implementation(libs.bstats) |     implementation("org.bstats:bstats-bukkit") | ||||||
|  |  | ||||||
|     // Paper |     // Paper | ||||||
|     compileOnly(libs.paper) |     compileOnly(libs.paper) | ||||||
|     implementation(libs.paperlib) |     implementation("io.papermc:paperlib") | ||||||
|  |  | ||||||
|     // Plugins |     // Plugins | ||||||
|     compileOnly(libs.worldeditBukkit) { |     compileOnly(libs.worldeditBukkit) { | ||||||
|         exclude(group = "org.bukkit") |         exclude(group = "org.bukkit") | ||||||
|         exclude(group = "org.spigotmc") |         exclude(group = "org.spigotmc") | ||||||
|     } |     } | ||||||
|     compileOnly(libs.fastasyncworldeditBukkit) { isTransitive = false } |     compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false } | ||||||
|     testImplementation(libs.fastasyncworldeditBukkit) { isTransitive = false } |     testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false } | ||||||
|     compileOnly(libs.vault) { |     compileOnly("com.github.MilkBowl:VaultAPI") { | ||||||
|         exclude(group = "org.bukkit") |         exclude(group = "org.bukkit") | ||||||
|     } |     } | ||||||
|     compileOnly(libs.placeholderapi) |     compileOnly(libs.placeholderapi) | ||||||
| @@ -44,15 +44,15 @@ dependencies { | |||||||
|  |  | ||||||
|     // Other libraries |     // Other libraries | ||||||
|     implementation(libs.squirrelid) { isTransitive = false } |     implementation(libs.squirrelid) { isTransitive = false } | ||||||
|     implementation(libs.serverlib) |     implementation("dev.notmyfault.serverlib:ServerLib") | ||||||
|  |  | ||||||
|     // Our libraries |     // Our libraries | ||||||
|     implementation(libs.arkitektonika) |     implementation(libs.arkitektonika) | ||||||
|     implementation(libs.http4j) |     implementation(libs.http4j) | ||||||
|     implementation(libs.paster) |     implementation("com.intellectualsites.paster:Paster") | ||||||
|  |  | ||||||
|     // Adventure |     // Adventure | ||||||
|     implementation(libs.adventurePlatformBukkit) |     implementation("net.kyori:adventure-platform-bukkit") | ||||||
| } | } | ||||||
|  |  | ||||||
| tasks.processResources { | tasks.processResources { | ||||||
| @@ -97,7 +97,7 @@ tasks.named<ShadowJar>("shadowJar") { | |||||||
| tasks { | tasks { | ||||||
|     withType<Javadoc> { |     withType<Javadoc> { | ||||||
|         val opt = options as StandardJavadocDocletOptions |         val opt = options as StandardJavadocDocletOptions | ||||||
|         opt.links("https://papermc.io/javadocs/paper/1.18/") |         opt.links("https://jd.papermc.io/paper/1.18/") | ||||||
|         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString()) |         opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString()) | ||||||
|         opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/") |         opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/") | ||||||
|         opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString()) |         opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString()) | ||||||
|   | |||||||
| @@ -112,30 +112,7 @@ public class BukkitPlotGenerator extends ChunkGenerator | |||||||
|     @Override |     @Override | ||||||
|     public @NonNull List<BlockPopulator> getDefaultPopulators(@NonNull World world) { |     public @NonNull List<BlockPopulator> getDefaultPopulators(@NonNull World world) { | ||||||
|         try { |         try { | ||||||
|             if (!this.loaded) { |             checkLoaded(world); | ||||||
|                 String name = world.getName(); |  | ||||||
|                 PlotSquared.get().loadWorld(name, this); |  | ||||||
|                 final Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(name); |  | ||||||
|                 if (!areas.isEmpty()) { |  | ||||||
|                     PlotArea area = areas.iterator().next(); |  | ||||||
|                     if (!area.isMobSpawning()) { |  | ||||||
|                         if (!area.isSpawnEggs()) { |  | ||||||
|                             world.setSpawnFlags(false, false); |  | ||||||
|                         } |  | ||||||
|                         world.setAmbientSpawnLimit(0); |  | ||||||
|                         world.setAnimalSpawnLimit(0); |  | ||||||
|                         world.setMonsterSpawnLimit(0); |  | ||||||
|                         world.setWaterAnimalSpawnLimit(0); |  | ||||||
|                     } else { |  | ||||||
|                         world.setSpawnFlags(true, true); |  | ||||||
|                         world.setAmbientSpawnLimit(-1); |  | ||||||
|                         world.setAnimalSpawnLimit(-1); |  | ||||||
|                         world.setMonsterSpawnLimit(-1); |  | ||||||
|                         world.setWaterAnimalSpawnLimit(-1); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 this.loaded = true; |  | ||||||
|             } |  | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
| @@ -154,6 +131,39 @@ public class BukkitPlotGenerator extends ChunkGenerator | |||||||
|         return toAdd; |         return toAdd; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private synchronized void checkLoaded(@NonNull World world) { | ||||||
|  |         // Do not attempt to load configurations until WorldEdit has a platform ready. | ||||||
|  |         if (!PlotSquared.get().isWeInitialised()) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         if (!this.loaded) { | ||||||
|  |             String name = world.getName(); | ||||||
|  |             PlotSquared.get().loadWorld(name, this); | ||||||
|  |             final Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(name); | ||||||
|  |             if (!areas.isEmpty()) { | ||||||
|  |                 PlotArea area = areas.iterator().next(); | ||||||
|  |                 if (!area.isMobSpawning()) { | ||||||
|  |                     if (!area.isSpawnEggs()) { | ||||||
|  |                         world.setSpawnFlags(false, false); | ||||||
|  |                     } | ||||||
|  |                     setSpawnLimits(world, 0); | ||||||
|  |                 } else { | ||||||
|  |                     world.setSpawnFlags(true, true); | ||||||
|  |                     setSpawnLimits(world, -1); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             this.loaded = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @SuppressWarnings("deprecation") | ||||||
|  |     private void setSpawnLimits(@NonNull World world, int limit) { | ||||||
|  |         world.setAmbientSpawnLimit(limit); | ||||||
|  |         world.setAnimalSpawnLimit(limit); | ||||||
|  |         world.setMonsterSpawnLimit(limit); | ||||||
|  |         world.setWaterAnimalSpawnLimit(limit); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public @NonNull ChunkData generateChunkData( |     public @NonNull ChunkData generateChunkData( | ||||||
|             @NonNull World world, @NonNull Random random, int x, int z, |             @NonNull World world, @NonNull Random random, int x, int z, | ||||||
| @@ -201,9 +211,7 @@ public class BukkitPlotGenerator extends ChunkGenerator | |||||||
|     private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) { |     private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) { | ||||||
|         // Load if improperly loaded |         // Load if improperly loaded | ||||||
|         if (!this.loaded) { |         if (!this.loaded) { | ||||||
|             String name = world.getName(); |             checkLoaded(world); | ||||||
|             PlotSquared.get().loadWorld(name, this); |  | ||||||
|             this.loaded = true; |  | ||||||
|         } |         } | ||||||
|         // Process the chunk |         // Process the chunk | ||||||
|         if (ChunkManager.preProcessChunk(loc, result)) { |         if (ChunkManager.preProcessChunk(loc, result)) { | ||||||
|   | |||||||
| @@ -551,6 +551,10 @@ public class BlockEventListener implements Listener { | |||||||
|         if (plot == null) { |         if (plot == null) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |         if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) { | ||||||
|  |             event.setCancelled(true); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|         switch (event.getNewState().getType()) { |         switch (event.getNewState().getType()) { | ||||||
|             case SNOW: |             case SNOW: | ||||||
|             case SNOW_BLOCK: |             case SNOW_BLOCK: | ||||||
| @@ -750,62 +754,66 @@ public class BlockEventListener implements Listener { | |||||||
|  |  | ||||||
|     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) |     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) | ||||||
|     public void onChange(BlockFromToEvent event) { |     public void onChange(BlockFromToEvent event) { | ||||||
|         Block from = event.getBlock(); |         Block fromBlock = event.getBlock(); | ||||||
|  |  | ||||||
|         // Check liquid flow flag inside of origin plot too |         // Check liquid flow flag inside of origin plot too | ||||||
|         final Location fLocation = BukkitUtil.adapt(from.getLocation()); |         final Location fromLocation = BukkitUtil.adapt(fromBlock.getLocation()); | ||||||
|         final PlotArea fromArea = fLocation.getPlotArea(); |         final PlotArea fromArea = fromLocation.getPlotArea(); | ||||||
|         if (fromArea != null) { |         if (fromArea != null) { | ||||||
|             final Plot plot = fromArea.getOwnedPlot(fLocation); |             final Plot fromPlot = fromArea.getOwnedPlot(fromLocation); | ||||||
|             if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event |             if (fromPlot != null && fromPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event | ||||||
|                     .getBlock() |                     .getBlock() | ||||||
|                     .isLiquid()) { |                     .isLiquid()) { | ||||||
|                 plot.debug("Liquid could not flow because liquid-flow = disabled"); |                 fromPlot.debug("Liquid could not flow because liquid-flow = disabled"); | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Block to = event.getToBlock(); |         Block toBlock = event.getToBlock(); | ||||||
|         Location tLocation = BukkitUtil.adapt(to.getLocation()); |         Location toLocation = BukkitUtil.adapt(toBlock.getLocation()); | ||||||
|         PlotArea area = tLocation.getPlotArea(); |         PlotArea toArea = toLocation.getPlotArea(); | ||||||
|         if (area == null) { |         if (toArea == null) { | ||||||
|             if (from.getType() == Material.DRAGON_EGG && fromArea != null) { |             if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         Plot plot = area.getOwnedPlot(tLocation); |         if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) { | ||||||
|  |             event.setCancelled(true); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         Plot toPlot = toArea.getOwnedPlot(toLocation); | ||||||
|  |  | ||||||
|         if (from.getType() == Material.DRAGON_EGG && fromArea != null) { |         if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) { | ||||||
|             final Plot fromPlot = fromArea.getOwnedPlot(fLocation); |             final Plot fromPlot = fromArea.getOwnedPlot(fromLocation); | ||||||
|  |  | ||||||
|             if (fromPlot != null || plot != null) { |             if (fromPlot != null || toPlot != null) { | ||||||
|                 if ((fromPlot == null || !fromPlot.equals(plot)) && (plot == null || !plot.equals(fromPlot))) { |                 if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) { | ||||||
|                     event.setCancelled(true); |                     event.setCancelled(true); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (plot != null) { |         if (toPlot != null) { | ||||||
|             if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(plot, area.getOwnedPlot(fLocation))) { |             if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) { | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) { |             if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) { | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (plot.getFlag(DisablePhysicsFlag.class)) { |             if (toPlot.getFlag(DisablePhysicsFlag.class)) { | ||||||
|                 plot.debug(event.getBlock().getType() + " could not update because disable-physics = true"); |                 toPlot.debug(event.getBlock().getType() + " could not update because disable-physics = true"); | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) { |             if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) { | ||||||
|                 plot.debug("Liquid could not flow because liquid-flow = disabled"); |                 toPlot.debug("Liquid could not flow because liquid-flow = disabled"); | ||||||
|                 event.setCancelled(true); |                 event.setCancelled(true); | ||||||
|             } |             } | ||||||
|         } else if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(null, area.getOwnedPlot(fLocation))) { |         } else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) { | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } else if (event.getBlock().isLiquid()) { |         } else if (event.getBlock().isLiquid()) { | ||||||
|             final org.bukkit.Location location = event.getBlock().getLocation(); |             final org.bukkit.Location location = event.getBlock().getLocation(); | ||||||
|   | |||||||
| @@ -208,7 +208,7 @@ public class EntityEventListener implements Listener { | |||||||
|             } |             } | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if (BukkitEntityUtil.checkEntity(entity, plot)) { |         if (BukkitEntityUtil.checkEntity(entity, plot.getBasePlot(false))) { | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. | |||||||
| ## Enforcement | ## Enforcement | ||||||
|  |  | ||||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||||
| reported by contacting the project team at contact@alexander-soderberg.com. All | reported by contacting the project team at contact@intellectualsites.com. All | ||||||
| complaints will be reviewed and investigated and will result in a response that | complaints will be reviewed and investigated and will result in a response that | ||||||
| is deemed necessary and appropriate to the circumstances. The project team is | is deemed necessary and appropriate to the circumstances. The project team is | ||||||
| obligated to maintain confidentiality with regard to the reporter of an incident. | obligated to maintain confidentiality with regard to the reporter of an incident. | ||||||
|   | |||||||
| @@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter | |||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     // Expected everywhere. |     // Expected everywhere. | ||||||
|     compileOnlyApi(libs.checkerqual) |     compileOnlyApi("org.checkerframework:checker-qual") | ||||||
|  |  | ||||||
|     // Minecraft expectations |     // Minecraft expectations | ||||||
|     compileOnlyApi(libs.gson) |     compileOnlyApi("com.google.code.gson:gson") | ||||||
|     compileOnly(libs.guava) |     compileOnly("com.google.guava:guava") | ||||||
|  |  | ||||||
|     // Platform expectations |     // Platform expectations | ||||||
|     compileOnlyApi(libs.snakeyaml) |     compileOnlyApi("org.yaml:snakeyaml") | ||||||
|  |  | ||||||
|     // Adventure |     // Adventure | ||||||
|     api(libs.adventure) |     api("net.kyori:adventure-api") | ||||||
|     api(libs.minimessage) |     api("net.kyori:adventure-text-minimessage") | ||||||
|  |  | ||||||
|     // Guice |     // Guice | ||||||
|     api(libs.guice) { |     api(libs.guice) { | ||||||
| @@ -31,18 +31,18 @@ dependencies { | |||||||
|         exclude(group = "dummypermscompat") |         exclude(group = "dummypermscompat") | ||||||
|     } |     } | ||||||
|     testImplementation(libs.worldeditCore) |     testImplementation(libs.worldeditCore) | ||||||
|     compileOnly(libs.fastasyncworldeditCore) { isTransitive = false } |     compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false } | ||||||
|     testImplementation(libs.fastasyncworldeditCore) { isTransitive = false } |     testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false } | ||||||
|  |  | ||||||
|     // Logging |     // Logging | ||||||
|     compileOnlyApi(libs.log4j) |     compileOnlyApi("org.apache.logging.log4j:log4j-api") | ||||||
|  |  | ||||||
|     // Other libraries |     // Other libraries | ||||||
|     api(libs.prtree) |     api(libs.prtree) | ||||||
|     api(libs.aopalliance) |     api(libs.aopalliance) | ||||||
|     api(libs.cloudServices) |     api(libs.cloudServices) | ||||||
|     api(libs.arkitektonika) |     api(libs.arkitektonika) | ||||||
|     api(libs.paster) |     api("com.intellectualsites.paster:Paster") | ||||||
| } | } | ||||||
|  |  | ||||||
| tasks.processResources { | tasks.processResources { | ||||||
|   | |||||||
| @@ -72,7 +72,10 @@ import com.plotsquared.core.util.ReflectionUtils; | |||||||
| import com.plotsquared.core.util.task.TaskManager; | import com.plotsquared.core.util.task.TaskManager; | ||||||
| import com.plotsquared.core.uuid.UUIDPipeline; | import com.plotsquared.core.uuid.UUIDPipeline; | ||||||
| import com.sk89q.worldedit.WorldEdit; | import com.sk89q.worldedit.WorldEdit; | ||||||
|  | import com.sk89q.worldedit.event.platform.PlatformReadyEvent; | ||||||
| import com.sk89q.worldedit.math.BlockVector2; | import com.sk89q.worldedit.math.BlockVector2; | ||||||
|  | import com.sk89q.worldedit.util.eventbus.EventHandler; | ||||||
|  | import com.sk89q.worldedit.util.eventbus.Subscribe; | ||||||
| import org.apache.logging.log4j.LogManager; | import org.apache.logging.log4j.LogManager; | ||||||
| import org.apache.logging.log4j.Logger; | import org.apache.logging.log4j.Logger; | ||||||
| import org.checkerframework.checker.nullness.qual.MonotonicNonNull; | import org.checkerframework.checker.nullness.qual.MonotonicNonNull; | ||||||
| @@ -153,6 +156,8 @@ public class PlotSquared { | |||||||
|     private EventDispatcher eventDispatcher; |     private EventDispatcher eventDispatcher; | ||||||
|     private PlotListener plotListener; |     private PlotListener plotListener; | ||||||
|  |  | ||||||
|  |     private boolean weInitialised; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Initialize PlotSquared with the desired Implementation class. |      * Initialize PlotSquared with the desired Implementation class. | ||||||
|      * |      * | ||||||
| @@ -223,6 +228,7 @@ public class PlotSquared { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             this.worldedit = WorldEdit.getInstance(); |             this.worldedit = WorldEdit.getInstance(); | ||||||
|  |             WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener()); | ||||||
|  |  | ||||||
|             // Create Event utility class |             // Create Event utility class | ||||||
|             this.eventDispatcher = new EventDispatcher(this.worldedit); |             this.eventDispatcher = new EventDispatcher(this.worldedit); | ||||||
| @@ -1574,6 +1580,13 @@ public class PlotSquared { | |||||||
|         return this.plotListener; |         return this.plotListener; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get if the {@link PlatformReadyEvent} has been sent by WE. There is no way to query this within WE itself. | ||||||
|  |      */ | ||||||
|  |     public boolean isWeInitialised() { | ||||||
|  |         return weInitialised; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Different ways of sorting {@link Plot plots} |      * Different ways of sorting {@link Plot plots} | ||||||
|      */ |      */ | ||||||
| @@ -1596,4 +1609,15 @@ public class PlotSquared { | |||||||
|         DISTANCE_FROM_ORIGIN |         DISTANCE_FROM_ORIGIN | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private final class WEPlatformReadyListener { | ||||||
|  |  | ||||||
|  |         @SuppressWarnings("unused") | ||||||
|  |         @Subscribe(priority = EventHandler.Priority.VERY_EARLY) | ||||||
|  |         public void onPlatformReady(PlatformReadyEvent event) { | ||||||
|  |             weInitialised = true; | ||||||
|  |             WorldEdit.getInstance().getEventBus().unregister(WEPlatformReadyListener.this); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -53,9 +53,15 @@ public abstract class IndependentPlotGenerator { | |||||||
|      * |      * | ||||||
|      * @param result   queue |      * @param result   queue | ||||||
|      * @param settings PlotArea (settings) |      * @param settings PlotArea (settings) | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|      */ |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public abstract void generateChunk(ScopedQueueCoordinator result, PlotArea settings); |     public abstract void generateChunk(ScopedQueueCoordinator result, PlotArea settings); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public boolean populateChunk(ScopedQueueCoordinator result, PlotArea setting) { |     public boolean populateChunk(ScopedQueueCoordinator result, PlotArea setting) { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -65,7 +65,6 @@ import com.sk89q.worldedit.world.biome.BiomeType; | |||||||
| import com.sk89q.worldedit.world.biome.BiomeTypes; | import com.sk89q.worldedit.world.biome.BiomeTypes; | ||||||
| import com.sk89q.worldedit.world.gamemode.GameMode; | import com.sk89q.worldedit.world.gamemode.GameMode; | ||||||
| import com.sk89q.worldedit.world.gamemode.GameModes; | import com.sk89q.worldedit.world.gamemode.GameModes; | ||||||
| import net.kyori.adventure.text.Component; |  | ||||||
| import net.kyori.adventure.text.minimessage.MiniMessage; | import net.kyori.adventure.text.minimessage.MiniMessage; | ||||||
| import net.kyori.adventure.text.minimessage.Template; | import net.kyori.adventure.text.minimessage.Template; | ||||||
| import org.apache.logging.log4j.LogManager; | import org.apache.logging.log4j.LogManager; | ||||||
| @@ -965,7 +964,31 @@ public abstract class PlotArea { | |||||||
|         return this.plots.remove(id) != null; |         return this.plots.remove(id) != null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Merge a list of plots together. This is non-blocking for the world-changes that will be made. To run a task when the | ||||||
|  |      * world changes are complete, use {@link PlotArea#mergePlots(List, boolean, Runnable)}; | ||||||
|  |      * | ||||||
|  |      * @param plotIds     List of plot IDs to merge | ||||||
|  |      * @param removeRoads If the roads between plots should be removed | ||||||
|  |      * @return if merges were completed successfully. | ||||||
|  |      */ | ||||||
|     public boolean mergePlots(final @NonNull List<PlotId> plotIds, final boolean removeRoads) { |     public boolean mergePlots(final @NonNull List<PlotId> plotIds, final boolean removeRoads) { | ||||||
|  |         return mergePlots(plotIds, removeRoads, null); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Merge a list of plots together. This is non-blocking for the world-changes that will be made. | ||||||
|  |      * | ||||||
|  |      * @param plotIds     List of plot IDs to merge | ||||||
|  |      * @param removeRoads If the roads between plots should be removed | ||||||
|  |      * @param whenDone  Task to run when any merge world changes are complete. Also runs if no changes were made. Does not | ||||||
|  |      *                    run if there was an error or if too few plots IDs were supplied. | ||||||
|  |      * @return if merges were completed successfully. | ||||||
|  |      * @since TODO | ||||||
|  |      */ | ||||||
|  |     public boolean mergePlots( | ||||||
|  |             final @NonNull List<PlotId> plotIds, final boolean removeRoads, final @Nullable Runnable whenDone | ||||||
|  |     ) { | ||||||
|         if (plotIds.size() < 2) { |         if (plotIds.size() < 2) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| @@ -1028,6 +1051,9 @@ public abstract class PlotArea { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         manager.finishPlotMerge(plotIds, queue); |         manager.finishPlotMerge(plotIds, queue); | ||||||
|  |         if (whenDone != null) { | ||||||
|  |             queue.setCompleteTask(whenDone); | ||||||
|  |         } | ||||||
|         queue.enqueue(); |         queue.enqueue(); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -93,7 +93,9 @@ public abstract class QueueCoordinator { | |||||||
|      * @param z chunk z coordinate |      * @param z chunk z coordinate | ||||||
|      * @return a new {@link ScopedQueueCoordinator} |      * @return a new {@link ScopedQueueCoordinator} | ||||||
|      * @since 6.6.0 |      * @since 6.6.0 | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|      */ |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public ScopedQueueCoordinator getForChunk(int x, int z, int minY, int maxY) { |     public ScopedQueueCoordinator getForChunk(int x, int z, int minY, int maxY) { | ||||||
|         int bx = x << 4; |         int bx = x << 4; | ||||||
|         int bz = z << 4; |         int bz = z << 4; | ||||||
|   | |||||||
| @@ -42,6 +42,10 @@ public abstract class ChunkManager { | |||||||
|     private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> forceChunks = new ConcurrentHashMap<>(); |     private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> forceChunks = new ConcurrentHashMap<>(); | ||||||
|     private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> addChunks = new ConcurrentHashMap<>(); |     private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> addChunks = new ConcurrentHashMap<>(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public static void setChunkInPlotArea( |     public static void setChunkInPlotArea( | ||||||
|             RunnableVal<ScopedQueueCoordinator> force, |             RunnableVal<ScopedQueueCoordinator> force, | ||||||
|             RunnableVal<ScopedQueueCoordinator> add, |             RunnableVal<ScopedQueueCoordinator> add, | ||||||
| @@ -79,6 +83,10 @@ public abstract class ChunkManager { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public static boolean preProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) { |     public static boolean preProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) { | ||||||
|         final RunnableVal<ScopedQueueCoordinator> forceChunk = forceChunks.get(loc); |         final RunnableVal<ScopedQueueCoordinator> forceChunk = forceChunks.get(loc); | ||||||
|         if (forceChunk != null) { |         if (forceChunk != null) { | ||||||
| @@ -89,6 +97,10 @@ public abstract class ChunkManager { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @deprecated {@link ScopedQueueCoordinator} will be renamed in v7. | ||||||
|  |      */ | ||||||
|  |     @Deprecated(forRemoval = true, since = "TODO") | ||||||
|     public static boolean postProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) { |     public static boolean postProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) { | ||||||
|         final RunnableVal<ScopedQueueCoordinator> addChunk = forceChunks.get(loc); |         final RunnableVal<ScopedQueueCoordinator> addChunk = forceChunks.get(loc); | ||||||
|         if (addChunk != null) { |         if (addChunk != null) { | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ allprojects { | |||||||
|  |  | ||||||
|         maven { |         maven { | ||||||
|             name = "Sonatype OSS (S01)" |             name = "Sonatype OSS (S01)" | ||||||
|             url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots") |             url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         maven { |         maven { | ||||||
| @@ -64,6 +64,10 @@ subprojects { | |||||||
|         plugin<EclipsePlugin>() |         plugin<EclipsePlugin>() | ||||||
|         plugin<IdeaPlugin>() |         plugin<IdeaPlugin>() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     dependencies { | ||||||
|  |         implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.2")) | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| allprojects { | allprojects { | ||||||
|   | |||||||
| @@ -1,15 +1,9 @@ | |||||||
| [versions] | [versions] | ||||||
| # Minecraft expectations |  | ||||||
| gson = "2.8.8" # Version set by Minecraft |  | ||||||
| log4j-api = "2.17.1" # Version set by Minecraft |  | ||||||
| guava = "31.0.1-jre" # Version set by Minecraft |  | ||||||
|  |  | ||||||
| # Platform expectations | # Platform expectations | ||||||
| paper = "1.18.1-R0.1-SNAPSHOT" | paper = "1.18.1-R0.1-SNAPSHOT" | ||||||
| checker-qual = "3.22.0" | checker-qual = "3.22.0" | ||||||
| guice = "5.1.0" | guice = "5.1.0" | ||||||
| spotbugs = "4.7.0" | spotbugs = "4.7.0" | ||||||
| snakeyaml = "1.30" # Version set by Bukkit |  | ||||||
|  |  | ||||||
| # Adventure & MiniMessage | # Adventure & MiniMessage | ||||||
| adventure-api = "4.9.3" | adventure-api = "4.9.3" | ||||||
| @@ -18,8 +12,6 @@ adventure-platform-bukkit = "4.0.1" | |||||||
|  |  | ||||||
| # Plugins | # Plugins | ||||||
| worldedit = "7.2.10" | worldedit = "7.2.10" | ||||||
| fawe = "2.2.0" |  | ||||||
| vault = "1.7.1" |  | ||||||
| placeholderapi = "2.11.1" | placeholderapi = "2.11.1" | ||||||
| luckperms = "5.4" | luckperms = "5.4" | ||||||
| essentialsx = "2.19.4" | essentialsx = "2.19.4" | ||||||
| @@ -30,11 +22,7 @@ prtree = "2.0.0" | |||||||
| aopalliance = "1.0" | aopalliance = "1.0" | ||||||
| cloud-services = "1.6.2" | cloud-services = "1.6.2" | ||||||
| arkitektonika = "2.1.1" | arkitektonika = "2.1.1" | ||||||
| paster = "1.1.4" |  | ||||||
| bstats = "3.0.0" |  | ||||||
| paperlib = "1.0.7" |  | ||||||
| squirrelid = "0.3.1" | squirrelid = "0.3.1" | ||||||
| serverlib = "2.3.1" |  | ||||||
| http4j = "1.3" | http4j = "1.3" | ||||||
|  |  | ||||||
| # Gradle plugins | # Gradle plugins | ||||||
| @@ -48,12 +36,7 @@ nexus = "1.1.0" | |||||||
| paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" } | paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" } | ||||||
| checkerqual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checker-qual" } | checkerqual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checker-qual" } | ||||||
|  |  | ||||||
| # Minecraft expectations |  | ||||||
| gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } |  | ||||||
| log4j = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j-api" } |  | ||||||
|  |  | ||||||
| # Platform expectations | # Platform expectations | ||||||
| snakeyaml = { group = "org.yaml", name = "snakeyaml", version.ref = "snakeyaml" } |  | ||||||
| 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" } | ||||||
| spotbugs = { group = "com.github.spotbugs", name = "spotbugs-annotations", version.ref = "spotbugs" } | spotbugs = { group = "com.github.spotbugs", name = "spotbugs-annotations", version.ref = "spotbugs" } | ||||||
| @@ -66,9 +49,6 @@ adventurePlatformBukkit = { group = "net.kyori", name = "adventure-platform-bukk | |||||||
| # Plugins | # Plugins | ||||||
| worldeditCore = { group = "com.sk89q.worldedit", name = "worldedit-core", version.ref = "worldedit" } | worldeditCore = { group = "com.sk89q.worldedit", name = "worldedit-core", version.ref = "worldedit" } | ||||||
| worldeditBukkit = { group = "com.sk89q.worldedit", name = "worldedit-bukkit", version.ref = "worldedit" } | worldeditBukkit = { group = "com.sk89q.worldedit", name = "worldedit-bukkit", version.ref = "worldedit" } | ||||||
| fastasyncworldeditBukkit = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Bukkit", version.ref = "fawe" } |  | ||||||
| fastasyncworldeditCore = { group = "com.fastasyncworldedit", name = "FastAsyncWorldEdit-Core", version.ref = "fawe" } |  | ||||||
| vault = { group = "com.github.MilkBowl", name = "VaultAPI", version.ref = "vault" } |  | ||||||
| placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" } | placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" } | ||||||
| luckperms = { group = "net.luckperms", name = "api", version.ref = "luckperms" } | luckperms = { group = "net.luckperms", name = "api", version.ref = "luckperms" } | ||||||
| essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = "essentialsx" } | essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = "essentialsx" } | ||||||
| @@ -79,13 +59,8 @@ aopalliance = { group = "aopalliance", name = "aopalliance", version.ref = "aopa | |||||||
| cloudServices = { group = "cloud.commandframework", name = "cloud-services", version.ref = "cloud-services" } | cloudServices = { group = "cloud.commandframework", name = "cloud-services", version.ref = "cloud-services" } | ||||||
| mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" } | mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" } | ||||||
| squirrelid = { group = "org.enginehub", name = "squirrelid", version.ref = "squirrelid" } | squirrelid = { group = "org.enginehub", name = "squirrelid", version.ref = "squirrelid" } | ||||||
| serverlib = { group = "dev.notmyfault.serverlib", name = "ServerLib", version.ref = "serverlib" } |  | ||||||
| bstats = { group = "org.bstats", name = "bstats-bukkit", version.ref = "bstats" } |  | ||||||
| paperlib = { group = "io.papermc", name = "paperlib", version.ref = "paperlib" } |  | ||||||
| arkitektonika = { group = "com.intellectualsites.arkitektonika", name = "Arkitektonika-Client", version.ref = "arkitektonika" } | arkitektonika = { group = "com.intellectualsites.arkitektonika", name = "Arkitektonika-Client", version.ref = "arkitektonika" } | ||||||
| http4j = { group = "com.intellectualsites.http", name = "HTTP4J", version.ref = "http4j" } | http4j = { group = "com.intellectualsites.http", name = "HTTP4J", version.ref = "http4j" } | ||||||
| paster = { group = "com.intellectualsites.paster", name = "Paster", version.ref = "paster" } |  | ||||||
| guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } |  | ||||||
|  |  | ||||||
| [plugins] | [plugins] | ||||||
| shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } | shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user