mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-11-22 18:46:24 +01:00
Major work towards 1.13 compat
This commit is contained in:
parent
8eeab682db
commit
6c5319f355
13
build.gradle
13
build.gradle
@ -26,9 +26,9 @@
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.1'
|
||||
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1'
|
||||
classpath 'org.ajoberstar:gradle-git:0.12.0'
|
||||
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
|
||||
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.7.5'
|
||||
classpath 'org.ajoberstar:gradle-git:1.7.2'
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@
|
||||
apply plugin: 'maven'
|
||||
apply plugin: 'checkstyle'
|
||||
apply plugin: 'com.github.johnrengelman.shadow'
|
||||
apply plugin: 'com.jfrog.artifactory-upload'
|
||||
apply plugin: 'com.jfrog.artifactory'
|
||||
|
||||
group = 'com.sk89q.worldguard'
|
||||
version = '7.0.0-SNAPSHOT'
|
||||
@ -62,6 +62,7 @@
|
||||
checkstyle.configFile = new File(rootProject.projectDir, "config/checkstyle/checkstyle.xml")
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
maven { url "http://repo.spongepowered.org/maven/" }
|
||||
maven { url "https://hub.spigotmc.org/nexus/content/groups/public" }
|
||||
@ -101,6 +102,10 @@ task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
classifier 'dist'
|
||||
dependencies {
|
||||
include(dependency('org.khelekore:prtree:1.5.0'))
|
||||
include(dependency('com.sk89q:squirrelid:0.1.0'))
|
||||
include(dependency('org.flywaydb:flyway-core:3.0'))
|
||||
include(dependency('com.googlecode.json-simple:json-simple:1.1.1'))
|
||||
include(dependency('net.sf.opencsv:opencsv:2.0'))
|
||||
}
|
||||
exclude 'GradleStart**'
|
||||
exclude '.cache'
|
||||
|
@ -27,7 +27,6 @@
|
||||
<property name="max" value="2"/>
|
||||
</module>
|
||||
<module name="SuperFinalize"/> <!-- We don't actually use this -->
|
||||
<module name="JUnitTestCase"/> <!-- Checks tearDown(), setUp() etc. -->
|
||||
|
||||
<!-- Style -->
|
||||
<module name="LeftCurly"> <!-- Left brace never goes on another line -->
|
||||
|
@ -14,6 +14,8 @@
|
||||
<subpackage name="worldguard">
|
||||
<allow pkg="org.khelekore"/>
|
||||
<allow pkg="org.flywaydb"/>
|
||||
<allow pkg="org.yaml"/>
|
||||
<allow pkg="org.json"/>
|
||||
|
||||
<subpackage name="bukkit">
|
||||
<allow pkg="org.bukkit"/>
|
||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,5 @@
|
||||
#Fri Nov 13 12:12:21 EST 2015
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
|
||||
|
74
gradlew
vendored
74
gradlew
vendored
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
@ -6,12 +6,30 @@
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
@ -30,6 +48,7 @@ die ( ) {
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
@ -40,31 +59,11 @@ case "`uname`" in
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
||||
if $cygwin ; then
|
||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
fi
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >&-
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >&-
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
@ -90,7 +89,7 @@ location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
@ -114,6 +113,7 @@ fi
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
@ -154,11 +154,19 @@ if $cygwin ; then
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
14
gradlew.bat
vendored
14
gradlew.bat
vendored
@ -8,14 +8,14 @@
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
@ -46,10 +46,9 @@ echo location of your Java installation.
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
@ -60,11 +59,6 @@ set _SKIP=2
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
@ -2,11 +2,14 @@
|
||||
apply plugin: 'idea'
|
||||
|
||||
dependencies {
|
||||
compile 'com.sk89q.worldedit:worldedit-core:6.1.1-SNAPSHOT'
|
||||
compile 'com.sk89q.worldedit:worldedit-core:7.0.0-SNAPSHOT'
|
||||
compile 'com.sk89q.intake:intake:4.2-SNAPSHOT'
|
||||
compile 'com.sk89q:squirrelid:0.1.0'
|
||||
compile 'org.flywaydb:flyway-core:3.0'
|
||||
compile 'org.khelekore:prtree:1.5.0'
|
||||
compile 'net.sf.opencsv:opencsv:2.0'
|
||||
compile 'com.googlecode.json-simple:json-simple:1.1.1'
|
||||
compile 'com.google.code.findbugs:jsr305:1.3.9'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
63
worldguard-core/config/checkstyle/checkstyle.xml
Normal file
63
worldguard-core/config/checkstyle/checkstyle.xml
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||
<module name="Checker">
|
||||
<!-- Tabs are strictly banned -->
|
||||
<module name="FileTabCharacter"/>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<!-- Important basics -->
|
||||
<!-- <module name="PackageDeclaration"/> Unlikely that we would miss this in a PR -->
|
||||
<module name="OuterTypeFilename"/> <!-- TypeName -> TypeName.java -->
|
||||
|
||||
<!--
|
||||
Control package usage, so people don't insert Bukkit into WE where it shouldn't belong, etc.
|
||||
It is a bit draconian, so update as necessary!
|
||||
-->
|
||||
<module name="ImportControl">
|
||||
<property name="file" value="worldguard-core/config/checkstyle/import-control.xml"/>
|
||||
</module>
|
||||
|
||||
<!-- Code -->
|
||||
<module name="HideUtilityClassConstructor"/> <!-- Utility classes should not have a constructor -->
|
||||
<module name="CovariantEquals"/>
|
||||
<module name="EqualsHashCode"/> <!-- equals() and hashCode() go together -->
|
||||
<module name="NestedTryDepth"> <!-- SHOULD not need to adjust this -->
|
||||
<property name="max" value="2"/>
|
||||
</module>
|
||||
<module name="SuperFinalize"/> <!-- We don't actually use this -->
|
||||
|
||||
<!-- Style -->
|
||||
<module name="LeftCurly"> <!-- Left brace never goes on another line -->
|
||||
<property name="option" value="eol"/>
|
||||
</module> <!-- We don't check right brace -->
|
||||
<module name="DefaultComesLast"/> <!-- default case in switch should be last -->
|
||||
<module name="GenericWhitespace"/>
|
||||
|
||||
<!-- Naming -->
|
||||
<module name="ClassTypeParameterName">
|
||||
<property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
|
||||
</module>
|
||||
<module name="LocalFinalVariableName"/>
|
||||
<module name="LocalVariableName">
|
||||
<property name="format" value="^[a-z_][a-zA-Z0-9]*$"/>
|
||||
</module>
|
||||
<module name="MemberName">
|
||||
<property name="format" value="^[a-z_][a-zA-Z0-9]*$"/>
|
||||
</module>
|
||||
<module name="MethodName">
|
||||
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
|
||||
</module>
|
||||
<!-- <module name="PackageName"/> Unlikely that we would miss this in a PR -->
|
||||
<module name="ParameterName"/>
|
||||
<!-- <module name="TypeName"/> Unlikely that we would miss this in a PR -->
|
||||
</module>
|
||||
|
||||
<!-- Require the header, something that many people forget and we hate to fix -->
|
||||
<!-- You should configure the header in your IDE -->
|
||||
<module name="Header">
|
||||
<property name="headerFile" value="config/checkstyle/header.txt"/>
|
||||
<property name="fileExtensions" value="java"/>
|
||||
</module>
|
||||
</module>
|
40
worldguard-core/config/checkstyle/import-control.xml
Normal file
40
worldguard-core/config/checkstyle/import-control.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<!--
|
||||
~ WorldGuard, a suite of tools for Minecraft
|
||||
~ Copyright (C) sk89q <http://www.sk89q.com>
|
||||
~ Copyright (C) WorldGuard team and contributors
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify it
|
||||
~ under the terms of the GNU Lesser General Public License as published by the
|
||||
~ Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
~ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
~ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
~ for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU Lesser General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<!DOCTYPE import-control PUBLIC
|
||||
"-//Puppy Crawl//DTD Import Control 1.1//EN"
|
||||
"http://www.puppycrawl.com/dtds/import_control_1_1.dtd">
|
||||
|
||||
<import-control pkg="com.sk89q">
|
||||
<allow pkg="java"/>
|
||||
<allow pkg="javax"/>
|
||||
<allow pkg="org.junit"/>
|
||||
<allow pkg="junit"/>
|
||||
<allow pkg="org.mockito"/>
|
||||
<allow pkg="org.hamcrest"/>
|
||||
<allow pkg="com.sk89q"/>
|
||||
<allow pkg="org.enginehub"/>
|
||||
<allow pkg="org.yaml.snakeyaml"/>
|
||||
<allow pkg="au.com.bytecode.opencsv"/>
|
||||
<allow pkg="org.khelekore.prtree"/>
|
||||
<allow pkg="com.google.common"/>
|
||||
<allow pkg="com.jolbox.bonecp"/>
|
||||
<allow pkg="org.flywaydb.core"/>
|
||||
<allow pkg="org.json.simple"/>
|
||||
</import-control>
|
@ -0,0 +1,163 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard;
|
||||
|
||||
import com.sk89q.worldedit.extension.platform.AbstractPlayerActor;
|
||||
import com.sk89q.worldedit.world.weather.WeatherType;
|
||||
import com.sk89q.worldguard.domains.Association;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class LocalPlayer extends AbstractPlayerActor implements RegionAssociable {
|
||||
|
||||
/**
|
||||
* Returns true if this player is inside a group.
|
||||
*
|
||||
* @param group The group to check
|
||||
* @return Whether this player is in {@code group}
|
||||
*/
|
||||
public abstract boolean hasGroup(String group);
|
||||
|
||||
/**
|
||||
* Kick this player.
|
||||
*
|
||||
* @param msg The message to kick the player with
|
||||
*/
|
||||
public abstract void kick(String msg);
|
||||
|
||||
/**
|
||||
* Ban this player.
|
||||
*
|
||||
* @param msg The message to ban the player with
|
||||
*/
|
||||
public abstract void ban(String msg);
|
||||
|
||||
@Override
|
||||
public Association getAssociation(List<ProtectedRegion> regions) {
|
||||
boolean member = false;
|
||||
|
||||
for (ProtectedRegion region : regions) {
|
||||
if (region.isOwner(this)) {
|
||||
return Association.OWNER;
|
||||
} else if (!member && region.isMember(this)) {
|
||||
member = true;
|
||||
}
|
||||
}
|
||||
|
||||
return member ? Association.MEMBER : Association.NON_MEMBER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the health of this player.
|
||||
*
|
||||
* @return The health
|
||||
*/
|
||||
public abstract double getHealth();
|
||||
|
||||
/**
|
||||
* Sets the health of this player.
|
||||
*
|
||||
* @param health The health
|
||||
*/
|
||||
public abstract void setHealth(double health);
|
||||
|
||||
/**
|
||||
* Gets the max health of this player.
|
||||
*
|
||||
* @return The max health
|
||||
*/
|
||||
public abstract double getMaxHealth();
|
||||
|
||||
/**
|
||||
* Gets the food level of this player.
|
||||
*
|
||||
* @return The food level
|
||||
*/
|
||||
public abstract double getFoodLevel();
|
||||
|
||||
/**
|
||||
* Sets the food level of this player.
|
||||
*
|
||||
* @param foodLevel The food level
|
||||
*/
|
||||
public abstract void setFoodLevel(double foodLevel);
|
||||
|
||||
/**
|
||||
* Gets the saturation of this player.
|
||||
*
|
||||
* @return The saturation
|
||||
*/
|
||||
public abstract double getSaturation();
|
||||
|
||||
/**
|
||||
* Sets the saturation of this player.
|
||||
*
|
||||
* @param saturation The saturation
|
||||
*/
|
||||
public abstract void setSaturation(double saturation);
|
||||
|
||||
/**
|
||||
* Gets the players weather
|
||||
*
|
||||
* @return The players weather
|
||||
*/
|
||||
public abstract WeatherType getPlayerWeather();
|
||||
|
||||
/**
|
||||
* Sets the players WeatherType
|
||||
*
|
||||
* @param weather The weather type
|
||||
*/
|
||||
public abstract void setPlayerWeather(WeatherType weather);
|
||||
|
||||
/**
|
||||
* Resets the players weather to normal.
|
||||
*/
|
||||
public abstract void resetPlayerWeather();
|
||||
|
||||
/**
|
||||
* Gets if the players time is relative.
|
||||
*
|
||||
* @return If the time is relative
|
||||
*/
|
||||
public abstract boolean isPlayerTimeRelative();
|
||||
|
||||
/**
|
||||
* Gets the time offset of the player.
|
||||
*
|
||||
* @return The players time offset
|
||||
*/
|
||||
public abstract long getPlayerTimeOffset();
|
||||
|
||||
/**
|
||||
* Sets the players time.
|
||||
*
|
||||
* @param time The players time
|
||||
* @param relative If it's relative
|
||||
*/
|
||||
public abstract void setPlayerTime(long time, boolean relative);
|
||||
|
||||
/**
|
||||
* Resets the players time to normal.
|
||||
*/
|
||||
public abstract void resetPlayerTime();
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import com.sk89q.worldguard.internal.platform.WorldGuardPlatform;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||
import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class WorldGuard {
|
||||
|
||||
public static final Logger logger = Logger.getLogger(WorldGuard.class.getCanonicalName());
|
||||
|
||||
private static final WorldGuard instance = new WorldGuard();
|
||||
private WorldGuardPlatform platform;
|
||||
private final SimpleFlagRegistry flagRegistry = new SimpleFlagRegistry();
|
||||
|
||||
public static WorldGuard getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public WorldGuard() {
|
||||
flagRegistry.setInitialized(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* The WorldGuard Platform.
|
||||
*
|
||||
* @return The platform
|
||||
*/
|
||||
public WorldGuardPlatform getPlatform() {
|
||||
checkNotNull(platform);
|
||||
return platform;
|
||||
}
|
||||
|
||||
public void setPlatform(WorldGuardPlatform platform) {
|
||||
checkNotNull(platform);
|
||||
this.platform = platform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the flag registry.
|
||||
*
|
||||
* @return the flag registry
|
||||
*/
|
||||
public FlagRegistry getFlagRegistry() {
|
||||
return this.flagRegistry;
|
||||
}
|
||||
}
|
@ -19,6 +19,10 @@
|
||||
|
||||
package com.sk89q.worldguard.blacklist;
|
||||
|
||||
import com.sk89q.worldedit.util.formatting.ColorCodeBuilder;
|
||||
import com.sk89q.worldedit.util.formatting.Style;
|
||||
import com.sk89q.worldedit.util.formatting.StyledFragment;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.blacklist.action.Action;
|
||||
import com.sk89q.worldguard.blacklist.action.ActionType;
|
||||
import com.sk89q.worldguard.blacklist.event.BlacklistEvent;
|
||||
@ -29,8 +33,6 @@
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.sk89q.worldguard.bukkit.commands.CommandUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
@ -42,7 +44,7 @@
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public abstract class Blacklist {
|
||||
public class Blacklist {
|
||||
|
||||
private static final Logger log = Logger.getLogger(Blacklist.class.getCanonicalName());
|
||||
|
||||
@ -133,12 +135,10 @@ public boolean check(BlacklistEvent event, boolean forceRepeat, boolean silent)
|
||||
* @throws IOException if an error occurred reading from the file
|
||||
*/
|
||||
public void load(File file) throws IOException {
|
||||
FileReader input = null;
|
||||
|
||||
MatcherIndex.Builder builder = new MatcherIndex.Builder();
|
||||
TargetMatcherParser targetMatcherParser = new TargetMatcherParser();
|
||||
|
||||
try {
|
||||
input = new FileReader(file);
|
||||
try (FileReader input = new FileReader(file)) {
|
||||
BufferedReader buff = new BufferedReader(input);
|
||||
|
||||
String line;
|
||||
@ -155,7 +155,7 @@ public void load(File file) throws IOException {
|
||||
|
||||
if (line.matches("^\\[.*\\]$")) {
|
||||
String[] items = line.substring(1, line.length() - 1).split(",");
|
||||
currentEntries = new ArrayList<BlacklistEntry>();
|
||||
currentEntries = new ArrayList<>();
|
||||
|
||||
for (String item : items) {
|
||||
try {
|
||||
@ -185,10 +185,10 @@ public void load(File file) throws IOException {
|
||||
entry.setIgnorePermissions(parts[1].split(","));
|
||||
|
||||
} else if (parts[0].equalsIgnoreCase("message")) {
|
||||
entry.setMessage(CommandUtils.replaceColorMacros(parts[1].trim()));
|
||||
entry.setMessage(WorldGuard.getInstance().getPlatform().replaceColorMacros(parts[1].trim()));
|
||||
|
||||
} else if (parts[0].equalsIgnoreCase("comment")) {
|
||||
entry.setComment(CommandUtils.replaceColorMacros(parts[1].trim()));
|
||||
entry.setComment(WorldGuard.getInstance().getPlatform().replaceColorMacros(parts[1].trim()));
|
||||
|
||||
} else {
|
||||
boolean found = false;
|
||||
@ -217,19 +217,12 @@ public void load(File file) throws IOException {
|
||||
}
|
||||
|
||||
this.index = builder.build();
|
||||
} finally {
|
||||
try {
|
||||
if (input != null) {
|
||||
input.close();
|
||||
}
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Action> parseActions(BlacklistEntry entry, String raw) {
|
||||
String[] split = raw.split(",");
|
||||
List<Action> actions = new ArrayList<Action>();
|
||||
List<Action> actions = new ArrayList<>();
|
||||
|
||||
for (String name : split) {
|
||||
name = name.trim();
|
||||
@ -270,12 +263,11 @@ public BlacklistEvent getLastEvent() {
|
||||
public void notify(BlacklistEvent event, String comment) {
|
||||
lastEvent = event;
|
||||
|
||||
broadcastNotification(ChatColor.GRAY + "WG: "
|
||||
+ ChatColor.LIGHT_PURPLE + event.getCauseName()
|
||||
+ ChatColor.GOLD + " (" + event.getDescription() + ") "
|
||||
+ ChatColor.WHITE
|
||||
+ event.getTarget().getFriendlyName()
|
||||
+ (comment != null ? " (" + comment + ")" : "") + ".");
|
||||
StyledFragment fragment = new StyledFragment().append(new StyledFragment(Style.GRAY).append("WG: "))
|
||||
.append(new StyledFragment(Style.PURPLE).append(event.getCauseName()))
|
||||
.append(new StyledFragment(Style.YELLOW_DARK).append(" (" + event.getDescription() + ") "))
|
||||
.append(new StyledFragment(Style.WHITE).append(event.getTarget().getFriendlyName() + (comment != null ? " (" + comment + ")" : "") + "."));
|
||||
broadcastNotification(ColorCodeBuilder.asColorCodes(fragment));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -283,7 +275,9 @@ public void notify(BlacklistEvent event, String comment) {
|
||||
*
|
||||
* @param msg The message to broadcast
|
||||
*/
|
||||
public abstract void broadcastNotification(String msg);
|
||||
public void broadcastNotification(String msg) {
|
||||
WorldGuard.getInstance().getPlatform().broadcastNotification(msg);
|
||||
}
|
||||
|
||||
public LoadingCache<String, TrackedEvent> getRepeatingEventCache() {
|
||||
return repeatingEventCache;
|
@ -33,7 +33,7 @@ public class BlacklistEntry {
|
||||
private Blacklist blacklist;
|
||||
private Set<String> ignoreGroups;
|
||||
private Set<String> ignorePermissions;
|
||||
private Map<Class<? extends BlacklistEvent>, List<Action>> actions = new HashMap<Class<? extends BlacklistEvent>, List<Action>>();
|
||||
private Map<Class<? extends BlacklistEvent>, List<Action>> actions = new HashMap<>();
|
||||
|
||||
private String message;
|
||||
private String comment;
|
||||
@ -146,12 +146,7 @@ public boolean shouldIgnore(@Nullable LocalPlayer player) {
|
||||
* @return The actions for the given event
|
||||
*/
|
||||
public List<Action> getActions(Class<? extends BlacklistEvent> eventCls) {
|
||||
List<Action> ret = actions.get(eventCls);
|
||||
if (ret == null) {
|
||||
ret = new ArrayList<Action>();
|
||||
actions.put(eventCls, ret);
|
||||
}
|
||||
return ret;
|
||||
return actions.computeIfAbsent(eventCls, k -> new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
@ -31,7 +31,7 @@ public class BlacklistLoggerHandler implements LoggerHandler {
|
||||
* List of logger handlers.
|
||||
*/
|
||||
private Set<LoggerHandler> handlers
|
||||
= new HashSet<LoggerHandler>();
|
||||
= new HashSet<>();
|
||||
|
||||
/**
|
||||
* Add a handler.
|
@ -32,16 +32,16 @@
|
||||
|
||||
class MatcherIndex {
|
||||
|
||||
private static final MatcherIndex EMPTY_INSTANCE = new MatcherIndex(HashBasedTable.<Integer, TargetMatcher, BlacklistEntry>create());
|
||||
private final Table<Integer, TargetMatcher, BlacklistEntry> entries;
|
||||
private static final MatcherIndex EMPTY_INSTANCE = new MatcherIndex(HashBasedTable.create());
|
||||
private final Table<String, TargetMatcher, BlacklistEntry> entries;
|
||||
|
||||
private MatcherIndex(Table<Integer, TargetMatcher, BlacklistEntry> entries) {
|
||||
private MatcherIndex(Table<String, TargetMatcher, BlacklistEntry> entries) {
|
||||
checkNotNull(entries);
|
||||
this.entries = entries;
|
||||
}
|
||||
|
||||
public List<BlacklistEntry> getEntries(Target target) {
|
||||
List<BlacklistEntry> found = new ArrayList<BlacklistEntry>();
|
||||
List<BlacklistEntry> found = new ArrayList<>();
|
||||
for (Entry<TargetMatcher, BlacklistEntry> entry : entries.row(target.getTypeId()).entrySet()) {
|
||||
if (entry.getKey().test(target)) {
|
||||
found.add(entry.getValue());
|
||||
@ -63,7 +63,7 @@ public static MatcherIndex getEmptyInstance() {
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private final Table<Integer, TargetMatcher, BlacklistEntry> entries = HashBasedTable.create();
|
||||
private final Table<String, TargetMatcher, BlacklistEntry> entries = HashBasedTable.create();
|
||||
|
||||
public Builder add(TargetMatcher matcher, BlacklistEntry entry) {
|
||||
checkNotNull(matcher);
|
@ -21,7 +21,6 @@
|
||||
|
||||
import com.sk89q.worldguard.blacklist.BlacklistEntry;
|
||||
import com.sk89q.worldguard.blacklist.event.BlacklistEvent;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
@ -44,10 +43,9 @@ protected ActionResult applyNonRepeated(BlacklistEvent event, boolean silent) {
|
||||
|
||||
if (event.getPlayer() != null) {
|
||||
if (message != null) {
|
||||
event.getPlayer().printRaw(ChatColor.YELLOW + String.format(message, event.getTarget().getFriendlyName()));
|
||||
event.getPlayer().print(String.format(message, event.getTarget().getFriendlyName()));
|
||||
} else {
|
||||
event.getPlayer().printRaw(ChatColor.YELLOW + "You're not allowed to " + event.getDescription() + " " +
|
||||
event.getTarget().getFriendlyName() + ".");
|
||||
event.getPlayer().printError("You're not allowed to " + event.getDescription() + " " + event.getTarget().getFriendlyName() + ".");
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ public String getLoggerMessage() {
|
||||
|
||||
@Override
|
||||
public Vector getLoggedPosition() {
|
||||
return getPlayer() != null ? getPlayer().getPosition() : getPosition();
|
||||
return getPlayer() != null ? getPlayer().getLocation().toVector() : getPosition();
|
||||
}
|
||||
|
||||
}
|
@ -19,7 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.blacklist.logger;
|
||||
|
||||
import com.sk89q.worldedit.blocks.ItemType;
|
||||
import com.sk89q.worldguard.blacklist.event.BlacklistEvent;
|
||||
|
||||
import java.util.logging.Level;
|
||||
@ -41,21 +40,6 @@ public void logEvent(BlacklistEvent event, String comment) {
|
||||
(comment != null ? " (" + comment + ")" : ""));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an item's friendly name with its ID.
|
||||
*
|
||||
* @param id The item id
|
||||
* @return The friendly name of the item
|
||||
*/
|
||||
private static String getFriendlyItemName(int id) {
|
||||
ItemType type = ItemType.fromID(id);
|
||||
if (type != null) {
|
||||
return type.getName() + " (#" + id + ")";
|
||||
} else {
|
||||
return "#" + id;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
@ -84,7 +84,7 @@ private Connection getConnection() throws SQLException {
|
||||
* @param item The item used
|
||||
* @param comment The comment associated with the event
|
||||
*/
|
||||
private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector pos, int item, String comment) {
|
||||
private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector pos, String item, String comment) {
|
||||
try {
|
||||
Connection conn = getConnection();
|
||||
PreparedStatement stmt = conn.prepareStatement(
|
||||
@ -97,7 +97,7 @@ private void logEvent(EventType eventType, @Nullable LocalPlayer player, Vector
|
||||
stmt.setInt(4, pos.getBlockX());
|
||||
stmt.setInt(5, pos.getBlockY());
|
||||
stmt.setInt(6, pos.getBlockZ());
|
||||
stmt.setInt(7, item);
|
||||
stmt.setString(7, item);
|
||||
stmt.setInt(8, (int)(System.currentTimeMillis() / 1000));
|
||||
stmt.setString(9, comment);
|
||||
stmt.executeUpdate();
|
@ -20,7 +20,6 @@
|
||||
package com.sk89q.worldguard.blacklist.logger;
|
||||
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.blocks.ItemType;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.blacklist.event.BlacklistEvent;
|
||||
import com.sk89q.worldguard.blacklist.target.Target;
|
||||
@ -231,21 +230,6 @@ public void logEvent(BlacklistEvent event, String comment) {
|
||||
logEvent(event, event.getDescription(), event.getTarget(), event.getPosition(), comment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an item's friendly name with its ID.
|
||||
*
|
||||
* @param id The id to get a friendly name for
|
||||
* @return The friendly name
|
||||
*/
|
||||
private static String getFriendlyItemName(int id) {
|
||||
ItemType type = ItemType.fromID(id);
|
||||
if (type != null) {
|
||||
return type.getName() + " (#" + id + ")";
|
||||
} else {
|
||||
return "#" + id + "";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
for (Map.Entry<String,LogFileWriter> entry : writers.entrySet()) {
|
@ -17,23 +17,26 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.bukkit.internal;
|
||||
package com.sk89q.worldguard.blacklist.target;
|
||||
|
||||
import com.sk89q.worldguard.blacklist.Blacklist;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
|
||||
public class BukkitBlacklist extends Blacklist {
|
||||
public class ItemMatcher implements TargetMatcher {
|
||||
|
||||
private WorldGuardPlugin plugin;
|
||||
private final ItemType type;
|
||||
|
||||
public BukkitBlacklist(Boolean useAsWhitelist, WorldGuardPlugin plugin) {
|
||||
super(useAsWhitelist);
|
||||
this.plugin = plugin;
|
||||
public ItemMatcher(ItemType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void broadcastNotification(String msg) {
|
||||
plugin.broadcastNotification(msg);
|
||||
public String getMatchedTypeId() {
|
||||
return this.type.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(Target target) {
|
||||
return target.getTypeId().equals(getMatchedTypeId());
|
||||
}
|
||||
|
||||
}
|
@ -19,22 +19,24 @@
|
||||
|
||||
package com.sk89q.worldguard.blacklist.target;
|
||||
|
||||
public class WildcardDataMatcher implements TargetMatcher {
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
|
||||
private final int typeId;
|
||||
public class ItemTarget implements Target {
|
||||
|
||||
public WildcardDataMatcher(int typeId) {
|
||||
this.typeId = typeId;
|
||||
private ItemType type;
|
||||
|
||||
public ItemTarget(ItemType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMatchedTypeId() {
|
||||
return typeId;
|
||||
public String getTypeId() {
|
||||
return type.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test(Target target) {
|
||||
return target.getTypeId() == typeId;
|
||||
public String getFriendlyName() {
|
||||
return type.getName();
|
||||
}
|
||||
|
||||
}
|
@ -29,14 +29,7 @@ public interface Target {
|
||||
*
|
||||
* @return the type ID
|
||||
*/
|
||||
int getTypeId();
|
||||
|
||||
/**
|
||||
* Get the data value.
|
||||
*
|
||||
* @return the data value
|
||||
*/
|
||||
short getData();
|
||||
String getTypeId();
|
||||
|
||||
/**
|
||||
* Get a friendly name to be printed.
|
@ -29,7 +29,7 @@ public interface TargetMatcher {
|
||||
*
|
||||
* @return the type ID
|
||||
*/
|
||||
int getMatchedTypeId();
|
||||
String getMatchedTypeId();
|
||||
|
||||
/**
|
||||
* Return whether the given target is matched by this matcher.
|
@ -19,36 +19,22 @@
|
||||
|
||||
package com.sk89q.worldguard.blacklist.target;
|
||||
|
||||
import com.sk89q.worldedit.blocks.ItemType;
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||
|
||||
public class MaterialTarget implements Target {
|
||||
public class TargetMatcherParser {
|
||||
|
||||
private int id;
|
||||
private short data;
|
||||
|
||||
public MaterialTarget(int id, short data) {
|
||||
this.id = id;
|
||||
this.data = data;
|
||||
public TargetMatcher fromInput(String input) throws TargetMatcherParseException {
|
||||
return new ItemMatcher(parseType(input));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTypeId() {
|
||||
return id;
|
||||
}
|
||||
private ItemType parseType(String input) throws TargetMatcherParseException {
|
||||
input = input.trim();
|
||||
|
||||
@Override
|
||||
public short getData() {
|
||||
return data;
|
||||
ItemType itemType = ItemTypes.get(input);
|
||||
if (itemType == null) {
|
||||
throw new TargetMatcherParseException("Unknown block or item name: " + input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFriendlyName() {
|
||||
ItemType type = ItemType.fromID(id);
|
||||
if (type != null) {
|
||||
return type.getName() + " (#" + id + ":" + data + ")";
|
||||
} else {
|
||||
return "#" + id + ":" + data;
|
||||
return itemType;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.config;
|
||||
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.protection.managers.storage.DriverType;
|
||||
import com.sk89q.worldguard.protection.managers.storage.RegionDriver;
|
||||
import com.sk89q.worldguard.session.handler.WaterBreathing;
|
||||
import com.sk89q.worldguard.util.report.Unreported;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Represents the global configuration and also delegates configuration
|
||||
* for individual worlds.
|
||||
*
|
||||
* @author sk89q
|
||||
* @author Michael
|
||||
*/
|
||||
public abstract class ConfigurationManager {
|
||||
|
||||
protected static final Logger log = Logger.getLogger(ConfigurationManager.class.getCanonicalName());
|
||||
|
||||
static final String CONFIG_HEADER = "#\r\n" +
|
||||
"# WorldGuard's main configuration file\r\n" +
|
||||
"#\r\n" +
|
||||
"# This is the global configuration file. Anything placed into here will\r\n" +
|
||||
"# be applied to all worlds. However, each world has its own configuration\r\n" +
|
||||
"# file to allow you to replace most settings in here for that world only.\r\n" +
|
||||
"#\r\n" +
|
||||
"# About editing this file:\r\n" +
|
||||
"# - DO NOT USE TABS. You MUST use spaces or Bukkit will complain. If\r\n" +
|
||||
"# you use an editor like Notepad++ (recommended for Windows users), you\r\n" +
|
||||
"# must configure it to \"replace tabs with spaces.\" In Notepad++, this can\r\n" +
|
||||
"# be changed in Settings > Preferences > Language Menu.\r\n" +
|
||||
"# - Don't get rid of the indents. They are indented so some entries are\r\n" +
|
||||
"# in categories (like \"enforce-single-session\" is in the \"protection\"\r\n" +
|
||||
"# category.\r\n" +
|
||||
"# - If you want to check the format of this file before putting it\r\n" +
|
||||
"# into WorldGuard, paste it into http://yaml-online-parser.appspot.com/\r\n" +
|
||||
"# and see if it gives \"ERROR:\".\r\n" +
|
||||
"# - Lines starting with # are comments and so they are ignored.\r\n" +
|
||||
"#\r\n";
|
||||
|
||||
private boolean hasCommandBookGodMode = false;
|
||||
|
||||
public boolean useRegionsCreatureSpawnEvent;
|
||||
public boolean activityHaltToggle = false;
|
||||
public boolean useGodPermission;
|
||||
public boolean useGodGroup;
|
||||
public boolean useAmphibiousGroup;
|
||||
public boolean usePlayerMove;
|
||||
public boolean usePlayerTeleports;
|
||||
public boolean deopOnJoin;
|
||||
public boolean blockInGameOp;
|
||||
public boolean migrateRegionsToUuid;
|
||||
public boolean keepUnresolvedNames;
|
||||
|
||||
@Unreported public Map<String, String> hostKeys = new HashMap<>();
|
||||
public boolean hostKeysAllowFMLClients;
|
||||
|
||||
/**
|
||||
* Region Storage Configuration method, and config values
|
||||
*/
|
||||
@Unreported public RegionDriver selectedRegionStoreDriver;
|
||||
@Unreported public Map<DriverType, RegionDriver> regionStoreDriverMap;
|
||||
|
||||
/**
|
||||
* Get the folder for storing data files and configuration.
|
||||
*
|
||||
* @return the data folder
|
||||
*/
|
||||
public abstract File getDataFolder();
|
||||
|
||||
/**
|
||||
* Get the folder for storing data files and configuration for each
|
||||
* world.
|
||||
*
|
||||
* @return the data folder
|
||||
*/
|
||||
public File getWorldsDataFolder() {
|
||||
return new File(getDataFolder(), "worlds");
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the configuration.
|
||||
*/
|
||||
public abstract void load();
|
||||
|
||||
/**
|
||||
* Unload the configuration.
|
||||
*/
|
||||
public abstract void unload();
|
||||
|
||||
/**
|
||||
* Get the configuration for a world.
|
||||
*
|
||||
* @param world The world to get the configuration for
|
||||
* @return {@code world}'s configuration
|
||||
*/
|
||||
public abstract WorldConfiguration get(World world);
|
||||
|
||||
public abstract void disableUuidMigration();
|
||||
|
||||
/**
|
||||
* Check to see if god mode is enabled for a player.
|
||||
*
|
||||
* @param player The player to check
|
||||
* @return Whether the player has godmode through WorldGuard or CommandBook
|
||||
*/
|
||||
public boolean hasGodMode(LocalPlayer player) {
|
||||
return WorldGuard.getInstance().getPlatform().getSessionManager().get(player).isInvincible(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable amphibious mode for a player.
|
||||
*
|
||||
* @param player The player to enable amphibious mode for
|
||||
*/
|
||||
public void enableAmphibiousMode(LocalPlayer player) {
|
||||
WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class);
|
||||
if (handler != null) {
|
||||
handler.setWaterBreathing(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable amphibious mode for a player.
|
||||
*
|
||||
* @param player The player to disable amphibious mode for
|
||||
*/
|
||||
public void disableAmphibiousMode(LocalPlayer player) {
|
||||
WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class);
|
||||
if (handler != null) {
|
||||
handler.setWaterBreathing(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if amphibious mode is enabled for a player.
|
||||
*
|
||||
* @param player The player to check
|
||||
* @return Whether {@code player} has amphibious mode
|
||||
*/
|
||||
public boolean hasAmphibiousMode(LocalPlayer player) {
|
||||
WaterBreathing handler = WorldGuard.getInstance().getPlatform().getSessionManager().get(player).getHandler(WaterBreathing.class);
|
||||
return handler != null && handler.hasWaterBreathing();
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.config;
|
||||
|
||||
import com.sk89q.worldguard.blacklist.Blacklist;
|
||||
import com.sk89q.worldguard.util.report.Unreported;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Holds the configuration for individual worlds.
|
||||
*
|
||||
* @author sk89q
|
||||
* @author Michael
|
||||
*/
|
||||
public abstract class WorldConfiguration {
|
||||
|
||||
public static final Logger log = Logger.getLogger(WorldConfiguration.class.getCanonicalName());
|
||||
|
||||
public static final String CONFIG_HEADER = "#\r\n" +
|
||||
"# WorldGuard's world configuration file\r\n" +
|
||||
"#\r\n" +
|
||||
"# This is a world configuration file. Anything placed into here will only\r\n" +
|
||||
"# affect this world. If you don't put anything in this file, then the\r\n" +
|
||||
"# settings will be inherited from the main configuration file.\r\n" +
|
||||
"#\r\n" +
|
||||
"# If you see {} below, that means that there are NO entries in this file.\r\n" +
|
||||
"# Remove the {} and add your own entries.\r\n" +
|
||||
"#\r\n";
|
||||
|
||||
@Unreported private String worldName;
|
||||
protected File blacklistFile;
|
||||
|
||||
@Unreported protected Blacklist blacklist;
|
||||
|
||||
public boolean boundedLocationFlags;
|
||||
public boolean useRegions;
|
||||
|
||||
/**
|
||||
* Load the configuration.
|
||||
*/
|
||||
public abstract void loadConfiguration();
|
||||
|
||||
public Blacklist getBlacklist() {
|
||||
return this.blacklist;
|
||||
}
|
||||
|
||||
public String getWorldName() {
|
||||
return this.worldName;
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.config;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.sk89q.util.yaml.YAMLFormat;
|
||||
import com.sk89q.util.yaml.YAMLProcessor;
|
||||
import com.sk89q.worldguard.protection.managers.storage.DriverType;
|
||||
import com.sk89q.worldguard.protection.managers.storage.RegionDriver;
|
||||
import com.sk89q.worldguard.protection.managers.storage.file.DirectoryYamlDriver;
|
||||
import com.sk89q.worldguard.protection.managers.storage.sql.SQLDriver;
|
||||
import com.sk89q.worldguard.util.report.Unreported;
|
||||
import com.sk89q.worldguard.util.sql.DataSourceConfig;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class YamlConfigurationManager extends ConfigurationManager {
|
||||
|
||||
@Unreported private YAMLProcessor config;
|
||||
|
||||
public abstract void copyDefaults();
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
copyDefaults();
|
||||
|
||||
config = new YAMLProcessor(new File(getDataFolder(), "config.yml"), true, YAMLFormat.EXTENDED);
|
||||
try {
|
||||
config.load();
|
||||
} catch (IOException e) {
|
||||
log.severe("Error reading configuration for global config: ");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
config.removeProperty("suppress-tick-sync-warnings");
|
||||
migrateRegionsToUuid = config.getBoolean("regions.uuid-migration.perform-on-next-start", true);
|
||||
keepUnresolvedNames = config.getBoolean("regions.uuid-migration.keep-names-that-lack-uuids", true);
|
||||
useRegionsCreatureSpawnEvent = config.getBoolean("regions.use-creature-spawn-event", true);
|
||||
useGodPermission = config.getBoolean("auto-invincible", config.getBoolean("auto-invincible-permission", false));
|
||||
useGodGroup = config.getBoolean("auto-invincible-group", false);
|
||||
useAmphibiousGroup = config.getBoolean("auto-no-drowning-group", false);
|
||||
config.removeProperty("auto-invincible-permission");
|
||||
usePlayerMove = config.getBoolean("use-player-move-event", true);
|
||||
usePlayerTeleports = config.getBoolean("use-player-teleports", true);
|
||||
|
||||
deopOnJoin = config.getBoolean("security.deop-everyone-on-join", false);
|
||||
blockInGameOp = config.getBoolean("security.block-in-game-op-command", false);
|
||||
|
||||
hostKeys = new HashMap<>();
|
||||
Object hostKeysRaw = config.getProperty("host-keys");
|
||||
if (!(hostKeysRaw instanceof Map)) {
|
||||
config.setProperty("host-keys", new HashMap<String, String>());
|
||||
} else {
|
||||
for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) hostKeysRaw).entrySet()) {
|
||||
String key = String.valueOf(entry.getKey());
|
||||
String value = String.valueOf(entry.getValue());
|
||||
hostKeys.put(key.toLowerCase(), value);
|
||||
}
|
||||
}
|
||||
hostKeysAllowFMLClients = config.getBoolean("security.host-keys-allow-forge-clients", false);
|
||||
|
||||
// ====================================================================
|
||||
// Region store drivers
|
||||
// ====================================================================
|
||||
|
||||
boolean useSqlDatabase = config.getBoolean("regions.sql.use", false);
|
||||
String sqlDsn = config.getString("regions.sql.dsn", "jdbc:mysql://localhost/worldguard");
|
||||
String sqlUsername = config.getString("regions.sql.username", "worldguard");
|
||||
String sqlPassword = config.getString("regions.sql.password", "worldguard");
|
||||
String sqlTablePrefix = config.getString("regions.sql.table-prefix", "");
|
||||
|
||||
DataSourceConfig dataSourceConfig = new DataSourceConfig(sqlDsn, sqlUsername, sqlPassword, sqlTablePrefix);
|
||||
SQLDriver sqlDriver = new SQLDriver(dataSourceConfig);
|
||||
DirectoryYamlDriver yamlDriver = new DirectoryYamlDriver(getWorldsDataFolder(), "regions.yml");
|
||||
|
||||
this.regionStoreDriverMap = ImmutableMap.<DriverType, RegionDriver>builder()
|
||||
.put(DriverType.MYSQL, sqlDriver)
|
||||
.put(DriverType.YAML, yamlDriver)
|
||||
.build();
|
||||
this.selectedRegionStoreDriver = useSqlDatabase ? sqlDriver : yamlDriver;
|
||||
|
||||
postLoad();
|
||||
|
||||
config.setHeader(CONFIG_HEADER);
|
||||
}
|
||||
|
||||
public void postLoad() {}
|
||||
|
||||
public YAMLProcessor getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableUuidMigration() {
|
||||
config.setProperty("regions.uuid-migration.perform-on-next-start", false);
|
||||
if (!config.save()) {
|
||||
log.severe("Error saving configuration!");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.config;
|
||||
|
||||
import com.sk89q.util.yaml.YAMLProcessor;
|
||||
import com.sk89q.worldguard.util.report.Unreported;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class YamlWorldConfiguration extends WorldConfiguration {
|
||||
|
||||
@Unreported private YAMLProcessor parentConfig;
|
||||
@Unreported private YAMLProcessor config;
|
||||
|
||||
public boolean getBoolean(String node, boolean def) {
|
||||
boolean val = parentConfig.getBoolean(node, def);
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
return config.getBoolean(node, def);
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
public String getString(String node, String def) {
|
||||
String val = parentConfig.getString(node, def);
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
return config.getString(node, def);
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
public int getInt(String node, int def) {
|
||||
int val = parentConfig.getInt(node, def);
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
return config.getInt(node, def);
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private double getDouble(String node, double def) {
|
||||
double val = parentConfig.getDouble(node, def);
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
return config.getDouble(node, def);
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
public List<Integer> getIntList(String node, List<Integer> def) {
|
||||
List<Integer> res = parentConfig.getIntList(node, def);
|
||||
|
||||
if (res == null || res.size() == 0) {
|
||||
parentConfig.setProperty(node, new ArrayList<Integer>());
|
||||
}
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
res = config.getIntList(node, def);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<String> getStringList(String node, List<String> def) {
|
||||
List<String> res = parentConfig.getStringList(node, def);
|
||||
|
||||
if (res == null || res.size() == 0) {
|
||||
parentConfig.setProperty(node, new ArrayList<String>());
|
||||
}
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
res = config.getStringList(node, def);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public List<String> getKeys(String node) {
|
||||
List<String> res = parentConfig.getKeys(node);
|
||||
|
||||
if (res == null || res.size() == 0) {
|
||||
res = config.getKeys(node);
|
||||
}
|
||||
if (res == null) {
|
||||
res = new ArrayList<String>();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public Object getProperty(String node) {
|
||||
Object res = parentConfig.getProperty(node);
|
||||
|
||||
if (config.getProperty(node) != null) {
|
||||
res = config.getProperty(node);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
@ -34,7 +34,7 @@
|
||||
*/
|
||||
public class GroupDomain implements Domain, ChangeTracked {
|
||||
|
||||
private final Set<String> groups = new CopyOnWriteArraySet<String>();
|
||||
private final Set<String> groups = new CopyOnWriteArraySet<>();
|
||||
private boolean dirty = true;
|
||||
|
||||
/**
|
@ -34,8 +34,8 @@
|
||||
*/
|
||||
public class PlayerDomain implements Domain, ChangeTracked {
|
||||
|
||||
private final Set<UUID> uniqueIds = new CopyOnWriteArraySet<UUID>();
|
||||
private final Set<String> names = new CopyOnWriteArraySet<String>();
|
||||
private final Set<UUID> uniqueIds = new CopyOnWriteArraySet<>();
|
||||
private final Set<String> names = new CopyOnWriteArraySet<>();
|
||||
private boolean dirty = true;
|
||||
|
||||
/**
|
@ -17,32 +17,25 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.bukkit.permission;
|
||||
package com.sk89q.worldguard.internal.permission;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldguard.internal.PermissionModel;
|
||||
|
||||
abstract class AbstractPermissionModel implements PermissionModel {
|
||||
public abstract class AbstractPermissionModel implements PermissionModel {
|
||||
|
||||
private final WorldGuardPlugin plugin;
|
||||
private final CommandSender sender;
|
||||
private final Actor sender;
|
||||
|
||||
public AbstractPermissionModel(WorldGuardPlugin plugin, CommandSender sender) {
|
||||
this.plugin = plugin;
|
||||
public AbstractPermissionModel(Actor sender) {
|
||||
this.sender = sender;
|
||||
}
|
||||
|
||||
protected WorldGuardPlugin getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public CommandSender getSender() {
|
||||
public Actor getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
protected boolean hasPluginPermission(String permission) {
|
||||
return plugin.hasPermission(getSender(), "worldguard." + permission);
|
||||
return getSender().hasPermission("worldguard." + permission);
|
||||
}
|
||||
|
||||
}
|
@ -17,15 +17,14 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.bukkit.permission;
|
||||
package com.sk89q.worldguard.internal.permission;
|
||||
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.internal.permission.AbstractPermissionModel;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@ -34,8 +33,8 @@
|
||||
*/
|
||||
public class RegionPermissionModel extends AbstractPermissionModel {
|
||||
|
||||
public RegionPermissionModel(WorldGuardPlugin plugin, CommandSender sender) {
|
||||
super(plugin, sender);
|
||||
public RegionPermissionModel(Actor sender) {
|
||||
super(sender);
|
||||
}
|
||||
|
||||
public boolean mayIgnoreRegionProtection(World world) {
|
||||
@ -171,18 +170,17 @@ public boolean mayRemoveOwners(ProtectedRegion region) {
|
||||
* @param region the region
|
||||
*/
|
||||
private boolean hasPatternPermission(String perm, ProtectedRegion region) {
|
||||
if (!(getSender() instanceof Player)) {
|
||||
if (!(getSender() instanceof LocalPlayer)) {
|
||||
return true; // Non-players (i.e. console, command blocks, etc.) have full power
|
||||
}
|
||||
|
||||
LocalPlayer localPlayer = getPlugin().wrapPlayer((Player) getSender());
|
||||
String idLower = region.getId().toLowerCase();
|
||||
String effectivePerm;
|
||||
|
||||
if (region.isOwner(localPlayer)) {
|
||||
if (region.isOwner((LocalPlayer) getSender())) {
|
||||
return hasPluginPermission("region." + perm + ".own." + idLower) ||
|
||||
hasPluginPermission("region." + perm + ".member." + idLower);
|
||||
} else if (region.isMember(localPlayer)) {
|
||||
} else if (region.isMember((LocalPlayer) getSender())) {
|
||||
return hasPluginPermission("region." + perm + ".member." + idLower);
|
||||
} else {
|
||||
effectivePerm = "region." + perm + "." + idLower;
|
@ -0,0 +1,117 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.internal.platform;
|
||||
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||
import com.sk89q.worldguard.config.ConfigurationManager;
|
||||
import com.sk89q.worldguard.protection.flags.FlagContext;
|
||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||
import com.sk89q.worldguard.session.SessionManager;
|
||||
|
||||
/**
|
||||
* A platform for implementing.
|
||||
*/
|
||||
public interface WorldGuardPlatform {
|
||||
|
||||
/**
|
||||
* Notifies the platform when a flag context is created.
|
||||
*
|
||||
* @param flagContextBuilder The flag context
|
||||
*/
|
||||
void notifyFlagContextCreate(FlagContext.FlagContextBuilder flagContextBuilder);
|
||||
|
||||
/**
|
||||
* Get the global ConfigurationManager.
|
||||
* Use this to access global configuration values and per-world configuration values.
|
||||
*
|
||||
* @return The global ConfigurationManager
|
||||
*/
|
||||
ConfigurationManager getGlobalStateManager();
|
||||
|
||||
/**
|
||||
* Gets a world by name, if possible.
|
||||
*
|
||||
* @param worldName The name
|
||||
* @return The world
|
||||
*/
|
||||
World getWorldByName(String worldName);
|
||||
|
||||
/**
|
||||
* Replaces colour macros.
|
||||
*
|
||||
* @param string The string
|
||||
* @return The replaced string
|
||||
*/
|
||||
String replaceColorMacros(String string);
|
||||
|
||||
/**
|
||||
* Replace macros in the text.
|
||||
*
|
||||
* The macros replaced are as follows:
|
||||
* %name%: The name of {@code sender}.
|
||||
* %id%: The unique name of the sender.
|
||||
* %online%: The number of players currently online on the server
|
||||
* If {@code sender} is a Player:
|
||||
* %world%: The name of the world {@code sender} is located in
|
||||
* %health%: The health of {@code sender}.
|
||||
*
|
||||
* @param sender The sender to check
|
||||
* @param message The message to replace macros in
|
||||
* @return The message with macros replaced
|
||||
*/
|
||||
String replaceMacros(Actor sender, String message);
|
||||
|
||||
/**
|
||||
* Gets the session manager.
|
||||
*
|
||||
* @return The session manager
|
||||
*/
|
||||
SessionManager getSessionManager();
|
||||
|
||||
/**
|
||||
* Notifies all with the worldguard.notify permission.
|
||||
* This will check both superperms and WEPIF,
|
||||
* but makes sure WEPIF checks don't result in duplicate notifications
|
||||
*
|
||||
* @param message The notification to broadcast
|
||||
*/
|
||||
void broadcastNotification(String message);
|
||||
|
||||
/**
|
||||
* Unload the platform
|
||||
*/
|
||||
void unload();
|
||||
|
||||
/**
|
||||
* Gets a RegionContainer.
|
||||
*
|
||||
* @return The region container
|
||||
*/
|
||||
RegionContainer getRegionContainer();
|
||||
|
||||
/**
|
||||
* Gets the servers default game mode.
|
||||
*
|
||||
* @return The default game mode
|
||||
*/
|
||||
GameMode getDefaultGameMode();
|
||||
}
|
@ -21,7 +21,7 @@
|
||||
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
@ -37,7 +37,7 @@ public abstract class AbstractRegionSet implements ApplicableRegionSet {
|
||||
@Deprecated
|
||||
public boolean canBuild(LocalPlayer player) {
|
||||
checkNotNull(player);
|
||||
return test(queryState(player, DefaultFlag.BUILD));
|
||||
return test(queryState(player, Flags.BUILD));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -65,7 +65,7 @@ public State queryState(@Nullable RegionAssociable subject, StateFlag... flags)
|
||||
public boolean allows(StateFlag flag) {
|
||||
checkNotNull(flag);
|
||||
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
throw new IllegalArgumentException("Can't use build flag with allows()");
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ public boolean allows(StateFlag flag) {
|
||||
public boolean allows(StateFlag flag, @Nullable LocalPlayer player) {
|
||||
checkNotNull(flag);
|
||||
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
throw new IllegalArgumentException("Can't use build flag with allows()");
|
||||
}
|
||||
|
@ -20,9 +20,8 @@
|
||||
package com.sk89q.worldguard.protection;
|
||||
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.bukkit.RegionQuery;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||
@ -52,7 +51,7 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
* </p>
|
||||
*
|
||||
* <p>Be sure to check the value of this flag if an instance of this
|
||||
* interface is being retrieved from {@link RegionQuery} as it may
|
||||
* interface is being retrieved from RegionQuery as it may
|
||||
* return an instance of {@link PermissiveRegionSet} or
|
||||
* {@link FailedLoadRegionSet}, among other possibilities.</p>
|
||||
*
|
||||
@ -62,7 +61,7 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
boolean isVirtual();
|
||||
|
||||
/**
|
||||
* Tests whether the {@link DefaultFlag#BUILD} flag or membership
|
||||
* Tests whether the {@link Flags#BUILD} flag or membership
|
||||
* requirements permit the given player.
|
||||
*
|
||||
* @param player the player to check
|
||||
@ -78,9 +77,9 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
*
|
||||
* <p>{@code subject} can be non-null to satisfy region group requirements,
|
||||
* otherwise it will be assumed that the caller that is not a member of any
|
||||
* regions. (Flags on a region can be changed so that they only apply
|
||||
* regions. (FlagUtil on a region can be changed so that they only apply
|
||||
* to certain users.) The subject argument is required if the
|
||||
* {@link DefaultFlag#BUILD} flag is in the list of flags.</p>
|
||||
* {@link Flags#BUILD} flag is in the list of flags.</p>
|
||||
*
|
||||
* @param subject an optional subject, which would be used to determine the region groups that apply
|
||||
* @param flags a list of flags to check
|
||||
@ -96,9 +95,9 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
*
|
||||
* <p>{@code subject} can be non-null to satisfy region group requirements,
|
||||
* otherwise it will be assumed that the caller that is not a member of any
|
||||
* regions. (Flags on a region can be changed so that they only apply
|
||||
* regions. (FlagUtil on a region can be changed so that they only apply
|
||||
* to certain users.) The subject argument is required if the
|
||||
* {@link DefaultFlag#BUILD} flag is in the list of flags.</p>
|
||||
* {@link Flags#BUILD} flag is in the list of flags.</p>
|
||||
*
|
||||
* @param subject an optional subject, which would be used to determine the region groups that apply
|
||||
* @param flags a list of flags to check
|
||||
@ -121,9 +120,9 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
*
|
||||
* <p>{@code subject} can be non-null to satisfy region group requirements,
|
||||
* otherwise it will be assumed that the caller that is not a member of any
|
||||
* regions. (Flags on a region can be changed so that they only apply
|
||||
* regions. (FlagUtil on a region can be changed so that they only apply
|
||||
* to certain users.) The subject argument is required if the
|
||||
* {@link DefaultFlag#BUILD} flag is the flag being queried.</p>
|
||||
* {@link Flags#BUILD} flag is the flag being queried.</p>
|
||||
*
|
||||
* @param subject an optional subject, which would be used to determine the region group to apply
|
||||
* @param flag the flag
|
||||
@ -139,9 +138,9 @@ public interface ApplicableRegionSet extends Iterable<ProtectedRegion> {
|
||||
*
|
||||
* <p>{@code subject} can be non-null to satisfy region group requirements,
|
||||
* otherwise it will be assumed that the caller that is not a member of any
|
||||
* regions. (Flags on a region can be changed so that they only apply
|
||||
* regions. (FlagUtil on a region can be changed so that they only apply
|
||||
* to certain users.) The subject argument is required if the
|
||||
* {@link DefaultFlag#BUILD} flag is the flag being queried.</p>
|
||||
* {@link Flags#BUILD} flag is the flag being queried.</p>
|
||||
*
|
||||
* @param subject an optional subject, which would be used to determine the region group to apply
|
||||
* @param flag the flag
|
@ -22,11 +22,10 @@
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
@ -42,7 +41,7 @@ public class FailedLoadRegionSet extends AbstractRegionSet {
|
||||
|
||||
private static final FailedLoadRegionSet INSTANCE = new FailedLoadRegionSet();
|
||||
|
||||
private final String denyMessage = ChatColor.RED + "Region data for WorldGuard failed to load for this world, so " +
|
||||
private final String denyMessage = "Region data for WorldGuard failed to load for this world, so " +
|
||||
"everything has been protected as a precaution. Please inform a server administrator.";
|
||||
private final Collection<String> denyMessageCollection = ImmutableList.of(denyMessage);
|
||||
|
||||
@ -58,9 +57,9 @@ public boolean isVirtual() {
|
||||
@Nullable
|
||||
@Override
|
||||
public <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
return (V) State.DENY;
|
||||
} else if (flag == DefaultFlag.DENY_MESSAGE) {
|
||||
} else if (flag == Flags.DENY_MESSAGE) {
|
||||
return (V) denyMessage;
|
||||
}
|
||||
return flag.getDefault();
|
||||
@ -69,9 +68,9 @@ public <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
return (Collection<V>) ImmutableList.of(State.DENY);
|
||||
} else if (flag == DefaultFlag.DENY_MESSAGE) {
|
||||
} else if (flag == Flags.DENY_MESSAGE) {
|
||||
return (Collection<V>) denyMessageCollection;
|
||||
}
|
||||
V fallback = flag.getDefault();
|
@ -24,7 +24,7 @@
|
||||
import com.google.common.collect.Sets;
|
||||
import com.sk89q.worldguard.domains.Association;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||
@ -90,7 +90,7 @@ private Iterable<ProtectedRegion> getApplicable() {
|
||||
* the region is not a member of all regions.
|
||||
*
|
||||
* <p>A region is "counted" if it doesn't have the
|
||||
* {@link DefaultFlag#PASSTHROUGH} flag set to {@code ALLOW}. (The
|
||||
* {@link Flags#PASSTHROUGH} flag set to {@code ALLOW}. (The
|
||||
* explicit purpose of the PASSTHROUGH flag is to have the region
|
||||
* be skipped over in this check.)</p>
|
||||
*
|
||||
@ -118,7 +118,7 @@ public Result getMembership(RegionAssociable subject) {
|
||||
}
|
||||
|
||||
// If PASSTHROUGH is set, ignore this region
|
||||
if (getEffectiveFlag(region, DefaultFlag.PASSTHROUGH, subject) == State.ALLOW) {
|
||||
if (getEffectiveFlag(region, Flags.PASSTHROUGH, subject) == State.ALLOW) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -306,7 +306,7 @@ private <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Fla
|
||||
// The BUILD flag is implicitly set on every region where
|
||||
// PASSTHROUGH is not set to ALLOW
|
||||
if (priority != minimumPriority && flag.implicitlySetWithMembership()
|
||||
&& getEffectiveFlag(region, DefaultFlag.PASSTHROUGH, subject) != State.ALLOW) {
|
||||
&& getEffectiveFlag(region, Flags.PASSTHROUGH, subject) != State.ALLOW) {
|
||||
minimumPriority = getPriority(region);
|
||||
}
|
||||
}
|
||||
@ -355,10 +355,10 @@ public int getPriority(final ProtectedRegion region) {
|
||||
@SuppressWarnings("unchecked")
|
||||
public <V> V getEffectiveFlag(final ProtectedRegion region, Flag<V> flag, @Nullable RegionAssociable subject) {
|
||||
if (region == globalRegion) {
|
||||
if (flag == DefaultFlag.PASSTHROUGH) {
|
||||
if (flag == Flags.PASSTHROUGH) {
|
||||
// Has members/owners -> the global region acts like
|
||||
// a regular region without PASSTHROUGH
|
||||
if (region.hasMembersOrOwners() || region.getFlag(DefaultFlag.PASSTHROUGH) == State.DENY) {
|
||||
if (region.hasMembersOrOwners() || region.getFlag(Flags.PASSTHROUGH) == State.DENY) {
|
||||
return null;
|
||||
} else {
|
||||
return (V) State.ALLOW;
|
||||
@ -432,7 +432,7 @@ private void addParents(Set<ProtectedRegion> ignored, ProtectedRegion region) {
|
||||
public static enum Result {
|
||||
/**
|
||||
* Indicates that there are no regions or the only regions are
|
||||
* ones with {@link DefaultFlag#PASSTHROUGH} enabled.
|
||||
* ones with {@link Flags#PASSTHROUGH} enabled.
|
||||
*/
|
||||
NO_REGIONS,
|
||||
|
@ -22,7 +22,7 @@
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.protection.association.RegionAssociable;
|
||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||
import com.sk89q.worldguard.protection.flags.Flags;
|
||||
import com.sk89q.worldguard.protection.flags.Flag;
|
||||
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
@ -53,7 +53,7 @@ public boolean isVirtual() {
|
||||
@Nullable
|
||||
@Override
|
||||
public <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
return (V) State.DENY;
|
||||
}
|
||||
return flag.getDefault();
|
||||
@ -62,7 +62,7 @@ public <V> V queryValue(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <V> Collection<V> queryAllValues(@Nullable RegionAssociable subject, Flag<V> flag) {
|
||||
if (flag == DefaultFlag.BUILD) {
|
||||
if (flag == Flags.BUILD) {
|
||||
return (Collection<V>) ImmutableList.of(State.DENY);
|
||||
}
|
||||
V fallback = flag.getDefault();
|
@ -19,10 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
|
||||
/**
|
||||
* A boolean flag.
|
||||
*/
|
@ -21,7 +21,7 @@
|
||||
|
||||
/**
|
||||
* A special implementation of the {@link StateFlag} for
|
||||
* {@link DefaultFlag#BUILD}.
|
||||
* {@link Flags#BUILD}.
|
||||
*/
|
||||
class BuildFlag extends StateFlag {
|
||||
|
@ -19,10 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
|
||||
/**
|
||||
* Stores a command/
|
||||
*/
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.world.entity.EntityType;
|
||||
import com.sk89q.worldedit.world.entity.EntityTypes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Stores an entity type.
|
||||
*/
|
||||
public class EntityTypeFlag extends Flag<EntityType> {
|
||||
|
||||
protected EntityTypeFlag(String name, @Nullable RegionGroup defaultGroup) {
|
||||
super(name, defaultGroup);
|
||||
}
|
||||
|
||||
protected EntityTypeFlag(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
String input = context.getUserInput();
|
||||
input = input.trim();
|
||||
if (!input.startsWith("/")) {
|
||||
input = "/" + input;
|
||||
}
|
||||
EntityType entityType = unmarshal(input);
|
||||
if (entityType == null) {
|
||||
throw new InvalidFlagFormat("Unknown entity type: " + input);
|
||||
}
|
||||
return entityType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType unmarshal(@Nullable Object o) {
|
||||
return EntityTypes.get(String.valueOf(o));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object marshal(EntityType o) {
|
||||
return o.getId();
|
||||
}
|
||||
}
|
@ -19,15 +19,16 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import com.google.common.collect.Iterators;
|
||||
import com.sk89q.worldguard.protection.FlagValueCalculator;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* A flag carries extra data on a region.
|
||||
@ -126,10 +127,10 @@ public boolean hasConflictStrategy() {
|
||||
|
||||
/**
|
||||
* Whether the flag implicitly has a value set as long as
|
||||
* {@link DefaultFlag#PASSTHROUGH} is not set.
|
||||
* {@link Flags#PASSTHROUGH} is not set.
|
||||
*
|
||||
* <p>This value is only changed, at least in WorldGuard, for the
|
||||
* {@link DefaultFlag#BUILD} flag.</p>
|
||||
* {@link Flags#BUILD} flag.</p>
|
||||
*
|
||||
* @return Whether the flag is ignored
|
||||
*/
|
||||
@ -142,7 +143,7 @@ public boolean implicitlySetWithMembership() {
|
||||
* from membership.
|
||||
*
|
||||
* <p>This value is only changed, at least in WorldGuard, for the
|
||||
* {@link DefaultFlag#BUILD} flag.</p>
|
||||
* {@link Flags#BUILD} flag.</p>
|
||||
*
|
||||
* @return Whether membership is used
|
||||
*/
|
||||
@ -155,7 +156,7 @@ public boolean usesMembershipAsDefault() {
|
||||
* {@link FlagValueCalculator}.
|
||||
*
|
||||
* <p>This value is only changed, at least in WorldGuard, for the
|
||||
* {@link DefaultFlag#BUILD} flag.</p>
|
||||
* {@link Flags#BUILD} flag.</p>
|
||||
*
|
||||
* @return Whether a subject is required
|
||||
*/
|
@ -20,23 +20,22 @@
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.sk89q.minecraft.util.commands.CommandException;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Map;
|
||||
|
||||
public final class FlagContext {
|
||||
|
||||
private final CommandSender sender;
|
||||
private final Actor sender;
|
||||
private final String input;
|
||||
|
||||
private Map<String, Object> context;
|
||||
|
||||
private FlagContext(CommandSender sender, String input, Map<String, Object> values) {
|
||||
private FlagContext(Actor sender, String input, Map<String, Object> values) {
|
||||
this.sender = sender;
|
||||
this.input = input;
|
||||
this.context = values;
|
||||
@ -50,7 +49,7 @@ public void put(String name, Object value) {
|
||||
context.put(name, value);
|
||||
}
|
||||
|
||||
public CommandSender getSender() {
|
||||
public Actor getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
@ -64,11 +63,11 @@ public String getUserInput() {
|
||||
* @return Player
|
||||
* @throws InvalidFlagFormat if the sender is not a player
|
||||
*/
|
||||
public Player getPlayerSender() throws InvalidFlagFormat {
|
||||
try {
|
||||
return WorldGuardPlugin.inst().checkPlayer(sender);
|
||||
} catch (CommandException e) {
|
||||
throw new InvalidFlagFormat(e.getMessage());
|
||||
public LocalPlayer getPlayerSender() throws InvalidFlagFormat {
|
||||
if (sender.isPlayer() && sender instanceof LocalPlayer) {
|
||||
return (LocalPlayer) sender;
|
||||
} else {
|
||||
throw new InvalidFlagFormat("Not a player");
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +127,7 @@ public Object get(String name, Object defaultValue) {
|
||||
* @param values map of values to override from the current FlagContext
|
||||
* @return a copy of this FlagContext
|
||||
*/
|
||||
public FlagContext copyWith(@Nullable CommandSender commandSender, @Nullable String s, @Nullable Map<String, Object> values) {
|
||||
public FlagContext copyWith(@Nullable Actor commandSender, @Nullable String s, @Nullable Map<String, Object> values) {
|
||||
Map<String, Object> map = Maps.newHashMap();
|
||||
map.putAll(context);
|
||||
if (values != null) {
|
||||
@ -138,11 +137,11 @@ public FlagContext copyWith(@Nullable CommandSender commandSender, @Nullable Str
|
||||
}
|
||||
|
||||
public static class FlagContextBuilder {
|
||||
private CommandSender sender;
|
||||
private Actor sender;
|
||||
private String input;
|
||||
private Map<String, Object> map = Maps.newHashMap();
|
||||
|
||||
public FlagContextBuilder setSender(CommandSender sender) {
|
||||
public FlagContextBuilder setSender(Actor sender) {
|
||||
this.sender = sender;
|
||||
return this;
|
||||
}
|
||||
@ -164,7 +163,7 @@ protected boolean tryAddToMap(String key, Object value) {
|
||||
}
|
||||
|
||||
public FlagContext build() {
|
||||
Bukkit.getServer().getPluginManager().callEvent(new FlagContextCreateEvent(this));
|
||||
WorldGuard.getInstance().getPlatform().notifyFlagContextCreate(this);
|
||||
|
||||
return new FlagContext(sender, input, map);
|
||||
}
|
@ -28,11 +28,11 @@
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
public final class Flags {
|
||||
public final class FlagUtil {
|
||||
|
||||
private static final Logger log = Logger.getLogger(Flags.class.getCanonicalName());
|
||||
private static final Logger log = Logger.getLogger(FlagUtil.class.getCanonicalName());
|
||||
|
||||
private Flags() {
|
||||
private FlagUtil() {
|
||||
}
|
||||
|
||||
/**
|
@ -19,22 +19,25 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.util.formatting.ColorCodeBuilder;
|
||||
import com.sk89q.worldedit.util.formatting.Style;
|
||||
import com.sk89q.worldedit.util.formatting.StyledFragment;
|
||||
import com.sk89q.worldedit.world.entity.EntityType;
|
||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||
import com.sk89q.worldedit.world.weather.WeatherType;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.WeatherType;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* The flags that are used in WorldGuard.
|
||||
*/
|
||||
public final class DefaultFlag {
|
||||
public final class Flags {
|
||||
|
||||
// Overrides membership check
|
||||
public static final StateFlag PASSTHROUGH = new StateFlag("passthrough", false);
|
||||
public static final StateFlag PASSTHROUGH = register(new StateFlag("passthrough", false));
|
||||
|
||||
// This flag is unlike the others. It forces the checking of region membership
|
||||
public static final StateFlag BUILD = new BuildFlag("build", true);
|
||||
@ -104,23 +107,26 @@ public final class DefaultFlag {
|
||||
public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = new StateFlag("entity-item-frame-destroy", true);
|
||||
public static final StateFlag FALL_DAMAGE = new StateFlag("fall-damage", true);
|
||||
|
||||
// Flags that adjust behaviors that aren't state flags
|
||||
// FlagUtil that adjust behaviors that aren't state flags
|
||||
public static final StringFlag DENY_MESSAGE = new StringFlag("deny-message",
|
||||
"" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " Sorry, but you can't %what% here.");
|
||||
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
|
||||
.append(new StyledFragment(Style.GRAY).append(" Sorry, but you can't %what% here."))));
|
||||
public static final StringFlag ENTRY_DENY_MESSAGE = new StringFlag("entry-deny-message",
|
||||
"" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " You are not permitted to enter this area.");
|
||||
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
|
||||
.append(new StyledFragment(Style.GRAY).append(" You are not permitted to enter this area."))));
|
||||
public static final StringFlag EXIT_DENY_MESSAGE = new StringFlag("exit-deny-message",
|
||||
"" + ChatColor.RED + ChatColor.BOLD + "Hey!" + ChatColor.GRAY + " You are not permitted to leave this area.");
|
||||
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
|
||||
.append(new StyledFragment(Style.GRAY).append(" You are not permitted to leave this area."))));
|
||||
public static final BooleanFlag EXIT_OVERRIDE = new BooleanFlag("exit-override");
|
||||
public static final StateFlag EXIT_VIA_TELEPORT = new StateFlag("exit-via-teleport", true);
|
||||
public static final StringFlag GREET_MESSAGE = new StringFlag("greeting");
|
||||
public static final StringFlag FAREWELL_MESSAGE = new StringFlag("farewell");
|
||||
public static final BooleanFlag NOTIFY_ENTER = new BooleanFlag("notify-enter");
|
||||
public static final BooleanFlag NOTIFY_LEAVE = new BooleanFlag("notify-leave");
|
||||
public static final SetFlag<EntityType> DENY_SPAWN = new SetFlag<EntityType>("deny-spawn", new EntityTypeFlag(null));
|
||||
public static final EnumFlag<GameMode> GAME_MODE = new EnumFlag<GameMode>("game-mode", GameMode.class);
|
||||
public static final SetFlag<EntityType> DENY_SPAWN = new SetFlag<>("deny-spawn", new EntityTypeFlag(null));
|
||||
public static final Flag<GameMode> GAME_MODE = new GameModeTypeFlag("game-mode");
|
||||
public static final StringFlag TIME_LOCK = new StringFlag("time-lock");
|
||||
public static final EnumFlag<WeatherType> WEATHER_LOCK = new EnumFlag<WeatherType>("weather-lock", WeatherType.class);
|
||||
public static final Flag<WeatherType> WEATHER_LOCK = new WeatherTypeFlag("weather-lock");
|
||||
public static final IntegerFlag HEAL_DELAY = new IntegerFlag("heal-delay");
|
||||
public static final IntegerFlag HEAL_AMOUNT = new IntegerFlag("heal-amount");
|
||||
public static final DoubleFlag MIN_HEAL = new DoubleFlag("heal-min-health");
|
||||
@ -133,8 +139,8 @@ public final class DefaultFlag {
|
||||
// public static final StringFlag MAX_PLAYERS_MESSAGE = new StringFlag("max-players-reject-message");
|
||||
public static final LocationFlag TELE_LOC = new LocationFlag("teleport", RegionGroup.MEMBERS);
|
||||
public static final LocationFlag SPAWN_LOC = new LocationFlag("spawn", RegionGroup.MEMBERS);
|
||||
public static final SetFlag<String> BLOCKED_CMDS = new SetFlag<String>("blocked-cmds", new CommandStringFlag(null));
|
||||
public static final SetFlag<String> ALLOWED_CMDS = new SetFlag<String>("allowed-cmds", new CommandStringFlag(null));
|
||||
public static final SetFlag<String> BLOCKED_CMDS = register(new SetFlag<>("blocked-cmds", new CommandStringFlag(null)));
|
||||
public static final SetFlag<String> ALLOWED_CMDS = register(new SetFlag<>("allowed-cmds", new CommandStringFlag(null)));
|
||||
|
||||
// these 3 are not used by worldguard and should be re-implemented in plugins that may use them using custom flag api
|
||||
@Deprecated
|
||||
@ -144,45 +150,16 @@ public final class DefaultFlag {
|
||||
@Deprecated
|
||||
public static final DoubleFlag PRICE = new DoubleFlag("price");
|
||||
|
||||
public static final Flag<?>[] flagsList = new Flag<?>[] {
|
||||
PASSTHROUGH, BUILD, BLOCK_BREAK, BLOCK_PLACE, PVP, CHEST_ACCESS, PISTONS,
|
||||
TNT, LIGHTER, RIDE, USE, INTERACT, PLACE_VEHICLE, DESTROY_VEHICLE, DAMAGE_ANIMALS, SLEEP,
|
||||
MOB_DAMAGE, MOB_SPAWNING, DENY_SPAWN, INVINCIBILITY, EXP_DROPS, FIREWORK_DAMAGE, WITHER_DAMAGE,
|
||||
CREEPER_EXPLOSION, OTHER_EXPLOSION, ENDERDRAGON_BLOCK_DAMAGE, GHAST_FIREBALL, ENDER_BUILD,
|
||||
DENY_MESSAGE, ENTRY_DENY_MESSAGE, EXIT_DENY_MESSAGE, EXIT_OVERRIDE, EXIT_VIA_TELEPORT,
|
||||
GREET_MESSAGE, FAREWELL_MESSAGE, NOTIFY_ENTER, NOTIFY_LEAVE,
|
||||
EXIT, ENTRY, LIGHTNING, ENTITY_PAINTING_DESTROY, ENDERPEARL, CHORUS_TELEPORT,
|
||||
ENTITY_ITEM_FRAME_DESTROY, FALL_DAMAGE, ITEM_PICKUP, ITEM_DROP, /*MAX_PLAYERS, MAX_PLAYERS_MESSAGE,*/
|
||||
HEAL_AMOUNT, HEAL_DELAY, MIN_HEAL, MAX_HEAL,
|
||||
FEED_DELAY, FEED_AMOUNT, MIN_FOOD, MAX_FOOD,
|
||||
SNOW_FALL, SNOW_MELT, ICE_FORM, ICE_MELT, SOIL_DRY, GAME_MODE,
|
||||
MUSHROOMS, LEAF_DECAY, GRASS_SPREAD, MYCELIUM_SPREAD, VINE_GROWTH,
|
||||
SEND_CHAT, RECEIVE_CHAT, FIRE_SPREAD, LAVA_FIRE, LAVA_FLOW, WATER_FLOW,
|
||||
TELE_LOC, SPAWN_LOC, POTION_SPLASH, TIME_LOCK, WEATHER_LOCK,
|
||||
BLOCKED_CMDS, ALLOWED_CMDS, PRICE, BUYABLE, ENABLE_SHOP
|
||||
};
|
||||
|
||||
private DefaultFlag() {
|
||||
private Flags() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of default flags.
|
||||
*
|
||||
* @deprecated Use {@link FlagRegistry}
|
||||
* @return An array of flags
|
||||
*/
|
||||
@Deprecated
|
||||
public static Flag<?>[] getFlags() {
|
||||
return flagsList;
|
||||
public static <T extends Flag> T register(final T flag) throws FlagConflictException {
|
||||
WorldGuard.getInstance().getFlagRegistry().register(flag);
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of default flags.
|
||||
*
|
||||
* @return An array of flags
|
||||
*/
|
||||
public static List<Flag<?>> getDefaultFlags() {
|
||||
return Arrays.asList(flagsList);
|
||||
public static @Nullable Flag get(final String id) {
|
||||
return WorldGuard.getInstance().getFlagRegistry().get(id);
|
||||
}
|
||||
|
||||
/**
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.world.gamemode.GameMode;
|
||||
import com.sk89q.worldedit.world.gamemode.GameModes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class GameModeTypeFlag extends Flag<GameMode> {
|
||||
|
||||
protected GameModeTypeFlag(String name, @Nullable RegionGroup defaultGroup) {
|
||||
super(name, defaultGroup);
|
||||
}
|
||||
|
||||
protected GameModeTypeFlag(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
String input = context.getUserInput();
|
||||
input = input.trim();
|
||||
if (!input.startsWith("/")) {
|
||||
input = "/" + input;
|
||||
}
|
||||
GameMode gamemode = unmarshal(input);
|
||||
if (gamemode == null) {
|
||||
throw new InvalidFlagFormat("Unknown game mode: " + input);
|
||||
}
|
||||
return gamemode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode unmarshal(@Nullable Object o) {
|
||||
return GameModes.get(String.valueOf(o));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object marshal(GameMode o) {
|
||||
return o.getId();
|
||||
}
|
||||
}
|
@ -19,11 +19,10 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.LocalWorld;
|
||||
import com.sk89q.worldedit.Location;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.bukkit.BukkitUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import com.sk89q.worldedit.util.Location;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@ -35,8 +34,8 @@ class LazyLocation extends Location {
|
||||
private final String worldName;
|
||||
|
||||
@Nullable
|
||||
private static LocalWorld findWorld(String worldName) {
|
||||
return BukkitUtil.getLocalWorld(Bukkit.getServer().getWorld(worldName));
|
||||
private static World findWorld(String worldName) {
|
||||
return WorldGuard.getInstance().getPlatform().getWorldByName(worldName);
|
||||
}
|
||||
|
||||
public LazyLocation(String worldName, Vector position, float yaw, float pitch) {
|
||||
@ -54,7 +53,7 @@ public String getWorldName() {
|
||||
}
|
||||
|
||||
public LazyLocation setAngles(float yaw, float pitch) {
|
||||
return new LazyLocation(worldName, getPosition(), yaw, pitch);
|
||||
return new LazyLocation(worldName, toVector(), yaw, pitch);
|
||||
}
|
||||
|
||||
public LazyLocation setPosition(Vector position) {
|
||||
@ -62,11 +61,11 @@ public LazyLocation setPosition(Vector position) {
|
||||
}
|
||||
|
||||
public LazyLocation add(Vector other) {
|
||||
return this.setPosition(getPosition().add(other));
|
||||
return this.setPosition(toVector().add(other));
|
||||
}
|
||||
|
||||
public LazyLocation add(double x, double y, double z) {
|
||||
return this.setPosition(getPosition().add(x, y, z));
|
||||
return this.setPosition(toVector().add(x, y, z));
|
||||
}
|
||||
|
||||
}
|
@ -19,15 +19,13 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.Location;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.bukkit.BukkitUtil;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.bukkit.permission.RegionPermissionModel;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.util.Location;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -49,7 +47,7 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
|
||||
Location loc = null;
|
||||
if ("here".equalsIgnoreCase(input)) {
|
||||
loc = toLazyLocation(player.getLocation());
|
||||
loc = player.getLocation();
|
||||
} else if ("none".equalsIgnoreCase(input)) {
|
||||
return null;
|
||||
} else {
|
||||
@ -72,17 +70,17 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
Object obj = context.get("region");
|
||||
if (obj instanceof ProtectedRegion) {
|
||||
ProtectedRegion rg = (ProtectedRegion) obj;
|
||||
if (WorldGuardPlugin.inst().getGlobalStateManager().get(player.getWorld()).boundedLocationFlags) {
|
||||
if (!rg.contains(loc.getPosition())) {
|
||||
if (new RegionPermissionModel(WorldGuardPlugin.inst(), player).mayOverrideLocationFlagBounds(rg)) {
|
||||
player.sendMessage(ChatColor.GRAY + "WARNING: Flag location is outside of region.");
|
||||
if (WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(player.getWorld()).boundedLocationFlags) {
|
||||
if (!rg.contains(loc.toVector())) {
|
||||
if (new RegionPermissionModel(player).mayOverrideLocationFlagBounds(rg)) {
|
||||
player.printDebug("WARNING: Flag location is outside of region.");
|
||||
} else {
|
||||
// no permission
|
||||
throw new InvalidFlagFormat("You can't set that flag outside of the region boundaries.");
|
||||
}
|
||||
}
|
||||
// clamp height to world limits
|
||||
loc.setPosition(loc.getPosition().clampY(0, player.getWorld().getMaxHeight()));
|
||||
loc.setPosition(loc.toVector().clampY(0, player.getWorld().getMaxY()));
|
||||
return loc;
|
||||
}
|
||||
}
|
||||
@ -91,10 +89,6 @@ public Location parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
throw new InvalidFlagFormat("Expected 'here' or x,y,z.");
|
||||
}
|
||||
|
||||
private Location toLazyLocation(org.bukkit.Location location) {
|
||||
return new LazyLocation(location.getWorld().getName(), BukkitUtil.toVector(location), location.getYaw(), location.getPitch());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location unmarshal(Object o) {
|
||||
if (o instanceof Map<?, ?>) {
|
||||
@ -130,13 +124,15 @@ public Location unmarshal(Object o) {
|
||||
|
||||
@Override
|
||||
public Object marshal(Location o) {
|
||||
Vector position = o.getPosition();
|
||||
Map<String, Object> vec = new HashMap<String, Object>();
|
||||
Vector position = o.toVector();
|
||||
Map<String, Object> vec = new HashMap<>();
|
||||
if (o instanceof LazyLocation) {
|
||||
vec.put("world", ((LazyLocation) o).getWorldName());
|
||||
} else {
|
||||
try {
|
||||
vec.put("world", o.getWorld().getName());
|
||||
if (o.getExtent() instanceof World) {
|
||||
vec.put("world", ((World) o.getExtent()).getName());
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
return null;
|
||||
}
|
@ -19,9 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
|
||||
@ -72,7 +69,7 @@ public State chooseValue(Collection<State> values) {
|
||||
* the global region.
|
||||
*
|
||||
* <p>This value is only changed, at least in WorldGuard, for the
|
||||
* {@link DefaultFlag#BUILD} flag.</p>
|
||||
* {@link Flags#BUILD} flag.</p>
|
||||
*
|
||||
* @return Whether {@code ALLOW} is prevented
|
||||
*/
|
@ -19,10 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
@ -20,7 +20,6 @@
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldguard.bukkit.BukkitUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -43,7 +42,7 @@ public Vector parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
String input = context.getUserInput();
|
||||
|
||||
if ("here".equalsIgnoreCase(input)) {
|
||||
return BukkitUtil.toVector(context.getPlayerSender().getLocation());
|
||||
return context.getPlayerSender().getLocation().toVector();
|
||||
} else {
|
||||
String[] split = input.split(",");
|
||||
if (split.length == 3) {
|
||||
@ -82,7 +81,7 @@ public Vector unmarshal(Object o) {
|
||||
|
||||
@Override
|
||||
public Object marshal(Vector o) {
|
||||
Map<String, Object> vec = new HashMap<String, Object>();
|
||||
Map<String, Object> vec = new HashMap<>();
|
||||
vec.put("x", o.getX());
|
||||
vec.put("y", o.getY());
|
||||
vec.put("z", o.getZ());
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* WorldGuard, a suite of tools for Minecraft
|
||||
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||
* Copyright (C) WorldGuard team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sk89q.worldguard.protection.flags;
|
||||
|
||||
import com.sk89q.worldedit.world.weather.WeatherType;
|
||||
import com.sk89q.worldedit.world.weather.WeatherTypes;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class WeatherTypeFlag extends Flag<WeatherType> {
|
||||
|
||||
protected WeatherTypeFlag(String name, @Nullable RegionGroup defaultGroup) {
|
||||
super(name, defaultGroup);
|
||||
}
|
||||
|
||||
protected WeatherTypeFlag(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WeatherType parseInput(FlagContext context) throws InvalidFlagFormat {
|
||||
String input = context.getUserInput();
|
||||
input = input.trim();
|
||||
if (!input.startsWith("/")) {
|
||||
input = "/" + input;
|
||||
}
|
||||
WeatherType weatherType = unmarshal(input);
|
||||
if (weatherType == null) {
|
||||
throw new InvalidFlagFormat("Unknown game mode: " + input);
|
||||
}
|
||||
return weatherType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WeatherType unmarshal(@Nullable Object o) {
|
||||
return WeatherTypes.get(String.valueOf(o));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object marshal(WeatherType o) {
|
||||
return o.getId();
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user