commit e5c2270f53842fb60f001661f9b3256713fbf753 Author: Gabriele C Date: Thu Aug 2 01:04:23 2018 +0200 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2d9777 --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# Java source files +*.class +MANIFEST.MF +*.jar +*.war +*.ear +hs_err_pid* + +# Mac +.DS_Store + +# Intellij +*.iml +*.java___jb_tmp___ +.idea/* +*.ipr +*.iws +/out/ +.idea_modules/ +atlassian-ide-plugin.xml +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties + +# Eclipse +*.pydevproject +.metadata +.gradle +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.project +.externalToolBuilders/ +*.launch +.cproject +.classpath +.buildpath +.target +.texlipse + +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties + +# NetBeans +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml +.nb-gradle/ + +# Git +!.gitignore diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9ca6b46 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010-2018 CodeMC https://github.com/CodeMC/WorldGuardWrapper + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/api/pom.xml b/api/pom.xml new file mode 100644 index 0000000..a22215e --- /dev/null +++ b/api/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-parent + 1.0.0-SNAPSHOT + + + worldguardwrapper-api + + WorldGuardWrapper-API + + + + ${project.groupId} + worldguardwrapper-implementation-aggregated + ${project.version} + pom + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + + + + + diff --git a/api/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java b/api/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java new file mode 100644 index 0000000..036ef2e --- /dev/null +++ b/api/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java @@ -0,0 +1,20 @@ +package org.codemc.worldguardwrapper; + +import lombok.experimental.Delegate; +import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation; + +public class WorldGuardWrapper implements IWorldGuardImplementation { + + @Delegate + private IWorldGuardImplementation implementation; + + public WorldGuardWrapper() { + // TODO: better way to detect version + try { + Class.forName("com.sk89q.worldguard.WorldGuard"); + implementation = new org.codemc.worldguardwrapper.implementation.v7.WorldGuardImplementation(); + } catch (ClassNotFoundException e) { + implementation = new org.codemc.worldguardwrapper.implementation.v6.WorldGuardImplementation(); + } + } +} diff --git a/implementation/aggregated/pom.xml b/implementation/aggregated/pom.xml new file mode 100644 index 0000000..025343c --- /dev/null +++ b/implementation/aggregated/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-implementation + 1.0.0-SNAPSHOT + + + worldguardwrapper-implementation-aggregated + pom + + WorldGuardWrapper-Implementation-Aggregated + + + + ${project.groupId} + worldguardwrapper-implementation-v6 + ${project.version} + + + ${project.groupId} + worldguardwrapper-implementation-v7 + ${project.version} + + + diff --git a/implementation/interface/pom.xml b/implementation/interface/pom.xml new file mode 100644 index 0000000..3e3ff64 --- /dev/null +++ b/implementation/interface/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-implementation + 1.0.0-SNAPSHOT + + + worldguardwrapper-implementation-interface + + WorldGuardWrapper-Implementation-Interface + diff --git a/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/AbstractWorldGuardImplementation.java b/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/AbstractWorldGuardImplementation.java new file mode 100644 index 0000000..c051750 --- /dev/null +++ b/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/AbstractWorldGuardImplementation.java @@ -0,0 +1,7 @@ +package org.codemc.worldguardwrapper.implementation; + +public abstract class AbstractWorldGuardImplementation implements IWorldGuardImplementation { + + protected AbstractWorldGuardImplementation() { + } +} diff --git a/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java b/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java new file mode 100644 index 0000000..c815136 --- /dev/null +++ b/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java @@ -0,0 +1,24 @@ +package org.codemc.worldguardwrapper.implementation; + +import lombok.NonNull; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.Optional; + +public interface IWorldGuardImplementation { + + int getApiVersion(); + + // String flag + + Optional queryStringFlag(Player player, @NonNull Location location, @NonNull String flagId); + + boolean registerStringFlag(@NonNull String flagId, @NonNull String defaultValue); + + // State flag + + Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagId); + + boolean registerStateFlag(@NonNull String flagId, @NonNull Boolean defaultValue); +} diff --git a/implementation/pom.xml b/implementation/pom.xml new file mode 100644 index 0000000..97ecbcb --- /dev/null +++ b/implementation/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-parent + 1.0.0-SNAPSHOT + + + worldguardwrapper-implementation + pom + + + interface + v6 + v7 + aggregated + + + WorldGuardWrapper-Implementation + + + + codemc-repo + https://repo.codemc.org/repository/maven-public/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + diff --git a/implementation/v6/pom.xml b/implementation/v6/pom.xml new file mode 100644 index 0000000..67d8fa2 --- /dev/null +++ b/implementation/v6/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-implementation + 1.0.0-SNAPSHOT + + + worldguardwrapper-implementation-v6 + + WorldGuardWrapper-Implementation-V6 + + + + ${project.groupId} + worldguardwrapper-implementation-interface + ${project.version} + + + com.sk89q.worldguard + worldguard-legacy + 6.2 + provided + + + com.sk89q.worldedit + worldedit-core + 6.1.4-SNAPSHOT + provided + + + de.schlichtherle + truezip + + + com.google.guava + guava + + + rhino + js + + + org.yaml + snakeyaml + + + com.google.code.findbugs + jsr305 + + + com.thoughtworks.paranamer + paranamer + + + com.google.code.gson + gson + + + com.sk89q.lib + jlibnoise + + + com.sk89q + jchronic + + + + + diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java new file mode 100644 index 0000000..0bc9418 --- /dev/null +++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java @@ -0,0 +1,96 @@ +package org.codemc.worldguardwrapper.implementation.v6; + +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.flags.StateFlag; +import com.sk89q.worldguard.protection.flags.StringFlag; +import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; +import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; +import com.sk89q.worldguard.protection.managers.RegionManager; +import lombok.NonNull; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation; + +import java.util.Optional; + +public class WorldGuardImplementation extends AbstractWorldGuardImplementation { + + private final WorldGuardPlugin plugin; + private final FlagRegistry flagRegistry; + + public WorldGuardImplementation() { + plugin = WorldGuardPlugin.inst(); + flagRegistry = plugin.getFlagRegistry(); + } + + private Optional wrapPlayer(Player player) { + return Optional.ofNullable(player).map(bukkitPlayer -> plugin.wrapPlayer(player)); + } + + private Optional getWorldManager(@NonNull World world) { + return Optional.ofNullable(plugin.getRegionManager(world)); + } + + private Optional getApplicableRegions(@NonNull Location location) { + return getWorldManager(location.getWorld()).map(manager -> manager.getApplicableRegions(location)); + } + + private Optional queryValue(Player player, @NonNull Location location, @NonNull Flag flag) { + return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryValue(wrapPlayer(player).orElse(null), flag)); + } + + private Optional queryState(Player player, @NonNull Location location, @NonNull StateFlag... stateFlags) { + return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags)); + } + + @Override + public int getApiVersion() { + return 6; + } + + // String flag + + @Override + public Optional queryStringFlag(Player player, @NonNull Location location, @NonNull String flagId) { + Flag flag = flagRegistry.get(flagId); + if (!(flag instanceof StringFlag)) { + return Optional.empty(); + } + return queryValue(player, location, (StringFlag) flag); + } + + @Override + public boolean registerStringFlag(@NonNull String flagId, @NonNull String defaultValue) { + try { + flagRegistry.register(new StringFlag(flagId, defaultValue)); + return true; + } catch (FlagConflictException ignored) { + } + return false; + } + + // State flag + + @Override + public Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagId) { + Flag flag = flagRegistry.get(flagId); + if (!(flag instanceof StateFlag)) { + return Optional.empty(); + } + return queryState(player, location, (StateFlag) flag).map(state -> state == StateFlag.State.ALLOW); + } + + @Override + public boolean registerStateFlag(@NonNull String flagId, @NonNull Boolean defaultValue) { + try { + flagRegistry.register(new StateFlag(flagId, defaultValue)); + return true; + } catch (FlagConflictException ignored) { + } + return false; + } +} diff --git a/implementation/v7/pom.xml b/implementation/v7/pom.xml new file mode 100644 index 0000000..c61537d --- /dev/null +++ b/implementation/v7/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-implementation + 1.0.0-SNAPSHOT + + + worldguardwrapper-implementation-v7 + + WorldGuardWrapper-Implementation-V7 + + + + ${project.groupId} + worldguardwrapper-implementation-interface + ${project.version} + + + com.sk89q.worldguard + worldguard-legacy + 7.0.0-SNAPSHOT + provided + + + org.bukkit + bukkit + + + com.sk89q.intake + intake + + + com.sk89q + squirrelid + + + org.flywaydb + flyway-core + + + org.khelekore + prtree + + + com.googlecode.json-simple + json-simple + + + net.sf.opencsv + opencsv + + + com.sk89q + commandbook + + + de.schlichtherle + truezip + + + rhino + js + + + org.yaml + snakeyaml + + + com.google.guava + guava + + + com.sk89q + jchronic + + + com.google.code.findbugs + jsr305 + + + com.thoughtworks.paranamer + paranamer + + + com.google.code.gson + gson + + + com.sk89q.lib + jlibnoise + + + com.sk89q + dummypermscompat + + + + + diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java new file mode 100644 index 0000000..9f1fd8b --- /dev/null +++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java @@ -0,0 +1,106 @@ +package org.codemc.worldguardwrapper.implementation.v7; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.flags.StateFlag; +import com.sk89q.worldguard.protection.flags.StringFlag; +import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; +import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import lombok.NonNull; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation; + +import java.util.Optional; + +public class WorldGuardImplementation extends AbstractWorldGuardImplementation { + + private final WorldGuard core; + private final FlagRegistry flagRegistry; + private final WorldGuardPlatform platform; + private final RegionContainer container; + private final WorldGuardPlugin plugin; + + public WorldGuardImplementation() { + core = WorldGuard.getInstance(); + flagRegistry = core.getFlagRegistry(); + platform = core.getPlatform(); + container = platform.getRegionContainer(); + plugin = WorldGuardPlugin.inst(); + } + + private Optional wrapPlayer(Player player) { + return Optional.ofNullable(player).map(bukkitPlayer -> plugin.wrapPlayer(player)); + } + + private Optional getWorldManager(@NonNull World world) { + return Optional.ofNullable(container.get(BukkitAdapter.adapt(world))); + } + + private Optional getApplicableRegions(@NonNull Location location) { + return getWorldManager(location.getWorld()).map(manager -> manager.getApplicableRegions(BukkitAdapter.asVector(location))); + } + + private Optional queryValue(Player player, @NonNull Location location, @NonNull Flag flag) { + return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryValue(wrapPlayer(player).orElse(null), flag)); + } + + private Optional queryState(Player player, @NonNull Location location, @NonNull StateFlag... stateFlags) { + return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags)); + } + + @Override + public int getApiVersion() { + return 7; + } + + // String flag + + @Override + public Optional queryStringFlag(Player player, @NonNull Location location, @NonNull String flagId) { + Flag flag = flagRegistry.get(flagId); + if (!(flag instanceof StringFlag)) { + return Optional.empty(); + } + return queryValue(player, location, (StringFlag) flag); + } + + @Override + public boolean registerStringFlag(@NonNull String flagId, @NonNull String defaultValue) { + try { + flagRegistry.register(new StringFlag(flagId, defaultValue)); + return true; + } catch (FlagConflictException ignored) { + } + return false; + } + + // State flag + + @Override + public Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagId) { + Flag flag = flagRegistry.get(flagId); + if (!(flag instanceof StateFlag)) { + return Optional.empty(); + } + return queryState(player, location, (StateFlag) flag).map(state -> state == StateFlag.State.ALLOW); + } + + @Override + public boolean registerStateFlag(@NonNull String flagId, @NonNull Boolean defaultValue) { + try { + flagRegistry.register(new StateFlag(flagId, defaultValue)); + return true; + } catch (FlagConflictException ignored) { + } + return false; + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f574389 --- /dev/null +++ b/pom.xml @@ -0,0 +1,168 @@ + + + 4.0.0 + + org.codemc.worldguardwrapper + worldguardwrapper-parent + 1.0.0-SNAPSHOT + pom + + + api + implementation + + + WorldGuardWrapper-Parent + A wrapper for the WorldGuard API that allows plugins to support both v6 and v7 APIs. + https://github.com/CodeMC/WorldGuardWrapper + 2018 + + + scm:git:https://github.com/CodeMC/WorldGuardWrapper.git + scm:git:git@github.com:CodeMC/WorldGuardWrapper.git + https://github.com/CodeMC/WorldGuardWrapper + + + + jenkins + http://ci.codemc.org/job/CodeMC/job/HolographicDisplays/ + + + + GitHub + https://github.com/CodeMC/WorldGuardWrapper/issues + + + + + codemc-snapshots + https://repo.codemc.org/repository/maven-snapshots/ + + + codemc-releases + https://repo.codemc.org/repository/maven-releases/ + + + + + UTF-8 + UTF-8 + 1.8 + 1.13-R0.1-SNAPSHOT + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + + + + org.spigotmc + spigot-api + ${spigot-api.version} + provided + + + com.googlecode.json-simple + json-simple + + + com.google.code.gson + gson + + + org.yaml + snakeyaml + + + net.md-5 + bungeecord-chat + + + + + org.projectlombok + lombok + 1.18.0 + provided + + + + + clean package + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-clean-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.0 + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.1 + + public + false + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.1 + + false + + + + org.apache.maven.plugins + maven-install-plugin + 2.5.2 + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + +