diff --git a/Bukkit/build.gradle.kts b/Bukkit/build.gradle.kts index af6816714..74e80ac26 100644 --- a/Bukkit/build.gradle.kts +++ b/Bukkit/build.gradle.kts @@ -21,20 +21,20 @@ dependencies { api(projects.plotsquaredCore) // Metrics - implementation(libs.bstats) + implementation("org.bstats:bstats-bukkit") // Paper compileOnly(libs.paper) - implementation(libs.paperlib) + implementation("io.papermc:paperlib") // Plugins compileOnly(libs.worldeditBukkit) { exclude(group = "org.bukkit") exclude(group = "org.spigotmc") } - compileOnly(libs.fastasyncworldeditBukkit) { isTransitive = false } - testImplementation(libs.fastasyncworldeditBukkit) { isTransitive = false } - compileOnly(libs.vault) { + compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false } + testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false } + compileOnly("com.github.MilkBowl:VaultAPI") { exclude(group = "org.bukkit") } compileOnly(libs.placeholderapi) @@ -44,15 +44,15 @@ dependencies { // Other libraries implementation(libs.squirrelid) { isTransitive = false } - implementation(libs.serverlib) + implementation("dev.notmyfault.serverlib:ServerLib") // Our libraries implementation(libs.arkitektonika) implementation(libs.http4j) - implementation(libs.paster) + implementation("com.intellectualsites.paster:Paster") // Adventure - implementation(libs.adventurePlatformBukkit) + implementation("net.kyori:adventure-platform-bukkit") } tasks.processResources { @@ -97,7 +97,7 @@ tasks.named("shadowJar") { tasks { withType { 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://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/") opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString()) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java index c3c8dae3e..da25e5ae7 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java @@ -575,6 +575,10 @@ public class BlockEventListener implements Listener { if (plot == null) { return; } + if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) { + event.setCancelled(true); + return; + } switch (event.getNewState().getType()) { case SNOW: case SNOW_BLOCK: @@ -774,62 +778,66 @@ public class BlockEventListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onChange(BlockFromToEvent event) { - Block from = event.getBlock(); + Block fromBlock = event.getBlock(); // Check liquid flow flag inside of origin plot too - final Location fLocation = BukkitUtil.adapt(from.getLocation()); - final PlotArea fromArea = fLocation.getPlotArea(); + final Location fromLocation = BukkitUtil.adapt(fromBlock.getLocation()); + final PlotArea fromArea = fromLocation.getPlotArea(); if (fromArea != null) { - final Plot plot = fromArea.getOwnedPlot(fLocation); - if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event + final Plot fromPlot = fromArea.getOwnedPlot(fromLocation); + if (fromPlot != null && fromPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event .getBlock() .isLiquid()) { - plot.debug("Liquid could not flow because liquid-flow = disabled"); + fromPlot.debug("Liquid could not flow because liquid-flow = disabled"); event.setCancelled(true); return; } } - Block to = event.getToBlock(); - Location tLocation = BukkitUtil.adapt(to.getLocation()); - PlotArea area = tLocation.getPlotArea(); - if (area == null) { - if (from.getType() == Material.DRAGON_EGG && fromArea != null) { + Block toBlock = event.getToBlock(); + Location toLocation = BukkitUtil.adapt(toBlock.getLocation()); + PlotArea toArea = toLocation.getPlotArea(); + if (toArea == null) { + if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) { event.setCancelled(true); } 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) { - final Plot fromPlot = fromArea.getOwnedPlot(fLocation); + if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) { + final Plot fromPlot = fromArea.getOwnedPlot(fromLocation); - if (fromPlot != null || plot != null) { - if ((fromPlot == null || !fromPlot.equals(plot)) && (plot == null || !plot.equals(fromPlot))) { + if (fromPlot != null || toPlot != null) { + if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) { event.setCancelled(true); return; } } } - if (plot != null) { - if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(plot, area.getOwnedPlot(fLocation))) { + if (toPlot != null) { + if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) { event.setCancelled(true); return; } - if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) { + if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) { return; } - if (plot.getFlag(DisablePhysicsFlag.class)) { - plot.debug(event.getBlock().getType() + " could not update because disable-physics = true"); + if (toPlot.getFlag(DisablePhysicsFlag.class)) { + toPlot.debug(event.getBlock().getType() + " could not update because disable-physics = true"); event.setCancelled(true); return; } - if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) { - plot.debug("Liquid could not flow because liquid-flow = disabled"); + if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) { + toPlot.debug("Liquid could not flow because liquid-flow = disabled"); 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); } else if (event.getBlock().isLiquid()) { final org.bukkit.Location location = event.getBlock().getLocation(); diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 111c65a9d..e40107c03 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement 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 is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff --git a/Core/build.gradle.kts b/Core/build.gradle.kts index 9bf697e9d..6fb73795e 100644 --- a/Core/build.gradle.kts +++ b/Core/build.gradle.kts @@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter dependencies { // Expected everywhere. - compileOnlyApi(libs.checkerqual) + compileOnlyApi("org.checkerframework:checker-qual") // Minecraft expectations - compileOnlyApi(libs.gson) - compileOnly(libs.guava) + compileOnlyApi("com.google.code.gson:gson") + compileOnly("com.google.guava:guava") // Platform expectations - compileOnlyApi(libs.snakeyaml) + compileOnlyApi("org.yaml:snakeyaml") // Adventure - api(libs.adventure) - api(libs.minimessage) + api("net.kyori:adventure-api") + api("net.kyori:adventure-text-minimessage") // Guice api(libs.guice) { @@ -31,18 +31,18 @@ dependencies { exclude(group = "dummypermscompat") } testImplementation(libs.worldeditCore) - compileOnly(libs.fastasyncworldeditCore) { isTransitive = false } - testImplementation(libs.fastasyncworldeditCore) { isTransitive = false } + compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false } + testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false } // Logging - compileOnlyApi(libs.log4j) + compileOnlyApi("org.apache.logging.log4j:log4j-api") // Other libraries api(libs.prtree) api(libs.aopalliance) api(libs.cloudServices) api(libs.arkitektonika) - api(libs.paster) + api("com.intellectualsites.paster:Paster") } tasks.processResources { diff --git a/Core/src/main/java/com/plotsquared/core/util/ChunkManager.java b/Core/src/main/java/com/plotsquared/core/util/ChunkManager.java index d542bd566..5947e8d52 100644 --- a/Core/src/main/java/com/plotsquared/core/util/ChunkManager.java +++ b/Core/src/main/java/com/plotsquared/core/util/ChunkManager.java @@ -42,6 +42,7 @@ public abstract class ChunkManager { private static final Map> forceChunks = new ConcurrentHashMap<>(); private static final Map> addChunks = new ConcurrentHashMap<>(); + @Deprecated(forRemoval = true, since = "TODO") public static void setChunkInPlotArea( RunnableVal force, RunnableVal add, diff --git a/build.gradle.kts b/build.gradle.kts index 7bf82278f..46f3b0f8d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,7 +34,7 @@ allprojects { maven { 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 { @@ -64,9 +64,12 @@ subprojects { plugin() plugin() } + + dependencies { + implementation(platform("com.intellectualsites.bom:bom-1.18.x:1.2")) + } } -val javadocDir = rootDir.resolve("docs").resolve("javadoc").resolve(project.name) allprojects { dependencies { // Tests @@ -172,11 +175,6 @@ allprojects { } tasks { - named("clean") { - doFirst { - javadocDir.deleteRecursively() - } - } compileJava { options.compilerArgs.addAll(arrayOf("-Xmaxerrs", "1000")) @@ -187,16 +185,6 @@ allprojects { options.encoding = "UTF-8" } - javadoc { - val opt = options as StandardJavadocDocletOptions - opt.addStringOption("Xdoclint:none", "-quiet") - opt.tags( - "apiNote:a:API Note:", - "implSpec:a:Implementation Requirements:", - "implNote:a:Implementation Note:" - ) - } - shadowJar { this.archiveClassifier.set(null as String?) this.archiveFileName.set("${project.name}-${project.version}.${this.archiveExtension.getOrElse("jar")}") @@ -221,37 +209,3 @@ nexusPublishing { } } } - -tasks { - val aggregatedJavadocs = create("aggregatedJavadocs") { - title = "${project.name} ${project.version} API" - setDestinationDir(javadocDir) - options.destinationDirectory = javadocDir - - doFirst { - javadocDir.deleteRecursively() - } - }.also { - it.group = "Documentation" - it.description = "Generate javadocs from all child projects as if it was a single project" - } - - subprojects.forEach { subProject -> - subProject.afterEvaluate { - subProject.tasks.withType().forEach { task -> - aggregatedJavadocs.source += task.source - aggregatedJavadocs.classpath += task.classpath - aggregatedJavadocs.excludes += task.excludes - aggregatedJavadocs.includes += task.includes - - val rootOptions = aggregatedJavadocs.options as StandardJavadocDocletOptions - val subOptions = task.options as StandardJavadocDocletOptions - rootOptions.links(*subOptions.links.orEmpty().minus(rootOptions.links.orEmpty().toSet()).toTypedArray()) - } - } - } - - build { - dependsOn(aggregatedJavadocs) - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index af0a12953..78e264374 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,15 +1,9 @@ [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 paper = "1.18.2-R0.1-SNAPSHOT" checker-qual = "3.22.0" guice = "5.1.0" spotbugs = "4.7.0" -snakeyaml = "1.30" # Version set by Bukkit # Adventure & MiniMessage adventure-api = "4.10.1" @@ -17,8 +11,6 @@ adventure-platform-bukkit = "4.1.0" # Plugins worldedit = "7.2.10" -fawe = "2.2.0" -vault = "1.7.1" placeholderapi = "2.11.1" luckperms = "5.4" essentialsx = "2.19.4" @@ -29,11 +21,7 @@ prtree = "2.0.0" aopalliance = "1.0" cloud-services = "1.6.2" arkitektonika = "2.1.1" -paster = "1.1.4" -bstats = "3.0.0" -paperlib = "1.0.7" squirrelid = "0.3.1" -serverlib = "2.3.1" http4j = "1.3" # Gradle plugins @@ -47,12 +35,7 @@ nexus = "1.1.0" paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" } 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 -snakeyaml = { group = "org.yaml", name = "snakeyaml", version.ref = "snakeyaml" } guice = { group = "com.google.inject", name = "guice", 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" } @@ -65,9 +48,6 @@ adventurePlatformBukkit = { group = "net.kyori", name = "adventure-platform-bukk # Plugins worldeditCore = { group = "com.sk89q.worldedit", name = "worldedit-core", 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" } luckperms = { group = "net.luckperms", name = "api", version.ref = "luckperms" } essentialsx = { group = "net.essentialsx", name = "EssentialsX", version.ref = "essentialsx" } @@ -78,13 +58,8 @@ aopalliance = { group = "aopalliance", name = "aopalliance", version.ref = "aopa cloudServices = { group = "cloud.commandframework", name = "cloud-services", version.ref = "cloud-services" } mvdwapi = { group = "com.intellectualsites.mvdwplaceholderapi", name = "MVdWPlaceholderAPI", version.ref = "mvdwapi" } 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" } 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] shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }