Compare commits

...
43 Commits
Author SHA1 Message Date
wizjany 1cff55f355 Release 7.0.6. 2021-09-16 18:45:05 -04:00
wizjany f4fb78c7f5 Changelog for 7.0.6. 2021-09-16 18:44:42 -04:00
wizjany 56086b0878 Protect light from everything.
Thanks Mojang.
2021-09-16 14:54:36 -04:00
wizjany 51fa25dd03 Protect light from light.
Closes #1828.
2021-09-13 19:12:54 -04:00
wizjany 5b0fdb6801 Include GLOW_ITEM_FRAME in item-frame-rotation flag.
Closes #1832.
2021-09-13 18:57:33 -04:00
stonar96 cb69ab73a7 Fix perms NPE 2021-08-31 16:49:40 -04:00
stonar96 5a6b6eb81b Use QueryOption.SORT for region commands (#1817) 2021-08-22 10:14:40 -04:00
stonar96 75774dbbb0 Fix redefinition of parent regions (#1814) 2021-08-15 17:19:01 -04:00
wizjany fe0fd17d37 Cover additional case for blacklist on-equip. 2021-08-15 11:06:27 -04:00
stonar96 5e702f80a6 Add inheritance for all flags (#1787) 2021-08-08 23:00:02 -04:00
Wyatt Childers 0165175a2e Additionally block other explosion if the defender is a block like entity to be consitent with "block" explosion protections (#1812) 2021-08-08 22:58:34 -04:00
wizjany 821c3e689e Convert listeners to use AbstractListener and add shortcuts to get config. (#1808)
Closes #1780.
2021-08-08 22:58:22 -04:00
stonar96andwizjany 4644268214 Fix member inheritance for non-player associables (#1804)
* Add options to query region sets unsorted and without parents

* Fix member inheritance for non-player associables

* Add member inheritance for non-player associables

* Rename Option to QueryOption, remove functional definitions, bit of cleanup.

Co-authored-by: wizjany <wizjany@gmail.com>
2021-08-08 22:58:09 -04:00
wizjany c81f5892eb Add jsr305 back for annotations.
Blame those pesky WorldEdit devs breaking our builds :^)
2021-08-02 13:21:33 -04:00
LoaiDev 88854592ce Fix handlers order when registering one with after.
I am not sure exactly if this is the source of the problem, but when i tried registering my handlers using ExitFlag.FACTORY as "after" like how the javadocs said it, it seemed that my handler was running before the ExitFlag handler which means mine will run even if ExitFlag returns false. I used null as after and it worked then. Maybe i understand the "after" incorrectly but in my mind my customHandler should run after the "after" not the other way around if that makes sense. Let me know if I didn't undertstand it correctly.
Sorry for my english!
2021-08-01 16:59:56 -04:00
wizjany 8efc2e6539 Revert "Add member inheritance for non-player associables"
This reverts commit b1cd1303d1.
2021-07-25 23:31:44 -04:00
stonar96 b1cd1303d1 Add member inheritance for non-player associables 2021-07-25 10:06:09 -04:00
wizjany c98f9eda7e Check all effects for lingering potion clouds.
Fixes #1797.
2021-07-24 11:36:25 -04:00
JOO200 682942b965 Added NPE error message and javadoc hint for WorldGuard.getPlatform 2021-07-15 19:48:34 +02:00
JOO200 7e817c3330 Protect signs against usage of (glowing) ink sac 2021-07-10 11:09:05 +02:00
wizjany 5302bcb132 Changelog for 7.0.6 beta 1. 2021-07-07 10:17:08 -04:00
stonar96 bcac63dcaa Fix regions in negative heights (#1792) 2021-07-07 10:17:08 -04:00
JOO200 37906c0fc4 Added use-dripleaf flag, Handle Deepslate Redstone Ore correctly 2021-07-07 10:17:08 -04:00
wizjany 6879f10de6 Fix crop growth config option. 2021-07-07 10:17:08 -04:00
JOO200 7155ef5833 Protect cave vines and glow berries correctly 2021-07-07 10:17:08 -04:00
JOO200 e2f775c952 Fixed wrong dependencies, removed not needed repository 2021-07-07 10:17:08 -04:00
JOO200 c5dad7476d Compare items for /stack with ItemStack.isSimilar 2021-07-07 10:17:08 -04:00
JOO200 4dfb9bea38 Switch back dependency from Spigot to Paper 2021-07-07 10:17:08 -04:00
JOO200 7436d5064e Fixed incorrectly shaded squirrelid 2021-07-07 10:17:08 -04:00
JOO200 621c1289b3 Bump squirrelid to 0.3.0, Deprecated PaperProfileServer (replaced by squirrelid) 2021-07-07 10:17:08 -04:00
JOO200 093e282e13 relocate bstats like worldedit 2021-07-07 10:17:08 -04:00
JOO200 2958c2526c Shade correctly bstats 2021-07-07 10:17:08 -04:00
wizjany d21ee98624 Re-add shade config, fix some other gradle black magic. 2021-07-07 10:17:08 -04:00
wizjany dd90fa21c7 Cover item dispense behaviors.
Depends on spigot throwing events.
2021-07-07 10:17:08 -04:00
JOO200 34ed6175e5 Bump api version to 1.17 2021-07-07 10:17:08 -04:00
JOO200 0818b3c262 Update to Java 16, Gradle 7.0.2 and Bstats 2.1.0 2021-07-07 10:17:08 -04:00
JOO200 04541ed5a6 Updated build environment, switched to Jupiter Unit Tests 2021-07-07 10:17:08 -04:00
JOO200 f17f1fc8c8 bump travis-ci to jdk11 2021-07-07 10:17:08 -04:00
JOO200 9defab65d1 Fix protections for copper and rooted dirt 2021-07-07 10:17:08 -04:00
JOO200 a225d1b2d3 Added 1.17 materials 2021-07-07 10:17:08 -04:00
JOO200 bcab33c12c Updated dependencies and gradle 2021-07-07 10:17:08 -04:00
JOO200 3cb83465d1 Update dependencies to 1.17 2021-07-07 10:17:08 -04:00
wizjany 32d16a7eaa Bump to snapshot. 2021-06-07 23:03:37 -04:00
68 changed files with 1455 additions and 1086 deletions

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
language: java
dist: trusty
jdk:
- oraclejdk8
- oraclejdk11
notifications:
email: false
before_install: chmod +x gradlew
+14
View File
@@ -1,8 +1,22 @@
# Changelog
## 7.0.6
* Add support for 1.17 blocks/items, drop support for 1.16.
* Add use-dripleaf flag for "toggling" big dripleaf blocks.
* Fix support for fully negative-height regions.
* Fix crop-growth config option.
* Be more rigorous with protecting blocks against dispenser behaviors.
* Fix handling of lingering splash potion effects.
* Handle other-explosion flag consistently for block-like entities (armor frames etc.)
* Allow inheriting values for all flags (previously wasn't used for things like teleport.)
* Region commands that defaulted to the region the player was standing in no longer check parents.
* Fix child regions being unlinked when redefining a parent region.
## 7.0.5
* Add a use-anvil flag and exclude it from the use flag (since they can break on use.)
* Add nonplayer-protection-domains flag which allows merging region borders from the perspective of pistons, saplings, etc.
* Expand crop-related options (crop-growth, etc) to sweet berry bushes, nether wart, and bamboo.
* Add a config option (`mobs.block-vehicle-entry`) to prevent non-players from entering vehicles.
* Add a UUID flag (for developers/API usage).
+1 -1
View File
@@ -17,7 +17,7 @@ applyRootArtifactoryConfig()
if (!project.hasProperty("gitCommitHash")) {
apply(plugin = "org.ajoberstar.grgit")
ext["gitCommitHash"] = try {
(ext["grgit"] as Grgit?)?.head()?.abbreviatedId
Grgit.open(mapOf("currentDir" to project.rootDir))?.head()?.abbreviatedId
} catch (e: Exception) {
logger.warn("Error getting commit hash", e)
+5 -7
View File
@@ -4,16 +4,14 @@ plugins {
}
repositories {
jcenter()
mavenCentral()
gradlePluginPortal()
}
dependencies {
implementation(gradleApi())
implementation("gradle.plugin.net.minecrell:licenser:0.4.1")
implementation("org.ajoberstar.grgit:grgit-gradle:3.1.1")
implementation("com.github.jengelman.gradle.plugins:shadow:5.1.0")
implementation("net.ltgt.apt-eclipse:net.ltgt.apt-eclipse.gradle.plugin:0.21")
implementation("net.ltgt.apt-idea:net.ltgt.apt-idea.gradle.plugin:0.21")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.9.7")
implementation("gradle.plugin.org.cadixdev.gradle:licenser:0.6.0")
implementation("org.ajoberstar.grgit:grgit-gradle:4.1.0")
implementation("com.github.jengelman.gradle.plugins:shadow:6.1.0")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.21.0")
}
@@ -35,6 +35,6 @@ fun Project.applyRootArtifactoryConfig() {
fun Project.applyCommonArtifactoryConfig() {
tasks.named<ArtifactoryTask>("artifactoryPublish") {
publishConfigs("archives")
publications("maven")
}
}
+20
View File
@@ -1,5 +1,11 @@
import org.cadixdev.gradle.licenser.LicenseExtension
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.repositories
import org.gradle.kotlin.dsl.the
fun Project.applyCommonConfiguration() {
group = rootProject.group
@@ -10,9 +16,23 @@ fun Project.applyCommonConfiguration() {
maven { url = uri("https://maven.enginehub.org/repo/") }
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") }
}
configurations.all {
resolutionStrategy {
cacheChangingModulesFor(5, "MINUTES")
}
}
plugins.withId("java") {
the<JavaPluginExtension>().toolchain {
languageVersion.set(JavaLanguageVersion.of(16))
}
}
apply(plugin = "org.cadixdev.licenser")
configure<LicenseExtension> {
header(rootProject.file("HEADER.txt"))
include("**/*.java")
include("**/*.kt")
}
}
+102 -27
View File
@@ -1,39 +1,54 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.ModuleDependency
import org.gradle.api.internal.HasConvention
import org.gradle.api.plugins.MavenRepositoryHandlerConvention
import org.gradle.api.tasks.Upload
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.DocsType
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.Usage
import org.gradle.api.attributes.java.TargetJvmVersion
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.component.SoftwareComponentFactory
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.getPlugin
import org.gradle.kotlin.dsl.invoke
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
import javax.inject.Inject
fun Project.applyLibrariesConfiguration() {
applyCommonConfiguration()
apply(plugin = "java-base")
apply(plugin = "maven")
apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.jfrog.artifactory")
configurations {
create("shade")
getByName("archives").extendsFrom(getByName("default"))
}
group = "${rootProject.group}.worldguard-libs"
val relocations = mapOf(
"org.enginehub.squirrelid" to "com.sk89q.worldguard.util.profile"
)
tasks.register<ShadowJar>("jar") {
configurations = listOf(project.configurations["shade"])
archiveClassifier.set("")
dependencies {
exclude(dependency("com.google.code.findbugs:jsr305:1.3.9"))
exclude(dependency("com.google.code.findbugs:jsr305"))
}
relocate("com.sk89q.squirrelid", "com.sk89q.worldguard.util.profile")
relocations.forEach { (from, to) ->
relocate(from, to)
}
}
val altConfigFiles = { artifactType: String ->
val deps = configurations["shade"].incoming.dependencies
@@ -58,13 +73,15 @@ fun Project.applyLibrariesConfiguration() {
from({
altConfigFiles("sources")
})
val filePattern = Regex("(.*)com/sk89q/squirrelid((?:/|$).*)")
val textPattern = Regex("com\\.sk89q\\.squirrelid")
eachFile {
filter {
it.replaceFirst(textPattern, "com.sk89q.worldguard.util.profile")
relocations.forEach { (from, to) ->
val filePattern = Regex("(.*)${from.replace('.', '/')}((?:/|$).*)")
val textPattern = Regex.fromLiteral(from)
eachFile {
filter {
it.replaceFirst(textPattern, to)
}
path = path.replaceFirst(filePattern, "$1${to.replace('.', '/')}$2")
}
path = path.replaceFirst(filePattern, "$1com/sk89q/worldguard/util/profile$2")
}
archiveClassifier.set("sources")
}
@@ -73,24 +90,82 @@ fun Project.applyLibrariesConfiguration() {
dependsOn("jar", "sourcesJar")
}
artifacts {
val jar = tasks.named("jar")
add("default", jar) {
builtBy(jar)
}
val sourcesJar = tasks.named("sourcesJar")
add("archives", sourcesJar) {
builtBy(sourcesJar)
project.apply<LibsConfigPluginHack>()
val libsComponent = project.components["libs"] as AdhocComponentWithVariants
val apiElements = project.configurations.register("apiElements") {
isVisible = false
description = "API elements for libs"
isCanBeResolved = false
isCanBeConsumed = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_API))
attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.LIBRARY))
attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling.SHADOWED))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements.JAR))
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 8)
}
outgoing.artifact(tasks.named("jar"))
}
tasks.register<Upload>("install") {
configuration = configurations["archives"]
(repositories as HasConvention).convention.getPlugin<MavenRepositoryHandlerConvention>().mavenInstaller {
pom.version = project.version.toString()
pom.artifactId = project.name
val runtimeElements = project.configurations.register("runtimeElements") {
isVisible = false
description = "Runtime elements for libs"
isCanBeResolved = false
isCanBeConsumed = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.LIBRARY))
attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling.SHADOWED))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements.JAR))
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 8)
}
outgoing.artifact(tasks.named("jar"))
}
val sourcesElements = project.configurations.register("sourcesElements") {
isVisible = false
description = "Source elements for libs"
isCanBeResolved = false
isCanBeConsumed = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.DOCUMENTATION))
attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling.SHADOWED))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, project.objects.named(DocsType.SOURCES))
}
outgoing.artifact(tasks.named("sourcesJar"))
}
libsComponent.addVariantsFromConfiguration(apiElements.get()) {
mapToMavenScope("compile")
}
libsComponent.addVariantsFromConfiguration(runtimeElements.get()) {
mapToMavenScope("runtime")
}
libsComponent.addVariantsFromConfiguration(sourcesElements.get()) {
mapToMavenScope("runtime")
}
configure<PublishingExtension> {
publications {
register<MavenPublication>("maven") {
from(libsComponent)
}
}
}
applyCommonArtifactoryConfig()
}
internal open class LibsConfigPluginHack @Inject constructor(
private val softwareComponentFactory: SoftwareComponentFactory
) : Plugin<Project> {
override fun apply(project: Project) {
val libsComponents = softwareComponentFactory.adhoc("libs")
project.components.add(libsComponents)
}
}
+47 -53
View File
@@ -1,105 +1,95 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import net.minecrell.gradle.licenser.LicenseExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.plugins.quality.CheckstyleExtension
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.api.tasks.testing.Test
import org.gradle.external.javadoc.CoreJavadocOptions
import org.gradle.external.javadoc.StandardJavadocDocletOptions
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.getByName
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.withType
import org.gradle.kotlin.dsl.the
fun Project.applyPlatformAndCoreConfiguration() {
applyCommonConfiguration()
apply(plugin = "java")
apply(plugin = "eclipse")
apply(plugin = "idea")
apply(plugin = "maven")
apply(plugin = "maven-publish")
apply(plugin = "checkstyle")
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.jfrog.artifactory")
apply(plugin = "net.minecrell.licenser")
ext["internalVersion"] = "$version+${rootProject.ext["gitCommitHash"]}"
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
configure<CheckstyleExtension> {
configFile = rootProject.file("config/checkstyle/checkstyle.xml")
toolVersion = "7.6.1"
toolVersion = "8.34"
}
tasks.withType<Test>().configureEach {
useJUnit()
useJUnitPlatform()
}
dependencies {
"testCompile"("junit:junit:${Versions.JUNIT}")
// TODO switch to jupiter - doesn't support abstract test classes so tests need rewriting
//"testImplementation"("org.junit.jupiter:junit-jupiter-api:${Versions.JUNIT}")
//"testRuntime"("org.junit.jupiter:junit-jupiter-engine:${Versions.JUNIT}")
"compileOnly"("com.google.code.findbugs:jsr305:3.0.2")
"testCompileOnly"("com.google.code.findbugs:jsr305:3.0.2")
"testImplementation"("org.junit.jupiter:junit-jupiter-api:${Versions.JUNIT}")
"testImplementation"("org.junit.jupiter:junit-jupiter-params:${Versions.JUNIT}")
"testImplementation"("org.mockito:mockito-core:${Versions.MOCKITO}")
"testImplementation"("org.mockito:mockito-junit-jupiter:${Versions.MOCKITO}")
"testRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine:${Versions.JUNIT}")
}
// Java 8 turns on doclint which we fail
tasks.withType<Javadoc>().configureEach {
(options as CoreJavadocOptions).addStringOption("Xdoclint:none", "-quiet")
(options as StandardJavadocDocletOptions).apply {
addStringOption("Xdoclint:none", "-quiet")
tags(
"apiNote:a:API Note:",
"implSpec:a:Implementation Requirements:",
"implNote:a:Implementation Note:"
)
}
}
tasks.register<Jar>("javadocJar") {
dependsOn("javadoc")
archiveClassifier.set("javadoc")
from(tasks.getByName<Javadoc>("javadoc").destinationDir)
}
tasks.named("assemble").configure {
dependsOn("javadocJar")
}
artifacts {
add("archives", tasks.named("jar"))
add("archives", tasks.named("javadocJar"))
}
the<JavaPluginExtension>().withJavadocJar()
if (name == "worldguard-core" || name == "worldguard-bukkit") {
tasks.register<Jar>("sourcesJar") {
dependsOn("classes")
archiveClassifier.set("sources")
from(sourceSets["main"].allSource)
}
artifacts {
add("archives", tasks.named("sourcesJar"))
}
tasks.named("assemble").configure {
dependsOn("sourcesJar")
}
the<JavaPluginExtension>().withSourcesJar()
}
tasks.named("check").configure {
dependsOn("checkstyleMain", "checkstyleTest")
}
applyCommonArtifactoryConfig()
configure<LicenseExtension> {
header = rootProject.file("HEADER.txt")
include("**/*.java")
configure<PublishingExtension> {
publications {
register<MavenPublication>("maven") {
from(components["java"])
versionMapping {
usage("java-api") {
fromResolutionOf("runtimeClasspath")
}
usage("java-runtime") {
fromResolutionResult()
}
}
}
}
}
applyCommonArtifactoryConfig()
}
fun Project.applyShadowConfiguration() {
apply(plugin = "com.github.johnrengelman.shadow")
tasks.named<ShadowJar>("shadowJar") {
archiveClassifier.set("dist")
dependencies {
@@ -110,10 +100,14 @@ fun Project.applyShadowConfiguration() {
relocate("org.flywaydb", "com.sk89q.worldguard.internal.flywaydb") {
include(dependency("org.flywaydb:flyway-core:3.0"))
}
relocate("com.sk89q.squirrelid", "com.sk89q.worldguard.util.profile")
exclude("com.google.code.findbugs:jsr305")
}
exclude("GradleStart**")
exclude(".cache")
exclude("LICENSE*")
}
val javaComponent = components["java"] as AdhocComponentWithVariants
javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) {
skip()
}
}
+4 -3
View File
@@ -1,8 +1,9 @@
object Versions {
// const val PISTON = "0.4.3"
// const val AUTO_VALUE = "1.6.5"
const val WORLDEDIT = "7.2.0-SNAPSHOT"
const val JUNIT = "4.11"
const val SQUIRRELID = "0.2.0"
const val WORLDEDIT = "7.2.6-SNAPSHOT"
const val JUNIT = "5.7.0"
const val SQUIRRELID = "0.3.0"
const val GUAVA = "21.0"
const val MOCKITO = "3.7.7"
}
+1
View File
@@ -27,6 +27,7 @@
<subpackage name="bukkit">
<allow pkg="org.bukkit"/>
<allow pkg="org.bstats.bukkit"/>
<allow pkg="org.bstats.charts"/>
<allow pkg="io.papermc.lib"/>
<allow pkg="com.destroystokyo.paper"/>
<allow pkg="co.aikar.timings.lib" />
+1 -1
View File
@@ -1,2 +1,2 @@
group=com.sk89q.worldguard
version=7.0.5
version=7.0.6
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+15 -30
View File
@@ -1,10 +1,7 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.internal.HasConvention
plugins {
id("java-library")
id("net.ltgt.apt-eclipse")
id("net.ltgt.apt-idea")
`java-library`
}
applyPlatformAndCoreConfiguration()
@@ -21,39 +18,26 @@ repositories {
}
maven {
name = "aikar-timings"
url = uri("http://repo.aikar.co/nexus/content/groups/aikar/")
url = uri("https://repo.aikar.co/nexus/content/groups/aikar/")
}
}
configurations {
compileClasspath.extendsFrom(create("shade"))
compileClasspath.get().extendsFrom(create("shadeOnly"))
}
dependencies {
"compile"(project(":worldguard-core"))
//"compile"(project(":worldguard-libs:bukkit"))
"api"("com.destroystokyo.paper:paper-api:1.16.2-R0.1-SNAPSHOT")
"shade"("io.papermc:paperlib:1.0.4")
"api"(project(":worldguard-core"))
"compileOnly"("io.papermc.paper:paper-api:1.17-R0.1-SNAPSHOT")
"runtimeOnly"("org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT") {
exclude("junit", "junit")
}
"api"("com.sk89q.worldedit:worldedit-bukkit:${Versions.WORLDEDIT}") { isTransitive = false }
"implementation"("com.google.guava:guava:${Versions.GUAVA}")
"implementation"("com.sk89q:commandbook:2.3") { isTransitive = false }
"shade"("org.bstats:bstats-bukkit:1.7")
"shade"("co.aikar:minecraft-timings:1.0.4")
}
tasks.named<Upload>("install") {
(repositories as HasConvention).convention.getPlugin<MavenRepositoryHandlerConvention>().mavenInstaller {
pom.whenConfigured {
dependencies.firstOrNull { dep ->
dep!!.withGroovyBuilder {
getProperty("groupId") == "com.destroystokyo.paper" && getProperty("artifactId") == "paper-api"
}
}?.withGroovyBuilder {
setProperty("groupId", "org.spigotmc")
setProperty("artifactId", "spigot-api")
}
}
}
"compileOnly"("com.sk89q:commandbook:2.3") { isTransitive = false }
"shadeOnly"("io.papermc:paperlib:1.0.6")
"shadeOnly"("org.bstats:bstats-bukkit:2.1.0")
"shadeOnly"("co.aikar:minecraft-timings:1.0.4")
}
tasks.named<Copy>("processResources") {
@@ -73,11 +57,12 @@ tasks.named<Jar>("jar") {
}
tasks.named<ShadowJar>("shadowJar") {
configurations = listOf(project.configurations["shade"], project.configurations["runtimeClasspath"])
configurations = listOf(project.configurations["shadeOnly"], project.configurations["runtimeClasspath"])
dependencies {
include(dependency(":worldguard-core"))
relocate("org.bstats", "com.sk89q.worldguard.bukkit.bstats") {
include(dependency("org.bstats:bstats-bukkit"))
include(dependency("org.bstats:"))
}
relocate ("io.papermc.lib", "com.sk89q.worldguard.bukkit.paperlib") {
include(dependency("io.papermc:paperlib"))
@@ -94,6 +94,10 @@ public class BukkitConfigurationManager extends YamlConfigurationManager {
@Override
public BukkitWorldConfiguration get(World world) {
String worldName = world.getName();
return get(worldName);
}
public BukkitWorldConfiguration get(String worldName) {
BukkitWorldConfiguration config = worlds.get(worldName);
BukkitWorldConfiguration newConfig = null;
@@ -101,8 +105,8 @@ public class BukkitConfigurationManager extends YamlConfigurationManager {
if (newConfig == null) {
newConfig = new BukkitWorldConfiguration(plugin, worldName, this.getConfig());
}
worlds.putIfAbsent(world.getName(), newConfig);
config = worlds.get(world.getName());
worlds.putIfAbsent(worldName, newConfig);
config = worlds.get(worldName);
}
return config;
@@ -31,7 +31,7 @@ import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.profile.resolver.PaperProfileService;
import com.sk89q.worldguard.util.profile.resolver.PaperPlayerService;
import com.sk89q.worldguard.bukkit.protection.events.flags.FlagContextCreateEvent;
import com.sk89q.worldguard.bukkit.session.BukkitSessionManager;
import com.sk89q.worldguard.bukkit.util.report.PerformanceReport;
@@ -173,7 +173,6 @@ public class BukkitWorldGuardPlatform implements WorldGuardPlatform {
@Override
public void stackPlayerInventory(LocalPlayer localPlayer) {
boolean ignoreMax = localPlayer.hasPermission("worldguard.stack.illegitimate");
boolean ignoreDamaged = localPlayer.hasPermission("worldguard.stack.damaged");
Player player = ((BukkitPlayer) localPlayer).getPlayer();
@@ -207,12 +206,7 @@ public class BukkitWorldGuardPlatform implements WorldGuardPlatform {
}
// Same type?
// Blocks store their color in the damage value
if (item2.getType() == item.getType() &&
(ignoreDamaged || item.getDurability() == item2.getDurability()) &&
((item.getItemMeta() == null && item2.getItemMeta() == null)
|| (item.getItemMeta() != null &&
item.getItemMeta().equals(item2.getItemMeta())))) {
if (item2.isSimilar(item)) {
// This stack won't fit in the parent stack
if (item2.getAmount() > needed) {
item.setAmount(max);
@@ -251,7 +245,7 @@ public class BukkitWorldGuardPlatform implements WorldGuardPlatform {
List<ProfileService> services = new ArrayList<>();
if (PaperLib.isPaper()) {
// Paper has a shared cache
services.add(PaperProfileService.getInstance());
services.add(PaperPlayerService.getInstance());
} else {
services.add(BukkitPlayerService.getInstance());
}
@@ -75,6 +75,9 @@ import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.logging.RecordMessagePrefixer;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.DrilldownPie;
import org.bstats.charts.SimplePie;
import org.bstats.charts.SingleLineChart;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
@@ -105,6 +108,8 @@ public class WorldGuardPlugin extends JavaPlugin {
private final CommandsManager<Actor> commands;
private PlayerMoveListener playerMoveListener;
private static final int BSTATS_PLUGIN_ID = 3283;
/**
* Construct objects. Actual loading occurs when the plugin is enabled, so
* this merely instantiates the objects.
@@ -212,20 +217,20 @@ public class WorldGuardPlugin extends JavaPlugin {
((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).setInitialized(true);
// Enable metrics
final Metrics metrics = new Metrics(this, 3283); // bStats plugin id
if (metrics.isEnabled() && platform.getGlobalStateManager().extraStats) {
final Metrics metrics = new Metrics(this, BSTATS_PLUGIN_ID); // bStats plugin id
if (platform.getGlobalStateManager().extraStats) {
setupCustomCharts(metrics);
}
}
private void setupCustomCharts(Metrics metrics) {
metrics.addCustomChart(new Metrics.SingleLineChart("region_count", () ->
metrics.addCustomChart(new SingleLineChart("region_count", () ->
platform.getRegionContainer().getLoaded().stream().mapToInt(RegionManager::size).sum()));
metrics.addCustomChart(new Metrics.SimplePie("region_driver", () -> {
metrics.addCustomChart(new SimplePie("region_driver", () -> {
RegionDriver driver = platform.getGlobalStateManager().selectedRegionStoreDriver;
return driver instanceof DirectoryYamlDriver ? "yaml" : driver instanceof SQLDriver ? "sql" : "unknown";
}));
metrics.addCustomChart(new Metrics.DrilldownPie("blacklist", () -> {
metrics.addCustomChart(new DrilldownPie("blacklist", () -> {
int empty = 0;
Map<String, Integer> blacklistMap = new HashMap<>();
Map<String, Integer> whitelistMap = new HashMap<>();
@@ -248,14 +253,14 @@ public class WorldGuardPlugin extends JavaPlugin {
blacklistCounts.put("whitelist", whitelistMap);
return blacklistCounts;
}));
metrics.addCustomChart(new Metrics.SimplePie("chest_protection", () ->
metrics.addCustomChart(new SimplePie("chest_protection", () ->
"" + platform.getGlobalStateManager().getWorldConfigs().stream().anyMatch(cfg -> cfg.signChestProtection)));
metrics.addCustomChart(new Metrics.SimplePie("build_permissions", () ->
metrics.addCustomChart(new SimplePie("build_permissions", () ->
"" + platform.getGlobalStateManager().getWorldConfigs().stream().anyMatch(cfg -> cfg.buildPermissions)));
metrics.addCustomChart(new Metrics.SimplePie("custom_flags", () ->
metrics.addCustomChart(new SimplePie("custom_flags", () ->
"" + (WorldGuard.getInstance().getFlagRegistry().size() > Flags.INBUILT_FLAGS.size())));
metrics.addCustomChart(new Metrics.SimplePie("custom_handlers", () ->
metrics.addCustomChart(new SimplePie("custom_handlers", () ->
"" + (WorldGuard.getInstance().getPlatform().getSessionManager().customHandlersRegistered())));
}
@@ -452,6 +457,13 @@ public class WorldGuardPlugin extends JavaPlugin {
return new BukkitOfflinePlayer(this, player);
}
/**
* Internal method. Do not use as API.
*/
public BukkitConfigurationManager getConfigManager() {
return platform.getGlobalStateManager();
}
/**
* Return a protection query helper object that can be used by another
* plugin to test whether WorldGuard permits an action at a particular
@@ -22,13 +22,13 @@ package com.sk89q.worldguard.bukkit.listener;
import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitConfigurationManager;
import com.sk89q.worldguard.bukkit.BukkitPlayer;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.cause.Cause;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.association.DelayedRegionOverlapAssociation;
@@ -72,8 +72,8 @@ class AbstractListener implements Listener {
*
* @return the plugin
*/
protected WorldGuardPlugin getPlugin() {
return plugin;
protected static WorldGuardPlugin getPlugin() {
return WorldGuardPlugin.inst();
}
/**
@@ -81,8 +81,8 @@ class AbstractListener implements Listener {
*
* @return the configuration
*/
protected static ConfigurationManager getConfig() {
return WorldGuard.getInstance().getPlatform().getGlobalStateManager();
protected static BukkitConfigurationManager getConfig() {
return getPlugin().getConfigManager();
}
/**
@@ -91,18 +91,22 @@ class AbstractListener implements Listener {
* @param world The world to get the configuration for.
* @return The configuration for {@code world}
*/
protected static WorldConfiguration getWorldConfig(World world) {
protected static BukkitWorldConfiguration getWorldConfig(String world) {
return getConfig().get(world);
}
protected static BukkitWorldConfiguration getWorldConfig(org.bukkit.World world) {
return getWorldConfig(world.getName());
}
/**
* Get the world configuration given a player.
*
* @param player The player to get the wold from
* @return The {@link WorldConfiguration} for the player's world
*/
protected static WorldConfiguration getWorldConfig(LocalPlayer player) {
return getWorldConfig((World) player.getExtent());
protected static BukkitWorldConfiguration getWorldConfig(LocalPlayer player) {
return getWorldConfig(((BukkitPlayer) player).getPlayer().getWorld());
}
/**
@@ -111,7 +115,7 @@ class AbstractListener implements Listener {
* @param world the world
* @return true if region support is enabled
*/
protected static boolean isRegionSupportEnabled(World world) {
protected static boolean isRegionSupportEnabled(org.bukkit.World world) {
return getWorldConfig(world).useRegions;
}
@@ -127,8 +131,7 @@ class AbstractListener implements Listener {
} else if (rootCause instanceof Entity) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
final Entity entity = (Entity) rootCause;
BukkitWorldConfiguration config =
(BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(entity.getWorld()));
BukkitWorldConfiguration config = getWorldConfig(entity.getWorld());
Location loc;
if (PaperLib.isPaper() && config.usePaperEntityOrigin) {
loc = entity.getOrigin();
@@ -144,7 +147,7 @@ class AbstractListener implements Listener {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
Location loc = ((Block) rootCause).getLocation();
return new DelayedRegionOverlapAssociation(query, BukkitAdapter.adapt(loc),
getWorldConfig(BukkitAdapter.adapt(loc.getWorld())).useMaxPriorityAssociation);
getWorldConfig(loc.getWorld()).useMaxPriorityAssociation);
} else {
return Associables.constant(Association.NON_MEMBER);
}
@@ -31,6 +31,7 @@ import com.sk89q.worldguard.blacklist.event.ItemDestroyWithBlacklistEvent;
import com.sk89q.worldguard.blacklist.event.ItemDropBlacklistEvent;
import com.sk89q.worldguard.blacklist.event.ItemEquipBlacklistEvent;
import com.sk89q.worldguard.blacklist.event.ItemUseBlacklistEvent;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent;
import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent;
@@ -79,20 +80,19 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) {
final Player player = event.getCause().getFirstPlayer();
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
return;
}
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
final WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
event.filter(target -> {
if (!wcfg.getBlacklist().check(
new BlockBreakBlacklistEvent(localPlayer, BukkitAdapter.asBlockVector(target),
@@ -110,6 +110,12 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onPlaceBlock(final PlaceBlockEvent event) {
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
@@ -117,19 +123,18 @@ public class BlacklistListener extends AbstractListener {
}
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
final WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
event.filter(target -> wcfg.getBlacklist().check(new BlockPlaceBlacklistEvent(
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false));
}
@EventHandler(ignoreCancelled = true)
public void onUseBlock(final UseBlockEvent event) {
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
@@ -137,33 +142,25 @@ public class BlacklistListener extends AbstractListener {
}
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
final WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
event.filter(target -> wcfg.getBlacklist().check(new BlockInteractBlacklistEvent(
localPlayer, BukkitAdapter.asBlockVector(target), createTarget(target.getBlock(), event.getEffectiveMaterial())), false, false));
}
@EventHandler(ignoreCancelled = true)
public void onSpawnEntity(SpawnEntityEvent event) {
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
return;
}
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Material material = Materials.getRelatedMaterial(event.getEffectiveType());
if (material != null) {
if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(
@@ -175,21 +172,20 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onDestroyEntity(DestroyEntityEvent event) {
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
return;
}
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Entity target = event.getEntity();
WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
if (target instanceof Item) {
Item item = (Item) target;
if (!wcfg.getBlacklist().check(
@@ -212,21 +208,20 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseItem(UseItemEvent event) {
final WorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
Player player = event.getCause().getFirstPlayer();
if (player == null) {
return;
}
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
final LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
ItemStack target = event.getItemStack();
WorldConfiguration wcfg = getWorldConfig(localPlayer);
// Blacklist guard
if (wcfg.getBlacklist() == null) {
return;
}
if (!wcfg.getBlacklist().check(new ItemUseBlacklistEvent(
localPlayer, BukkitAdapter.asBlockVector(player.getLocation()), createTarget(target)), false, false)) {
event.setCancelled(true);
@@ -241,8 +236,7 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onPlayerDropItem(PlayerDropItemEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getPlayer().getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getPlayer().getWorld());
if (wcfg.getBlacklist() != null) {
Item ci = event.getItemDrop();
@@ -257,8 +251,7 @@ public class BlacklistListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onBlockDispense(BlockDispenseEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getBlock().getWorld()));
BukkitWorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
if (wcfg.getBlacklist() != null) {
if (!wcfg.getBlacklist().check(new BlockDispenseBlacklistEvent(null, BukkitAdapter.asBlockVector(event.getBlock().getLocation()),
@@ -277,8 +270,7 @@ public class BlacklistListener extends AbstractListener {
if (item != null && inventory.getHolder() != null) {
Player player = (Player) entity;
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(entity.getWorld()));
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check(
@@ -340,7 +332,8 @@ public class BlacklistListener extends AbstractListener {
break;
}
} else if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER
&& event.getView().getTopInventory().getType() == InventoryType.PLAYER
&& (event.getView().getTopInventory().getType() == InventoryType.PLAYER
|| event.getView().getTopInventory().getType() == InventoryType.CRAFTING)
&& event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) {
return event.getCurrentItem();
}
@@ -354,8 +347,7 @@ public class BlacklistListener extends AbstractListener {
if (item.getType() != Material.AIR && entity instanceof Player) {
Player player = (Player) entity;
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(entity.getWorld()));
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check(
@@ -372,8 +364,7 @@ public class BlacklistListener extends AbstractListener {
ItemStack item = inventory.getItem(event.getNewSlot());
if (item != null) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(player.getWorld()));
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check(
@@ -389,8 +380,7 @@ public class BlacklistListener extends AbstractListener {
Player player = ((Player) event.getTargetEntity());
ItemStack stack = event.getItem();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(player.getWorld()));
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.getBlacklist() != null && !wcfg.getBlacklist().check(
new ItemEquipBlacklistEvent(localPlayer, BukkitAdapter.asBlockVector(player.getLocation()), createTarget(stack)), false, true)) {
@@ -19,14 +19,11 @@
package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent;
import com.sk89q.worldguard.bukkit.event.inventory.UseItemEvent;
import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.config.ConfigurationManager;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Arrow;
@@ -58,8 +55,7 @@ public class BlockedPotionsListener extends AbstractListener {
if (event.getOriginalEvent() instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent originalEvent = (EntityDamageByEntityEvent) event.getOriginalEvent();
if (Entities.isPotionArrow(originalEvent.getDamager())) { // should take care of backcompat
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getWorld()));
BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld());
PotionEffectType blockedEffect = null;
if (originalEvent.getDamager() instanceof SpectralArrow) {
if (wcfg.blockPotions.contains(PotionEffectType.GLOWING)) {
@@ -96,8 +92,7 @@ public class BlockedPotionsListener extends AbstractListener {
@EventHandler
public void onItemInteract(UseItemEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getWorld()));
BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld());
ItemStack item = event.getItemStack();
if (item.getType() != Material.POTION
@@ -19,7 +19,6 @@
package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent;
import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent;
@@ -52,7 +51,7 @@ public class BuildPermissionListener extends AbstractListener {
}
private void tellErrorMessage(CommandSender sender, World world) {
String message = getWorldConfig(BukkitAdapter.adapt(world)).buildPermissionDenyMessage;
String message = getWorldConfig(world).buildPermissionDenyMessage;
if (!message.isEmpty()) {
sender.sendMessage(message);
}
@@ -60,7 +59,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onPlaceBlock(final PlaceBlockEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -78,7 +77,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -96,7 +95,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseBlock(final UseBlockEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -114,7 +113,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onSpawnEntity(SpawnEntityEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -132,7 +131,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onDestroyEntity(DestroyEntityEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -150,7 +149,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseEntity(UseEntityEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -168,7 +167,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onDamageEntity(DamageEntityEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -186,7 +185,7 @@ public class BuildPermissionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseItem(UseItemEvent event) {
if (!getWorldConfig(BukkitAdapter.adapt(event.getWorld())).buildPermissions) return;
if (!getWorldConfig(event.getWorld()).buildPermissions) return;
Object rootCause = event.getCause().getRootCause();
@@ -59,7 +59,7 @@ public class ChestProtectionListener extends AbstractListener {
final Player player = event.getCause().getFirstPlayer();
if (player != null) {
final BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(WorldGuardPlugin.inst().wrapPlayer(player));
final BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Early guard
if (!wcfg.signChestProtection) {
@@ -82,7 +82,7 @@ public class ChestProtectionListener extends AbstractListener {
public void onBreakBlock(final BreakBlockEvent event) {
final Player player = event.getCause().getFirstPlayer();
final BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(event.getWorld()));
final BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Early guard
if (!wcfg.signChestProtection) {
@@ -108,7 +108,7 @@ public class ChestProtectionListener extends AbstractListener {
public void onUseBlock(final UseBlockEvent event) {
final Player player = event.getCause().getFirstPlayer();
final BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(event.getWorld()));
final BukkitWorldConfiguration wcfg = getWorldConfig(event.getWorld());
// Early guard
if (!wcfg.signChestProtection) {
@@ -133,7 +133,7 @@ public class ChestProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onSignChange(SignChangeEvent event) {
Player player = event.getPlayer();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(WorldGuardPlugin.inst().wrapPlayer(player));
final BukkitWorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
if (wcfg.signChestProtection) {
if ("[Lock]".equalsIgnoreCase(event.getLine(0))) {
@@ -22,7 +22,6 @@ package com.sk89q.worldguard.bukkit.listener;
import static com.sk89q.worldguard.bukkit.cause.Cause.create;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.cause.Cause;
@@ -53,6 +52,7 @@ import org.bukkit.Effect;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
@@ -142,6 +142,8 @@ import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.util.Vector;
@@ -297,6 +299,18 @@ public class EventAbstractionListener extends AbstractListener {
}
}
private void setDelegateEventMaterialOptions(DelegateEvent event, Material fromType, Material toType) {
if (fromType == Material.FARMLAND && toType == Material.DIRT) {
event.setSilent(true);
event.getRelevantFlags().add(Flags.TRAMPLE_BLOCKS);
} else if (Tag.REDSTONE_ORES.isTagged(fromType)) {
event.setSilent(true);
} else if (fromType == Material.BIG_DRIPLEAF && toType == Material.BIG_DRIPLEAF) {
event.setSilent(true);
event.getRelevantFlags().add(Flags.USE_DRIPLEAF);
}
}
@EventHandler(ignoreCancelled = true)
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Block block = event.getBlock();
@@ -307,23 +321,12 @@ public class EventAbstractionListener extends AbstractListener {
// Fire two events: one as BREAK and one as PLACE
if (toType != Material.AIR && fromType != Material.AIR) {
boolean trample = fromType == Material.FARMLAND && toType == Material.DIRT;
BreakBlockEvent breakDelagate = new BreakBlockEvent(event, cause, block);
if (trample) {
breakDelagate.setSilent(true);
breakDelagate.getRelevantFlags().add(Flags.TRAMPLE_BLOCKS);
} else if (fromType == Material.REDSTONE_ORE) {
breakDelagate.setSilent(true);
}
setDelegateEventMaterialOptions(breakDelagate, fromType, toType);
boolean denied;
if (!(denied = Events.fireToCancel(event, breakDelagate))) {
PlaceBlockEvent placeDelegate = new PlaceBlockEvent(event, cause, block.getLocation(), toType);
if (trample) {
placeDelegate.setSilent(true);
placeDelegate.getRelevantFlags().add(Flags.TRAMPLE_BLOCKS);
} else if (fromType == Material.REDSTONE_ORE) {
placeDelegate.setSilent(true);
}
setDelegateEventMaterialOptions(placeDelegate, fromType, toType);
denied = Events.fireToCancel(event, placeDelegate);
}
if (denied && entity instanceof Player) {
@@ -467,7 +470,11 @@ public class EventAbstractionListener extends AbstractListener {
return;
}
DelegateEvent firedEvent = new UseBlockEvent(event, cause, clicked).setAllowed(hasInteractBypass(clicked));
if (clicked.getType() == Material.REDSTONE_ORE) {
if (Tag.REDSTONE_ORES.isTagged(clicked.getType())) {
firedEvent.setSilent(true);
}
if (clicked.getType() == Material.BIG_DRIPLEAF) {
firedEvent.getRelevantFlags().add(Flags.USE_DRIPLEAF);
firedEvent.setSilent(true);
}
interactDebounce.debounce(clicked, event.getPlayer(), event, firedEvent);
@@ -539,7 +546,7 @@ public class EventAbstractionListener extends AbstractListener {
// emit a "use block here" event where the player is
// standing, which is a hack to protect items that don't
// throw events
if (item != null && ((BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(player.getWorld()))).blockUseAtFeet.test(item)) {
if (item != null && getWorldConfig(player.getWorld()).blockUseAtFeet.test(item)) {
if (Events.fireAndTestCancel(new UseBlockEvent(event, cause, player.getLocation().getBlock()))) {
event.setUseInteractedBlock(Result.DENY);
}
@@ -660,7 +667,7 @@ public class EventAbstractionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onBlockFromTo(BlockFromToEvent event) {
WorldConfiguration config = getWorldConfig(BukkitAdapter.adapt(event.getBlock().getWorld()));
WorldConfiguration config = getWorldConfig(event.getBlock().getWorld());
// This only applies to regions but nothing else cares about high
// frequency events at the moment
@@ -706,7 +713,7 @@ public class EventAbstractionListener extends AbstractListener {
case DISPENSE_EGG:
case EGG:
case SPAWNER_EGG:
if (getWorldConfig(BukkitAdapter.adapt(event.getEntity().getWorld())).strictEntitySpawn) {
if (getWorldConfig(event.getEntity().getWorld()).strictEntitySpawn) {
Events.fireToCancel(event, new SpawnEntityEvent(event, Cause.unknown(), event.getEntity()));
}
break;
@@ -950,10 +957,10 @@ public class EventAbstractionListener extends AbstractListener {
WorldConfiguration wcfg = null;
if (causeHolder instanceof Hopper
&& (wcfg = getWorldConfig(BukkitAdapter.adapt((((Hopper) causeHolder).getWorld())))).ignoreHopperMoveEvents) {
&& (wcfg = getWorldConfig((((Hopper) causeHolder).getWorld()))).ignoreHopperMoveEvents) {
return;
} else if (causeHolder instanceof HopperMinecart
&& (wcfg = getWorldConfig(BukkitAdapter.adapt((((HopperMinecart) causeHolder).getWorld())))).ignoreHopperMoveEvents) {
&& (wcfg = getWorldConfig((((HopperMinecart) causeHolder).getWorld()))).ignoreHopperMoveEvents) {
return;
}
@@ -962,13 +969,13 @@ public class EventAbstractionListener extends AbstractListener {
if ((entry = moveItemDebounce.tryDebounce(event)) != null) {
InventoryHolder sourceHolder;
InventoryHolder targetHolder;
if (HAS_SNAPSHOT_INVHOLDER) {
/*if (HAS_SNAPSHOT_INVHOLDER) {
sourceHolder = event.getSource().getHolder(false);
targetHolder = event.getDestination().getHolder(false);
} else {
} else {*/
sourceHolder = event.getSource().getHolder();
targetHolder = event.getDestination().getHolder();
}
//}
Cause cause;
@@ -1050,9 +1057,14 @@ public class EventAbstractionListener extends AbstractListener {
handleBlockRightClick(event, cause, item, clicked, placed);
// handle special dispenser behavior
if (item != null && Materials.isShulkerBox(item.getType())) {
Events.fireToCancel(event, new PlaceBlockEvent(event, cause, placed.getLocation(), item.getType()));
return;
if (Materials.isShulkerBox(item.getType())) {
if (Events.fireToCancel(event, new PlaceBlockEvent(event, cause, placed.getLocation(), item.getType()))) {
playDenyEffect(placed.getLocation());
}
} else if (isItemAppliedToBlock(item, placed)) {
if (Events.fireToCancel(event, new PlaceBlockEvent(event, cause, placed.getLocation(), placed.getType()))) {
playDenyEffect(placed.getLocation());
}
}
}
}
@@ -1076,7 +1088,16 @@ public class EventAbstractionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onLingeringApply(AreaEffectCloudApplyEvent event) {
if (!Materials.hasDamageEffect(event.getEntity().getCustomEffects())) {
AreaEffectCloud entity = event.getEntity();
List<PotionEffect> effects = new ArrayList<>();
PotionEffectType baseEffectType = entity.getBasePotionData().getType().getEffectType();
if (baseEffectType != null) {
effects.add(new PotionEffect(baseEffectType, 0, 0));
}
if (entity.hasCustomEffects()) {
effects.addAll(entity.getCustomEffects());
}
if (!Materials.hasDamageEffect(effects)) {
return;
}
Cause cause = create(event.getEntity());
@@ -1209,15 +1230,15 @@ public class EventAbstractionListener extends AbstractListener {
}
private static boolean hasInteractBypass(Block block) {
return ((BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(block.getWorld()))).allowAllInteract.test(block);
return getWorldConfig(block.getWorld()).allowAllInteract.test(block);
}
private static boolean hasInteractBypass(World world, Material material) {
return ((BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(world))).allowAllInteract.test(material);
return getWorldConfig(world).allowAllInteract.test(material);
}
private static boolean hasInteractBypass(World world, ItemStack item) {
return ((BukkitWorldConfiguration) getWorldConfig(BukkitAdapter.adapt(world))).allowAllInteract.test(item);
return getWorldConfig(world).allowAllInteract.test(item);
}
private static boolean isBlockModifiedOnClick(Block block, boolean rightClick) {
@@ -1232,13 +1253,13 @@ public class EventAbstractionListener extends AbstractListener {
private static void playDenyEffect(Player player, Location location) {
//player.playSound(location, Sound.SUCCESSFUL_HIT, 0.2f, 0.4f);
if (WorldGuard.getInstance().getPlatform().getGlobalStateManager().particleEffects) {
if (getConfig().particleEffects) {
player.playEffect(location, Effect.SMOKE, BlockFace.UP);
}
}
private static void playDenyEffect(Location location) {
if (WorldGuard.getInstance().getPlatform().getGlobalStateManager().particleEffects) {
if (getConfig().particleEffects) {
location.getWorld().playEffect(location, Effect.SMOKE, BlockFace.UP);
}
}
@@ -19,10 +19,8 @@
package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
@@ -64,9 +62,6 @@ public class InvincibilityListener extends AbstractListener {
Player player = (Player) victim;
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
BukkitWorldConfiguration worldConfig =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get((World) localPlayer.getExtent());
if (isInvincible(localPlayer)) {
player.setFireTicks(0);
event.setCancelled(true);
@@ -79,7 +74,7 @@ public class InvincibilityListener extends AbstractListener {
attacker = (Entity) ((Projectile) attacker).getShooter();
}
if (worldConfig.regionInvinciblityRemovesMobs
if (getWorldConfig(player.getWorld()).regionInvinciblityRemovesMobs
&& attacker instanceof LivingEntity && !(attacker instanceof Player)
&& !(attacker instanceof Tameable && ((Tameable) attacker).isTamed())) {
attacker.remove();
@@ -43,27 +43,26 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.util.Vector;
import org.spigotmc.event.entity.EntityMountEvent;
public class PlayerMoveListener implements Listener {
private final WorldGuardPlugin plugin;
public class PlayerMoveListener extends AbstractListener {
public PlayerMoveListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
super(plugin);
}
@Override
public void registerEvents() {
if (WorldGuard.getInstance().getPlatform().getGlobalStateManager().usePlayerMove) {
PluginManager pm = plugin.getServer().getPluginManager();
pm.registerEvents(this, plugin);
PluginManager pm = getPlugin().getServer().getPluginManager();
pm.registerEvents(this, getPlugin());
if (PaperLib.isSpigot()) {
pm.registerEvents(new EntityMountListener(), plugin);
pm.registerEvents(new EntityMountListener(), getPlugin());
}
}
}
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) {
LocalPlayer player = plugin.wrapPlayer(event.getPlayer());
LocalPlayer player = getPlugin().wrapPlayer(event.getPlayer());
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player);
session.testMoveTo(player, BukkitAdapter.adapt(event.getRespawnLocation()), MoveType.RESPAWN, true);
@@ -73,7 +72,7 @@ public class PlayerMoveListener implements Listener {
public void onVehicleEnter(VehicleEnterEvent event) {
Entity entity = event.getEntered();
if (entity instanceof Player) {
LocalPlayer player = plugin.wrapPlayer((Player) entity);
LocalPlayer player = getPlugin().wrapPlayer((Player) entity);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player);
if (null != session.testMoveTo(player, BukkitAdapter.adapt(event.getVehicle().getLocation()), MoveType.EMBARK, true)) {
event.setCancelled(true);
@@ -92,7 +91,7 @@ public class PlayerMoveListener implements Listener {
}
final Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer);
MoveType moveType = MoveType.MOVE;
@@ -133,7 +132,7 @@ public class PlayerMoveListener implements Listener {
player.teleport(override.clone().add(0, 1, 0));
Bukkit.getScheduler().runTaskLater(plugin, () -> player.teleport(override.clone().add(0, 1, 0)), 1);
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1);
}
}
}
@@ -141,7 +140,7 @@ public class PlayerMoveListener implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
final Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer);
com.sk89q.worldedit.util.Location loc = session.testMoveTo(localPlayer,
@@ -156,7 +155,7 @@ public class PlayerMoveListener implements Listener {
public void onEntityMount(EntityMountEvent event) {
Entity entity = event.getEntity();
if (entity instanceof Player) {
LocalPlayer player = plugin.wrapPlayer((Player) entity);
LocalPlayer player = getPlugin().wrapPlayer((Player) entity);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player);
if (null != session.testMoveTo(player, BukkitAdapter.adapt(event.getMount().getLocation()), MoveType.EMBARK, true)) {
event.setCancelled(true);
@@ -57,8 +57,7 @@ public class RegionFlagsListener extends AbstractListener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlaceBlock(final PlaceBlockEvent event) {
com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(event.getWorld());
if (!isRegionSupportEnabled(weWorld)) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
@@ -80,10 +79,9 @@ public class RegionFlagsListener extends AbstractListener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) {
com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(event.getWorld());
if (!isRegionSupportEnabled(weWorld)) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
WorldConfiguration config = getWorldConfig(weWorld);
WorldConfiguration config = getWorldConfig(event.getWorld());
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
Block block;
@@ -118,8 +116,8 @@ public class RegionFlagsListener extends AbstractListener {
public void onEntityDamage(EntityDamageEvent event) {
Entity entity = event.getEntity();
World world = entity.getWorld();
if (!isRegionSupportEnabled(world)) return; // Region support disabled
if (!isRegionSupportEnabled(BukkitAdapter.adapt(world))) return; // Region support disabled
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
if (entity instanceof Player && event.getCause() == DamageCause.FALL) {
@@ -136,15 +136,14 @@ public class RegionProtectionListener extends AbstractListener {
if (rootCause instanceof Player) {
Player player = (Player) rootCause;
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
com.sk89q.worldedit.world.World localWorld = BukkitAdapter.adapt(world);
WorldConfiguration config = getWorldConfig(localWorld);
WorldConfiguration config = getWorldConfig(world);
if (config.fakePlayerBuildOverride && InteropUtils.isFakePlayer(player)) {
return true;
}
return !pvp && WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localWorld);
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
return !pvp && WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld());
} else {
return false;
}
@@ -153,7 +152,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onPlaceBlock(final PlaceBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final Material type = event.getEffectiveMaterial();
@@ -163,7 +162,7 @@ public class RegionProtectionListener extends AbstractListener {
// Don't check liquid flow unless it's enabled
if (event.getCause().getRootCause() instanceof Block
&& Materials.isLiquid(type)
&& !getWorldConfig(BukkitAdapter.adapt(event.getWorld())).checkLiquidFlow) {
&& !getWorldConfig(event.getWorld()).checkLiquidFlow) {
return;
}
@@ -206,7 +205,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
@@ -242,7 +241,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseBlock(final UseBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final Material type = event.getEffectiveMaterial();
@@ -311,7 +310,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onSpawnEntity(SpawnEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget();
@@ -357,7 +356,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onDestroyEntity(DestroyEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget();
@@ -393,7 +392,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onUseEntity(UseEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget();
@@ -412,7 +411,8 @@ public class RegionProtectionListener extends AbstractListener {
what = "use that";
/* Paintings, item frames, etc. */
} else if (Entities.isConsideredBuildingIfUsed(entity)) {
if (type == EntityType.ITEM_FRAME && event.getCause().getFirstPlayer() != null
if ((type == EntityType.ITEM_FRAME || type == EntityType.GLOW_ITEM_FRAME)
&& event.getCause().getFirstPlayer() != null
&& ((ItemFrame) entity).getItem().getType() != Material.AIR) {
canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.ITEM_FRAME_ROTATE));
what = "change that";
@@ -443,7 +443,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onDamageEntity(DamageEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled
// Whitelist check is below
com.sk89q.worldedit.util.Location target = BukkitAdapter.adapt(event.getTarget());
@@ -519,7 +519,7 @@ public class RegionProtectionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onVehicleExit(VehicleExitEvent event) {
Entity vehicle = event.getVehicle();
if (!isRegionSupportEnabled(BukkitAdapter.adapt(vehicle.getWorld()))) return; // Region support disabled
if (!isRegionSupportEnabled(vehicle.getWorld())) return; // Region support disabled
Entity exited = event.getExited();
if (vehicle instanceof Tameable && exited instanceof Player) {
@@ -542,10 +542,6 @@ public class RegionProtectionListener extends AbstractListener {
}
}
private boolean isWhitelistedEntity(Entity entity) {
return Entities.isNonPlayerCreature(entity);
}
/**
* Combine the flags from a delegate event with an array of flags.
*
@@ -41,7 +41,6 @@ import org.bukkit.entity.Snowman;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockExplodeEvent;
@@ -63,12 +62,9 @@ import org.bukkit.inventory.meta.ItemMeta;
/**
* The listener for block events.
*
* @author sk89q
*/
public class WorldGuardBlockListener implements Listener {
public class WorldGuardBlockListener extends AbstractListener {
private WorldGuardPlugin plugin;
/**
* Construct the object.
@@ -76,34 +72,7 @@ public class WorldGuardBlockListener implements Listener {
* @param plugin The plugin instance
*/
public WorldGuardBlockListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
/**
* Register events.
*/
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
/**
* Get the world configuration given a world.
*
* @param world The world to get the configuration for.
* @return The configuration for {@code world}
*/
private WorldConfiguration getWorldConfig(World world) {
return WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(world));
}
/**
* Get the world configuration given a player.
*
* @param player The player to get the wold from
* @return The {@link BukkitWorldConfiguration} for the player's world
*/
private WorldConfiguration getWorldConfig(Player player) {
return getWorldConfig(player.getWorld());
super(plugin);
}
/*
@@ -112,7 +81,7 @@ public class WorldGuardBlockListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
WorldConfiguration wcfg = getWorldConfig(player);
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (!wcfg.itemDurability) {
ItemStack held = player.getInventory().getItemInMainHand();
@@ -134,19 +103,20 @@ public class WorldGuardBlockListener implements Listener {
Block blockFrom = event.getBlock();
Block blockTo = event.getToBlock();
Material fromType = blockFrom.getType();
boolean isWater = Materials.isWater(fromType);
boolean isLava = fromType == Material.LAVA;
boolean isAir = fromType == Material.AIR;
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
Material fromType = blockFrom.getType();
boolean isWater = Materials.isWater(fromType);
boolean isLava = fromType == Material.LAVA;
boolean isAir = fromType == Material.AIR;
WorldConfiguration wcfg = getWorldConfig(world);
if (wcfg.simulateSponge && isWater) {
int ox = blockTo.getX();
int oy = blockTo.getY();
@@ -220,13 +190,14 @@ public class WorldGuardBlockListener implements Listener {
Block block = event.getBlock();
World world = block.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(world);
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
WorldConfiguration wcfg = getWorldConfig(world);
boolean isFireSpread = cause == IgniteCause.SPREAD;
if (wcfg.preventLightningFire && cause == IgniteCause.LIGHTNING) {
@@ -246,7 +217,7 @@ public class WorldGuardBlockListener implements Listener {
if (wcfg.blockLighter && (cause == IgniteCause.FLINT_AND_STEEL || cause == IgniteCause.FIREBALL)
&& event.getPlayer() != null
&& !plugin.hasPermission(event.getPlayer(), "worldguard.override.lighter")) {
&& !getPlugin().hasPermission(event.getPlayer(), "worldguard.override.lighter")) {
event.setCancelled(true);
return;
}
@@ -307,14 +278,15 @@ public class WorldGuardBlockListener implements Listener {
*/
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBlockBurn(BlockBurnEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
BukkitWorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
if (wcfg.disableFireSpread) {
event.setCancelled(true);
return;
@@ -378,15 +350,15 @@ public class WorldGuardBlockListener implements Listener {
*/
@EventHandler(ignoreCancelled = true)
public void onBlockPhysics(BlockPhysicsEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
Material id = event.getBlock().getType();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
final Material id = event.getBlock().getType();
if (id == Material.GRAVEL && wcfg.noPhysicsGravel) {
event.setCancelled(true);
@@ -403,7 +375,7 @@ public class WorldGuardBlockListener implements Listener {
return;
}
if (wcfg.ropeLadders && event.getBlock().getType() == Material.LADDER) {
if (id == Material.LADDER && wcfg.ropeLadders) {
if (event.getBlock().getRelative(0, 1, 0).getType() == Material.LADDER) {
event.setCancelled(true);
return;
@@ -470,14 +442,15 @@ public class WorldGuardBlockListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onLeavesDecay(LeavesDecayEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
if (wcfg.disableLeafDecay) {
event.setCancelled(true);
return;
@@ -495,14 +468,16 @@ public class WorldGuardBlockListener implements Listener {
*/
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBlockForm(BlockFormEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
Material type = event.getNewState().getType();
if (event instanceof EntityBlockFormEvent) {
@@ -553,14 +528,14 @@ public class WorldGuardBlockListener implements Listener {
*/
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBlockSpread(BlockSpreadEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
WorldConfiguration wcfg = getWorldConfig(event.getBlock().getWorld());
Material newType = event.getNewState().getType(); // craftbukkit randomly gives AIR as event.getSource even if that block is not air
if (Materials.isMushroom(newType)) {
@@ -628,7 +603,7 @@ public class WorldGuardBlockListener implements Listener {
WorldConfiguration wcfg = getWorldConfig(loc.getWorld());
if (Materials.isCrop(type)) {
if (wcfg.disableCropGrowth) {
event.setCancelled(false);
event.setCancelled(true);
return;
}
@@ -701,7 +676,7 @@ public class WorldGuardBlockListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onBlockExplode(BlockExplodeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
@@ -62,7 +62,6 @@ import org.bukkit.entity.Wolf;
import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.CreeperPowerEvent;
@@ -91,12 +90,8 @@ import java.util.Set;
/**
* Listener for entity related events.
*
* @author sk89q
*/
public class WorldGuardEntityListener implements Listener {
private WorldGuardPlugin plugin;
public class WorldGuardEntityListener extends AbstractListener {
/**
* Construct the object;
@@ -104,23 +99,14 @@ public class WorldGuardEntityListener implements Listener {
* @param plugin The plugin instance
*/
public WorldGuardEntityListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
/**
* Register events.
*/
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
super(plugin);
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityInteract(EntityInteractEvent event) {
Entity entity = event.getEntity();
Block block = event.getBlock();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(entity.getWorld()));
WorldConfiguration wcfg = getWorldConfig(block.getWorld());
if (block.getType() == Material.FARMLAND && wcfg.disableCreatureCropTrampling) {
event.setCancelled(true);
@@ -134,8 +120,7 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void onEntityDeath(EntityDeathEvent event) {
WorldConfiguration wcfg =
WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(event.getEntity().getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getEntity().getWorld());
if (event instanceof PlayerDeathEvent && wcfg.disableDeathMessages) {
((PlayerDeathEvent) event).setDeathMessage("");
@@ -146,8 +131,7 @@ public class WorldGuardEntityListener implements Listener {
Entity defender = event.getEntity();
DamageCause type = event.getCause();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(defender.getWorld()));
WorldConfiguration wcfg = getWorldConfig(defender.getWorld());
if (defender instanceof Wolf && ((Wolf) defender).isTamed()) {
if (wcfg.antiWolfDumbness && !(type == DamageCause.VOID)) {
@@ -197,7 +181,7 @@ public class WorldGuardEntityListener implements Listener {
// handled anywhere else
if (type == DamageCause.BLOCK_EXPLOSION
&& (wcfg.blockOtherExplosions
|| (wcfg.explosionFlagCancellation
|| ((wcfg.explosionFlagCancellation || Entities.isConsideredBuildingIfUsed(defender))
&& !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery()
.queryState(BukkitAdapter.adapt(defender.getLocation()), (RegionAssociable) null, Flags.OTHER_EXPLOSION))))) {
event.setCancelled(true);
@@ -217,8 +201,7 @@ public class WorldGuardEntityListener implements Listener {
Entity attacker = event.getDamager();
Entity defender = event.getEntity();
WorldConfiguration wcfg =
WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(defender.getWorld()));
WorldConfiguration wcfg = getWorldConfig(defender.getWorld());
if (defender instanceof ItemFrame) {
if (checkItemFrameProtection(attacker, (ItemFrame) defender)) {
@@ -246,7 +229,7 @@ public class WorldGuardEntityListener implements Listener {
if (defender instanceof Player) {
Player player = (Player) defender;
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.disableLightningDamage && event.getCause() == DamageCause.LIGHTNING) {
event.setCancelled(true);
@@ -305,11 +288,10 @@ public class WorldGuardEntityListener implements Listener {
return;
}
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(defender.getWorld()));
WorldConfiguration wcfg = getWorldConfig(defender.getWorld());
if (defender instanceof Player) {
Player player = (Player) defender;
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
// Check Mob
@@ -374,8 +356,7 @@ public class WorldGuardEntityListener implements Listener {
Entity defender = event.getEntity();
DamageCause type = event.getCause();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(defender.getWorld()));
WorldConfiguration wcfg = getWorldConfig(defender.getWorld());
if (defender instanceof Wolf && ((Wolf) defender).isTamed()) {
if (wcfg.antiWolfDumbness) {
@@ -396,14 +377,14 @@ public class WorldGuardEntityListener implements Listener {
if (wcfg.useRegions) {
ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation());
if (!set.testState(plugin.wrapPlayer(player), Flags.MOB_DAMAGE)) {
if (!set.testState(getPlugin().wrapPlayer(player), Flags.MOB_DAMAGE)) {
event.setCancelled(true);
return;
}
}
}
if (type == DamageCause.DROWNING && cfg.hasAmphibiousMode(localPlayer)) {
if (type == DamageCause.DROWNING && getConfig().hasAmphibiousMode(localPlayer)) {
player.setRemainingAir(player.getMaximumAir());
event.setCancelled(true);
return;
@@ -455,10 +436,7 @@ public class WorldGuardEntityListener implements Listener {
*/
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityExplode(EntityExplodeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
Location l = event.getLocation();
World world = l.getWorld();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
ConfigurationManager cfg = getConfig();
Entity ent = event.getEntity();
if (cfg.activityHaltToggle) {
@@ -467,6 +445,7 @@ public class WorldGuardEntityListener implements Listener {
return;
}
BukkitWorldConfiguration wcfg = getWorldConfig(event.getLocation().getWorld());
if (ent instanceof Creeper) {
if (wcfg.blockCreeperExplosions) {
event.setCancelled(true);
@@ -573,8 +552,7 @@ public class WorldGuardEntityListener implements Listener {
*/
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onExplosionPrime(ExplosionPrimeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
ConfigurationManager cfg = getConfig();
Entity ent = event.getEntity();
if (cfg.activityHaltToggle) {
@@ -583,6 +561,7 @@ public class WorldGuardEntityListener implements Listener {
return;
}
BukkitWorldConfiguration wcfg = getWorldConfig(ent.getWorld());
if (event.getEntityType() == EntityType.WITHER) {
if (wcfg.blockWitherExplosions) {
event.setCancelled(true);
@@ -614,14 +593,14 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onCreatureSpawn(CreatureSpawnEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
event.setCancelled(true);
return;
}
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getEntity().getWorld());
// allow spawning of creatures from plugins
if (!wcfg.blockPluginSpawning && event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.CUSTOM) {
@@ -676,19 +655,18 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onCreatePortal(PortalCreateEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
final com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getWorld());
WorldConfiguration wcfg = cfg.get(world);
WorldConfiguration wcfg = getWorldConfig(event.getWorld());
if (wcfg.regionNetherPortalProtection
&& event.getReason() == PortalCreateEvent.CreateReason.NETHER_PAIR
&& !event.getBlocks().isEmpty()) {
final com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getWorld());
final RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer()
.get(world);
if (regionManager == null) return;
LocalPlayer associable = null;
if (event.getEntity() instanceof Player) {
associable = plugin.wrapPlayer(((Player) event.getEntity()));
associable = getPlugin().wrapPlayer(((Player) event.getEntity()));
if (WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(associable, world)) {
return;
}
@@ -721,9 +699,8 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityTransform(EntityTransformEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
final Entity entity = event.getEntity();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(entity.getWorld()));
WorldConfiguration wcfg = getWorldConfig(entity.getWorld());
final EntityType type = entity.getType();
if (wcfg.disableVillagerZap && type == EntityType.VILLAGER
@@ -734,9 +711,8 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPigZap(PigZapEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
final Entity entity = event.getEntity();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(entity.getWorld()));
WorldConfiguration wcfg = getWorldConfig(entity.getWorld());
if (wcfg.disablePigZap) {
event.setCancelled(true);
@@ -745,8 +721,8 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onCreeperPower(CreeperPowerEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
final Entity entity = event.getEntity();
WorldConfiguration wcfg = getWorldConfig(entity.getWorld());
if (wcfg.disableCreeperPower) {
event.setCancelled(true);
@@ -761,10 +737,8 @@ public class WorldGuardEntityListener implements Listener {
}
Entity ent = event.getEntity();
World world = ent.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(ent.getWorld());
if (wcfg.disableHealthRegain) {
event.setCancelled(true);
@@ -784,11 +758,10 @@ public class WorldGuardEntityListener implements Listener {
if (event.getItem() != null) return;
HumanEntity ent = event.getEntity();
if (!(ent instanceof Player)) return;
LocalPlayer player = WorldGuardPlugin.inst().wrapPlayer((Player) ent);
if (event.getFoodLevel() > player.getFoodLevel()) return;
if (event.getFoodLevel() > ent.getFoodLevel()) return;
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(player.getWorld());
LocalPlayer player = WorldGuardPlugin.inst().wrapPlayer((Player) ent);
WorldConfiguration wcfg = getWorldConfig(ent.getWorld());
if (wcfg.useRegions
&& !WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().testState(
@@ -805,11 +778,8 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Entity ent = event.getEntity();
Block block = event.getBlock();
Location location = block.getLocation();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(ent.getWorld()));
WorldConfiguration wcfg = getWorldConfig(ent.getWorld());
if (ent instanceof FallingBlock) {
Material id = event.getBlock().getType();
@@ -833,6 +803,7 @@ public class WorldGuardEntityListener implements Listener {
return;
}
if (wcfg.useRegions) {
Location location = event.getBlock().getLocation();
if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(location), (RegionAssociable) null, Flags.WITHER_DAMAGE))) {
event.setCancelled(true);
return;
@@ -848,8 +819,7 @@ public class WorldGuardEntityListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onVehicleEnter(VehicleEnterEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getEntered().getWorld()));
BukkitWorldConfiguration wcfg = getWorldConfig(event.getEntered().getWorld());
if (wcfg.blockEntityVehicleEntry && !(event.getEntered() instanceof Player)) {
event.setCancelled(true);
@@ -864,9 +834,8 @@ public class WorldGuardEntityListener implements Listener {
* @return true if the event should be cancelled
*/
private boolean checkItemFrameProtection(Entity attacker, ItemFrame defender) {
World world = attacker.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
World world = defender.getWorld();
WorldConfiguration wcfg = getWorldConfig(world);
if (wcfg.useRegions) {
// bukkit throws this event when a player attempts to remove an item from a frame
if (!(attacker instanceof Player)) {
@@ -22,7 +22,6 @@ package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags;
@@ -38,7 +37,6 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
@@ -46,35 +44,18 @@ import org.bukkit.projectiles.ProjectileSource;
/**
* Listener for painting related events.
*
* @author BangL <henno.rickowski@gmail.com>
*/
public class WorldGuardHangingListener implements Listener {
public class WorldGuardHangingListener extends AbstractListener {
private WorldGuardPlugin plugin;
/**
* Construct the object;
*
* @param plugin The plugin instance
*/
public WorldGuardHangingListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
/**
* Register events.
*/
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
super(plugin);
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onHangingBreak(HangingBreakEvent event) {
Hanging hanging = event.getEntity();
World world = hanging.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(world);
if (event instanceof HangingBreakByEntityEvent) {
HangingBreakByEntityEvent entityEvent = (HangingBreakByEntityEvent) event;
@@ -48,7 +48,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
@@ -61,45 +60,31 @@ import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
import javax.annotation.Nullable;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
/**
* Handles all events thrown in relation to a player.
*/
public class WorldGuardPlayerListener implements Listener {
public class WorldGuardPlayerListener extends AbstractListener {
private static final Logger log = Logger.getLogger(WorldGuardPlayerListener.class.getCanonicalName());
private static final Pattern opPattern = Pattern.compile("^/(?:minecraft:)?(?:bukkit:)?(?:de)?op(?:\\s.*)?$", Pattern.CASE_INSENSITIVE);
private WorldGuardPlugin plugin;
/**
* Construct the object;
*
* @param plugin
*/
public WorldGuardPlayerListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
super(plugin);
}
/**
* Register events.
*/
public void registerEvents() {
PluginManager pm = plugin.getServer().getPluginManager();
pm.registerEvents(this, plugin);
}
@EventHandler
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
WorldConfiguration wcfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().getIfPresent(localPlayer);
if (session != null) {
GameModeFlag handler = session.getHandler(GameModeFlag.class);
@@ -117,11 +102,10 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
World world = player.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(localPlayer.getWorld());
ConfigurationManager cfg = getConfig();
WorldConfiguration wcfg = getWorldConfig(world);
if (cfg.activityHaltToggle) {
player.sendMessage(ChatColor.YELLOW
@@ -155,9 +139,8 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
WorldConfiguration wcfg =
WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.useRegions) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
ApplicableRegionSet chatFrom = query.getApplicableRegions(localPlayer.getLocation());
@@ -172,7 +155,7 @@ public class WorldGuardPlayerListener implements Listener {
boolean anyRemoved = false;
for (Iterator<Player> i = event.getRecipients().iterator(); i.hasNext();) {
Player rPlayer = i.next();
LocalPlayer rLocal = plugin.wrapPlayer(rPlayer);
LocalPlayer rLocal = getPlugin().wrapPlayer(rPlayer);
if (!query.testState(rLocal.getLocation(), rLocal, Flags.RECEIVE_CHAT)) {
i.remove();
anyRemoved = true;
@@ -187,7 +170,7 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerLogin(PlayerLoginEvent event) {
Player player = event.getPlayer();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
ConfigurationManager cfg = getConfig();
String hostKey = cfg.hostKeys.get(player.getUniqueId().toString());
if (hostKey == null) {
@@ -229,11 +212,11 @@ public class WorldGuardPlayerListener implements Listener {
handlePhysicalInteract(event);
}
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
ConfigurationManager cfg = getConfig();
WorldConfiguration wcfg = getWorldConfig(world);
if (wcfg.removeInfiniteStacks
&& !plugin.hasPermission(player, "worldguard.override.infinite-stack")) {
&& !getPlugin().hasPermission(player, "worldguard.override.infinite-stack")) {
int slot = player.getInventory().getHeldItemSlot();
ItemStack heldItem = player.getInventory().getItem(slot);
if (heldItem != null && heldItem.getAmount() < 0) {
@@ -259,13 +242,12 @@ public class WorldGuardPlayerListener implements Listener {
Player player = event.getPlayer();
@Nullable ItemStack item = event.getItem();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(world);
// Infinite stack removal
if (Materials.isInventoryBlock(type)
&& wcfg.removeInfiniteStacks
&& !plugin.hasPermission(player, "worldguard.override.infinite-stack")) {
&& !getPlugin().hasPermission(player, "worldguard.override.infinite-stack")) {
for (int slot = 0; slot < 40; slot++) {
ItemStack heldItem = player.getInventory().getItem(slot);
if (heldItem != null && heldItem.getAmount() < 0) {
@@ -280,9 +262,9 @@ public class WorldGuardPlayerListener implements Listener {
ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation()));
//ApplicableRegionSet placedInSet = plugin.getRegionContainer().createQuery().getApplicableRegions(placedIn.getLocation());
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (item != null && item.getType().getKey().toString().equals(wcfg.regionWand) && plugin.hasPermission(player, "worldguard.region.wand")) {
if (item != null && item.getType().getKey().toString().equals(wcfg.regionWand) && getPlugin().hasPermission(player, "worldguard.region.wand")) {
if (set.size() > 0) {
player.sendMessage(ChatColor.YELLOW + "Can you build? " + (set.testState(localPlayer, Flags.BUILD) ? "Yes" : "No"));
@@ -317,8 +299,7 @@ public class WorldGuardPlayerListener implements Listener {
Material type = block.getType();
World world = player.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(world);
if (type == Material.FARMLAND && wcfg.disablePlayerCropTrampling) {
event.setCancelled(true);
@@ -333,12 +314,10 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(localPlayer.getWorld());
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.useRegions) {
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation());
@@ -353,12 +332,10 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void onItemHeldChange(PlayerItemHeldEvent event) {
Player player = event.getPlayer();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(player.getWorld()));
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.removeInfiniteStacks
&& !plugin.hasPermission(player, "worldguard.override.infinite-stack")) {
&& !getPlugin().hasPermission(player, "worldguard.override.infinite-stack")) {
int newSlot = event.getNewSlot();
ItemStack heldItem = player.getInventory().getItem(newSlot);
if (heldItem != null && heldItem.getAmount() < 0) {
@@ -371,15 +348,14 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(localPlayer.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
ConfigurationManager cfg = getConfig();
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.useRegions && cfg.usePlayerTeleports) {
ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(event.getTo()));
ApplicableRegionSet setFrom =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(event.getFrom()));
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(event.getTo()));
ApplicableRegionSet setFrom = query.getApplicableRegions(BukkitAdapter.adapt(event.getFrom()));
if (event.getCause() == TeleportCause.ENDER_PEARL) {
if (!WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld())) {
@@ -431,9 +407,9 @@ public class WorldGuardPlayerListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(localPlayer.getWorld());
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
ConfigurationManager cfg = getConfig();
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.useRegions && !WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld())) {
ApplicableRegionSet set =
@@ -19,42 +19,28 @@
package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitConfigurationManager;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.plugin.PluginManager;
/**
* @author zml2008
*/
public class WorldGuardServerListener implements Listener {
private final WorldGuardPlugin plugin;
public class WorldGuardServerListener extends AbstractListener {
public WorldGuardServerListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
public void registerEvents() {
PluginManager pm = plugin.getServer().getPluginManager();
pm.registerEvents(this, plugin);
super(plugin);
}
@EventHandler
public void onPluginEnable(PluginEnableEvent event) {
if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) {
((BukkitConfigurationManager) WorldGuard.getInstance().getPlatform().getGlobalStateManager()).updateCommandBookGodMode();
getConfig().updateCommandBookGodMode();
}
}
@EventHandler
public void onPluginDisable(PluginDisableEvent event) {
if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) {
((BukkitConfigurationManager) WorldGuard.getInstance().getPlatform().getGlobalStateManager()).updateCommandBookGodMode();
getConfig().updateCommandBookGodMode();
}
}
}
@@ -24,7 +24,6 @@ import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.session.MoveType;
import com.sk89q.worldguard.util.Locations;
@@ -32,31 +31,16 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.entity.Vehicle;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.util.Vector;
import java.util.List;
import java.util.stream.Collectors;
public class WorldGuardVehicleListener implements Listener {
public class WorldGuardVehicleListener extends AbstractListener {
private WorldGuardPlugin plugin;
/**
* Construct the object;
*
* @param plugin
*/
public WorldGuardVehicleListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
/**
* Register events.
*/
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
super(plugin);
}
@EventHandler
@@ -69,14 +53,13 @@ public class WorldGuardVehicleListener implements Listener {
return;
}
World world = vehicle.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(world);
if (wcfg.useRegions) {
// Did we move a block?
if (Locations.isDifferentBlock(BukkitAdapter.adapt(event.getFrom()), BukkitAdapter.adapt(event.getTo()))) {
for (Player player : playerPassengers) {
LocalPlayer localPlayer = plugin.wrapPlayer(player);
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Location lastValid;
if ((lastValid = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer)
.testMoveTo(localPlayer, BukkitAdapter.adapt(event.getTo()), MoveType.RIDE)) != null) {
@@ -22,7 +22,6 @@ package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags;
@@ -33,35 +32,19 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.weather.LightningStrikeEvent;
import org.bukkit.event.weather.ThunderChangeEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
public class WorldGuardWeatherListener implements Listener {
public class WorldGuardWeatherListener extends AbstractListener {
/**
* Plugin.
*/
private WorldGuardPlugin plugin;
/**
* Construct the object;
*
* @param plugin The plugin instance
*/
public WorldGuardWeatherListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
super(plugin);
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onWeatherChange(WeatherChangeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getWorld());
if (event.toWeatherState()) {
if (wcfg.disableWeather) {
@@ -76,8 +59,7 @@ public class WorldGuardWeatherListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onThunderChange(ThunderChangeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getWorld());
if (event.toThunderState()) {
if (wcfg.disableThunder) {
@@ -92,8 +74,7 @@ public class WorldGuardWeatherListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onLightningStrike(LightningStrikeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getWorld()));
WorldConfiguration wcfg = getWorldConfig(event.getWorld());
if (!wcfg.disallowedLightningBlocks.isEmpty()) {
final Block target = event.getLightning().getLocation().getBlock();
@@ -34,30 +34,17 @@ import org.bukkit.event.world.WorldLoadEvent;
import java.util.logging.Logger;
public class WorldGuardWorldListener implements Listener {
public class WorldGuardWorldListener extends AbstractListener {
private static final Logger log = Logger.getLogger(WorldGuardWorldListener.class.getCanonicalName());
private WorldGuardPlugin plugin;
/**
* Construct the object;
*
* @param plugin The plugin instance
*/
public WorldGuardWorldListener(WorldGuardPlugin plugin) {
this.plugin = plugin;
}
/**
* Register events.
*/
public void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
super(plugin);
}
@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
ConfigurationManager cfg = getConfig();
if (cfg.activityHaltToggle) {
int removed = 0;
@@ -89,8 +76,7 @@ public class WorldGuardWorldListener implements Listener {
* @param world The specified world
*/
public void initWorld(World world) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(world));
WorldConfiguration wcfg = getWorldConfig(world);
if (wcfg.alwaysRaining && !wcfg.disableWeather) {
world.setStorm(true);
} else if (wcfg.disableWeather && !wcfg.alwaysRaining) {
@@ -19,7 +19,6 @@
package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent;
import com.sk89q.worldguard.config.WorldConfiguration;
@@ -42,7 +41,7 @@ public class WorldRulesListener extends AbstractListener {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onSpawnEntity(final SpawnEntityEvent event) {
if (event.getEffectiveType() == EntityType.EXPERIENCE_ORB) {
WorldConfiguration config = getWorldConfig(BukkitAdapter.adapt(event.getWorld()));
WorldConfiguration config = getWorldConfig(event.getWorld());
if (config.disableExpDrops) {
event.setCancelled(true);
@@ -53,7 +52,7 @@ public class WorldRulesListener extends AbstractListener {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPotionEffect(EntityPotionEffectEvent event) {
if (event.getCause() == EntityPotionEffectEvent.Cause.CONDUIT) {
WorldConfiguration config = getWorldConfig(BukkitAdapter.adapt(event.getEntity().getWorld()));
WorldConfiguration config = getWorldConfig(event.getEntity().getWorld());
if (config.disableConduitEffects) {
event.setCancelled(true);
@@ -60,6 +60,7 @@ public final class Materials {
ENTITY_ITEMS.put(EntityType.ENDER_PEARL, Material.ENDER_PEARL);
ENTITY_ITEMS.put(EntityType.THROWN_EXP_BOTTLE, Material.EXPERIENCE_BOTTLE);
ENTITY_ITEMS.put(EntityType.ITEM_FRAME, Material.ITEM_FRAME);
ENTITY_ITEMS.put(EntityType.GLOW_ITEM_FRAME, Material.GLOW_ITEM_FRAME);
ENTITY_ITEMS.put(EntityType.PRIMED_TNT, Material.TNT);
ENTITY_ITEMS.put(EntityType.FIREWORK, Material.FIREWORK_ROCKET);
ENTITY_ITEMS.put(EntityType.MINECART_COMMAND, Material.COMMAND_BLOCK_MINECART);
@@ -84,12 +85,8 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.LAVA, 0);
MATERIAL_FLAGS.put(Material.SAND, 0);
MATERIAL_FLAGS.put(Material.GRAVEL, 0);
MATERIAL_FLAGS.put(Material.GOLD_ORE, 0);
MATERIAL_FLAGS.put(Material.IRON_ORE, 0);
MATERIAL_FLAGS.put(Material.COAL_ORE, 0);
MATERIAL_FLAGS.put(Material.SPONGE, 0);
MATERIAL_FLAGS.put(Material.GLASS, 0);
MATERIAL_FLAGS.put(Material.LAPIS_ORE, 0);
MATERIAL_FLAGS.put(Material.LAPIS_BLOCK, 0);
MATERIAL_FLAGS.put(Material.DISPENSER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.SANDSTONE, 0);
@@ -121,7 +118,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.SPAWNER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CHEST, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.REDSTONE_WIRE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.DIAMOND_ORE, 0);
MATERIAL_FLAGS.put(Material.DIAMOND_BLOCK, 0);
MATERIAL_FLAGS.put(Material.CRAFTING_TABLE, 0);
MATERIAL_FLAGS.put(Material.WHEAT, 0);
@@ -132,7 +128,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.COBBLESTONE_STAIRS, 0);
MATERIAL_FLAGS.put(Material.LEVER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.STONE_PRESSURE_PLATE, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_ORE, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_WALL_TORCH, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_TORCH, 0);
MATERIAL_FLAGS.put(Material.SNOW, 0);
@@ -181,7 +176,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.NETHER_BRICK_STAIRS, 0);
MATERIAL_FLAGS.put(Material.ENCHANTING_TABLE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BREWING_STAND, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CAULDRON, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.END_PORTAL, 0);
MATERIAL_FLAGS.put(Material.END_PORTAL_FRAME, 0);
MATERIAL_FLAGS.put(Material.END_STONE, 0);
@@ -189,7 +183,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.REDSTONE_LAMP, 0);
MATERIAL_FLAGS.put(Material.COCOA, 0);
MATERIAL_FLAGS.put(Material.SANDSTONE_STAIRS, 0);
MATERIAL_FLAGS.put(Material.EMERALD_ORE, 0);
MATERIAL_FLAGS.put(Material.ENDER_CHEST, 0);
MATERIAL_FLAGS.put(Material.TRIPWIRE_HOOK, 0);
MATERIAL_FLAGS.put(Material.TRIPWIRE, 0);
@@ -235,7 +228,7 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.ACACIA_DOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.DARK_OAK_DOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.GRASS_PATH, 0);
MATERIAL_FLAGS.put(Material.DIRT_PATH, 0);
MATERIAL_FLAGS.put(Material.CHORUS_PLANT, 0);
MATERIAL_FLAGS.put(Material.CHORUS_FLOWER, 0);
MATERIAL_FLAGS.put(Material.BEETROOTS, 0);
@@ -697,7 +690,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.NETHERITE_SHOVEL, 0);
MATERIAL_FLAGS.put(Material.NETHERITE_SWORD, 0);
MATERIAL_FLAGS.put(Material.NETHER_GOLD_ORE, 0);
MATERIAL_FLAGS.put(Material.NETHER_SPROUTS, 0);
MATERIAL_FLAGS.put(Material.PIGLIN_BANNER_PATTERN, 0);
MATERIAL_FLAGS.put(Material.POLISHED_BASALT, 0);
@@ -726,6 +718,81 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.WEEPING_VINES, 0);
MATERIAL_FLAGS.put(Material.WEEPING_VINES_PLANT, 0);
// 1.17
MATERIAL_FLAGS.put(Material.DEEPSLATE, 0);
MATERIAL_FLAGS.put(Material.COBBLED_DEEPSLATE, 0);
MATERIAL_FLAGS.put(Material.POLISHED_DEEPSLATE, 0);
MATERIAL_FLAGS.put(Material.CALCITE, 0);
MATERIAL_FLAGS.put(Material.TUFF, 0);
MATERIAL_FLAGS.put(Material.DRIPSTONE_BLOCK, 0);
MATERIAL_FLAGS.put(Material.ROOTED_DIRT, 0);
MATERIAL_FLAGS.put(Material.RAW_IRON_BLOCK, 0);
MATERIAL_FLAGS.put(Material.RAW_COPPER_BLOCK, 0);
MATERIAL_FLAGS.put(Material.RAW_GOLD_BLOCK, 0);
MATERIAL_FLAGS.put(Material.AMETHYST_BLOCK, 0);
MATERIAL_FLAGS.put(Material.BUDDING_AMETHYST, 0);
MATERIAL_FLAGS.put(Material.EXPOSED_COPPER, 0);
MATERIAL_FLAGS.put(Material.WEATHERED_COPPER, 0);
MATERIAL_FLAGS.put(Material.OXIDIZED_COPPER, 0);
MATERIAL_FLAGS.put(Material.CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.EXPOSED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.WEATHERED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.OXIDIZED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_COPPER_BLOCK, 0);
MATERIAL_FLAGS.put(Material.WAXED_EXPOSED_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_WEATHERED_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_OXIDIZED_COPPER, 0);
MATERIAL_FLAGS.put(Material.AZALEA, 0);
MATERIAL_FLAGS.put(Material.FLOWERING_AZALEA, 0);
MATERIAL_FLAGS.put(Material.COPPER_BLOCK, 0);
MATERIAL_FLAGS.put(Material.WAXED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_EXPOSED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_WEATHERED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.WAXED_OXIDIZED_CUT_COPPER, 0);
MATERIAL_FLAGS.put(Material.TINTED_GLASS, 0);
MATERIAL_FLAGS.put(Material.SPORE_BLOSSOM, 0);
MATERIAL_FLAGS.put(Material.MOSS_CARPET, 0);
MATERIAL_FLAGS.put(Material.BIG_DRIPLEAF, 0);
MATERIAL_FLAGS.put(Material.BIG_DRIPLEAF_STEM, 0);
MATERIAL_FLAGS.put(Material.SMALL_DRIPLEAF, 0);
MATERIAL_FLAGS.put(Material.SMOOTH_BASALT, 0);
MATERIAL_FLAGS.put(Material.INFESTED_DEEPSLATE, 0);
MATERIAL_FLAGS.put(Material.DEEPSLATE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.CRACKED_DEEPSLATE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.DEEPSLATE_TILES, 0);
MATERIAL_FLAGS.put(Material.CRACKED_DEEPSLATE_TILES, 0);
MATERIAL_FLAGS.put(Material.CHISELED_DEEPSLATE, 0);
MATERIAL_FLAGS.put(Material.GLOW_LICHEN, 0);
MATERIAL_FLAGS.put(Material.LIGHT, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.LIGHTNING_ROD, 0);
MATERIAL_FLAGS.put(Material.SCULK_SENSOR, 0);
MATERIAL_FLAGS.put(Material.AMETHYST_SHARD, 0);
MATERIAL_FLAGS.put(Material.RAW_IRON, 0);
MATERIAL_FLAGS.put(Material.RAW_COPPER, 0);
MATERIAL_FLAGS.put(Material.COPPER_INGOT, 0);
MATERIAL_FLAGS.put(Material.RAW_GOLD, 0);
MATERIAL_FLAGS.put(Material.POWDER_SNOW_BUCKET, 0);
MATERIAL_FLAGS.put(Material.AXOLOTL_BUCKET, 0);
MATERIAL_FLAGS.put(Material.BUNDLE, 0);
MATERIAL_FLAGS.put(Material.SPYGLASS, 0);
MATERIAL_FLAGS.put(Material.GLOW_INK_SAC, 0);
MATERIAL_FLAGS.put(Material.GLOW_ITEM_FRAME, 0);
MATERIAL_FLAGS.put(Material.GLOW_BERRIES, 0);
MATERIAL_FLAGS.put(Material.SMALL_AMETHYST_BUD, 0);
MATERIAL_FLAGS.put(Material.MEDIUM_AMETHYST_BUD, 0);
MATERIAL_FLAGS.put(Material.LARGE_AMETHYST_BUD, 0);
MATERIAL_FLAGS.put(Material.AMETHYST_CLUSTER, 0);
MATERIAL_FLAGS.put(Material.POWDER_SNOW, 0);
MATERIAL_FLAGS.put(Material.CAVE_VINES, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CAVE_VINES_PLANT, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.MOSS_BLOCK, 0);
MATERIAL_FLAGS.put(Material.HANGING_ROOTS, 0);
MATERIAL_FLAGS.put(Material.POINTED_DRIPSTONE, 0);
// Generated via tag
for (Material woodenDoor : Tag.WOODEN_DOORS.getValues()) {
@@ -799,7 +866,40 @@ public final class Materials {
}
for (Material fence : Tag.FENCES.getValues()) {
MATERIAL_FLAGS.put(fence, 0);
} for (Material coalOre : Tag.COAL_ORES.getValues()) {
MATERIAL_FLAGS.put(coalOre, 0);
}
for (Material ironOre : Tag.IRON_ORES.getValues()) {
MATERIAL_FLAGS.put(ironOre, 0);
}
for (Material goldOre : Tag.GOLD_ORES.getValues()) {
MATERIAL_FLAGS.put(goldOre, 0);
}
for (Material diamondOre : Tag.DIAMOND_ORES.getValues()) {
MATERIAL_FLAGS.put(diamondOre, 0);
}
for (Material redstoneOre : Tag.REDSTONE_ORES.getValues()) {
MATERIAL_FLAGS.put(redstoneOre, 0);
}
for (Material copperOre : Tag.COPPER_ORES.getValues()) {
MATERIAL_FLAGS.put(copperOre, 0);
}
for (Material emeraldOre : Tag.EMERALD_ORES.getValues()) {
MATERIAL_FLAGS.put(emeraldOre, 0);
}
for (Material lapisOre : Tag.LAPIS_ORES.getValues()) {
MATERIAL_FLAGS.put(lapisOre, 0);
}
for (Material candle : Tag.CANDLES.getValues()) {
MATERIAL_FLAGS.put(candle, MODIFIED_ON_RIGHT);
}
for (Material candleCakes : Tag.CANDLE_CAKES.getValues()) {
MATERIAL_FLAGS.put(candleCakes, MODIFIED_ON_RIGHT);
}
for (Material cauldron : Tag.CAULDRONS.getValues()) {
MATERIAL_FLAGS.put(cauldron, MODIFIED_ON_RIGHT);
}
Stream.concat(Stream.concat(
Tag.CORAL_BLOCKS.getValues().stream(),
Tag.CORALS.getValues().stream()),
@@ -1048,7 +1148,7 @@ public final class Materials {
public static boolean isSpawnEgg(Material material) {
switch (material) {
case SPIDER_SPAWN_EGG:
case AXOLOTL_SPAWN_EGG:
case BAT_SPAWN_EGG:
case BEE_SPAWN_EGG:
case BLAZE_SPAWN_EGG:
@@ -1067,6 +1167,8 @@ public final class Materials {
case EVOKER_SPAWN_EGG:
case FOX_SPAWN_EGG:
case GHAST_SPAWN_EGG:
case GLOW_SQUID_SPAWN_EGG:
case GOAT_SPAWN_EGG:
case GUARDIAN_SPAWN_EGG:
case HOGLIN_SPAWN_EGG:
case HORSE_SPAWN_EGG:
@@ -1094,6 +1196,7 @@ public final class Materials {
case SKELETON_HORSE_SPAWN_EGG:
case SKELETON_SPAWN_EGG:
case SLIME_SPAWN_EGG:
case SPIDER_SPAWN_EGG:
case SQUID_SPAWN_EGG:
case STRAY_SPAWN_EGG:
case STRIDER_SPAWN_EGG:
@@ -1120,6 +1223,8 @@ public final class Materials {
public static EntityType getEntitySpawnEgg(Material material) {
switch (material) {
case AXOLOTL_SPAWN_EGG:
return EntityType.AXOLOTL;
case SPIDER_SPAWN_EGG:
return EntityType.SPIDER;
case BAT_SPAWN_EGG:
@@ -1158,6 +1263,10 @@ public final class Materials {
return EntityType.FOX;
case GHAST_SPAWN_EGG:
return EntityType.GHAST;
case GLOW_SQUID_SPAWN_EGG:
return EntityType.GLOW_SQUID;
case GOAT_SPAWN_EGG:
return EntityType.GOAT;
case GUARDIAN_SPAWN_EGG:
return EntityType.GUARDIAN;
case HOGLIN_SPAWN_EGG:
@@ -1271,20 +1380,26 @@ public final class Materials {
* @return true if the material is a crop
*/
public static boolean isCrop(Material type) {
return type == Material.WHEAT
|| type == Material.CARROTS
|| type == Material.POTATOES
|| type == Material.BEETROOTS
|| type == Material.MELON_STEM
|| type == Material.PUMPKIN_STEM
|| type == Material.PUMPKIN
|| type == Material.MELON
|| type == Material.CACTUS
|| type == Material.SUGAR_CANE
|| type == Material.BAMBOO
|| type == Material.BAMBOO_SAPLING
|| type == Material.SWEET_BERRY_BUSH
|| type == Material.NETHER_WART;
switch (type) {
case WHEAT:
case CARROTS:
case POTATOES:
case BEETROOTS:
case MELON_STEM:
case PUMPKIN_STEM:
case PUMPKIN:
case MELON:
case CACTUS:
case SUGAR_CANE:
case BAMBOO:
case BAMBOO_SAPLING:
case SWEET_BERRY_BUSH:
case NETHER_WART:
case CAVE_VINES:
case CAVE_VINES_PLANT:
return true;
}
return false;
}
/**
@@ -1296,7 +1411,8 @@ public final class Materials {
return newType == Material.VINE ||
newType == Material.KELP ||
newType == Material.TWISTING_VINES ||
newType == Material.WEEPING_VINES;
newType == Material.WEEPING_VINES ||
Tag.CAVE_VINES.isTagged(newType);
}
@@ -1459,7 +1575,8 @@ public final class Materials {
switch (targetMaterial) {
case GRASS_BLOCK:
case DIRT:
case GRASS_PATH:
case DIRT_PATH:
case ROOTED_DIRT:
// case COARSE_DIRT: // already handled by the server...
return true;
}
@@ -1470,6 +1587,8 @@ public final class Materials {
case GOLDEN_AXE:
case DIAMOND_AXE:
case NETHERITE_AXE:
if (isWaxedCopper(targetMaterial))
return true;
switch (targetMaterial) {
case OAK_LOG:
case DARK_OAK_LOG:
@@ -1527,7 +1646,11 @@ public final class Materials {
case RED_DYE:
case WHITE_DYE:
case YELLOW_DYE:
case GLOW_INK_SAC:
case INK_SAC:
return Tag.SIGNS.isTagged(targetMaterial);
case HONEYCOMB:
return isUnwaxedCopper(targetMaterial);
default:
return false;
}
@@ -1536,4 +1659,50 @@ public final class Materials {
public static boolean isFire(Material type) {
return type == Material.FIRE || type == Material.SOUL_FIRE;
}
public static boolean isWaxedCopper(Material type) {
switch (type) {
case WAXED_COPPER_BLOCK:
case WAXED_EXPOSED_COPPER:
case WAXED_WEATHERED_COPPER:
case WAXED_OXIDIZED_COPPER:
case WAXED_CUT_COPPER:
case WAXED_EXPOSED_CUT_COPPER:
case WAXED_WEATHERED_CUT_COPPER:
case WAXED_OXIDIZED_CUT_COPPER:
case WAXED_CUT_COPPER_STAIRS:
case WAXED_EXPOSED_CUT_COPPER_STAIRS:
case WAXED_WEATHERED_CUT_COPPER_STAIRS:
case WAXED_OXIDIZED_CUT_COPPER_STAIRS:
case WAXED_CUT_COPPER_SLAB:
case WAXED_EXPOSED_CUT_COPPER_SLAB:
case WAXED_WEATHERED_CUT_COPPER_SLAB:
case WAXED_OXIDIZED_CUT_COPPER_SLAB:
return true;
}
return false;
}
public static boolean isUnwaxedCopper(Material type) {
switch (type) {
case COPPER_BLOCK:
case EXPOSED_COPPER:
case WEATHERED_COPPER:
case OXIDIZED_COPPER:
case CUT_COPPER:
case EXPOSED_CUT_COPPER:
case WEATHERED_CUT_COPPER:
case OXIDIZED_CUT_COPPER:
case CUT_COPPER_STAIRS:
case EXPOSED_CUT_COPPER_STAIRS:
case WEATHERED_CUT_COPPER_STAIRS:
case OXIDIZED_CUT_COPPER_STAIRS:
case CUT_COPPER_SLAB:
case EXPOSED_CUT_COPPER_SLAB:
case WEATHERED_CUT_COPPER_SLAB:
case OXIDIZED_CUT_COPPER_SLAB:
return true;
}
return false;
}
}
@@ -19,14 +19,19 @@
package com.sk89q.worldguard.util.profile.resolver;
import com.destroystokyo.paper.profile.PlayerProfile;
import com.sk89q.worldguard.util.profile.Profile;
import io.papermc.lib.PaperLib;
import org.bukkit.Bukkit;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.UUID;
/**
* @deprecated Use {@link com.sk89q.worldguard.util.profile.resolver.PaperPlayerService} instead
*/
@Deprecated(forRemoval = true)
public final class PaperProfileService extends SingleRequestService {
private static final PaperPlayerService SUPER = PaperPlayerService.getInstance();
private static final PaperProfileService INSTANCE = new PaperProfileService();
private PaperProfileService() {
@@ -37,18 +42,19 @@ public final class PaperProfileService extends SingleRequestService {
@Override
public int getIdealRequestLimit() {
return Integer.MAX_VALUE;
return SUPER.getIdealRequestLimit();
}
@Override
@Nullable
public Profile findByName(String name) {
PlayerProfile profile = Bukkit.createProfile(name);
if (profile.completeFromCache()) {
//noinspection ConstantConditions - completeFromCache guarantees non-null on success
return new Profile(profile.getId(), profile.getName());
}
return null;
public Profile findByName(String name) throws IOException, InterruptedException {
return SUPER.findByName(name);
}
@Nullable
@Override
public Profile findByUuid(UUID uuid) throws IOException, InterruptedException {
return SUPER.findByUuid(uuid);
}
public static PaperProfileService getInstance() {
@@ -3,4 +3,4 @@ main: com.sk89q.worldguard.bukkit.WorldGuardPlugin
version: "${internalVersion}"
depend: [WorldEdit]
softdepend: [CommandBook]
api-version: 1.16
api-version: 1.17
+2 -15
View File
@@ -1,7 +1,5 @@
plugins {
id("java-library")
id("net.ltgt.apt-eclipse")
id("net.ltgt.apt-idea")
`java-library`
}
applyPlatformAndCoreConfiguration()
@@ -10,7 +8,7 @@ dependencies {
"api"(project(":worldguard-libs:core"))
"api"("com.sk89q.worldedit:worldedit-core:${Versions.WORLDEDIT}")
"implementation"("org.flywaydb:flyway-core:3.0")
"implementation"("org.yaml:snakeyaml:1.9")
"implementation"("org.yaml:snakeyaml:1.29")
"implementation"("com.google.guava:guava:${Versions.GUAVA}")
"compileOnly"("com.google.code.findbugs:jsr305:1.3.9")
@@ -19,15 +17,4 @@ dependencies {
tasks.withType<JavaCompile>().configureEach {
dependsOn(":worldguard-libs:build")
}
sourceSets {
main {
java {
srcDir("src/main/java")
}
resources {
srcDir("src/main/resources")
}
}
}
@@ -93,11 +93,12 @@ public final class WorldGuard {
/**
* The WorldGuard Platform.
* The Platform is only available after WorldGuard is enabled.
*
* @return The platform
*/
public WorldGuardPlatform getPlatform() {
checkNotNull(platform);
checkNotNull(platform, "WorldGuard is not enabled, unable to access the platform.");
return platform;
}
@@ -52,6 +52,7 @@ import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.FlagValueCalculator;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.FlagContext;
import com.sk89q.worldguard.protection.flags.Flags;
@@ -1095,21 +1096,21 @@ public final class RegionCommands extends RegionCommandsBase {
// -s for spawn location
if (args.hasFlag('s')) {
teleportLocation = existing.getFlag(Flags.SPAWN_LOC);
teleportLocation = FlagValueCalculator.getEffectiveFlagOf(existing, Flags.SPAWN_LOC, player);
if (teleportLocation == null) {
throw new CommandException(
"The region has no spawn point associated.");
}
} else {
teleportLocation = existing.getFlag(Flags.TELE_LOC);
teleportLocation = FlagValueCalculator.getEffectiveFlagOf(existing, Flags.TELE_LOC, player);
if (teleportLocation == null) {
throw new CommandException("The region has no teleport point associated.");
}
}
String message = existing.getFlag(Flags.TELE_MESSAGE);
String message = FlagValueCalculator.getEffectiveFlagOf(existing, Flags.TELE_MESSAGE, player);
// If the flag isn't set, use the default message
// If message.isEmpty(), no message is sent by LocalPlayer#teleport(...)
@@ -55,6 +55,7 @@ import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery.QueryOption;
import com.sk89q.worldguard.protection.util.WorldEditRegionConverter;
import java.util.Set;
@@ -200,7 +201,7 @@ class RegionCommandsBase {
* @throws CommandException thrown if no region was found
*/
protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManager, LocalPlayer player, boolean allowGlobal, String rgCmd) throws CommandException {
ApplicableRegionSet set = regionManager.getApplicableRegions(player.getLocation().toVector().toBlockPoint());
ApplicableRegionSet set = regionManager.getApplicableRegions(player.getLocation().toVector().toBlockPoint(), QueryOption.SORT);
if (set.size() == 0) {
if (allowGlobal) {
@@ -230,7 +231,7 @@ class RegionCommandsBase {
builder.append(regionComp);
}
player.print(builder.build());
throw new CommandException("Several regions affect your current location (please pick one).");
throw new CommandException("You're standing in several regions (please pick one).");
}
return set.iterator().next();
@@ -36,6 +36,8 @@ import com.sk89q.worldedit.util.formatting.text.format.TextColor;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
import com.sk89q.worldguard.protection.FlagValueCalculator;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.RegionGroupFlag;
@@ -315,7 +317,7 @@ public class RegionPrintoutBuilder implements Callable<TextComponent> {
.clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, "/rg select " + region.getId()));
}
builder.append(bound);
final Location teleFlag = region.getFlag(Flags.TELE_LOC);
final Location teleFlag = FlagValueCalculator.getEffectiveFlagOf(region, Flags.TELE_LOC, perms != null && perms.getSender() instanceof RegionAssociable ? (RegionAssociable) perms.getSender() : null);
if (teleFlag != null && perms != null && perms.mayTeleportTo(region)) {
builder.append(TextComponent.space().append(TextComponent.of("[Teleport]", TextColor.GRAY)
.hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT,
@@ -24,6 +24,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.worldguard.util.profile.Profile;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.formatting.component.PaginationBox;
import com.sk89q.worldedit.util.formatting.text.Component;
import com.sk89q.worldedit.util.formatting.text.TextComponent;
@@ -33,6 +34,8 @@ import com.sk89q.worldedit.util.formatting.text.format.TextColor;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
import com.sk89q.worldguard.protection.FlagValueCalculator;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
@@ -261,7 +264,8 @@ public class RegionLister implements Callable<Integer> {
.clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND,
"/rg info -w \"" + world + "\" " + entry.region.getId()))));
}
if (perms != null && entry.region.getFlag(Flags.TELE_LOC) != null && perms.mayTeleportTo(entry.region)) {
final Location teleFlag = FlagValueCalculator.getEffectiveFlagOf(entry.region, Flags.TELE_LOC, perms != null && perms.getSender() instanceof RegionAssociable ? (RegionAssociable) perms.getSender() : null);
if (perms != null && teleFlag != null && perms.mayTeleportTo(entry.region)) {
builder.append(TextComponent.space().append(TextComponent.of("[TP]", TextColor.GRAY)
.hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("Click to teleport")))
.clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND,
@@ -297,7 +297,12 @@ public class FlagValueCalculator {
}
@Nullable
private <V, K> V getEffectiveMapValue(ProtectedRegion region, MapFlag<K, V> mapFlag, K key, RegionAssociable subject) {
public <V, K> V getEffectiveMapValue(ProtectedRegion region, MapFlag<K, V> mapFlag, K key, RegionAssociable subject) {
return getEffectiveMapValueOf(region, mapFlag, key, subject);
}
@Nullable
public static <V, K> V getEffectiveMapValueOf(ProtectedRegion region, MapFlag<K, V> mapFlag, K key, RegionAssociable subject) {
List<ProtectedRegion> seen = new ArrayList<>();
ProtectedRegion current = region;
@@ -450,7 +455,11 @@ public class FlagValueCalculator {
* @return the priority
*/
public int getPriority(final ProtectedRegion region) {
if (region == globalRegion) {
return getPriorityOf(region);
}
public static int getPriorityOf(final ProtectedRegion region) {
if (region.getId().equals(ProtectedRegion.GLOBAL_REGION)) {
return Integer.MIN_VALUE;
} else {
return region.getPriority();
@@ -466,9 +475,15 @@ public class FlagValueCalculator {
* @param subject an subject object
* @return the value
*/
@SuppressWarnings("unchecked")
@Nullable
public <V> V getEffectiveFlag(final ProtectedRegion region, Flag<V> flag, @Nullable RegionAssociable subject) {
if (region == globalRegion) {
return getEffectiveFlagOf(region, flag, subject);
}
@SuppressWarnings("unchecked")
@Nullable
public static <V> V getEffectiveFlagOf(final ProtectedRegion region, Flag<V> flag, @Nullable RegionAssociable subject) {
if (region.getId().equals(ProtectedRegion.GLOBAL_REGION)) {
if (flag == Flags.PASSTHROUGH) {
// Has members/owners -> the global region acts like
// a regular region without PASSTHROUGH
@@ -19,6 +19,7 @@
package com.sk89q.worldguard.protection;
import com.google.common.collect.ImmutableSet;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flag;
@@ -29,7 +30,11 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.util.NormativeOrders;
import javax.annotation.Nullable;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -64,7 +69,7 @@ public class RegionResultSet extends AbstractRegionSet {
*/
public RegionResultSet(Set<ProtectedRegion> applicable, @Nullable ProtectedRegion globalRegion) {
this(NormativeOrders.fromSet(applicable), globalRegion, true);
this.regionSet = applicable;
this.regionSet = ImmutableSet.copyOf(applicable);
}
/**
@@ -83,7 +88,7 @@ public class RegionResultSet extends AbstractRegionSet {
if (!sorted) {
NormativeOrders.sort(applicable);
}
this.applicable = applicable;
this.applicable = Collections.unmodifiableList(applicable);
this.flagValueCalculator = new FlagValueCalculator(applicable, globalRegion);
}
@@ -157,7 +162,7 @@ public class RegionResultSet extends AbstractRegionSet {
if (regionSet != null) {
return regionSet;
}
regionSet = Collections.unmodifiableSet(new HashSet<>(applicable));
regionSet = ImmutableSet.copyOf(applicable);
return regionSet;
}
@@ -22,6 +22,7 @@ package com.sk89q.worldguard.protection.association;
import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.FlagValueCalculator;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
@@ -69,7 +70,8 @@ public abstract class AbstractRegionOverlapAssociation implements RegionAssociab
}
for (ProtectedRegion region : source) {
Set<String> regionDomains = region.getFlag(Flags.NONPLAYER_PROTECTION_DOMAINS);
// Potential endless recurrence? No, because there is no region group flag.
Set<String> regionDomains = FlagValueCalculator.getEffectiveFlagOf(region, Flags.NONPLAYER_PROTECTION_DOMAINS, this);
if (regionDomains == null || regionDomains.isEmpty()) {
continue;
@@ -87,31 +89,36 @@ public abstract class AbstractRegionOverlapAssociation implements RegionAssociab
public Association getAssociation(List<ProtectedRegion> regions) {
checkNotNull(source);
for (ProtectedRegion region : regions) {
if ((region.getId().equals(ProtectedRegion.GLOBAL_REGION) && source.isEmpty())) {
return Association.OWNER;
}
if (source.contains(region)) {
if (useMaxPriorityAssociation) {
int priority = region.getPriority();
if (priority == maxPriority) {
return Association.OWNER;
}
} else {
while (region != null) {
if ((region.getId().equals(ProtectedRegion.GLOBAL_REGION) && source.isEmpty())) {
return Association.OWNER;
}
}
Set<ProtectedRegion> source;
if (source.contains(region)) {
if (useMaxPriorityAssociation) {
int priority = region.getPriority();
if (priority == maxPriority) {
return Association.OWNER;
}
} else {
return Association.OWNER;
}
}
if (useMaxPriorityAssociation) {
source = maxPriorityRegions;
} else {
source = this.source;
}
Set<ProtectedRegion> source;
if (checkNonplayerProtectionDomains(source, region.getFlag(Flags.NONPLAYER_PROTECTION_DOMAINS))) {
return Association.OWNER;
if (useMaxPriorityAssociation) {
source = maxPriorityRegions;
} else {
source = this.source;
}
// Potential endless recurrence? No, because there is no region group flag.
if (checkNonplayerProtectionDomains(source, FlagValueCalculator.getEffectiveFlagOf(region, Flags.NONPLAYER_PROTECTION_DOMAINS, this))) {
return Association.OWNER;
}
region = region.getParent();
}
}
@@ -26,6 +26,7 @@ import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import com.sk89q.worldguard.protection.regions.RegionQuery.QueryOption;
import java.util.List;
@@ -67,7 +68,7 @@ public class DelayedRegionOverlapAssociation extends AbstractRegionOverlapAssoci
@Override
public Association getAssociation(List<ProtectedRegion> regions) {
if (source == null) {
ApplicableRegionSet result = query.getApplicableRegions(location);
ApplicableRegionSet result = query.getApplicableRegions(location, QueryOption.NONE);
source = result.getRegions();
calcMaxPriority();
}
@@ -46,7 +46,7 @@ public final class Flags {
// Overrides membership check
public static final StateFlag PASSTHROUGH = register(new StateFlag("passthrough", false));
public static final SetFlag<String> NONPLAYER_PROTECTION_DOMAINS = register(new SetFlag<>("nonplayer-protection-domains", new StringFlag(null)));
public static final SetFlag<String> NONPLAYER_PROTECTION_DOMAINS = register(new SetFlag<>("nonplayer-protection-domains", null, new StringFlag(null)));
// This flag is unlike the others. It forces the checking of region membership
public static final StateFlag BUILD = register(new BuildFlag("build", true));
@@ -73,6 +73,7 @@ public final class Flags {
public static final StateFlag TRAMPLE_BLOCKS = register(new StateFlag("block-trampling", false));
public static final StateFlag FIREWORK_DAMAGE = register(new StateFlag("firework-damage", false));
public static final StateFlag USE_ANVIL = register(new StateFlag("use-anvil", false));
public static final StateFlag USE_DRIPLEAF = register(new StateFlag("use-dripleaf", false));
// These flags are similar to the ones above (used in tandem with BUILD),
// but their defaults are set to TRUE because it is more user friendly.
@@ -34,7 +34,7 @@ import com.sk89q.worldguard.protection.managers.storage.DifferenceSaveException;
import com.sk89q.worldguard.protection.managers.storage.RegionDatabase;
import com.sk89q.worldguard.protection.managers.storage.StorageException;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.util.RegionCollectionConsumer;
import com.sk89q.worldguard.protection.regions.RegionQuery.QueryOption;
import com.sk89q.worldguard.util.Normal;
import javax.annotation.Nullable;
@@ -293,32 +293,60 @@ public final class RegionManager {
}
/**
* Query for effective flags and owners for the given positive.
* Query for effective flags and members for the given position.
*
* <p>{@link QueryOption#COMPUTE_PARENTS} is used.</p>
*
* @param position the position
* @return the query object
*/
public ApplicableRegionSet getApplicableRegions(BlockVector3 position) {
checkNotNull(position);
Set<ProtectedRegion> regions = Sets.newHashSet();
index.applyContaining(position, new RegionCollectionConsumer(regions, true));
return new RegionResultSet(regions, index.get("__global__"));
return getApplicableRegions(position, QueryOption.COMPUTE_PARENTS);
}
/**
* Query for effective flags and owners for the area represented
* Return a region set for the given position.
*
* @param position the position
* @param option the option
* @return a region set
*/
public ApplicableRegionSet getApplicableRegions(BlockVector3 position, QueryOption option) {
checkNotNull(position);
checkNotNull(option);
Set<ProtectedRegion> regions = Sets.newHashSet();
index.applyContaining(position, option.createIndexConsumer(regions));
return new RegionResultSet(option.constructResult(regions), index.get("__global__"), true);
}
/**
* Query for effective flags and members for the area represented
* by the given region.
*
* <p>{@link QueryOption#COMPUTE_PARENTS} is used.</p>
*
* @param region the region
* @return the query object
*/
public ApplicableRegionSet getApplicableRegions(ProtectedRegion region) {
return getApplicableRegions(region, QueryOption.COMPUTE_PARENTS);
}
/**
* Return a region set for the area represented by the given region.
*
* @param region the region
* @param option the option
* @return a region set
*/
public ApplicableRegionSet getApplicableRegions(ProtectedRegion region, QueryOption option) {
checkNotNull(region);
checkNotNull(option);
Set<ProtectedRegion> regions = Sets.newHashSet();
index.applyIntersecting(region, new RegionCollectionConsumer(regions, true));
return new RegionResultSet(regions, index.get("__global__"));
index.applyIntersecting(region, option.createIndexConsumer(regions));
return new RegionResultSet(option.constructResult(regions), index.get("__global__"), true);
}
/**
@@ -316,7 +316,7 @@ public class ChunkHashTable implements ConcurrentRegionIndex {
List<ProtectedRegion> regions = new ArrayList<>();
ProtectedRegion chunkRegion = new ProtectedCuboidRegion(
"_",
position.multiply(16).toBlockVector3(0),
position.multiply(16).toBlockVector3(Integer.MIN_VALUE),
position.add(1, 1).multiply(16).toBlockVector3(Integer.MAX_VALUE));
index.applyIntersecting(chunkRegion, new RegionCollectionConsumer(regions, false));
Collections.sort(regions);
@@ -24,9 +24,11 @@ import static com.sk89q.worldguard.util.Normal.normalize;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.managers.RegionDifference;
import com.sk89q.worldguard.protection.managers.RemovalStrategy;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException;
import javax.annotation.Nullable;
import java.util.Collection;
@@ -38,6 +40,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.logging.Level;
/**
* An index that stores regions in a hash map, which allows for fast lookup
@@ -74,9 +77,13 @@ public class HashMapIndex extends AbstractRegionIndex implements ConcurrentRegio
ProtectedRegion existing = regions.get(normalId);
// Casing / form of ID has changed
if (existing != null && !existing.getId().equals(region.getId())) {
removed.add(existing);
if (existing != null) {
removeAndReplaceParents(existing.getId(), RemovalStrategy.UNSET_PARENT_IN_CHILDREN, region, false);
// Casing / form of ID has not changed
if (existing.getId().equals(region.getId())) {
removed.remove(existing);
}
}
regions.put(normalId, region);
@@ -134,6 +141,10 @@ public class HashMapIndex extends AbstractRegionIndex implements ConcurrentRegio
@Override
public Set<ProtectedRegion> remove(String id, RemovalStrategy strategy) {
return removeAndReplaceParents(id, strategy, null, true);
}
private Set<ProtectedRegion> removeAndReplaceParents(String id, RemovalStrategy strategy, @Nullable ProtectedRegion replacement, boolean rebuildIndex) {
checkNotNull(id);
checkNotNull(strategy);
@@ -161,7 +172,12 @@ public class HashMapIndex extends AbstractRegionIndex implements ConcurrentRegio
it.remove();
break;
case UNSET_PARENT_IN_CHILDREN:
current.clearParent();
try {
current.setParent(replacement);
} catch (CircularInheritanceException e) {
WorldGuard.logger.log(Level.WARNING, "Failed to replace parent '" + parent.getId() + "' of child '" + current.getId() + "' with replacement '" + replacement.getId() + "'", e);
current.clearParent();
}
}
}
}
@@ -174,7 +190,9 @@ public class HashMapIndex extends AbstractRegionIndex implements ConcurrentRegio
this.removed.addAll(removedSet);
rebuildIndex();
if (rebuildIndex) {
rebuildIndex();
}
}
return removedSet;
@@ -24,7 +24,9 @@ import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.RegionResultSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.RegionQuery.QueryOption;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -38,7 +40,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
*/
public class QueryCache {
private final ConcurrentMap<CacheKey, ApplicableRegionSet> cache = new ConcurrentHashMap<>(16, 0.75f, 2);
private final ConcurrentMap<CacheKey, Map<QueryOption, ApplicableRegionSet>> cache = new ConcurrentHashMap<>(16, 0.75f, 2);
/**
* Get from the cache a {@code ApplicableRegionSet} if an entry exists;
@@ -46,20 +48,16 @@ public class QueryCache {
*
* @param manager the region manager
* @param location the location
* @param option the option
* @return a result
*/
public ApplicableRegionSet queryContains(RegionManager manager, Location location) {
public ApplicableRegionSet queryContains(RegionManager manager, Location location, QueryOption option) {
checkNotNull(manager);
checkNotNull(location);
checkNotNull(option);
CacheKey key = new CacheKey(location);
ApplicableRegionSet result = cache.get(key);
if (result == null) {
result = manager.getApplicableRegions(location.toVector().toBlockPoint());
cache.put(key, result);
}
return result;
return cache.compute(key, (k, v) -> option.createCache(manager, location, v)).get(option);
}
/**
@@ -21,6 +21,7 @@ package com.sk89q.worldguard.protection.regions;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.LocalPlayer;
@@ -39,8 +40,16 @@ import com.sk89q.worldguard.protection.flags.RegionGroup;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.StateFlag.State;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.managers.index.RegionIndex;
import com.sk89q.worldguard.protection.util.NormativeOrders;
import com.sk89q.worldguard.protection.util.RegionCollectionConsumer;
import java.util.Collection;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
@@ -74,17 +83,37 @@ public class RegionQuery {
/**
* Query for regions containing the given location.
*
* <p>An instance of {@link RegionResultSet} will always be returned,
* <p>{@link QueryOption#COMPUTE_PARENTS} is used.</p>
*
* <p>An instance of {@link ApplicableRegionSet} will always be returned,
* even if regions are disabled or region data failed to load. An
* appropriate "virtual" set will be returned in such a case
* (for example, if regions are disabled, the returned set
* would permit all activities).</p>
* appropriate "virtual" set will be returned in such a case (for example,
* if regions are disabled, the returned set would permit all
* activities).</p>
*
* @param location the location
* @return a region set
*/
public ApplicableRegionSet getApplicableRegions(Location location) {
return getApplicableRegions(location, QueryOption.COMPUTE_PARENTS);
}
/**
* Query for regions containing the given location.
*
* <p>An instance of {@link ApplicableRegionSet} will always be returned,
* even if regions are disabled or region data failed to load. An
* appropriate "virtual" set will be returned in such a case (for example,
* if regions are disabled, the returned set would permit all
* activities).</p>
*
* @param location the location
* @param option the option
* @return a region set
*/
public ApplicableRegionSet getApplicableRegions(Location location, QueryOption option) {
checkNotNull(location);
checkNotNull(option);
World world = (World) location.getExtent();
WorldConfiguration worldConfig = config.get(world);
@@ -95,7 +124,7 @@ public class RegionQuery {
RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer().get((World) location.getExtent());
if (manager != null) {
return cache.queryContains(manager, location);
return cache.queryContains(manager, location, option);
} else {
return FailedLoadRegionSet.getInstance();
}
@@ -465,4 +494,150 @@ public class RegionQuery {
return getApplicableRegions(location).queryAllValues(associable, flag);
}
/**
* Options for constructing a region set via
* {@link #getApplicableRegions(Location, QueryOption)} for example.
*/
public enum QueryOption {
/**
* Constructs a region set that does not include parent regions and
* may be left unsorted (but a cached, sorted set of the same regions
* may be returned).
*/
NONE(false) {
@Override
public List<ProtectedRegion> constructResult(Set<ProtectedRegion> applicable) {
return ImmutableList.copyOf(applicable);
}
@Override
Map<QueryOption, ApplicableRegionSet> createCache(RegionManager manager, Location location, Map<QueryOption, ApplicableRegionSet> cache) {
if (cache == null) {
cache = new EnumMap<>(QueryOption.class);
cache.put(QueryOption.NONE, manager.getApplicableRegions(location.toVector().toBlockPoint(), QueryOption.NONE));
}
// If c != null, we can assume that Option.NONE is present.
return cache;
}
},
/**
* Constructs a region set that does not include parent regions and is
* sorted by {@link NormativeOrders}.
*/
SORT(false) {
@Override
Map<QueryOption, ApplicableRegionSet> createCache(RegionManager manager, Location location, Map<QueryOption, ApplicableRegionSet> cache) {
if (cache == null) {
Map<QueryOption, ApplicableRegionSet> newCache = new EnumMap<>(QueryOption.class);
ApplicableRegionSet result = manager.getApplicableRegions(location.toVector().toBlockPoint(), QueryOption.SORT);
newCache.put(QueryOption.NONE, result);
newCache.put(QueryOption.SORT, result);
return newCache;
} else {
// If c != null, we can assume that Option.NONE is present.
cache.computeIfAbsent(QueryOption.SORT, k -> new RegionResultSet(cache.get(QueryOption.NONE).getRegions(), manager.getRegion("__global__")));
return cache;
}
}
},
/**
* Constructs a region set that includes parent regions and is sorted by
* {@link NormativeOrders}.
*/
COMPUTE_PARENTS(true) {
@Override
Map<QueryOption, ApplicableRegionSet> createCache(RegionManager manager, Location location, Map<QueryOption, ApplicableRegionSet> cache) {
if (cache == null) {
Map<QueryOption, ApplicableRegionSet> newCache = new EnumMap<>(QueryOption.class);
ApplicableRegionSet noParResult = manager.getApplicableRegions(location.toVector().toBlockPoint(), QueryOption.NONE);
Set<ProtectedRegion> noParRegions = noParResult.getRegions();
Set<ProtectedRegion> regions = new HashSet<>();
noParRegions.forEach(new RegionCollectionConsumer(regions, true)::apply);
ApplicableRegionSet result = new RegionResultSet(regions, manager.getRegion("__global__"));
if (regions.size() == noParRegions.size()) {
newCache.put(QueryOption.NONE, result);
newCache.put(QueryOption.SORT, result);
} else {
newCache.put(QueryOption.NONE, noParResult);
}
newCache.put(QueryOption.COMPUTE_PARENTS, result);
return newCache;
}
cache.computeIfAbsent(QueryOption.COMPUTE_PARENTS, k -> {
Set<ProtectedRegion> regions = new HashSet<>();
ApplicableRegionSet result = cache.get(QueryOption.SORT);
boolean sorted = true;
if (result == null) {
// If c != null, we can assume that Option.NONE is present.
result = cache.get(QueryOption.NONE);
sorted = false;
}
Set<ProtectedRegion> noParRegions = result.getRegions();
noParRegions.forEach(new RegionCollectionConsumer(regions, true)::apply);
if (sorted && regions.size() == noParRegions.size()) {
return result;
}
result = new RegionResultSet(regions, manager.getRegion("__global__"));
if (regions.size() == noParRegions.size()) {
cache.put(QueryOption.SORT, result);
}
return result;
});
return cache;
}
};
private final boolean collectParents;
QueryOption(boolean collectParents) {
this.collectParents = collectParents;
}
/**
* Create a {@link RegionCollectionConsumer} with the given collection
* used for the {@link RegionIndex}. Internal API.
*
* @param collection the collection
* @return a region collection consumer
*/
public RegionCollectionConsumer createIndexConsumer(Collection<? super ProtectedRegion> collection) {
return new RegionCollectionConsumer(collection, collectParents);
}
/**
* Convert the set of regions to a list. Sort and add parents if
* necessary. Internal API.
*
* @param applicable the set of regions
* @return a list of regions
*/
public List<ProtectedRegion> constructResult(Set<ProtectedRegion> applicable) {
return NormativeOrders.fromSet(applicable);
}
/**
* Create (if null) or update the given cache map with at least an entry
* for this option if necessary and return it.
*
* @param manager the manager
* @param location the location
* @param cache the cache map
* @return a cache map
*/
abstract Map<QueryOption, ApplicableRegionSet> createCache(RegionManager manager, Location location, Map<QueryOption, ApplicableRegionSet> cache);
}
}
@@ -35,7 +35,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
*/
public class RegionCollectionConsumer implements Predicate<ProtectedRegion> {
private final Collection<ProtectedRegion> collection;
private final Collection<? super ProtectedRegion> collection;
private final boolean addParents;
/**
@@ -44,7 +44,7 @@ public class RegionCollectionConsumer implements Predicate<ProtectedRegion> {
* @param collection the collection to add regions to
* @param addParents true to also add the parents to the collection
*/
public RegionCollectionConsumer(Collection<ProtectedRegion> collection, boolean addParents) {
public RegionCollectionConsumer(Collection<? super ProtectedRegion> collection, boolean addParents) {
checkNotNull(collection);
this.collection = collection;
@@ -128,7 +128,7 @@ public abstract class AbstractSessionManager implements SessionManager {
int index = handlers.indexOf(wrappedAfter != null ? wrappedAfter : after);
if (index == -1) return false;
handlers.add(index, factory); // shifts "after" right one, and everything after "after" right one
handlers.add(index + 1, factory); // shifts "after" right one, and everything after "after" right one
}
wrappedHandlers.put(factory, wrappedFactory);
return true;
@@ -30,7 +30,6 @@ import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.formatting.text.Component;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.weather.WeatherType;
import org.junit.Ignore;
import java.util.HashSet;
import java.util.Locale;
@@ -39,7 +38,7 @@ import java.util.UUID;
import javax.annotation.Nullable;
@Ignore
public class TestPlayer extends AbstractPlayerActor implements LocalPlayer {
private final UUID uuid = UUID.randomUUID();
@@ -250,6 +249,7 @@ public class TestPlayer extends AbstractPlayerActor implements LocalPlayer {
}
@Override
@Deprecated
public void setPosition(Vector3 pos, float pitch, float yaw) {
}
@@ -20,13 +20,14 @@
package com.sk89q.worldguard.domains;
import com.sk89q.worldguard.TestPlayer;
import junit.framework.TestCase;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class DefaultDomainTest extends TestCase {
public class DefaultDomainTest {
@Test
public void testContains() throws Exception {
TestPlayer player1 = new TestPlayer("test1");
TestPlayer player2 = new TestPlayer("test2");
@@ -40,81 +41,76 @@ public class DefaultDomainTest extends TestCase {
domain = new DefaultDomain();
domain.addGroup("group1");
assertThat(domain.contains(player1), is(false));
assertThat(domain.contains(player2), is(true));
assertThat(domain.contains(player3), is(true));
assertFalse(domain.contains(player1));
assertTrue(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group1");
domain.addGroup("group2");
assertThat(domain.contains(player1), is(false));
assertThat(domain.contains(player2), is(true));
assertThat(domain.contains(player3), is(true));
assertFalse(domain.contains(player1));
assertTrue(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group1");
domain.addGroup("group3");
assertThat(domain.contains(player1), is(false));
assertThat(domain.contains(player2), is(true));
assertThat(domain.contains(player3), is(true));
assertFalse(domain.contains(player1));
assertTrue(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group3");
assertThat(domain.contains(player1), is(false));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(true));
assertFalse(domain.contains(player1));
assertFalse(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addPlayer(player1.getName());
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(false));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertFalse(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group3");
domain.addPlayer(player1.getName());
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(true));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group3");
domain.addPlayer(player1.getUniqueId());
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(true));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group3");
domain.addPlayer(player1.getName());
domain.addPlayer(player1.getUniqueId());
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(true));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addGroup("group3");
domain.addPlayer(player1);
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(true));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertTrue(domain.contains(player3));
domain = new DefaultDomain();
domain.addPlayer(player1);
assertThat(domain.contains(player1), is(true));
assertThat(domain.contains(player2), is(false));
assertThat(domain.contains(player3), is(false));
assertTrue(domain.contains(player1));
assertFalse(domain.contains(player2));
assertFalse(domain.contains(player3));
domain = new DefaultDomain();
domain.addPlayer(player2);
domain.addPlayer(player3);
assertThat(domain.contains(player1), is(false));
assertThat(domain.contains(player2), is(true));
assertThat(domain.contains(player3), is(true));
assertFalse(domain.contains(player1));
assertTrue(domain.contains(player2));
assertTrue(domain.contains(player3));
}
public void testSize() throws Exception {
}
}
@@ -25,13 +25,15 @@ import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.StringFlag;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.command.CommandFilter;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import java.util.Set;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ApplicableRegionSetTest {
@@ -42,7 +44,7 @@ public class ApplicableRegionSetTest {
LocalPlayer player = mock.createPlayer();
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(player, Flags.BUILD), is(true));
assertTrue(set.testState(player, Flags.BUILD));
}
@Test
@@ -54,7 +56,7 @@ public class ApplicableRegionSetTest {
ProtectedRegion global = mock.global();
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(player, Flags.BUILD), is(true));
assertTrue(set.testState(player, Flags.BUILD));
}
@Test
@@ -68,8 +70,8 @@ public class ApplicableRegionSetTest {
region.getMembers().addPlayer(member);
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(member, Flags.BUILD), is(true));
assertThat(set.testState(nonMember, Flags.BUILD), is(false));
assertTrue(set.testState(member, Flags.BUILD));
assertFalse(set.testState(nonMember, Flags.BUILD));
}
@Test
@@ -80,15 +82,15 @@ public class ApplicableRegionSetTest {
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(player, Flags.MOB_DAMAGE), is(true));
assertThat(set.testState(player, Flags.ENTRY), is(true));
assertThat(set.testState(player, Flags.EXIT), is(true));
assertThat(set.testState(player, Flags.LEAF_DECAY), is(true));
assertThat(set.testState(player, Flags.RECEIVE_CHAT), is(true));
assertThat(set.testState(player, Flags.SEND_CHAT), is(true));
assertThat(set.testState(player, Flags.INVINCIBILITY), is(false));
assertTrue(set.testState(player, Flags.MOB_DAMAGE));
assertTrue(set.testState(player, Flags.ENTRY));
assertTrue(set.testState(player, Flags.EXIT));
assertTrue(set.testState(player, Flags.LEAF_DECAY));
assertTrue(set.testState(player, Flags.RECEIVE_CHAT));
assertTrue(set.testState(player, Flags.SEND_CHAT));
assertFalse(set.testState(player, Flags.INVINCIBILITY));
assertThat(set.testState(player, Flags.BUILD), is(true));
assertTrue(set.testState(player, Flags.BUILD));
}
@Test
@@ -101,15 +103,15 @@ public class ApplicableRegionSetTest {
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(player, Flags.MOB_DAMAGE), is(true));
assertThat(set.testState(player, Flags.ENTRY), is(true));
assertThat(set.testState(player, Flags.EXIT), is(true));
assertThat(set.testState(player, Flags.LEAF_DECAY), is(true));
assertThat(set.testState(player, Flags.RECEIVE_CHAT), is(true));
assertThat(set.testState(player, Flags.SEND_CHAT), is(true));
assertThat(set.testState(player, Flags.INVINCIBILITY), is(false));
assertTrue(set.testState(player, Flags.MOB_DAMAGE));
assertTrue(set.testState(player, Flags.ENTRY));
assertTrue(set.testState(player, Flags.EXIT));
assertTrue(set.testState(player, Flags.LEAF_DECAY));
assertTrue(set.testState(player, Flags.RECEIVE_CHAT));
assertTrue(set.testState(player, Flags.SEND_CHAT));
assertFalse(set.testState(player, Flags.INVINCIBILITY));
assertThat(set.testState(player, Flags.BUILD), is(true));
assertTrue(set.testState(player, Flags.BUILD));
}
@Test
@@ -124,25 +126,25 @@ public class ApplicableRegionSetTest {
ApplicableRegionSet set = mock.getApplicableSet();
assertThat(set.testState(member, Flags.MOB_DAMAGE), is(true));
assertThat(set.testState(member, Flags.ENTRY), is(true));
assertThat(set.testState(member, Flags.EXIT), is(true));
assertThat(set.testState(member, Flags.LEAF_DECAY), is(true));
assertThat(set.testState(member, Flags.RECEIVE_CHAT), is(true));
assertThat(set.testState(member, Flags.SEND_CHAT), is(true));
assertThat(set.testState(member, Flags.INVINCIBILITY), is(false));
assertTrue(set.testState(member, Flags.MOB_DAMAGE));
assertTrue(set.testState(member, Flags.ENTRY));
assertTrue(set.testState(member, Flags.EXIT));
assertTrue(set.testState(member, Flags.LEAF_DECAY));
assertTrue(set.testState(member, Flags.RECEIVE_CHAT));
assertTrue(set.testState(member, Flags.SEND_CHAT));
assertFalse(set.testState(member, Flags.INVINCIBILITY));
assertThat(set.testState(member, Flags.BUILD), is(true));
assertTrue(set.testState(member, Flags.BUILD));
assertThat(set.testState(nonMember, Flags.MOB_DAMAGE), is(true));
assertThat(set.testState(nonMember, Flags.ENTRY), is(true));
assertThat(set.testState(nonMember, Flags.EXIT), is(true));
assertThat(set.testState(nonMember, Flags.LEAF_DECAY), is(true));
assertThat(set.testState(nonMember, Flags.RECEIVE_CHAT), is(true));
assertThat(set.testState(nonMember, Flags.SEND_CHAT), is(true));
assertThat(set.testState(nonMember, Flags.INVINCIBILITY), is(false));
assertTrue(set.testState(nonMember, Flags.MOB_DAMAGE));
assertTrue(set.testState(nonMember, Flags.ENTRY));
assertTrue(set.testState(nonMember, Flags.EXIT));
assertTrue(set.testState(nonMember, Flags.LEAF_DECAY));
assertTrue(set.testState(nonMember, Flags.RECEIVE_CHAT));
assertTrue(set.testState(nonMember, Flags.SEND_CHAT));
assertFalse(set.testState(nonMember, Flags.INVINCIBILITY));
assertThat(set.testState(nonMember, Flags.BUILD), is(false));
assertFalse(set.testState(nonMember, Flags.BUILD));
}
@Test
@@ -623,19 +625,19 @@ public class ApplicableRegionSetTest {
test = new CommandFilter(
set.queryValue(nonMember, Flags.ALLOWED_CMDS),
set.queryValue(nonMember, Flags.BLOCKED_CMDS));
assertThat(test.apply("/permit"), is(true));
assertThat(test.apply("/strange"), is(true));
assertThat(test.apply("/other"), is(false));
assertThat(test.apply("/deny"), is(false));
assertTrue(test.apply("/permit"));
assertTrue(test.apply("/strange"));
assertFalse(test.apply("/other"));
assertFalse(test.apply("/deny"));
set = mock.getApplicableSetInWilderness();
test = new CommandFilter(
set.queryValue(nonMember, Flags.ALLOWED_CMDS),
set.queryValue(nonMember, Flags.BLOCKED_CMDS));
assertThat(test.apply("/permit"), is(true));
assertThat(test.apply("/strange"), is(false));
assertThat(test.apply("/other"), is(true));
assertThat(test.apply("/deny"), is(false));
assertTrue(test.apply("/permit"));
assertFalse(test.apply("/strange"));
assertTrue(test.apply("/other"));
assertFalse(test.apply("/deny"));
}
@Test
@@ -24,13 +24,12 @@ import com.sk89q.worldguard.protection.flags.MapFlag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.StringFlag;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SuppressWarnings({"UnusedDeclaration"})
public class FlagValueCalculatorMapFlagTest {
@@ -48,18 +47,18 @@ public class FlagValueCalculatorMapFlagTest {
global.setFlag(mapFlag, map);
ApplicableRegionSet applicableSet = mock.getApplicableSet();
assertThat(applicableSet.queryMapValue(null, mapFlag, "allow", Flags.BUILD),
equalTo(StateFlag.State.ALLOW));
assertThat(applicableSet.queryMapValue(null, mapFlag, "deny", Flags.BUILD),
equalTo(StateFlag.State.DENY));
assertThat(applicableSet.queryMapValue(null, mapFlag, "undefined", Flags.BUILD),
equalTo(StateFlag.State.DENY));
assertThat(applicableSet.queryMapValue(null, mapFlag, "allow", null),
equalTo(StateFlag.State.ALLOW));
assertThat(applicableSet.queryMapValue(null, mapFlag, "deny", null),
equalTo(StateFlag.State.DENY));
assertThat(applicableSet.queryMapValue(null, mapFlag, "undefined", null),
equalTo(StateFlag.State.ALLOW));
assertEquals(applicableSet.queryMapValue(null, mapFlag, "allow", Flags.BUILD),
StateFlag.State.ALLOW);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "deny", Flags.BUILD),
StateFlag.State.DENY);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "undefined", Flags.BUILD),
StateFlag.State.DENY);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "allow", null),
StateFlag.State.ALLOW);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "deny", null),
StateFlag.State.DENY);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "undefined", null),
StateFlag.State.ALLOW);
}
@Test
@@ -86,12 +85,12 @@ public class FlagValueCalculatorMapFlagTest {
region2.setFlag(mapFlag, map2);
ApplicableRegionSet applicableSet = mock.getApplicableSet();
assertThat(applicableSet.queryMapValue(null, mapFlag, "should-deny", null),
equalTo(StateFlag.State.DENY));
assertThat(applicableSet.queryMapValue(null, mapFlag, "should-allow", null),
equalTo(StateFlag.State.ALLOW));
assertThat(applicableSet.queryMapValue(null, mapFlag, "should-allow2", null),
equalTo(StateFlag.State.ALLOW));
assertEquals(applicableSet.queryMapValue(null, mapFlag, "should-deny", null),
StateFlag.State.DENY);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "should-allow", null),
StateFlag.State.ALLOW);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "should-allow2", null),
StateFlag.State.ALLOW);
}
@@ -116,9 +115,9 @@ public class FlagValueCalculatorMapFlagTest {
child.setFlag(mapFlag, childMap);
ApplicableRegionSet applicableSet = mock.getApplicableSet();
assertThat(applicableSet.queryMapValue(null, mapFlag, "useChildValue", null),
equalTo(StateFlag.State.DENY));
assertThat(applicableSet.queryMapValue(null, mapFlag, "useParentValue", null),
equalTo(StateFlag.State.ALLOW));
assertEquals(applicableSet.queryMapValue(null, mapFlag, "useChildValue", null),
StateFlag.State.DENY);
assertEquals(applicableSet.queryMapValue(null, mapFlag, "useParentValue", null),
StateFlag.State.ALLOW);
}
}
@@ -28,12 +28,14 @@ import com.sk89q.worldguard.protection.flags.StateFlag.State;
import com.sk89q.worldguard.protection.flags.StringFlag;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Set;
import static com.google.common.collect.ImmutableSet.copyOf;
import static com.google.common.collect.ImmutableSet.of;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.jupiter.api.Assertions.*;
@SuppressWarnings({"UnusedAssignment", "UnusedDeclaration"})
public class FlagValueCalculatorTest {
@@ -45,7 +47,7 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.NO_REGIONS));
assertEquals(result.getMembership(player), Result.NO_REGIONS);
}
@Test
@@ -57,7 +59,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion global = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.NO_REGIONS));
assertEquals(result.getMembership(player), Result.NO_REGIONS);
}
@Test
@@ -69,7 +71,7 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.NO_REGIONS));
assertEquals(result.getMembership(player), Result.NO_REGIONS);
}
@Test
@@ -83,7 +85,7 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
}
@Test
@@ -99,7 +101,7 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.NO_REGIONS));
assertEquals(result.getMembership(player), Result.NO_REGIONS);
}
@Test
@@ -114,7 +116,7 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
}
@Test
@@ -130,7 +132,7 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.SUCCESS));
assertEquals(result.getMembership(player), Result.SUCCESS);
}
@Test
@@ -148,13 +150,13 @@ public class FlagValueCalculatorTest {
region = mock.add(0);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
// Add another player (should still fail)
region.getMembers().addPlayer(mock.createPlayer());
result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
}
@Test
@@ -172,7 +174,7 @@ public class FlagValueCalculatorTest {
region = mock.add(10);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
}
@Test
@@ -190,7 +192,7 @@ public class FlagValueCalculatorTest {
region = mock.add(0);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.SUCCESS));
assertEquals(result.getMembership(player), Result.SUCCESS);
}
@Test
@@ -209,7 +211,7 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.SUCCESS));
assertEquals(result.getMembership(player), Result.SUCCESS);
}
@Test
@@ -228,7 +230,7 @@ public class FlagValueCalculatorTest {
parent.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.SUCCESS));
assertEquals(result.getMembership(player), Result.SUCCESS);
}
@Test
@@ -249,7 +251,7 @@ public class FlagValueCalculatorTest {
parent.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.FAIL));
assertEquals(result.getMembership(player), Result.FAIL);
}
@Test
@@ -271,7 +273,7 @@ public class FlagValueCalculatorTest {
parent.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getMembership(player), is(Result.SUCCESS));
assertEquals(result.getMembership(player), Result.SUCCESS);
}
// ========================================================================
@@ -285,8 +287,8 @@ public class FlagValueCalculatorTest {
StateFlag flag2 = new StateFlag("test2", true);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryState(null, flag1), is((State) null));
assertThat(result.queryState(null, flag2), is(State.ALLOW));
assertNull(result.queryState(null, flag1));
assertEquals(result.queryState(null, flag2), State.ALLOW);
}
// ========================================================================
@@ -303,8 +305,8 @@ public class FlagValueCalculatorTest {
region.setFlag(flag2, State.DENY);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag1), is((State) null));
assertThat(result.queryValue(null, flag2), is(State.DENY));
assertNull(result.queryValue(null, flag1));
assertEquals(result.queryValue(null, flag2), State.DENY);
}
@Test
@@ -321,8 +323,8 @@ public class FlagValueCalculatorTest {
region.setFlag(flag2, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag1), is((State) null));
assertThat(result.queryValue(null, flag2), is(State.DENY));
assertNull(result.queryValue(null, flag1));
assertEquals(result.queryValue(null, flag2), State.DENY);
}
@Test
@@ -338,8 +340,8 @@ public class FlagValueCalculatorTest {
region.setFlag(flag2, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag1), is((State) null));
assertThat(result.queryValue(null, flag2), is(State.ALLOW));
assertNull(result.queryValue(null, flag1));
assertEquals(result.queryValue(null, flag2), State.ALLOW);
}
@Test
@@ -358,9 +360,9 @@ public class FlagValueCalculatorTest {
region.setFlag(flag2, State.DENY);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag1), is(State.DENY));
assertThat(result.queryValue(null, flag2), is(State.DENY));
assertThat(result.queryValue(null, flag3), is((State) null));
assertEquals(result.queryValue(null, flag1), State.DENY);
assertEquals(result.queryValue(null, flag2), State.DENY);
assertNull(result.queryValue(null, flag3));
}
@Test
@@ -381,8 +383,8 @@ public class FlagValueCalculatorTest {
region.setParent(parent);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, flag1), is(State.DENY));
assertThat(result.queryValue(member, flag1), is((State) null));
assertEquals(result.queryValue(nonMember, flag1), State.DENY);
assertNull(result.queryValue(member, flag1));
}
@Test
@@ -405,9 +407,9 @@ public class FlagValueCalculatorTest {
region.setParent(parent);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, flag1), is(State.DENY));
assertThat(result.queryValue(memberOne, flag1), is((State) null));
assertThat(result.queryValue(memberTwo, flag1), is(State.DENY));
assertEquals(result.queryValue(nonMember, flag1), State.DENY);
assertNull(result.queryValue(memberOne, flag1));
assertEquals(result.queryValue(memberTwo, flag1), State.DENY);
}
@Test
@@ -427,8 +429,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(member);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, flag1), is(State.DENY));
assertThat(result.queryValue(member, flag1), is(State.DENY));
assertEquals(result.queryValue(nonMember, flag1), State.DENY);
assertEquals(result.queryValue(member, flag1), State.DENY);
}
@Test
@@ -450,8 +452,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(member);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, flag1), is(State.DENY));
assertThat(result.queryValue(member, flag1), is(State.ALLOW));
assertEquals(result.queryValue(nonMember, flag1), State.DENY);
assertEquals(result.queryValue(member, flag1), State.ALLOW);
}
@Test
@@ -469,9 +471,9 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, stringFlag1), isOneOf("test1", "test2"));
assertThat(result.queryValue(null, stringFlag2), is((String) null));
assertThat(result.queryValue(null, flag1), is((State) null));
assertTrue(List.of("test1", "test2").contains(result.queryValue(null, stringFlag1)));
assertNull(result.queryValue(null, stringFlag2));
assertNull(result.queryValue(null, flag1));
}
@Test
@@ -483,7 +485,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion global = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is(State.ALLOW));
assertEquals(result.queryValue(null, flag), State.ALLOW);
}
@Test
@@ -496,7 +498,7 @@ public class FlagValueCalculatorTest {
global.setFlag(flag, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is(State.ALLOW));
assertEquals(result.queryValue(null, flag), State.ALLOW);
}
@Test
@@ -509,7 +511,7 @@ public class FlagValueCalculatorTest {
global.setFlag(flag, State.DENY);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is(State.DENY));
assertEquals(result.queryValue(null, flag), State.DENY);
}
@Test
@@ -521,7 +523,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion global = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is((String) null));
assertNull(result.queryValue(null, flag));
}
@Test
@@ -534,7 +536,7 @@ public class FlagValueCalculatorTest {
global.setFlag(flag, "hello");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is("hello"));
assertEquals(result.queryValue(null, flag), "hello");
}
@Test
@@ -549,7 +551,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion region = mock.add(0);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is("hello"));
assertEquals(result.queryValue(null, flag), "hello");
}
@Test
@@ -565,7 +567,7 @@ public class FlagValueCalculatorTest {
region.setFlag(flag, "beep");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is("beep"));
assertEquals(result.queryValue(null, flag), "beep");
}
@Test
@@ -591,9 +593,9 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(member);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(null, flag), is("ello there"));
assertThat(result.queryValue(nonMember, flag), is("ello there"));
assertThat(result.queryValue(member, flag), is("beep beep"));
assertEquals(result.queryValue(null, flag), "ello there");
assertEquals(result.queryValue(nonMember, flag), "ello there");
assertEquals(result.queryValue(member, flag), "beep beep");
}
@Test
@@ -603,7 +605,7 @@ public class FlagValueCalculatorTest {
LocalPlayer nonMember = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.ALLOW);
}
@Test
@@ -615,7 +617,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion global = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.ALLOW);
}
@Test
@@ -628,7 +630,7 @@ public class FlagValueCalculatorTest {
global.setFlag(Flags.BUILD, State.DENY);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.DENY);
}
@Test
@@ -641,7 +643,7 @@ public class FlagValueCalculatorTest {
global.setFlag(Flags.BUILD, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.ALLOW);
}
@Test
@@ -655,8 +657,8 @@ public class FlagValueCalculatorTest {
global.getMembers().addPlayer(member);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertEquals(result.queryValue(member, Flags.BUILD), State.ALLOW);
assertNull(result.queryValue(nonMember, Flags.BUILD));
}
@Test
@@ -671,8 +673,8 @@ public class FlagValueCalculatorTest {
global.setFlag(Flags.BUILD, State.DENY);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(member, Flags.BUILD), is(State.DENY));
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY));
assertEquals(result.queryValue(member, Flags.BUILD), State.DENY);
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.DENY);
}
@Test
@@ -689,8 +691,8 @@ public class FlagValueCalculatorTest {
// Cannot set ALLOW on BUILD
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertEquals(result.queryValue(member, Flags.BUILD), State.ALLOW);
assertNull(result.queryValue(nonMember, Flags.BUILD));
}
@Test
@@ -704,8 +706,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(member);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(member, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertEquals(result.queryValue(member, Flags.BUILD), State.ALLOW);
}
@Test
@@ -724,9 +726,9 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(memberBoth);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -746,9 +748,9 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(memberBoth);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -768,9 +770,9 @@ public class FlagValueCalculatorTest {
region.setParent(parent);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -790,9 +792,9 @@ public class FlagValueCalculatorTest {
region.setParent(parent);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -814,9 +816,9 @@ public class FlagValueCalculatorTest {
ProtectedRegion priority = mock.add(10);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is((State) null));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertNull(result.queryValue(memberBoth, Flags.BUILD));
}
@Test
@@ -839,9 +841,9 @@ public class FlagValueCalculatorTest {
priority.setFlag(Flags.PASSTHROUGH, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -862,9 +864,9 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(memberBoth);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -887,9 +889,9 @@ public class FlagValueCalculatorTest {
region.setFlag(Flags.BUILD, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.ALLOW));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.ALLOW);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -913,9 +915,9 @@ public class FlagValueCalculatorTest {
region.setFlag(Flags.BUILD, State.ALLOW);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is(State.DENY));
assertThat(result.queryValue(memberOne, Flags.BUILD), is(State.DENY));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.DENY));
assertEquals(result.queryValue(nonMember, Flags.BUILD), State.DENY);
assertEquals(result.queryValue(memberOne, Flags.BUILD), State.DENY);
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.DENY);
}
@Test
@@ -939,9 +941,9 @@ public class FlagValueCalculatorTest {
// Disable setting ALLOW for safety reasons
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -964,10 +966,10 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(memberBoth);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(globalMember, Flags.BUILD));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -992,10 +994,10 @@ public class FlagValueCalculatorTest {
FlagValueCalculator result = mock.getFlagCalculator();
// Inconsistent due to legacy reasons
assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(globalMember, Flags.BUILD));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
@Test
@@ -1019,10 +1021,10 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(memberBoth);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.queryValue(globalMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(nonMember, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberOne, Flags.BUILD), is((State) null));
assertThat(result.queryValue(memberBoth, Flags.BUILD), is(State.ALLOW));
assertNull(result.queryValue(globalMember, Flags.BUILD));
assertNull(result.queryValue(nonMember, Flags.BUILD));
assertNull(result.queryValue(memberOne, Flags.BUILD));
assertEquals(result.queryValue(memberBoth, Flags.BUILD), State.ALLOW);
}
// ========================================================================
@@ -1046,8 +1048,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1", "test2")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1", "test2"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1068,8 +1070,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test", "test")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1090,8 +1092,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1115,8 +1117,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1", "test3")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1", "test3"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1141,8 +1143,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1167,8 +1169,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test3")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test3"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1193,8 +1195,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1219,8 +1221,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1, "test2");
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test2")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test2"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1248,8 +1250,8 @@ public class FlagValueCalculatorTest {
region.setParent(parent2);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test2", "test3")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test2", "test3"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1277,8 +1279,8 @@ public class FlagValueCalculatorTest {
region = mock.add(30);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test2")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test2"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
@Test
@@ -1306,8 +1308,8 @@ public class FlagValueCalculatorTest {
region = mock.add(30);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(copyOf(result.queryAllValues(null, stringFlag1)), equalTo(of("test1")));
assertThat(result.queryAllValues(null, stringFlag2), is(Matchers.<String>empty()));
assertEquals(copyOf(result.queryAllValues(null, stringFlag1)), Set.of("test1"));
assertTrue(result.queryAllValues(null, stringFlag2).isEmpty());
}
// ========================================================================
@@ -1320,7 +1322,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion region = mock.add(30);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getPriority(region), is(30));
assertEquals(result.getPriority(region), 30);
}
@Test
@@ -1330,7 +1332,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion region = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getPriority(region), is(Integer.MIN_VALUE));
assertEquals(result.getPriority(region), Integer.MIN_VALUE);
}
// ========================================================================
@@ -1352,8 +1354,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1.getRegionGroupFlag(), RegionGroup.ALL);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1374,8 +1376,8 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1394,8 +1396,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1.getRegionGroupFlag(), RegionGroup.ALL);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1416,8 +1418,8 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1436,8 +1438,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1.getRegionGroupFlag(), RegionGroup.NON_MEMBERS);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1458,8 +1460,8 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1480,8 +1482,8 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo(null));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertNull(result.getEffectiveFlag(region, stringFlag1, player));
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1500,8 +1502,8 @@ public class FlagValueCalculatorTest {
region.setFlag(stringFlag1.getRegionGroupFlag(), RegionGroup.MEMBERS);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo(null));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertNull(result.getEffectiveFlag(region, stringFlag1, null));
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1523,8 +1525,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1546,8 +1548,8 @@ public class FlagValueCalculatorTest {
region.getOwners().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1569,8 +1571,8 @@ public class FlagValueCalculatorTest {
region.getOwners().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1592,8 +1594,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo(null));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertNull(result.getEffectiveFlag(region, stringFlag1, player));
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1615,8 +1617,8 @@ public class FlagValueCalculatorTest {
region.getOwners().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo(null));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertNull(result.getEffectiveFlag(region, stringFlag1, player));
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1638,8 +1640,8 @@ public class FlagValueCalculatorTest {
region.getOwners().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo(null));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertNull(result.getEffectiveFlag(region, stringFlag1, player));
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1661,8 +1663,8 @@ public class FlagValueCalculatorTest {
region.getMembers().addPlayer(player);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1683,8 +1685,8 @@ public class FlagValueCalculatorTest {
LocalPlayer player = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1709,8 +1711,8 @@ public class FlagValueCalculatorTest {
region.setParent(parent2);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test1"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test1");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1737,8 +1739,8 @@ public class FlagValueCalculatorTest {
region.setParent(parent2);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test2"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test2");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1765,8 +1767,8 @@ public class FlagValueCalculatorTest {
parent1.setFlag(stringFlag1.getRegionGroupFlag(), RegionGroup.ALL);
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("test3"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "test3");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1798,10 +1800,10 @@ public class FlagValueCalculatorTest {
LocalPlayer player2 = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player1), equalTo("members"));
assertThat(result.getEffectiveFlag(region, stringFlag1, player2), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player1), "members");
assertEquals(result.getEffectiveFlag(region, stringFlag1, player2), "everyone");
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "everyone");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1833,10 +1835,10 @@ public class FlagValueCalculatorTest {
LocalPlayer player2 = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player1), equalTo("members"));
assertThat(result.getEffectiveFlag(region, stringFlag1, player2), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player1), "members");
assertEquals(result.getEffectiveFlag(region, stringFlag1, player2), "everyone");
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "everyone");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1864,10 +1866,10 @@ public class FlagValueCalculatorTest {
LocalPlayer player2 = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player1), equalTo("members"));
assertThat(result.getEffectiveFlag(region, stringFlag1, player2), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player1), "members");
assertEquals(result.getEffectiveFlag(region, stringFlag1, player2), "everyone");
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "everyone");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1895,10 +1897,10 @@ public class FlagValueCalculatorTest {
LocalPlayer player2 = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player1), equalTo("members"));
assertThat(result.getEffectiveFlag(region, stringFlag1, player2), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player1), "members");
assertEquals(result.getEffectiveFlag(region, stringFlag1, player2), "everyone");
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "everyone");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1926,10 +1928,10 @@ public class FlagValueCalculatorTest {
LocalPlayer player2 = mock.createPlayer();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(region, stringFlag1, player1), equalTo("members"));
assertThat(result.getEffectiveFlag(region, stringFlag1, player2), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag1, null), equalTo("everyone"));
assertThat(result.getEffectiveFlag(region, stringFlag2, null), equalTo(null));
assertEquals(result.getEffectiveFlag(region, stringFlag1, player1), "members");
assertEquals(result.getEffectiveFlag(region, stringFlag1, player2), "everyone");
assertEquals(result.getEffectiveFlag(region, stringFlag1, null), "everyone");
assertNull(result.getEffectiveFlag(region, stringFlag2, null));
}
@Test
@@ -1939,7 +1941,7 @@ public class FlagValueCalculatorTest {
ProtectedRegion global = mock.global();
FlagValueCalculator result = mock.getFlagCalculator();
assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(null));
assertNull(result.getEffectiveFlag(global, Flags.BUILD, null));
}
@Test
@@ -1951,7 +1953,7 @@ public class FlagValueCalculatorTest {
FlagValueCalculator result = mock.getFlagCalculator();
// Cannot let users override BUILD on GLOBAL
assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(State.DENY));
assertEquals(result.getEffectiveFlag(global, Flags.BUILD, null), State.DENY);
}
@Test
@@ -1963,6 +1965,6 @@ public class FlagValueCalculatorTest {
FlagValueCalculator result = mock.getFlagCalculator();
// Cannot let users override BUILD on GLOBAL
assertThat(result.getEffectiveFlag(global, Flags.BUILD, null), equalTo(null));
assertNull(result.getEffectiveFlag(global, Flags.BUILD, null));
}
}
@@ -29,14 +29,14 @@ import com.sk89q.worldguard.protection.managers.storage.MemoryRegionDatabase;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class HashMapIndexRemovalTest {
private static final String ORPHAN_ID = "orphan";
@@ -52,7 +52,7 @@ public class HashMapIndexRemovalTest {
return new RegionManager(new MemoryRegionDatabase(), new HashMapIndex.Factory(), getFlagRegistry());
}
@Before
@BeforeEach
public void setUp() {
manager = createRegionManager();
@@ -19,8 +19,6 @@
package com.sk89q.worldguard.protection;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldguard.TestPlayer;
@@ -34,8 +32,11 @@ import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public abstract class RegionEntryExitTest {
@@ -60,7 +61,7 @@ public abstract class RegionEntryExitTest {
protected abstract RegionManager createRegionManager() throws Exception;
@Before
@BeforeEach
public void setUp() throws Exception {
setUpGlobalRegion();
@@ -129,8 +130,8 @@ public abstract class RegionEntryExitTest {
// System.out.println("flag " + appl.getFlag(Flags.ENTRY));
// System.out.println("grp " + appl.getFlag(Flags.ENTRY.getRegionGroupFlag()));
// System.out.println("===");
assertTrue("Allowed Entry", appl.testState(vipPlayer, Flags.ENTRY));
assertFalse("Forbidden Entry", appl.testState(builderPlayer, Flags.ENTRY));
assertTrue(appl.testState(vipPlayer, Flags.ENTRY), "Allowed Entry");
assertFalse(appl.testState(builderPlayer, Flags.ENTRY), "Forbidden Entry");
}
@Test
@@ -144,8 +145,8 @@ public abstract class RegionEntryExitTest {
// System.out.println("flag " + appl.getFlag(Flags.EXIT));
// System.out.println("grp " + appl.getFlag(Flags.EXIT.getRegionGroupFlag()));
// System.out.println("===");
assertTrue("Allowed Exit", appl.testState(builderPlayer, Flags.EXIT));
assertFalse("Forbidden Exit", appl.testState(vipPlayer, Flags.EXIT));
assertTrue(appl.testState(builderPlayer, Flags.EXIT), "Allowed Exit");
assertFalse(appl.testState(vipPlayer, Flags.EXIT), "Forbidden Exit");
}
}
@@ -19,9 +19,6 @@
package com.sk89q.worldguard.protection;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldguard.TestPlayer;
@@ -36,16 +33,20 @@ import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@RunWith(Parameterized.class)
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public abstract class RegionOverlapTest {
static String COURTYARD_ID = "courtyard";
static String FOUNTAIN_ID = "fountain";
@@ -64,13 +65,13 @@ public abstract class RegionOverlapTest {
TestPlayer player1;
TestPlayer player2;
@Parameterized.Parameters(name = "{index}: useMaxPrio = {0}")
/* @Parameterized.Parameters(name = "{index}: useMaxPrio = {0}")
public static Iterable<Object[]> params() {
return Arrays.asList(new Object[][]{{true}, {false}});
}
}*/
@Parameterized.Parameter
public boolean useMaxPriorityAssociation;
// public boolean useMaxPriorityAssociation;
protected FlagRegistry getFlagRegistry() {
return WorldGuard.getInstance().getFlagRegistry();
@@ -78,7 +79,7 @@ public abstract class RegionOverlapTest {
protected abstract RegionManager createRegionManager() throws Exception;
@Before
@BeforeAll
public void setUp() throws Exception {
setUpGlobalRegion();
@@ -194,8 +195,9 @@ public abstract class RegionOverlapTest {
assertTrue(appl.testState(player2, Flags.BUILD));
}
@Test
public void testNonPlayerBuildAccessInOneRegion() {
@ParameterizedTest(name = "useMaxPriorityAssociation={0}")
@ValueSource(booleans = { false, true })
public void testNonPlayerBuildAccessInOneRegion(boolean useMaxPriorityAssociation) {
ApplicableRegionSet appl;
HashSet<ProtectedRegion> source = new HashSet<>();
@@ -210,11 +212,12 @@ public abstract class RegionOverlapTest {
assertTrue(appl.testState(assoc, Flags.BUILD));
// Inside fountain
appl = manager.getApplicableRegions(inFountain);
assertFalse(appl.testState(assoc, Flags.BUILD));
assertTrue(appl.testState(assoc, Flags.BUILD));
}
@Test
public void testNonPlayerBuildAccessInBothRegions() {
@ParameterizedTest(name = "useMaxPriorityAssociation={0}")
@ValueSource(booleans = { false, true })
public void testNonPlayerBuildAccessInBothRegions(boolean useMaxPriorityAssociation) {
ApplicableRegionSet appl;
HashSet<ProtectedRegion> source = new HashSet<>();
@@ -233,8 +236,9 @@ public abstract class RegionOverlapTest {
assertTrue(appl.testState(assoc, Flags.BUILD));
}
@Test
public void testNonPlayerBuildAccessInNoRegions() {
@ParameterizedTest(name = "useMaxPriorityAssociation={0}")
@ValueSource(booleans = { false, true })
public void testNonPlayerBuildAccessInNoRegions(boolean useMaxPriorityAssociation) {
ApplicableRegionSet appl;
HashSet<ProtectedRegion> source = new HashSet<>();
@@ -19,8 +19,6 @@
package com.sk89q.worldguard.protection;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
@@ -35,11 +33,16 @@ import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public abstract class RegionPriorityTest {
static String COURTYARD_ID = "courtyard";
static String FOUNTAIN_ID = "fountain";
@@ -63,7 +66,7 @@ public abstract class RegionPriorityTest {
protected abstract RegionManager createRegionManager() throws Exception;
@Before
@BeforeAll
public void setUp() throws Exception {
setUpGlobalRegion();
@@ -19,17 +19,18 @@
package com.sk89q.worldguard.protection.regions;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class RegionIntersectTest {
@Test
@@ -96,7 +97,7 @@ public class RegionIntersectTest {
e.printStackTrace();
}
assertEquals("Check for '" + region2.getId() + "' region failed.", expected, actual);
assertEquals(expected, actual, "Check for '" + region2.getId() + "' region failed.");
}
private static final BlockVector2[] polygon = {
@@ -117,8 +118,8 @@ public class RegionIntersectTest {
final ProtectedPolygonalRegion polygonalRegion = new ProtectedPolygonalRegion("polygonalRegion", Arrays.asList(rotatedPolygon), -3, 3);
assertTrue(String.format("%s does not intersect (cuboid.intersectsEdges(polygonal)", Arrays.asList(rotatedPolygon)), cuboidRegion.intersectsEdges(polygonalRegion));
assertTrue(String.format("%s does not intersect (polygonal.intersectsEdges(cuboid)", Arrays.asList(rotatedPolygon)), polygonalRegion.intersectsEdges(cuboidRegion));
assertTrue(cuboidRegion.intersectsEdges(polygonalRegion), String.format("%s does not intersect (cuboid.intersectsEdges(polygonal)", Arrays.asList(rotatedPolygon)));
assertTrue(polygonalRegion.intersectsEdges(cuboidRegion), String.format("%s does not intersect (polygonal.intersectsEdges(cuboid)", Arrays.asList(rotatedPolygon)));
}
}
}
@@ -21,15 +21,15 @@ package com.sk89q.worldguard.util;
import com.sk89q.worldguard.util.command.CommandFilter;
import com.sk89q.worldguard.util.command.CommandFilter.Builder;
import junit.framework.TestCase;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CommandFilterTest extends TestCase {
public class CommandFilterTest {
private static final String[] COMMAND_SEPARATORS = new String[] {" ", " ", "\t", " \t", "\n", "\r\n"};
@Test
public void testApply() throws Exception {
CommandFilter filter;
@@ -187,9 +187,9 @@ public class CommandFilterTest extends TestCase {
private void assertSubcommands(CommandFilter filter, final String root, boolean expected) {
for (String separator : COMMAND_SEPARATORS) {
assertThat(filter.apply(root.replaceAll(" ", separator)), is(expected));
assertThat(filter.apply((root + " _subcmd").replaceAll(" ", separator)), is(expected));
assertThat(filter.apply((root + " _subcmd _another").replaceAll(" ", separator)), is(expected));
assertEquals(filter.apply(root.replaceAll(" ", separator)), expected);
assertEquals(filter.apply((root + " _subcmd").replaceAll(" ", separator)), expected);
assertEquals(filter.apply((root + " _subcmd _another").replaceAll(" ", separator)), expected);
}
}
+13 -1
View File
@@ -1,6 +1,18 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
applyLibrariesConfiguration()
dependencies {
"shade"("com.sk89q:squirrelid:${Versions.SQUIRRELID}")
"shade"("org.enginehub:squirrelid:${Versions.SQUIRRELID}")
"shade"("org.khelekore:prtree:1.5.0")
}
tasks.named<ShadowJar>("jar") {
dependencies {
relocate("org.enginehub.squirrelid", "com.sk89q.worldguard.util.profile") {
include(dependency("org.enginehub:squirrelid"))
}
include(dependency("org.khelekore:prtree"))
}
}