Compare commits

..
117 changed files with 1968 additions and 6336 deletions

No files matched your search

+5 -5
View File
@@ -15,23 +15,23 @@ jobs:
fail-fast: true
max-parallel: 4
matrix:
java-version: [ 16, 21, 23]
java-version: [ 16, 17 ]
runs-on: ubuntu-latest
name: Java ${{ matrix.java-version }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: "Set up JDK ${{ matrix.java-version }}"
uses: actions/setup-java@v4
uses: actions/setup-java@v3
with:
java-version: "${{ matrix.java-version }}"
distribution: 'temurin'
distribution: 'adopt'
cache: 'maven'
- name: Build with Maven
run: ./mvnw -B -U package --file pom.xml
- name: Upload Build Artifact
if: "${{ matrix.java-version == 16 }}"
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: SimpleClans
path: target/SimpleClans.jar
+5 -5
View File
@@ -7,13 +7,13 @@ jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v3
- name: Set up JDK 16
uses: actions/setup-java@v4
uses: actions/setup-java@v3
with:
java-version: 16
cache: 'maven'
distribution: 'temurin'
distribution: 'adopt'
- name: Build with Maven
run: ./mvnw -B package --file pom.xml
- name: Upload artifact
@@ -26,6 +26,6 @@ jobs:
changelog: ${{ github.event.release.body }}
changelog_type: markdown
display_name: ${{ github.event.release.tag_name }}
game_versions: 11515,9974,9190,8849,8503,7915,7667,7330,7105,6588,630,591,585,531
game_versions: 8849,8503,7915,7667,7330,7105,6588,630,591,585,531
release_type: release
relations: vault:optionalDependency,worldguard:optionalDependency,grief-prevention:optionalDependency,plotsquared:optionalDependency
relations: vault:optionalDependency,worldguard:optionalDependency,grief-prevention:optionalDependency
+4 -4
View File
@@ -7,13 +7,13 @@ jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v3
- name: Set up JDK 16
uses: actions/setup-java@v4
uses: actions/setup-java@v3
with:
java-version: 16
cache: 'maven'
distribution: 'temurin'
distribution: 'adopt'
- name: Build with Maven
run: ./mvnw -B package --file pom.xml
- name: Upload artifact
@@ -25,7 +25,7 @@ jobs:
changelog: ${{ github.event.release.body }}
name: ${{ github.event.release.tag_name }}
version: ${{ github.event.release.tag_name }}
game_versions: 1.21,1.20,1.19,1.18,1.17,1.16,1.15,1.14,1.13,1.12,1.11,1.10,1.9,1.8
game_versions: 1.19,1.18,1.17,1.16,1.15,1.14,1.13,1.12,1.11,1.10,1.9,1.8
release_type: release
loaders: spigot
featured: true
+3 -3
View File
@@ -10,16 +10,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v3
- name: Set up JDK 16
uses: actions/setup-java@v4
uses: actions/setup-java@v3
with:
java-version: 16
server-id: reposilite # Value of the distributionManagement/repository/id field of the pom.xml
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
cache: 'maven'
distribution: 'temurin'
distribution: 'adopt'
- name: Build with Maven
run: ./mvnw -B package --file pom.xml
- name: Publish to Reposilite
+2 -3
View File
@@ -14,6 +14,5 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.8/apache-maven-3.9.8-bin.zip
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
-15
View File
@@ -1,20 +1,5 @@
# Changelog
## [2.19.2](https://github.com/RoinujNosde/SimpleClans/compare/v2.19.1...v2.19.2) (2023-08-03)
### Bug Fixes
* cause check should return true on granting ([#397](https://github.com/RoinujNosde/SimpleClans/issues/397)) ([f29bc74](https://github.com/RoinujNosde/SimpleClans/commit/f29bc746af4940b493ebc43b1e25ff0fc00ab8d0))
## [2.19.1](https://github.com/RoinujNosde/SimpleClans/compare/v2.19.0...v2.19.1) (2023-08-03)
### Bug Fixes
* charge money on deposit ([#394](https://github.com/RoinujNosde/SimpleClans/issues/394)) ([fe60b25](https://github.com/RoinujNosde/SimpleClans/commit/fe60b25f6107281a9771f6498400c3f8ce81c916))
* consider uppercase when checking for disallowed colors ([#391](https://github.com/RoinujNosde/SimpleClans/issues/391)) ([503d679](https://github.com/RoinujNosde/SimpleClans/commit/503d67903e386b1c4b6eb7903a1addbfd42a684a))
## [2.19.0](https://github.com/RoinujNosde/SimpleClans/compare/v2.18.1...v2.19.0) (2023-07-27)
-3
View File
@@ -83,6 +83,3 @@ Feel free to learn our [Javadoc](https://ci.roinujnosde.me/job/SimpleClans/Javad
[![Maven metadata URL](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Frepo.roinujnosde.me%2Freleases%2Fnet%2Fsacredlabyrinth%2Fphaed%2Fsimpleclans%2FSimpleClans%2Fmaven-metadata.xml)](https://repo.roinujnosde.me/#/releases/net/sacredlabyrinth/phaed/simpleclans/SimpleClans)
##### API Examples
* [Examples of how to use the API](https://simpleclans.gitbook.io/simpleclans/other/simpleclans-api)
[![Mikasa Host](https://mikasa.host/images/partners/banners/SimpleClans.gif)](https://mikasa.host/ref/6)
Vendored
+261 -212
View File
@@ -19,241 +19,290 @@
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
# Apache Maven Wrapper startup batch script, version 3.2.0
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
if [ -z "$MAVEN_SKIP_RC" ] ; then
# OS specific support.
native_path() { printf %s\\n "$1"; }
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
else
JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=$(java-config --jre-home)
fi
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
if [ -z "$JAVA_HOME" ]; then
javaExecutable="$(which javac)"
if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=$(which readlink)
if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
if $darwin ; then
javaHome="$(dirname "\"$javaExecutable\"")"
javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
else
javaExecutable="$(readlink -f "\"$javaExecutable\"")"
fi
javaHome="$(dirname "\"$javaExecutable\"")"
javaHome=$(expr "$javaHome" : '\(.*\)/bin')
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=$(cd "$wdir/.." || exit 1; pwd)
fi
# end of workaround
done
printf '%s' "$(cd "$basedir" || exit 1; pwd)"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
# Remove \r in case we run on Windows within Git Bash
# and check out the repository with auto CRLF management
# enabled. Otherwise, we may read lines that are delimited with
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
# splitting rules.
tr -s '\r\n' ' ' < "$1"
fi
}
log() {
if [ "$MVNW_VERBOSE" = true ]; then
printf '%s\n' "$1"
fi
}
BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
log "$MAVEN_PROJECTBASEDIR"
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
if [ -r "$wrapperJarPath" ]; then
log "Found $wrapperJarPath"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
log "Couldn't find $wrapperJarPath, downloading it ..."
clean || :
exec_maven "$@"
if [ -n "$MVNW_REPOURL" ]; then
wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
else
wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
fi
while IFS="=" read -r key value; do
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
safeValue=$(echo "$value" | tr -d '\r')
case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
log "Downloading from: $wrapperUrl"
if $cygwin; then
wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
fi
if command -v wget > /dev/null; then
log "Found wget ... using wget"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
log "Found curl ... using curl"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
else
curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
fi
else
log "Falling back to using Java to download"
javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaSource=$(cygpath --path --windows "$javaSource")
javaClass=$(cygpath --path --windows "$javaClass")
fi
if [ -e "$javaSource" ]; then
if [ ! -e "$javaClass" ]; then
log " - Compiling MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/javac" "$javaSource")
fi
if [ -e "$javaClass" ]; then
log " - Running MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
wrapperSha256Sum=""
while IFS="=" read -r key value; do
case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
if [ -n "$wrapperSha256Sum" ]; then
wrapperSha256Result=false
if command -v sha256sum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
elif command -v shasum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
exit 1
fi
if [ $wrapperSha256Result = false ]; then
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
exit 1
fi
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
# shellcheck disable=SC2086 # safe args
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
Vendored
+169 -113
View File
@@ -1,4 +1,3 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@@ -19,131 +18,188 @@
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM Apache Maven Wrapper startup batch script, version 3.2.0
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %WRAPPER_URL%
)
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
SET WRAPPER_SHA_256_SUM=""
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
)
IF NOT %WRAPPER_SHA_256_SUM%=="" (
powershell -Command "&{"^
"$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
"If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
" Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
" Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
" Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
" exit 1;"^
"}"^
"}"
if ERRORLEVEL 1 goto error
)
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
:error
set ERROR_CODE=1
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
cmd /C exit /B %ERROR_CODE%
+30 -34
View File
@@ -1,8 +1,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.19.3-SNAPSHOT</version>
<version>2.19.1-SNAPSHOT</version>
<name>SimpleClans</name>
<url>https://www.spigotmc.org/resources/simpleclans.71242/</url>
@@ -16,7 +17,8 @@
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>plugin.yml</include>
<include>config.yml</include>
<include>*.properties</include>
</includes>
</resource>
@@ -28,9 +30,9 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.11.0</version>
<configuration>
<release>8</release>
<release>16</release>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<compilerArgs>
@@ -43,21 +45,21 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<version>3.3.0</version>
</plugin>
<!-- Release plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>3.1.1</version>
<version>3.0.1</version>
</plugin>
<!-- Shade plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
<version>3.5.0</version>
<configuration>
<relocations>
<relocation>
@@ -112,7 +114,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.7.1</version>
<version>3.6.0</version>
<executions>
<execution>
<id>copy-installed</id>
@@ -137,9 +139,9 @@
</plugin>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>9.0.1</version>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.9.10</version>
<executions>
<execution>
<goals>
@@ -156,7 +158,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.10.1</version>
<version>3.5.0</version>
<executions>
<execution>
<goals>
@@ -166,14 +168,14 @@
</execution>
</executions>
<configuration>
<release>8</release>
<release>16</release>
<doclint>all,-missing</doclint>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.1</version>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
@@ -201,19 +203,19 @@
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>3.0.2</version>
<version>2.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.3</version>
<version>2.10.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>24.0.1</version>
<version>22.0.0</version>
</dependency>
<dependency>
<groupId>io.papermc</groupId>
@@ -229,49 +231,43 @@
<dependency>
<groupId>com.github.cryptomorin</groupId>
<artifactId>XSeries</artifactId>
<version>11.2.0.1</version>
<version>8.3.0</version>
</dependency>
<dependency>
<groupId>com.sk89q</groupId>
<artifactId>worldguard</artifactId>
<version>6.1.1-SNAPSHOT</version>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.TechFortress</groupId>
<artifactId>GriefPrevention</artifactId>
<version>17.0.0</version>
<version>16.18.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.discordsrv</groupId>
<artifactId>discordsrv</artifactId>
<version>1.28.0</version>
<version>1.24.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>biz.princeps</groupId>
<artifactId>landlord-latest</artifactId>
<version>4.363</version>
<version>4.351</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
<version>2.9.1</version>
</dependency>
<!-- Test frameworks -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.14.2</version>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -292,7 +288,7 @@
</repository>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
<repository>
<id>aikar</id>
@@ -10,8 +10,6 @@ import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.DateFormat;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -115,13 +113,13 @@ public class Clan implements Serializable, Comparable<Clan> {
@Deprecated
public void deposit(double amount, Player player) {
if (SimpleClans.getInstance().getPermissionsManager().playerHasMoney(player, amount)) {
if (SimpleClans.getInstance().getPermissionsManager().chargePlayer(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.deposit", player, CurrencyFormat.format(amount)));
addBb(player.getName(), lang("bb.clan.deposit", CurrencyFormat.format(amount)));
if (SimpleClans.getInstance().getPermissionsManager().grantPlayer(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.deposit", player, amount));
addBb(player.getName(), lang("bb.clan.deposit", amount));
setBalance(getBalance() + amount);
SimpleClans.getInstance().getStorageManager().updateClan(this);
} else {
player.sendMessage(AQUA + lang("not.sufficient.money", player, CurrencyFormat.format(amount)));
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
}
} else {
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
@@ -153,8 +151,8 @@ public class Clan implements Serializable, Comparable<Clan> {
public void withdraw(double amount, Player player) {
if (getBalance() >= amount) {
if (SimpleClans.getInstance().getPermissionsManager().grantPlayer(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.withdraw", player, CurrencyFormat.format(amount)));
addBb(player.getName(), lang("bb.clan.withdraw", CurrencyFormat.format(amount)));
player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount));
addBb(player.getName(), lang("bb.clan.withdraw", amount));
setBalance(getBalance() - amount);
}
} else {
@@ -248,16 +246,6 @@ public class Clan implements Serializable, Comparable<Clan> {
return balance;
}
/**
* Returns the clan's balance formatted
*
* @return the balance formatted
*/
@Placeholder("balance_formatted")
public String getBalanceFormatted() {
return CurrencyFormat.format(balance);
}
/**
* (used internally)
*
@@ -465,7 +453,7 @@ public class Clan implements Serializable, Comparable<Clan> {
*/
@Placeholder("founded")
public String getFoundedString() {
return DateFormat.formatDateTime(founded);
return new java.text.SimpleDateFormat("MMM dd, ''yy h:mm a").format(new Date(this.founded));
}
/**
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.Placeholder;
import net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager.Action;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.DateFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -488,7 +487,8 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
if (joinDate == 0) {
return "";
}
return DateFormat.formatDateTime(joinDate);
return new java.text.SimpleDateFormat("MMM dd, ''yy h:mm a").format(new Date(joinDate));
}
/**
@@ -512,7 +512,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
if (!VanishUtils.isVanished(sender, this)) {
return lang("online", sender);
}
return DateFormat.formatDateTime(lastSeen);
return new java.text.SimpleDateFormat("MMM dd, ''yy h:mm a").format(new Date(lastSeen));
}
/**
@@ -777,7 +777,6 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
SimpleClans.getInstance().getStorageManager().updateClanPlayer(this);
}
@Placeholder("is_invite_enabled")
public boolean isInviteEnabled() {
return flags.getBoolean("invite", true);
}
@@ -176,7 +176,6 @@ public class SimpleClans extends JavaPlugin {
metrics.addCustomChart(new SimplePie("threads", () -> sm.is(PERFORMANCE_USE_THREADS) ? on : off));
metrics.addCustomChart(new SimplePie("bungeecord", () -> sm.is(PERFORMANCE_USE_BUNGEECORD) ? on : off));
metrics.addCustomChart(new SimplePie("discord_chat", () -> sm.is(DISCORDCHAT_ENABLE) ? on : off));
metrics.addCustomChart(new SimplePie("default_rank", () -> sm.getString(CLAN_DEFAULT_RANK).isEmpty() ? off : on));
}
private void startTasks() {
@@ -38,18 +38,17 @@ import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.Con
public class SCCommandManager extends PaperCommandManager {
private final SimpleClans plugin;
private static final List<String> SUBCOMMANDS;
private static final List<String> COMPLETIONS;
public SCCommandManager(@NotNull SimpleClans plugin) {
super(plugin);
this.plugin = plugin;
configure();
}
private void configure() {
enableUnstableAPI("help");
registerDependencies();
addReplacements();
addCommandReplacements();
registerContexts();
registerCommands();
registerConditions();
@@ -108,11 +107,11 @@ public class SCCommandManager extends PaperCommandManager {
AbstractCondition obj = c.getConstructor(SimpleClans.class).newInstance(plugin);
if (obj instanceof AbstractParameterCondition) {
@SuppressWarnings("rawtypes")
AbstractParameterCondition condition = ((AbstractParameterCondition<?>) obj);
AbstractParameterCondition condition = (AbstractParameterCondition) obj;
getCommandConditions().addCondition(condition.getType(), condition.getId(), condition);
}
if (obj instanceof AbstractCommandCondition) {
AbstractCommandCondition condition = ((AbstractCommandCondition) obj);
AbstractCommandCondition condition = (AbstractCommandCondition) obj;
getCommandConditions().addCondition(condition.getId(), condition);
}
} catch (Exception ex) {
@@ -163,7 +162,7 @@ public class SCCommandManager extends PaperCommandManager {
}
}
private void addReplacements() {
private void addCommandReplacements() {
SettingsManager sm = plugin.getSettingsManager();
getCommandReplacements().addReplacements(
"basic_conditions", "not_blacklisted|not_banned",
@@ -175,10 +174,17 @@ public class SCCommandManager extends PaperCommandManager {
"clan_chat", sm.getString(COMMANDS_CLAN_CHAT)
);
SUBCOMMANDS.forEach(s -> processReplacement(s, "", ".command", true));
COMPLETIONS.forEach(s -> processReplacement(s, "compl:", ".completion", false));
SUBCOMMANDS.forEach(s -> {
String command = optionalLang(s + ".command", (ClanPlayer) null);
if (command == null) {
command = s;
}
command = command.replace(" ", "");
String replacement = command.equals(s) ? s : command + "|" + s;
getCommandReplacements().addReplacement(s, replacement);
});
}
@Override
public BukkitLocales getLocales() {
if (this.locales == null) {
@@ -209,20 +215,6 @@ public class SCCommandManager extends PaperCommandManager {
return this.locales;
}
private void processReplacement(String key, String prefix, String suffix, boolean hasFallback) {
String replacement = optionalLang(key + suffix, (ClanPlayer) null);
if (replacement == null) {
replacement = key;
}
replacement = replacement.replace(" ", "");
if (hasFallback) {
replacement = replacement + "|" + key;
}
getCommandReplacements().addReplacement(prefix + key, replacement);
}
static {
SUBCOMMANDS = Arrays.asList("setbanner", "resetkdr", "place", "rank", "home", "war", "regroup",
"mostkilled", "kills", "globalff", "reload", "unban", "ban", "verify", "disband", "resign", "ff",
@@ -233,7 +225,5 @@ public class SCCommandManager extends PaperCommandManager {
"lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod",
"setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity",
"container", "permanent", "take", "give", "join", "leave", "mute", "confirm", "balance", "discord", "rename", "locale");
COMPLETIONS = Arrays.asList("tag", "name");
}
}
@@ -10,7 +10,6 @@ import net.sacredlabyrinth.phaed.simpleclans.events.BankWithdrawEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -32,7 +31,7 @@ public class BankCommand extends BaseCommand {
@Conditions("rank:name=BANK_BALANCE")
@Description("{@@command.description.bank.status}")
public void bankStatus(Player player, Clan clan) {
player.sendMessage(AQUA + lang("clan.balance", player, clan.getBalanceFormatted()));
player.sendMessage(AQUA + lang("clan.balance", player, clan.getBalance()));
}
@Subcommand("%withdraw %all")
@@ -72,15 +71,15 @@ public class BankCommand extends BaseCommand {
*/
BankOperator operator = new BankOperator(player, permissions.playerGetMoney(player));
switch (clan.withdraw(operator, COMMAND, amount)) {
case SUCCESS:
case SUCCESS -> {
if (permissions.grantPlayer(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.withdraw", player, CurrencyFormat.format(amount)));
clan.addBb(player.getName(), lang("bb.clan.withdraw", CurrencyFormat.format(amount), player.getName()));
player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount));
clan.addBb(player.getName(), lang("bb.clan.withdraw", amount, player.getName()));
} else {
clan.setBalance(operator, REVERT, BankLogger.Operation.WITHDRAW, clan.getBalance() + amount);
}
case NOT_ENOUGH_BALANCE:
player.sendMessage(lang("clan.bank.not.enough.money", player));
}
case NOT_ENOUGH_BALANCE -> player.sendMessage(lang("clan.bank.not.enough.money", player));
}
}
@@ -118,19 +117,19 @@ public class BankCommand extends BaseCommand {
return;
}
/*
* ——————————————————————————————————
*/
* ——————————————————————————————————
*/
if (!permissions.playerHasMoney(player, amount)) {
player.sendMessage(AQUA + lang("not.sufficient.money", player, CurrencyFormat.format(amount)));
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
return;
}
BankOperator operator = new BankOperator(player, permissions.playerGetMoney(player));
EconomyResponse response = clan.deposit(operator, COMMAND, amount);
if (response == EconomyResponse.SUCCESS) {
if (permissions.chargePlayer(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.deposit", player, CurrencyFormat.format(amount)));
clan.addBb(player.getName(), lang("bb.clan.deposit", CurrencyFormat.format(amount), player.getName()));
player.sendMessage(AQUA + lang("player.clan.deposit", player, amount));
clan.addBb(player.getName(), lang("bb.clan.deposit", amount, player.getName()));
} else {
//Reverts the deposit if something went wrong with Vault
clan.setBalance(operator, REVERT, BankLogger.Operation.DEPOSIT, clan.getBalance() - amount);
@@ -10,7 +10,6 @@ import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -189,12 +188,12 @@ public class ClanCommands extends BaseCommand {
double maxFee = settings.getDouble(ECONOMY_MAX_MEMBER_FEE);
if (fee > maxFee) {
ChatBlock.sendMessage(player, RED
+ lang("max.fee.allowed.is.0", player, CurrencyFormat.format(maxFee)));
+ lang("max.fee.allowed.is.0", player, maxFee));
return;
}
if (cm.purchaseMemberFeeSet(player)) {
clan.setMemberFee(fee);
clan.addBb(player.getName(), lang("bb.fee.set", CurrencyFormat.format(fee)));
clan.addBb(player.getName(), lang("bb.fee.set", fee));
ChatBlock.sendMessage(player, AQUA + lang("fee.set", player));
storage.updateClan(clan);
}
@@ -9,8 +9,6 @@ import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
import net.sacredlabyrinth.phaed.simpleclans.hooks.discord.DiscordHook;
import net.sacredlabyrinth.phaed.simpleclans.hooks.discord.exceptions.DiscordHookException;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -91,8 +89,7 @@ public class LeaderCommands extends BaseCommand {
return;
}
if (settings.is(CLAN_CONFIRMATION_FOR_PROMOTE) && clan.getLeaders().size() > 1) {
requestManager.requestAllLeaders(cp, ClanRequest.PROMOTE, otherPl.getName(), "asking.for.the.promotion",
player.getName(), otherPl.getName());
requestManager.requestAllLeaders(cp, ClanRequest.PROMOTE, otherPl.getName(), "asking.for.the.promotion", otherPl.getName());
ChatBlock.sendMessage(player, AQUA + lang("promotion.vote.has.been.requested.from.all.leaders",
player));
return;
@@ -107,8 +104,7 @@ public class LeaderCommands extends BaseCommand {
@Description("{@@command.description.disband}")
public void disband(Player player, ClanPlayer cp, Clan clan) {
if (clan.getLeaders().size() != 1) {
requestManager.requestAllLeaders(cp, ClanRequest.DISBAND, clan.getTag(), "asking.to.disband",
player.getName());
requestManager.requestAllLeaders(cp, ClanRequest.DISBAND, clan.getTag(), "asking.to.disband");
ChatBlock.sendMessage(player, AQUA +
lang("clan.disband.vote.has.been.requested.from.all.leaders", player));
return;
@@ -194,27 +190,14 @@ public class LeaderCommands extends BaseCommand {
@CommandPermission("simpleclans.leader.rename")
@CommandCompletion("@nothing")
@Description("{@@command.description.rename}")
public void rename(Player player, ClanPlayer cp, Clan clan, @Name("name") String clanName) {
public void rename(ClanPlayer cp, Clan clan, @Name("name") String clanName) {
if (clanName.contains("&")) {
ChatBlock.sendMessageKey(cp, "your.clan.name.cannot.contain.color.codes");
return;
}
boolean bypass = plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass");
if (!bypass) {
if (ChatUtils.stripColors(clanName).length() > plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)) {
ChatBlock.sendMessage(player, RED + lang("your.clan.name.cannot.be.longer.than.characters",
player, plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)));
return;
}
if (ChatUtils.stripColors(clanName).length() <= plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)) {
ChatBlock.sendMessage(player, RED + lang("your.clan.name.must.be.longer.than.characters",
player, plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)));
return;
}
}
if (clan.getLeaders().size() != 1) {
requestManager.requestAllLeaders(cp, ClanRequest.RENAME, clanName, "asking.to.rename", cp.getName(), clanName);
requestManager.requestAllLeaders(cp, ClanRequest.RENAME, "asking.to.rename", clanName);
ChatBlock.sendMessageKey(cp, "rename.vote.has.been.requested.from.all.leaders");
return;
}
@@ -239,7 +222,7 @@ public class LeaderCommands extends BaseCommand {
double amount = settings.getDouble(ECONOMY_DISCORD_CREATION_PRICE);
if (settings.is(ECONOMY_PURCHASE_DISCORD_CREATE)) {
if (!permissions.playerHasMoney(player, amount)) {
player.sendMessage(AQUA + lang("not.sufficient.money", player, CurrencyFormat.format(amount)));
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
return;
}
@@ -6,7 +6,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@SuppressWarnings("unused")
public class LocaleCompletion extends AbstractStaticCompletion {
@@ -16,7 +15,8 @@ public class LocaleCompletion extends AbstractStaticCompletion {
public LocaleCompletion(@NotNull SimpleClans plugin) {
super(plugin);
availableLocales = LanguageResource.getAvailableLocales().stream().
map(locale -> locale.toLanguageTag().replace("-", "_")).collect(Collectors.toList());
map(locale -> locale.toLanguageTag().replace("-", "_")).
toList();
}
@Override
@@ -56,24 +56,16 @@ public class ClanStats extends Sendable {
}
private void addRows(List<ClanPlayer> clanPlayers) {
for (ClanPlayer cp : clanPlayers) {
String color;
if (cp.isLeader()) {
color = sm.getColored(PAGE_LEADER_COLOR);
} else if (cp.isTrusted()) {
color = sm.getColored(PAGE_TRUSTED_COLOR);
} else {
color = sm.getColored(PAGE_UNTRUSTED_COLOR);
}
for (ClanPlayer cpm : clanPlayers) {
String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) :
sm.getColored(PAGE_UNTRUSTED_COLOR)) + cpm.getName());
String rival = NumberFormat.getInstance().format(cpm.getRivalKills());
String neutral = NumberFormat.getInstance().format(cpm.getNeutralKills());
String civilian = NumberFormat.getInstance().format(cpm.getCivilianKills());
String deaths = NumberFormat.getInstance().format(cpm.getDeaths());
String kdr = KDRFormat.format(cpm.getKDR());
NumberFormat formatter = NumberFormat.getInstance(cp.getLocale());
String rival = formatter.format(cp.getRivalKills());
String neutral = formatter.format(cp.getNeutralKills());
String civilian = formatter.format(cp.getCivilianKills());
String deaths = formatter.format(cp.getDeaths());
String kdr = KDRFormat.format(cp.getKDR());
chatBlock.addRow(color + cp.getName(), YELLOW + kdr, WHITE + rival, GRAY + neutral, DARK_GRAY + civilian,
chatBlock.addRow(" " + name, YELLOW + kdr, WHITE + rival, GRAY + neutral, DARK_GRAY + civilian,
DARK_RED + deaths);
}
}
@@ -66,21 +66,15 @@ public class GeneralCommands extends BaseCommand {
@CommandPermission("simpleclans.anyone.locale")
@Description("{@@command.description.locale}")
@CommandCompletion("@locales")
public void locale(ClanPlayer cp, @Values("@locales") @Name("locale") @Single String locale) {
if (!settings.is(LANGUAGE_SELECTOR)) {
ChatBlock.sendMessageKey(cp, "locale.is.prohibited");
return;
}
public void locale(ClanPlayer cp, @Values("@locales") @Name("locale") String locale) {
cp.setLocale(Helper.forLanguageTag(locale.replace("_", "-")));
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessageKey(cp, "locale.has.been.changed");
ChatBlock.sendMessage(cp, lang("locale.has.been.changed"));
}
@Subcommand("%create")
@CommandPermission("simpleclans.leader.create")
@CommandCompletion("%compl:tag %compl:name")
@Description("{@@command.description.create}")
public void create(Player player, @Optional @Name("tag") String tag, @Optional @Name("name") String name) {
ClanPlayer cp = cm.getAnyClanPlayer(player.getUniqueId());
@@ -286,7 +280,7 @@ public class GeneralCommands extends BaseCommand {
Clan clan = clans.get(i);
String name = " " + (clan.isVerified() ? settings.getColored(PAGE_CLAN_NAME_COLOR) : GRAY) + clan.getName();
String line = MessageFormat.format(lineFormat, i + 1, leftBracket, clan.getColorTag(),
rightBracket, name, clan.getBalanceFormatted());
rightBracket, name, clan.getBalance());
sender.sendMessage(line);
}
}
@@ -10,7 +10,6 @@ import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -32,7 +31,7 @@ public class BankCommand extends BaseCommand {
@Description("{@@command.description.bank.admin.status}")
public void status(CommandSender sender, @Name("clan") ClanInput clanInput) {
Clan clan = clanInput.getClan();
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.balance", sender, clan.getName(), clan.getBalanceFormatted()));
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.balance", sender, clan.getName(), clan.getBalance()));
}
@Subcommand("%take")
@@ -47,8 +46,8 @@ public class BankCommand extends BaseCommand {
EconomyResponse economyResponse = clan.withdraw(operator, ClanBalanceUpdateEvent.Cause.COMMAND, amount);
switch (economyResponse) {
case SUCCESS:
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.take", sender, CurrencyFormat.format(amount), clan.getName()));
clan.addBb(sender.getName(), lang("bb.clan.take", sender, CurrencyFormat.format(amount), sender.getName()));
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.take", sender, amount, clan.getName()));
clan.addBb(sender.getName(), lang("bb.clan.take", sender, amount, sender.getName()));
break;
case NOT_ENOUGH_BALANCE:
sender.sendMessage(RED + lang("clan.admin.bank.not.enough.money", sender, clan.getName()));
@@ -67,8 +66,8 @@ public class BankCommand extends BaseCommand {
EconomyResponse economyResponse = clan.deposit(operator, ClanBalanceUpdateEvent.Cause.COMMAND, amount);
if (economyResponse == EconomyResponse.SUCCESS) {
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.give", sender, CurrencyFormat.format(amount), clan.getName()));
clan.addBb(sender.getName(), lang("bb.clan.give", sender, CurrencyFormat.format(amount), sender.getName()));
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.give", sender, amount, clan.getName()));
clan.addBb(sender.getName(), lang("bb.clan.give", sender, amount, sender.getName()));
}
}
@@ -83,8 +82,8 @@ public class BankCommand extends BaseCommand {
EconomyResponse response = clan.setBalance(operator, ClanBalanceUpdateEvent.Cause.COMMAND, BankLogger.Operation.SET, amount);
if (response == EconomyResponse.SUCCESS) {
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.set", sender, clan.getName(), CurrencyFormat.format(amount)));
clan.addBb(sender.getName(), lang("bb.clan.set", sender, CurrencyFormat.format(amount), sender.getName()));
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.set", sender, clan.getName(), amount));
clan.addBb(sender.getName(), lang("bb.clan.set", sender, amount, sender.getName()));
}
}
}
@@ -7,7 +7,6 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerHomeSetEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerResetKdrEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.ReloadEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
@@ -16,6 +15,7 @@ import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -123,8 +123,6 @@ public class StaffCommands extends BaseCommand {
for (Clan clan : cm.getClans()) {
permissions.updateClanPermissions(clan);
}
Bukkit.getPluginManager().callEvent(new ReloadEvent(sender));
ChatBlock.sendMessage(sender, AQUA + lang("configuration.reloaded", sender));
}
@@ -381,7 +379,7 @@ public class StaffCommands extends BaseCommand {
@CommandPermission("simpleclans.mod.locale")
@Description("{@@command.description.mod.locale}")
@CommandCompletion("@locales")
public void locale(CommandSender sender, @Name("player") ClanPlayerInput input, @Values("@locales") @Name("locale") @Single String locale) {
public void locale(CommandSender sender, @Name("player") ClanPlayerInput input, @Values("@locales") @Name("locale") String locale) {
ClanPlayer cp = input.getClanPlayer();
cp.setLocale(Helper.forLanguageTag(locale.replace("_", "-")));
plugin.getStorageManager().updateClanPlayer(cp);
@@ -4,7 +4,6 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.PreCreateClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.conversations.ConversationContext;
@@ -17,7 +16,6 @@ import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt.TAG_KEY;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_DEFAULT_RANK;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
@@ -70,18 +68,14 @@ public class CreateClanNamePrompt extends StringPrompt {
Clan clan = plugin.getClanManager().getClan(tag);
clan.addBb(player.getName(), lang("clan.created", name));
plugin.getStorageManager().updateClan(clan);
if (!plugin.getSettingsManager().getString(CLAN_DEFAULT_RANK).isEmpty()) {
clan.setDefaultRank(plugin.getSettingsManager().getString(CLAN_DEFAULT_RANK));
if (plugin.getSettingsManager().is(REQUIRE_VERIFICATION)) {
boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION)
|| plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
if (plugin.getSettingsManager().is(REQUIRE_VERIFICATION)) {
boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION)
|| plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
if (!verified) {
ChatBlock.sendMessage(player, AQUA +
lang("get.your.clan.verified.to.access.advanced.features", player));
}
if (!verified) {
ChatBlock.sendMessage(player, AQUA +
lang("get.your.clan.verified.to.access.advanced.features", player));
}
}
}
@@ -1,32 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.events;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class PostComponentsCreationEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final @NotNull SCFrame frame;
public PostComponentsCreationEvent(@NotNull SCFrame frame) {
this.frame = frame;
}
public SCFrame getFrame() {
return frame;
}
@NotNull
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static @NotNull HandlerList getHandlerList() {
return HANDLER_LIST;
}
}
@@ -1,30 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.events;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class ReloadEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final CommandSender sender;
public ReloadEvent(CommandSender sender) {
this.sender = sender;
}
public static @NotNull HandlerList getHandlerList() {
return HANDLER_LIST;
}
@Override
public @NotNull HandlerList getHandlers() {
return HANDLER_LIST;
}
public CommandSender getSender() {
return sender;
}
}
@@ -75,8 +75,10 @@ public class DiscordHook implements Listener {
private final ChatManager chatManager;
private final ClanManager clanManager;
private final AccountLinkManager accountManager = DiscordSRV.getPlugin().getAccountLinkManager();
private final Guild guild = DiscordSRV.getPlugin().getMainGuild();
private final List<String> textCategories;
private final List<String> clanTags;
private final Role leaderRole;
private final List<String> whitelist;
public DiscordHook(SimpleClans plugin) {
@@ -91,6 +93,8 @@ public class DiscordHook implements Listener {
clanTags = clanManager.getClans().stream().map(Clan::getTag).collect(Collectors.toList());
leaderRole = getLeaderRole();
setupDiscord();
}
@@ -223,7 +227,7 @@ public class DiscordHook implements Listener {
@Subscribe
public void onPlayerLinking(AccountLinkedEvent event) {
ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer());
Member member = getGuild().getMember(event.getUser());
Member member = guild.getMember(event.getUser());
if (clanPlayer == null || member == null) {
return;
}
@@ -244,7 +248,7 @@ public class DiscordHook implements Listener {
@Subscribe
public void onPlayerUnlinking(AccountUnlinkedEvent event) {
ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer());
Member member = getGuild().getMember(event.getDiscordUser());
Member member = guild.getMember(event.getDiscordUser());
if (clanPlayer == null || clanPlayer.getClan() == null || member == null) {
return;
}
@@ -254,23 +258,17 @@ public class DiscordHook implements Listener {
}
protected void setupDiscord() {
Map<String, TextChannel> discordTagChannels = getChannels().stream().
Map<String, TextChannel> discordTagChannels = getCachedChannels().stream().
collect(Collectors.toMap(TextChannel::getName, textChannel -> textChannel));
SimpleClans.debug("DiscordTagChannels before clearing: " + String.join(",", discordTagChannels.keySet()));
clearChannels(discordTagChannels);
SimpleClans.debug("DiscordTagChannels after clearing: " + String.join(",", discordTagChannels.keySet()));
resetPermissions(discordTagChannels);
SimpleClans.debug("ClanTags before creating: " + String.join(",", clanTags));
createChannels(discordTagChannels);
SimpleClans.debug("ClanTags after creating: " + String.join(",", clanTags));
}
@NotNull
public Guild getGuild() {
return DiscordSRV.getPlugin().getMainGuild();
return guild;
}
/**
@@ -278,10 +276,10 @@ public class DiscordHook implements Listener {
*/
@NotNull
public Role getLeaderRole() {
Role role = getGuild().getRoleById(settingsManager.getString(DISCORDCHAT_LEADER_ID));
Role role = guild.getRoleById(settingsManager.getString(DISCORDCHAT_LEADER_ID));
if (role == null || !role.getName().equals(settingsManager.getString(DISCORDCHAT_LEADER_ROLE))) {
role = getGuild().createRole().
role = guild.createRole().
setName(settingsManager.getString(DISCORDCHAT_LEADER_ROLE)).
setColor(getLeaderColor()).
setMentionable(true).
@@ -320,19 +318,19 @@ public class DiscordHook implements Listener {
*/
@Nullable
public Category createCategory() {
if (getGuild().getChannels().size() >= MAX_CHANNELS_PER_GUILD) {
if (guild.getChannels().size() >= MAX_CHANNELS_PER_GUILD) {
return null;
}
String categoryName = settingsManager.getString(DISCORDCHAT_TEXT_CATEGORY_FORMAT);
Category category = null;
try {
category = getGuild().createCategory(categoryName).
category = guild.createCategory(categoryName).
addRolePermissionOverride(
getGuild().getPublicRole().getIdLong(),
guild.getPublicRole().getIdLong(),
Collections.emptyList(),
Collections.singletonList(VIEW_CHANNEL)).
addMemberPermissionOverride(getGuild().getSelfMember().getIdLong(),
addMemberPermissionOverride(guild.getSelfMember().getIdLong(),
Arrays.asList(VIEW_CHANNEL, MANAGE_CHANNEL),
Collections.emptyList()).
submit().get();
@@ -380,14 +378,12 @@ public class DiscordHook implements Listener {
try {
availableCategory.createTextChannel(clanTag).complete();
SimpleClans.debug(String.format("[%s] Creating a discord text channel for %s clan", Thread.currentThread().getId(), clanTag));
} catch (ErrorResponseException ex) {
Response response = ex.getResponse();
plugin.getLogger().warning(String.format("Could not create a channel for clan %s, error %d - %s",
clanTag, response.code, response.message));
return;
}
for (Map.Entry<ClanPlayer, Member> entry : discordClanPlayers.entrySet()) {
// The map is formed from clan#getMembers (so the clan exists)
//noinspection ConstantConditions
@@ -415,7 +411,7 @@ public class DiscordHook implements Listener {
* @see #channelExists(String)
*/
public boolean categoryExists(String categoryId) {
return getGuild().getCategoryById(categoryId) != null;
return guild.getCategoryById(categoryId) != null;
}
/**
@@ -451,7 +447,7 @@ public class DiscordHook implements Listener {
if (channelExists(channelName)) {
for (Category category : getCachedCategories()) {
if (!category.getTextChannels().isEmpty()) {
if (category.getTextChannels().size() > 0) {
for (TextChannel textChannel : category.getTextChannels()) {
if (textChannel.getName().equals(channelName)) {
textChannel.delete().complete();
@@ -460,7 +456,7 @@ public class DiscordHook implements Listener {
}
}
if (category.getTextChannels().isEmpty()) {
if (category.getTextChannels().size() == 0) {
textCategories.remove(category.getId());
settingsManager.set(DISCORDCHAT_TEXT_CATEGORY_IDS, textCategories);
settingsManager.save();
@@ -481,7 +477,7 @@ public class DiscordHook implements Listener {
public List<Category> getCachedCategories() {
return textCategories.stream().
filter(this::categoryExists).
map(getGuild()::getCategoryById).
map(guild::getCategoryById).
collect(Collectors.toList());
}
@@ -491,7 +487,7 @@ public class DiscordHook implements Listener {
* @return categories from guild
*/
public List<Category> getCategories() {
return getGuild().getCategoriesByName(settingsManager.getString(DISCORDCHAT_TEXT_CATEGORY_FORMAT), false);
return guild.getCategoriesByName(settingsManager.getString(DISCORDCHAT_TEXT_CATEGORY_FORMAT), false);
}
/**
@@ -596,7 +592,7 @@ public class DiscordHook implements Listener {
}
Map<ClanPlayer, Member> discordClanPlayers = getDiscordPlayers(clan);
if (discordClanPlayers.isEmpty()) {
if (discordClanPlayers.size() == 0) {
throw new InvalidChannelException(String.format("Clan %s doesn't have any linked players", clanTag),
"your.clan.doesnt.have.any.linked.player");
}
@@ -630,12 +626,14 @@ public class DiscordHook implements Listener {
}
private void updateLeaderRole(@NotNull Member member, @NotNull ClanPlayer clanPlayer, DiscordAction action) {
if (action == ADD && clanPlayer.isLeader()) {
getGuild().addRoleToMember(member, getLeaderRole()).queue();
SimpleClans.debug(String.format("Added leader role to %s (%s) discord member", member.getNickname(), member.getId()));
if (!clanPlayer.isLeader()) {
return;
}
if (action == ADD) {
guild.addRoleToMember(member, leaderRole).queue();
} else {
getGuild().removeRoleFromMember(member, getLeaderRole()).queue();
SimpleClans.debug(String.format("Revoked leader role from %s (%s) discord member", member.getNickname(), member.getId()));
guild.removeRoleFromMember(member, leaderRole).queue();
}
}
@@ -647,16 +645,14 @@ public class DiscordHook implements Listener {
if (action == ADD) {
channel.upsertPermissionOverride(member).
setPermissions(Collections.singletonList(VIEW_CHANNEL), Collections.emptyList()).queue();
SimpleClans.debug(String.format("Added view permission to %s (%s) discord member", member.getNickname(), member.getId()));
} else {
channel.getManager().removePermissionOverride(member).queue();
SimpleClans.debug(String.format("Revoked view permission from %s (%s) discord member", member.getNickname(), member.getId()));
}
}
private void updateViewPermission(@NotNull Member member, @NotNull Clan clan, DiscordAction action) {
String tag = clan.getTag();
Optional<TextChannel> channel = getChannel(tag);
Optional<TextChannel> channel = getCachedChannel(tag).map(Optional::of).orElse(getChannel(tag));
if (channel.isPresent()) {
TextChannel textChannel = channel.get();
updateViewPermission(member, textChannel, action);
@@ -118,12 +118,9 @@ public class SimpleClansExpansion extends PlaceholderExpansion implements Relati
public String onRequest(@Nullable OfflinePlayer player, @NotNull String params) {
ClanPlayer cp = null;
if (player != null) {
cp = clanManager.getAnyClanPlayer(player.getUniqueId());
cp = clanManager.getCreateClanPlayer(player.getUniqueId());
}
if (cp == null) {
return "";
}
Clan clan = cp.getClan();
Clan clan = cp != null ? cp.getClan() : null;
Matcher matcher = TOP_CLANS_PATTERN.matcher(params);
if (matcher.find()) {
int position = Integer.parseInt(matcher.group("position"));
@@ -0,0 +1,107 @@
package net.sacredlabyrinth.phaed.simpleclans.hooks.protection.providers;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import net.sacredlabyrinth.phaed.simpleclans.hooks.protection.Coordinate;
import net.sacredlabyrinth.phaed.simpleclans.hooks.protection.Land;
import net.sacredlabyrinth.phaed.simpleclans.hooks.protection.ProtectionProvider;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@SuppressWarnings({"unused"})
public class WorldGuardProvider implements ProtectionProvider {
private RegionContainer regionContainer;
@Override
public void setup() {
regionContainer = WorldGuard.getInstance().getPlatform().getRegionContainer();
}
@Override
public @NotNull Set<Land> getLandsAt(@NotNull Location location) {
RegionManager regionManager = getRegionManager(location.getWorld());
if (regionManager == null) {
return Collections.emptySet();
}
ApplicableRegionSet regions = regionManager.getApplicableRegions(BukkitAdapter.asBlockVector(location));
Set<Land> lands = new HashSet<>();
for (ProtectedRegion region : regions) {
lands.add(getLand(region));
}
return lands;
}
@NotNull
private Land getLand(ProtectedRegion region) {
//noinspection DuplicatedCode
List<Coordinate> coordinates = new ArrayList<>();
for (BlockVector2 point : region.getPoints()) {
coordinates.add(new Coordinate(point.getX(), point.getZ()));
}
return new Land(getIdPrefix() + region.getId(), region.getOwners().getUniqueIds(), coordinates);
}
@Override
public @NotNull Set<Land> getLandsOf(@NotNull OfflinePlayer player, @NotNull World world) {
HashSet<Land> lands = new HashSet<>();
RegionManager regionManager = getRegionManager(world);
if (regionManager != null) {
for (ProtectedRegion region : regionManager.getRegions().values()) {
if (region.getOwners().contains(player.getUniqueId())) {
lands.add(getLand(region));
}
}
}
return lands;
}
@Override
public @NotNull String getIdPrefix() {
return "wg";
}
@Override
public void deleteLand(@NotNull String id, @NotNull World world) {
id = id.replaceFirst(getIdPrefix(), "");
RegionManager regionManager = getRegionManager(world);
if (regionManager != null) {
regionManager.removeRegion(id);
}
}
@Override
public @Nullable Class<? extends Event> getCreateLandEvent() {
return null;
}
@Override
public @Nullable Player getPlayer(Event event) {
return null;
}
@Nullable
private RegionManager getRegionManager(@Nullable World world) {
if (world == null) {
return null;
}
return regionContainer.get(BukkitAdapter.adapt(world));
}
@Override
public @Nullable String getRequiredPluginName() {
return "WorldGuard";
}
}
@@ -18,30 +18,22 @@ public final class Events {
@Nullable
@Contract("null -> null")
public static Player getAttacker(@Nullable EntityDamageEvent parentEvent) {
if (parentEvent instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent) parentEvent;
if (parentEvent instanceof EntityDamageByEntityEvent sub) {
Entity damager = sub.getDamager();
if (damager instanceof Player) {
return (Player) damager;
if (damager instanceof Player attacker) {
return attacker;
}
if (damager instanceof Projectile) {
Projectile projectile = (Projectile) damager;
if (projectile.getShooter() instanceof Player) {
return (Player) projectile.getShooter();
}
if (damager instanceof Projectile projectile && projectile.getShooter() instanceof Player attacker) {
return attacker;
}
if (damager instanceof TNTPrimed) {
Entity source = ((TNTPrimed) damager).getSource();
if (source instanceof Player) {
return (Player) source;
}
if (damager instanceof TNTPrimed tnt && tnt.getSource() instanceof Player attacker) {
return attacker;
}
}
return null;
}
}
}
@@ -167,7 +167,7 @@ public class PlayerDeath extends SCListener {
ClanPlayer killer = kill.getKiller();
ClanPlayer victim = kill.getVictim();
killer.addKill(type);
plugin.getStorageManager().insertKill(killer, victim, type.getShortname(), kill.getTime());
plugin.getStorageManager().insertKill(killer, victim, type.getShortname());
}
private double calculateReward(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim) {
@@ -83,12 +83,15 @@ public class SCPlayerListener extends SCListener {
if (isBlacklistedWorld(player)) {
return;
}
ClanPlayer cp = plugin.getClanManager().getCreateClanPlayer(player.getUniqueId());
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
updatePlayerName(player);
plugin.getClanManager().updateLastSeen(player);
plugin.getClanManager().updateDisplayName(player);
if (cp == null) {
return;
}
plugin.getPermissionsManager().addPlayerPermissions(cp);
if (settingsManager.is(BB_SHOW_ON_LOGIN) && cp.isBbEnabled() && cp.getClan() != null) {
@@ -130,11 +130,10 @@ public final class ChatManager {
.replace("%nick-color%",
(sender.isLeader() ? leaderColor : sender.isTrusted() ? trustedColor : memberColor))
.replace("%player%", sender.getName())
.replace("%rank%", rankFormat);
parsedFormat = parseWithPapi(message.getSender(), parsedFormat)
.replace("%rank%", rankFormat)
.replace("%message%", message.getContent());
return parsedFormat;
return parseWithPapi(message.getSender(), parsedFormat);
}
public boolean isDiscordHookEnabled() {
@@ -8,7 +8,6 @@ import net.sacredlabyrinth.phaed.simpleclans.events.CreateClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.EconomyTransactionEvent.Cause;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
@@ -79,7 +78,7 @@ public final class ClanManager {
continue;
}
// cleaning
//cleaning
final int delay = plugin.getSettingsManager().getInt(KDR_DELAY_BETWEEN_KILLS);
long timePassed = oldKill.getTime().until(LocalDateTime.now(), ChronoUnit.MINUTES);
if (timePassed >= delay) {
@@ -150,7 +149,7 @@ public final class ClanManager {
importClan(clan);
plugin.getStorageManager().updateClanPlayer(cp);
plugin.getRequestManager().deny(cp); // denies any previous invitation
plugin.getRequestManager().deny(cp); //denies any previous invitation
SimpleClans.getInstance().getPermissionsManager().updateClanPermissions(clan);
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new CreateClanEvent(clan));
}
@@ -330,20 +329,20 @@ public final class ClanManager {
return clanPlayers.get(uuid);
}
@SuppressWarnings("deprecation")
@Nullable
public ClanPlayer getAnyClanPlayer(String playerName) {
for (ClanPlayer cp : getAllClanPlayers()) {
if (cp.getName().equalsIgnoreCase(playerName)) {
if (cp.getName().equals(playerName)) {
return cp;
}
}
return null;
return getAnyClanPlayer(Bukkit.getOfflinePlayer(playerName).getUniqueId());
}
/**
* Gets the ClanPlayer object for the player, creates one if not found
*/
@Deprecated
public @Nullable ClanPlayer getCreateClanPlayerUUID(String playerName) {
UUID playerUniqueId = UUIDMigration.getForcedPlayerUUID(playerName);
if (playerUniqueId != null) {
@@ -418,10 +417,8 @@ public final class ClanManager {
if (plugin.getSettingsManager().is(DISPLAY_CHAT_TAGS)) {
String prefix = plugin.getPermissionsManager().getPrefix(player);
// String suffix = plugin.getPermissionsManager().getSuffix(player);
String lastColor = plugin.getSettingsManager().is(COLOR_CODE_FROM_PREFIX_FOR_NAME)
? ChatUtils.getLastColorCode(prefix)
: ChatColor.WHITE + "";
//String suffix = plugin.getPermissionsManager().getSuffix(player);
String lastColor = plugin.getSettingsManager().is(COLOR_CODE_FROM_PREFIX_FOR_NAME) ? ChatUtils.getLastColorCode(prefix) : ChatColor.WHITE + "";
String fullName = player.getName();
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
@@ -602,7 +599,7 @@ public final class ClanManager {
}
}
if (out.isEmpty()) {
if (out.length() == 0) {
out = lang("none", player);
}
@@ -673,7 +670,7 @@ public final class ClanManager {
out += ChatColor.WHITE + lang("weapon.A", player) + headColor + count;
}
if (out.isEmpty()) {
if (out.length() == 0) {
out = lang("none", player);
}
@@ -935,9 +932,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.MEMBER_FEE_SET);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -958,9 +955,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_CREATION);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -981,9 +978,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_INVITATION);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -1004,9 +1001,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_HOME_TELEPORT);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -1027,9 +1024,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_HOME_TELEPORT_SET);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -1050,9 +1047,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.RESET_KDR);
player.spigot().sendMessage(new TextComponent(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price))));
player.spigot().sendMessage(new TextComponent(RED + MessageFormat.format(lang("account.has.been.debited", player), price)));
} else {
player.spigot().sendMessage(new TextComponent(RED + MessageFormat.format(lang("not.sufficient.money", player), CurrencyFormat.format(price))));
player.spigot().sendMessage(new TextComponent(RED + MessageFormat.format(lang("not.sufficient.money", player), price)));
return false;
}
}
@@ -1082,22 +1079,22 @@ public final class ClanManager {
if (plugin.getSettingsManager().is(ECONOMY_ISSUER_PAYS_REGROUP) && plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_REGROUP);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
} else {
double money = plugin.getPermissionsManager().playerGetMoney(player);
switch (clan.withdraw(new BankOperator(player, money), ClanBalanceUpdateEvent.Cause.COMMAND, price)) {
case SUCCESS:
case SUCCESS -> {
if (plugin.getPermissionsManager().grantPlayer(player, price)) {
player.sendMessage(AQUA + lang("player.clan.withdraw", player, CurrencyFormat.format(price)));
clan.addBb(player.getName(), lang("bb.clan.withdraw", CurrencyFormat.format(price)));
player.sendMessage(AQUA + lang("player.clan.withdraw", player, price));
clan.addBb(player.getName(), lang("bb.clan.withdraw", price));
return true;
}
case NOT_ENOUGH_BALANCE:
player.sendMessage(lang("clan.bank.not.enough.money", player));
}
case NOT_ENOUGH_BALANCE -> player.sendMessage(lang("clan.bank.not.enough.money", player));
}
}
@@ -1117,9 +1114,9 @@ public final class ClanManager {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().chargePlayer(player, price, Cause.CLAN_VERIFICATION);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), CurrencyFormat.format(price)));
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player, CurrencyFormat.format(price)));
player.sendMessage(RED + lang("not.sufficient.money", player, price));
return false;
}
}
@@ -167,16 +167,13 @@ public final class PermissionsManager {
return permissions.get(clan.getTag());
}
public String format(double value) {
return Objects.requireNonNull(economy, "Can't find economy provider").format(value);
}
/**
* Charge a player some money
*
* @deprecated use {@link PermissionsManager#chargePlayer(OfflinePlayer, double)} instead
*/
@Deprecated
@Deprecated(since = "2.19.0", forRemoval = true)
public boolean playerChargeMoney(OfflinePlayer player, double money) {
return chargePlayer(player, money);
}
@@ -238,7 +235,7 @@ public final class PermissionsManager {
*
* @deprecated use {@link PermissionsManager#grantPlayer(OfflinePlayer, double)} instead
*/
@Deprecated
@Deprecated(since = "2.19.0", forRemoval = true)
public boolean playerGrantMoney(OfflinePlayer player, double money) {
return grantPlayer(player, money);
}
@@ -270,10 +267,8 @@ public final class PermissionsManager {
*/
public boolean grantPlayer(@NotNull OfflinePlayer player, double money, @Nullable Cause cause) {
EconomyResponse response = Objects.requireNonNull(economy, "Can't find economy provider").depositPlayer(player, money);
if (!response.transactionSuccess()) {
if (!response.transactionSuccess() || cause == null) {
return false;
} else if (cause == null) {
return true;
}
EconomyTransactionEvent event = new EconomyTransactionEvent(player, response.amount, cause, EconomyTransactionEvent.TransactionType.DEPOSIT);
@@ -361,7 +356,13 @@ public final class PermissionsManager {
return false;
}
boolean hasLevel = hasLevel(clanPlayer, level);
boolean hasLevel = false;
if (level != null) {
hasLevel = switch (level) {
case LEADER -> clanPlayer.isLeader();
case TRUSTED -> clanPlayer.isTrusted();
};
}
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
@@ -410,7 +411,11 @@ public final class PermissionsManager {
return false;
}
boolean hasLevel = hasLevel(clanPlayer, permission.getPermissionLevel());
boolean hasLevel = switch (permission.getPermissionLevel()) {
case LEADER -> clanPlayer.isLeader();
case TRUSTED -> clanPlayer.isTrusted();
};
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
Clan clan = clanPlayer.getClan();
@@ -431,18 +436,6 @@ public final class PermissionsManager {
return hasLevel || hasRankPermission;
}
private boolean hasLevel(@NotNull ClanPlayer cp, @Nullable PermissionLevel level) {
if (level != null) {
switch (level) {
case LEADER:
return cp.isLeader();
case TRUSTED:
return cp.isTrusted();
}
}
return false;
}
/**
* Gives the player permissions linked to a clan
*/
@@ -5,6 +5,7 @@ import net.sacredlabyrinth.phaed.simpleclans.events.RequestEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.RequestFinishedEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.WarEndEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@@ -15,7 +16,8 @@ import java.text.MessageFormat;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_MAX_MEMBERS;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_FREQUENCY;
import static org.bukkit.ChatColor.RED;
/**
@@ -44,7 +46,7 @@ public final class RequestManager {
}
String msg = MessageFormat.format(lang("asking.for.the.demotion"), requester.getName(), demotedName);
ClanPlayer demotedTp = plugin.getClanManager().getAnyClanPlayer(demotedName);
ClanPlayer demotedTp = plugin.getClanManager().getClanPlayer(UUIDMigration.getForcedPlayerUUID(demotedName));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(clan.getLeaders());
acceptors.remove(demotedTp);
@@ -90,15 +92,15 @@ public final class RequestManager {
}
Clan clan = requester.getClan();
if (clan == null || requests.containsKey(clan.getTag())) {
if (clan == null || requests.containsKey(target)) {
return;
}
String msg = lang(key, args);
String msg = MessageFormat.format(lang(key), args);
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(clan.getLeaders());
Request req = new Request(request, acceptors, requester, target, clan, msg);
requests.put(clan.getTag(), req);
requests.put(req.getTarget(), req);
req.vote(requester.getName(), VoteResult.ACCEPT);
ask(req);
@@ -223,7 +225,7 @@ public final class RequestManager {
if (vote.equals(VoteResult.ACCEPT)) {
ClanPlayer cp = plugin.getClanManager().getCreateClanPlayer(invited.getUniqueId());
int maxMembers = !clan.isVerified() ? plugin.getSettingsManager().getInt(CLAN_UNVERIFIED_MAX_MEMBERS) : plugin.getSettingsManager().getInt(CLAN_MAX_MEMBERS);
int maxMembers = plugin.getSettingsManager().getInt(CLAN_MAX_MEMBERS);
if (maxMembers > 0 && maxMembers > clan.getSize()) {
ChatBlock.sendMessageKey(invited, "accepted.invitation", clan.getName());
@@ -239,7 +241,6 @@ public final class RequestManager {
}
}
public void processResults(Request req) {
Clan requestClan = req.getClan();
ClanPlayer requester = req.getRequester();
@@ -249,9 +250,8 @@ public final class RequestManager {
@Nullable
Clan targetClan = plugin.getClanManager().getClan(target);
ClanPlayer targetCp = plugin.getClanManager().getAnyClanPlayer(target);
@Nullable
UUID targetUuid = targetCp != null ? targetCp.getUniqueId() : null;
UUID targetPlayer = UUIDMigration.getForcedPlayerUUID(target);
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
@@ -271,16 +271,16 @@ public final class RequestManager {
break;
case DEMOTE:
case PROMOTE:
if (!req.votingFinished() || targetUuid == null) {
if (!req.votingFinished() || targetPlayer == null) {
return;
}
target = requestClan.getTag();
if (req.getType() == ClanRequest.DEMOTE) {
processDemote(req, requestClan, targetUuid, denies);
processDemote(req, requestClan, targetPlayer, denies);
}
if (req.getType() == ClanRequest.PROMOTE) {
processPromote(req, requestClan, targetUuid, denies);
processPromote(req, requestClan, targetPlayer, denies);
}
break;
case DISBAND:
@@ -3,22 +3,15 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.logging.Level;
import java.util.concurrent.ConcurrentHashMap;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType;
@@ -35,7 +28,6 @@ public final class SettingsManager {
private final FileConfiguration config;
private final File configFile;
private final Map<Class<? extends SCFrame>, FileConfiguration> frameConfigs = new ConcurrentHashMap<>();
public SettingsManager(SimpleClans plugin) {
this.plugin = plugin;
@@ -97,11 +89,10 @@ public final class SettingsManager {
if (configFile.exists()) {
try {
config.load(configFile);
} catch (IOException | InvalidConfigurationException ex) {
SimpleClans.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
} catch (Exception e) {
e.printStackTrace();
}
}
frameConfigs.clear();
save();
}
@@ -109,8 +100,8 @@ public final class SettingsManager {
public void save() {
try {
config.save(configFile);
} catch (IOException ex) {
SimpleClans.getInstance().getLogger().log(Level.SEVERE, ex.getMessage(), ex);
} catch (IOException e) {
e.printStackTrace();
}
}
@@ -124,7 +115,7 @@ public final class SettingsManager {
" that matches their clan tag.");
}
if (discordSrv == null && is(DISCORDCHAT_ENABLE)) {
if (discordSrv == null && is (DISCORDCHAT_ENABLE)) {
plugin.getLogger().warning("DiscordChat can't be initialized, please, install DiscordSRV.");
}
}
@@ -140,30 +131,6 @@ public final class SettingsManager {
return new Locale(language);
}
public FileConfiguration getConfig(Class<? extends SCFrame> clazz) {
return frameConfigs.computeIfAbsent(clazz, this::readConfig);
}
private FileConfiguration readConfig(Class<? extends SCFrame> clazz) {
String configPath = clazz.getName().replace("net.sacredlabyrinth.phaed.simpleclans.ui.", "")
.replace(".", File.separator) + ".yml";
File externalFile = new File(plugin.getDataFolder(), configPath);
InputStream resource = plugin.getResource(configPath);
YamlConfiguration config = YamlConfiguration.loadConfiguration(externalFile);
if (resource != null) {
YamlConfiguration defaults = YamlConfiguration.loadConfiguration(new InputStreamReader(resource));
config.setDefaults(defaults);
if (!externalFile.exists()) {
try {
defaults.save(externalFile);
} catch (IOException e) {
plugin.getLogger().log(Level.SEVERE, String.format("Error saving defaults to %s", configPath), e);
}
}
}
return config;
}
public List<Material> getItemList() {
List<Material> itemsList = new ArrayList<>();
for (String material : getStringList(ITEM_LIST)) {
@@ -181,7 +148,7 @@ public final class SettingsManager {
* Check whether a word is disallowed
*
* @param word the world
* @return whether its disallowed word
* @return whether its a disallowed word
*/
public boolean isDisallowedWord(String word) {
for (String disallowedTag : getStringList(DISALLOWED_TAGS)) {
@@ -201,8 +168,13 @@ public final class SettingsManager {
* @return whether the string contains the color code
*/
public boolean hasDisallowedColor(String str) {
String loweredString = str.toLowerCase();
return getStringList(DISALLOWED_TAG_COLORS).stream().map(String::toLowerCase).anyMatch(color -> loweredString.contains("&" + color));
for (String disallowedTag : getStringList(DISALLOWED_TAG_COLORS)) {
if (str.contains("&" + disallowedTag)) {
return true;
}
}
return false;
}
/**
@@ -343,8 +315,6 @@ public final class SettingsManager {
USERNAME_REGEX("settings.username-regex", "^\\**[a-zA-Z0-9_$]{1,16}$"),
TAG_REGEX("settings.tag-regex", ""),
ACCEPT_OTHER_ALPHABETS_LETTERS("settings.accept-other-alphabets-letters-on-tag", false),
DATE_TIME_PATTERN("settings.date-time-pattern", "HH:mm - dd/MM/yyyy"),
BUNGEE_SERVERS("settings.bungee-servers"),
/*
================
> Tag Settings
@@ -475,7 +445,6 @@ public final class SettingsManager {
CLAN_MAX_DESCRIPTION_LENGTH("clan.max-description-length", 120),
CLAN_MIN_DESCRIPTION_LENGTH("clan.min-description-length", 10),
CLAN_MAX_MEMBERS("clan.max-members", 25),
CLAN_UNVERIFIED_MAX_MEMBERS("clan.unverified-max-members", 10),
CLAN_MAX_ALLIANCES("clan.max-alliances", -1),
CLAN_CONFIRMATION_FOR_PROMOTE("clan.confirmation-for-promote", false),
CLAN_TRUST_MEMBERS_BY_DEFAULT("clan.trust-members-by-default", false),
@@ -483,7 +452,6 @@ public final class SettingsManager {
CLAN_PERCENTAGE_ONLINE_TO_DEMOTE("clan.percentage-online-to-demote", 100.0),
CLAN_FF_ON_BY_DEFAULT("clan.ff-on-by-default", false),
CLAN_MIN_TO_VERIFY("clan.min-to-verify", 1),
CLAN_DEFAULT_RANK("clan.default-rank", "recruit"),
/*
================
> Tasks Settings
@@ -608,7 +576,6 @@ public final class SettingsManager {
MYSQL_ENABLE("mysql.enable", false),
MYSQL_PASSWORD("mysql.password", ""),
MYSQL_DATABASE("mysql.database", ""),
MYSQL_TABLE_PREFIX("mysql.table_prefix", "sc_"),
/*
================
> Permissions Settings
@@ -1,5 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.google.common.base.Charsets;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
@@ -10,6 +11,7 @@ import net.sacredlabyrinth.phaed.simpleclans.storage.SQLiteCore;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.YAMLSerializer;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDFetcher;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -18,17 +20,13 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
@@ -61,7 +59,7 @@ public final class StorageManager {
* @return the ChatBlock
*/
public ChatBlock getChatBlock(Player player) {
return chatBlocks.get(player.getName());
return chatBlocks.get(player.getUniqueId().toString());
}
/**
@@ -69,7 +67,13 @@ public final class StorageManager {
*
*/
public void addChatBlock(CommandSender player, ChatBlock cb) {
chatBlocks.put(player.getName(), cb);
UUID uuid = UUIDMigration.getForcedPlayerUUID(player.getName());
if (uuid == null) {
return;
}
chatBlocks.put(uuid.toString(), cb);
}
/**
@@ -83,10 +87,10 @@ public final class StorageManager {
if (core.checkConnection()) {
plugin.getLogger().info(lang("mysql.connection.successful"));
if (!core.existsTable(getPrefixedTable("clans"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("clans"));
if (!core.existsTable("sc_clans")) {
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("clans") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
@@ -111,10 +115,10 @@ public final class StorageManager {
core.execute(query);
}
if (!core.existsTable(getPrefixedTable("players"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("players"));
if (!core.existsTable("sc_players")) {
plugin.getLogger().info("Creating table: sc_players");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("players") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ("
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `name` varchar(16) NOT NULL,"
+ " `leader` tinyint(1) default '0',"
@@ -137,17 +141,16 @@ public final class StorageManager {
core.execute(query);
}
if (!core.existsTable(getPrefixedTable("kills"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("kills"));
if (!core.existsTable("sc_kills")) {
plugin.getLogger().info("Creating table: sc_kills");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("kills") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ("
+ " `kill_id` bigint(20) NOT NULL auto_increment,"
+ " `attacker` varchar(16) NOT NULL,"
+ " `attacker_tag` varchar(16) NOT NULL,"
+ " `victim` varchar(16) NOT NULL,"
+ " `victim_tag` varchar(16) NOT NULL,"
+ " `kill_type` varchar(1) NOT NULL,"
+ " `created_at` datetime NULL,"
+ " PRIMARY KEY (`kill_id`));";
core.execute(query);
}
@@ -161,10 +164,10 @@ public final class StorageManager {
plugin.getLogger().info(lang("sqlite.connection.successful"));
if (!core.existsTable(getPrefixedTable("clans"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("clans"));
if (!core.existsTable("sc_clans")) {
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("clans") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20),"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
@@ -189,10 +192,10 @@ public final class StorageManager {
core.execute(query);
}
if (!core.existsTable(getPrefixedTable("players"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("players"));
if (!core.existsTable("sc_players")) {
plugin.getLogger().info("Creating table: sc_players");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("players") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ("
+ " `id` bigint(20),"
+ " `name` varchar(16) NOT NULL,"
+ " `leader` tinyint(1) default '0',"
@@ -215,17 +218,16 @@ public final class StorageManager {
core.execute(query);
}
if (!core.existsTable(getPrefixedTable("kills"))) {
plugin.getLogger().info("Creating table: " + getPrefixedTable("kills"));
if (!core.existsTable("sc_kills")) {
plugin.getLogger().info("Creating table: sc_kills");
String query = "CREATE TABLE IF NOT EXISTS `" + getPrefixedTable("kills") + "` ("
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ("
+ " `kill_id` bigint(20),"
+ " `attacker` varchar(16) NOT NULL,"
+ " `attacker_tag` varchar(16) NOT NULL,"
+ " `victim` varchar(16) NOT NULL,"
+ " `victim_tag` varchar(16) NOT NULL,"
+ " `kill_type` varchar(1) NOT NULL,"
+ " `created_at` datetime NULL,"
+ " PRIMARY KEY (`kill_id`));";
core.execute(query);
}
@@ -325,9 +327,6 @@ public final class StorageManager {
for (Clan clan : purge) {
plugin.getLogger().info(lang("purging.clan", clan.getName()));
for (ClanPlayer member : clan.getMembers()) {
clan.removePlayerFromClan(member.getUniqueId());
}
deleteClan(clan);
clans.remove(clan);
}
@@ -364,7 +363,7 @@ public final class StorageManager {
public List<Clan> retrieveClans() {
List<Clan> out = new ArrayList<>();
String query = "SELECT * FROM `" + getPrefixedTable("clans") + "`;";
String query = "SELECT * FROM `sc_clans`;";
ResultSet res = core.select(query);
if (res != null) {
@@ -438,7 +437,7 @@ public final class StorageManager {
public @Nullable Clan retrieveOneClan(String tagClan) {
Clan out = null;
String query = "SELECT * FROM `" + getPrefixedTable("clans") + "` WHERE `tag` = '" + tagClan + "';";
String query = "SELECT * FROM `sc_clans` WHERE `tag` = '" + tagClan + "';";
ResultSet res = core.select(query);
if (res != null) {
@@ -512,7 +511,7 @@ public final class StorageManager {
public List<ClanPlayer> retrieveClanPlayers() {
List<ClanPlayer> out = new ArrayList<>();
String query = "SELECT * FROM `" + getPrefixedTable("players") + "`;";
String query = "SELECT * FROM `sc_players`;";
ResultSet res = core.select(query);
if (res != null) {
@@ -539,7 +538,7 @@ public final class StorageManager {
if (last_seen == 0) {
last_seen = (new Date()).getTime();
}
}
ClanPlayer cp = new ClanPlayer();
if (uuid != null) {
@@ -590,7 +589,7 @@ public final class StorageManager {
public @Nullable ClanPlayer retrieveOneClanPlayer(UUID playerUniqueId) {
ClanPlayer out = null;
String query = "SELECT * FROM `" + getPrefixedTable("players") + "` WHERE `uuid` = '" + playerUniqueId.toString() + "';";
String query = "SELECT * FROM `sc_players` WHERE `uuid` = '" + playerUniqueId.toString() + "';";
ResultSet res = core.select(query);
if (res != null) {
@@ -687,7 +686,7 @@ public final class StorageManager {
public void insertClan(Clan clan) {
plugin.getProxyManager().sendUpdate(clan);
String query = "INSERT INTO `" + getPrefixedTable("clans") + "` (`banner`, `ranks`, `description`, `fee_enabled`, `fee_value`, `verified`, `tag`," +
String query = "INSERT INTO `sc_clans` (`banner`, `ranks`, `description`, `fee_enabled`, `fee_value`, `verified`, `tag`," +
" `color_tag`, `name`, `friendly_fire`, `founded`, `last_used`, `packed_allies`, `packed_rivals`, " +
"`packed_bb`, `cape_url`, `flags`, `balance`) ";
String values = "VALUES ( '"
@@ -746,7 +745,7 @@ public final class StorageManager {
* @param cp to update
*/
public void updatePlayerName(final @NotNull ClanPlayer cp) {
String query = "UPDATE `" + getPrefixedTable("players") + "` SET `name` = '" + cp.getName() + "' WHERE uuid = '" + cp.getUniqueId() + "';";
String query = "UPDATE `sc_players` SET `name` = '" + cp.getName() + "' WHERE uuid = '" + cp.getUniqueId() + "';";
core.executeUpdate(query);
}
@@ -783,7 +782,7 @@ public final class StorageManager {
}
private PreparedStatement prepareUpdateClanStatement(Connection connection) throws SQLException {
String sql = "UPDATE `" + getPrefixedTable("clans") + "` SET ranks = ?, banner = ?, description = ?, fee_enabled = ?, fee_value = ?, " +
String sql = "UPDATE `sc_clans` SET ranks = ?, banner = ?, description = ?, fee_enabled = ?, fee_value = ?, " +
"verified = ?, tag = ?, color_tag = ?, `name` = ?, friendly_fire = ?, founded = ?, last_used = ?, " +
"packed_allies = ?, packed_rivals = ?, packed_bb = ?, balance = ?, flags = ? WHERE tag = ?;";
return connection.prepareStatement(sql);
@@ -815,7 +814,7 @@ public final class StorageManager {
*/
public void deleteClan(Clan clan) {
plugin.getProxyManager().sendDelete(clan);
String query = "DELETE FROM `" + getPrefixedTable("clans") + "` WHERE tag = '" + clan.getTag() + "';";
String query = "DELETE FROM `sc_clans` WHERE tag = '" + clan.getTag() + "';";
core.executeUpdate(query);
}
@@ -826,7 +825,7 @@ public final class StorageManager {
public void insertClanPlayer(ClanPlayer cp) {
plugin.getProxyManager().sendUpdate(cp);
String query = "INSERT INTO `" + getPrefixedTable("players") + "` (`uuid`, `name`, `leader`, `tag`, `friendly_fire`, `neutral_kills`, " +
String query = "INSERT INTO `sc_players` (`uuid`, `name`, `leader`, `tag`, `friendly_fire`, `neutral_kills`, " +
"`rival_kills`, `civilian_kills`, `deaths`, `last_seen`, `join_date`, `packed_past_clans`, `flags`) ";
String values = "VALUES ('" + cp.getUniqueId().toString() + "', '" + cp.getName() + "',"
+ (cp.isLeader() ? 1 : 0) + ",'" + Helper.escapeQuotes(cp.getTag()) + "',"
@@ -871,7 +870,7 @@ public final class StorageManager {
}
private PreparedStatement prepareUpdateClanPlayerStatement(Connection connection) throws SQLException {
String sql = "UPDATE `" + getPrefixedTable("players") + "` SET locale = ?, resign_times = ?, leader = ?, tag = ?, friendly_fire = ?," +
String sql = "UPDATE `sc_players` SET locale = ?, resign_times = ?, leader = ?, tag = ?, friendly_fire = ?," +
" neutral_kills = ?, ally_kills = ?, rival_kills = ?, civilian_kills = ?, deaths = ?, last_seen = ?," +
" packed_past_clans = ?, trusted = ?, flags = ?, `name` = ? WHERE `uuid` = ?;";
return connection.prepareStatement(sql);
@@ -906,7 +905,7 @@ public final class StorageManager {
updateClan(clan, false);
}
plugin.getProxyManager().sendDelete(cp);
String query = "DELETE FROM `" + getPrefixedTable("players") + "` WHERE uuid = '" + cp.getUniqueId() + "';";
String query = "DELETE FROM `sc_players` WHERE uuid = '" + cp.getUniqueId() + "';";
core.executeUpdate(query);
deleteKills(cp.getUniqueId());
}
@@ -917,7 +916,7 @@ public final class StorageManager {
*/
@Deprecated
public void insertKill(Player attacker, String attackerTag, Player victim, String victimTag, String type) {
String query = "INSERT INTO `" + getPrefixedTable("kills") + "` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, `victim`, `victim_tag`, `kill_type`) ";
String query = "INSERT INTO `sc_kills` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, `victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getUniqueId() + "','" + attacker.getName() + "','" + attackerTag + "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victimTag + "','" + type + "');";
core.executeUpdate(query + values);
}
@@ -929,11 +928,11 @@ public final class StorageManager {
* @param victim the victim
* @param type the kill type
*/
public void insertKill(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim, @NotNull String type, @NotNull LocalDateTime time) {
public void insertKill(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim, @NotNull String type) {
String query = "INSERT INTO `sc_kills` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, " +
"`victim`, `victim_tag`, `kill_type`, `created_at`) ";
"`victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getUniqueId() + "','" + attacker.getName() + "','" + attacker.getTag()
+ "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victim.getTag() + "','" + type + "','" + time + "');";
+ "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victim.getTag() + "','" + type + "');";
core.executeUpdate(query + values);
}
@@ -943,7 +942,7 @@ public final class StorageManager {
*/
@Deprecated
public void deleteKills(String playerName) {
String query = "DELETE FROM `" + getPrefixedTable("kills") + "` WHERE `attacker` = '" + playerName + "'";
String query = "DELETE FROM `sc_kills` WHERE `attacker` = '" + playerName + "'";
core.executeUpdate(query);
}
@@ -952,7 +951,7 @@ public final class StorageManager {
*
*/
public void deleteKills(UUID playerUniqueId) {
String query = "DELETE FROM `" + getPrefixedTable("kills") + "` WHERE `attacker_uuid` = '" + playerUniqueId + "'";
String query = "DELETE FROM `sc_kills` WHERE `attacker_uuid` = '" + playerUniqueId + "'";
core.executeUpdate(query);
}
@@ -967,7 +966,7 @@ public final class StorageManager {
public Map<String, Integer> getKillsPerPlayer(String playerName) {
HashMap<String, Integer> out = new HashMap<>();
String query = "SELECT victim, count(victim) AS kills FROM `" + getPrefixedTable("kills") + "` WHERE attacker = '" + playerName + "' GROUP BY victim ORDER BY count(victim) DESC;";
String query = "SELECT victim, count(victim) AS kills FROM `sc_kills` WHERE attacker = '" + playerName + "' GROUP BY victim ORDER BY count(victim) DESC;";
ResultSet res = core.select(query);
if (res != null) {
@@ -1000,7 +999,7 @@ public final class StorageManager {
public Map<String, Integer> getMostKilled() {
HashMap<String, Integer> out = new HashMap<>();
String query = "SELECT attacker, victim, count(victim) AS kills FROM `" + getPrefixedTable("kills") + "` GROUP BY attacker, victim ORDER BY 3 DESC;";
String query = "SELECT attacker, victim, count(victim) AS kills FROM `sc_kills` GROUP BY attacker, victim ORDER BY 3 DESC;";
ResultSet res = core.select(query);
if (res != null) {
@@ -1078,104 +1077,98 @@ public final class StorageManager {
/*
* From 2.2.6.3 to 2.3
*/
if (!core.existsColumn(getPrefixedTable("clans"), "balance")) {
query = "ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `balance` double(64,2);";
if (!core.existsColumn("sc_clans", "balance")) {
query = "ALTER TABLE sc_clans ADD COLUMN `balance` double(64,2);";
core.execute(query);
}
/*
* From 2.7.16 to 2.7.17
*/
if (!core.existsColumn(getPrefixedTable("clans"), "fee_enabled")) {
query = "ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `fee_enabled` tinyint(1) default '0';";
if (!core.existsColumn("sc_clans", "fee_enabled")) {
query = "ALTER TABLE sc_clans ADD COLUMN `fee_enabled` tinyint(1) default '0';";
core.execute(query);
}
if (!core.existsColumn(getPrefixedTable("clans"), "fee_value")) {
query = "ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `fee_value` double(64,2);";
if (!core.existsColumn("sc_clans", "fee_value")) {
query = "ALTER TABLE sc_clans ADD COLUMN `fee_value` double(64,2);";
core.execute(query);
}
/*
* From 2.7.21 to 2.7.22
*/
if (!core.existsColumn(getPrefixedTable("clans"), "description")) {
query = "ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `description` varchar(255);";
if (!core.existsColumn("sc_clans", "description")) {
query = "ALTER TABLE sc_clans ADD COLUMN `description` varchar(255);";
core.execute(query);
}
/*
* From 2.7.22 to 2.7.23
*/
if (!core.existsColumn(getPrefixedTable("players"), "resign_times")) {
query = "ALTER TABLE `" + getPrefixedTable("players") + "` ADD COLUMN `resign_times` text;";
if (!core.existsColumn("sc_players", "resign_times")) {
query = "ALTER TABLE sc_players ADD COLUMN `resign_times` text;";
core.execute(query);
}
/*
* From 2.8.2 to 2.9
*/
if (!core.existsColumn(getPrefixedTable("clans"), "ranks")) {
query = "ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `ranks` text;";
if (!core.existsColumn("sc_clans", "ranks")) {
query = "ALTER TABLE sc_clans ADD COLUMN `ranks` text;";
core.execute(query);
}
// From 2.12.1 to 2.13.0
if (!core.existsColumn(getPrefixedTable("players"), "locale")) {
query = "ALTER TABLE `" + getPrefixedTable("players") + "` ADD COLUMN `locale` varchar(10);";
if (!core.existsColumn("sc_players", "locale")) {
query = "ALTER TABLE sc_players ADD COLUMN `locale` varchar(10);";
core.execute(query);
}
if (!core.existsColumn(getPrefixedTable("clans"), "banner")) {
core.execute("ALTER TABLE `" + getPrefixedTable("clans") + "` ADD COLUMN `banner` text;");
if (!core.existsColumn("sc_clans", "banner")) {
core.execute("ALTER TABLE sc_clans ADD COLUMN `banner` text;");
}
// From 2.15.1 to 2.15.2
if (!core.existsColumn(getPrefixedTable("players"), "ally_kills")) {
core.execute("ALTER TABLE `" + getPrefixedTable("players") + "` ADD COLUMN `ally_kills` int(11) DEFAULT NULL;");
if (!core.existsColumn("sc_players", "ally_kills")) {
core.execute("ALTER TABLE sc_players ADD COLUMN `ally_kills` int(11) DEFAULT NULL;");
}
if (plugin.getSettingsManager().is(MYSQL_ENABLE)) {
core.execute("ALTER TABLE `" + getPrefixedTable("clans") + "` MODIFY color_tag VARCHAR(255);");
core.execute("ALTER TABLE sc_clans MODIFY color_tag VARCHAR(255);");
}
/*
* Bukkit 1.7.5+ UUID Migration
*/
if (!core.existsColumn(getPrefixedTable("kills"), "attacker_uuid")) {
query = "ALTER TABLE `" + getPrefixedTable("kills") + "` ADD attacker_uuid VARCHAR( 255 ) DEFAULT NULL;";
if (!core.existsColumn("sc_kills", "attacker_uuid")) {
query = "ALTER TABLE sc_kills ADD attacker_uuid VARCHAR( 255 ) DEFAULT NULL;";
core.execute(query);
}
if (!core.existsColumn(getPrefixedTable("kills"), "victim_uuid")) {
query = "ALTER TABLE `" + getPrefixedTable("kills") + "` ADD victim_uuid VARCHAR( 255 ) DEFAULT NULL;";
if (!core.existsColumn("sc_kills", "victim_uuid")) {
query = "ALTER TABLE sc_kills ADD victim_uuid VARCHAR( 255 ) DEFAULT NULL;";
core.execute(query);
}
boolean useMysql = plugin.getSettingsManager().is(MYSQL_ENABLE);
if (!core.existsColumn(getPrefixedTable("players"), "uuid")) {
query = "ALTER TABLE `" + getPrefixedTable("players") + "` ADD uuid VARCHAR( 255 ) DEFAULT NULL;";
if (!core.existsColumn("sc_players", "uuid")) {
query = "ALTER TABLE sc_players ADD uuid VARCHAR( 255 ) DEFAULT NULL;";
core.execute(query);
if (useMysql) {
query = "ALTER TABLE `" + getPrefixedTable("players") + "` ADD UNIQUE `uq_player_uuid` (`uuid`);";
query = "ALTER TABLE `sc_players` ADD UNIQUE `uq_player_uuid` (`uuid`);";
core.execute(query);
}
updatePlayersToUUID();
if (useMysql) {
query = "ALTER TABLE `" + getPrefixedTable("players") + "` DROP INDEX uq_sc_players_1;";
query = "ALTER TABLE sc_players DROP INDEX uq_sc_players_1;";
} else {
query = "DROP INDEX IF EXISTS uq_sc_players_1;";
}
core.execute(query);
}
if (core.existsColumn(getPrefixedTable("players"), "uuid") && !useMysql) {
query = "CREATE UNIQUE INDEX IF NOT EXISTS `uq_player_uuid` ON `" + getPrefixedTable("players") + "` (`uuid`);";
core.execute(query);
}
// From 2.19.3 to 2.20.0
if (!core.existsColumn(getPrefixedTable("kills"), "created_at")) {
query = "ALTER TABLE sc_kills ADD `created_at` datetime NULL;";
if (core.existsColumn("sc_players", "uuid") && !useMysql) {
query = "CREATE UNIQUE INDEX IF NOT EXISTS `uq_player_uuid` ON `sc_players` (`uuid`);";
core.execute(query);
}
}
@@ -1184,86 +1177,49 @@ public final class StorageManager {
* Updates the database to the latest version
*
*/
private void updatePlayersToUUID() {
logMigrationStart();
plugin.getLogger().log(Level.WARNING, "Starting Migration to UUID Players !");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
SimpleClans.getInstance().setUUID(false);
List<ClanPlayer> cps = retrieveClanPlayers();
Map<String, UUID> uuidMap = fetchUUIDs(cps);
int totalPlayers = cps.size();
for (int i = 0; i < totalPlayers; i++) {
ClanPlayer cp = cps.get(i);
int i = 1;
for (ClanPlayer cp : cps) {
try {
UUID uuid = uuidMap.get(cp.getName());
if (uuid != null) {
updatePlayerInDatabase(cp.getName(), uuid);
logSuccess(i + 1, totalPlayers, cp.getName(), uuid);
UUID uuidPlayer;
if (SimpleClans.getInstance().getServer().getOnlineMode()) {
uuidPlayer = UUIDFetcher.getUUIDOfThrottled(cp.getName());
} else {
uuidPlayer = UUID.nameUUIDFromBytes(("OfflinePlayer:" + cp.getName()).getBytes(Charsets.UTF_8));
}
String query = "UPDATE `sc_players` SET uuid = '" + uuidPlayer.toString() + "' WHERE name = '" + cp.getName() + "';";
core.executeUpdate(query);
String query2 = "UPDATE `sc_kills` SET attacker_uuid = '" + uuidPlayer + "' WHERE attacker = '" + cp.getName() + "';";
core.executeUpdate(query2);
String query3 = "UPDATE `sc_kills` SET victim_uuid = '" + uuidPlayer + "' WHERE victim = '" + cp.getName() + "';";
core.executeUpdate(query3);
plugin.getLogger().info("[" + i + " / " + cps.size() + "] Success: " + cp.getName() + "; UUID: " + uuidPlayer.toString());
} catch (Exception ex) {
logFailure(i + 1, totalPlayers, cp.getName(), ex);
plugin.getLogger().log(Level.WARNING, "[" + i + " / " + cps.size() + "] Failed [ERRO]: " + cp.getName() + "; UUID: ???");
}
i++;
}
logMigrationEnd(totalPlayers);
}
private void updatePlayerInDatabase(String playerName, UUID uuid) {
String[] tables = {"players", "kills", "kills"};
String[] columns = {"uuid", "attacker_uuid", "victim_uuid"};
String[] conditions = {"name", "attacker", "victim"};
for (int i = 0; i < tables.length; i++) {
String query = String.format("UPDATE `%s` SET %s = '%s' WHERE %s = '%s';",
getPrefixedTable(tables[i]), columns[i], uuid.toString(), conditions[i], playerName);
core.executeUpdate(query);
}
}
private Map<String, UUID> fetchUUIDs(List<ClanPlayer> clanPlayers) {
Map<String, UUID> uuidMap = new HashMap<>();
try {
if (SimpleClans.getInstance().getServer().getOnlineMode()) {
uuidMap = UUIDFetcher.fetchUUIDsForClanPlayers(clanPlayers);
} else {
uuidMap = clanPlayers.stream().collect(Collectors.toMap(ClanPlayer::getName, player ->
UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(StandardCharsets.UTF_8))));
}
} catch (InterruptedException | ExecutionException ex) {
plugin.getLogger().log(Level.SEVERE, "Error fetching UUIDs in bulk: " + ex.getMessage(), ex);
}
return uuidMap;
}
private void logSuccess(int current, int total, String playerName, UUID uuid) {
plugin.getLogger().info(String.format("[%d / %d] Success: %s; UUID: %s", current, total, playerName, uuid));
}
private void logFailure(int current, int total, String playerName, Exception ex) {
plugin.getLogger().log(Level.WARNING, String.format("[%d / %d] Failed [ERROR]: %s; UUID: ???", current, total, playerName), ex);
}
private void logMigrationStart() {
plugin.getLogger().log(Level.WARNING, "Starting Migration to UUID Players!");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DON'T STOP BUKKIT! ====================");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DON'T STOP BUKKIT! ====================");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DON'T STOP BUKKIT! ====================");
}
private void logMigrationEnd(int totalPlayers) {
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
if (totalPlayers > 0) {
plugin.getLogger().info(MessageFormat.format(lang("clan.players"), totalPlayers));
if (!cps.isEmpty()) {
plugin.getLogger().info(MessageFormat.format(lang("clan.players"), cps.size()));
}
SimpleClans.getInstance().setUUID(true);
}
private String getPrefixedTable(String name) {
return plugin.getSettingsManager().getString(MYSQL_TABLE_PREFIX) + name;
}
/**
* Saves modified Clans and ClanPlayers to the database
@@ -33,8 +33,6 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
private static final String DELETE_CLAN_CHANNEL = "DeleteClan";
private static final String DELETE_CLANPLAYER_CHANNEL = "DeleteClanPlayer";
private static final String CHAT_CHANNEL = "Chat";
private static final String BROADCAST = "Broadcast";
private static final String MESSAGE = "Message";
private final SimpleClans plugin;
private final Gson gson;
@@ -69,14 +67,6 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
try {
Class<?> clazz = Class.forName("net.sacredlabyrinth.phaed.simpleclans.proxy.listeners." + subChannel);
MessageListener listener = (MessageListener) clazz.getConstructor(BungeeManager.class).newInstance(this);
String serverName = null;
if (!listener.isBungeeSubchannel()) {
serverName = input.readUTF();
}
if (serverName != null && !isServerAllowed(serverName)) {
SimpleClans.debug(String.format("Server not allowed: %s", serverName));
return;
}
listener.accept(input);
SimpleClans.debug("Message processed");
} catch (ClassNotFoundException e) {
@@ -87,15 +77,6 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
}
}
private boolean isServerAllowed(@NotNull String serverName) {
List<String> servers = plugin.getSettingsManager().getStringList(ConfigField.BUNGEE_SERVERS);
if (servers.isEmpty()) {
return true;
}
return servers.contains(serverName);
}
@Override
public boolean isOnline(String playerName) {
if (Bukkit.getOnlinePlayers().stream().anyMatch(player -> player.getName().equals(playerName))) {
@@ -123,45 +104,23 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
forwardPluginMessage(CHAT_CHANNEL, gson.toJson(message), false);
}
@SuppressWarnings("UnstableApiUsage")
@Override
public void sendMessage(@NotNull String target, @NotNull String message) {
if (message.isEmpty()) {
return;
if (isChannelRegistered()) {
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("Message");
output.writeUTF(target);
output.writeUTF(message);
sendOnBungeeChannel(output);
} else {
if ("ALL".equals(target)) {
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message));
} else {
Optional.ofNullable(Bukkit.getPlayer(target)).ifPresent(p -> p.sendMessage(message));
}
}
if ("ALL".equals(target)) {
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message));
sendBroadcast(message);
return;
}
Player player = Bukkit.getPlayerExact(target);
if (player != null) {
player.sendMessage(message);
return;
}
sendPrivateMessage(target, message);
}
private void sendBroadcast(@NotNull String message) {
forwardPluginMessage(BROADCAST, message, false);
}
@SuppressWarnings("UnstableApiUsage")
private void sendPrivateMessage(@NotNull String playerName, @NotNull String message) {
if (!isChannelRegistered()) {
return;
}
ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("Forward");
output.writeUTF("ONLINE");
output.writeUTF(MESSAGE);
output.writeUTF(serverName);
output.writeUTF(playerName);
output.writeUTF(message);
sendOnBungeeChannel(output);
}
@Override
@@ -237,7 +196,6 @@ public final class BungeeManager implements ProxyManager, PluginMessageListener
output.writeUTF("Forward");
output.writeUTF(target);
output.writeUTF(subChannel);
output.writeUTF(serverName);
output.writeUTF(message);
sendOnBungeeChannel(output);
@@ -1,23 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.proxy.listeners;
import com.google.common.io.ByteArrayDataInput;
import net.sacredlabyrinth.phaed.simpleclans.proxy.BungeeManager;
import org.bukkit.Bukkit;
public class Broadcast extends MessageListener {
public Broadcast(BungeeManager bungee) {
super(bungee);
}
@Override
public void accept(ByteArrayDataInput data) {
String message = data.readUTF();
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(message));
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
}
@@ -18,9 +18,4 @@ public class Chat extends MessageListener {
}
bungee.getPlugin().getChatManager().processChat(message);
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
}
@@ -26,9 +26,4 @@ public class DeleteClan extends MessageListener {
}
debug(String.format("Deleted clan %s", tag));
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
}
@@ -19,9 +19,4 @@ public class DeleteClanPlayer extends MessageListener {
getClanManager().deleteClanPlayerFromMemory(uuid);
debug(String.format("Deleted cp %s", uuid));
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
}
@@ -14,9 +14,4 @@ public class GetServer extends MessageListener {
String name = data.readUTF();
bungee.setServerName(name);
}
@Override
public boolean isBungeeSubchannel() {
return true;
}
}
@@ -1,29 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.proxy.listeners;
import com.google.common.io.ByteArrayDataInput;
import net.sacredlabyrinth.phaed.simpleclans.proxy.BungeeManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class Message extends MessageListener {
public Message(BungeeManager bungee) {
super(bungee);
}
@Override
public void accept(ByteArrayDataInput data) {
String target = data.readUTF();
String message = data.readUTF();
Player player = Bukkit.getPlayerExact(target);
if (player != null) {
player.sendMessage(message);
}
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
}
@@ -15,8 +15,6 @@ public abstract class MessageListener {
public abstract void accept(ByteArrayDataInput data);
public abstract boolean isBungeeSubchannel();
protected ClanManager getClanManager() {
return bungee.getPlugin().getClanManager();
}
@@ -20,9 +20,4 @@ public class PlayerList extends MessageListener {
bungee.setOnlinePlayers(players);
SimpleClans.debug("Updated player list");
}
@Override
public boolean isBungeeSubchannel() {
return true;
}
}
@@ -10,11 +10,6 @@ public class UpdateClan extends Update<Clan> {
super(bungee);
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
@Override
protected Class<Clan> getType() {
return Clan.class;
@@ -10,11 +10,6 @@ public class UpdateClanPlayer extends Update<ClanPlayer> {
super(bungee);
}
@Override
public boolean isBungeeSubchannel() {
return false;
}
@Override
protected Class<ClanPlayer> getType() {
return ClanPlayer.class;
@@ -4,7 +4,6 @@ import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.scheduler.BukkitRunnable;
@@ -55,7 +54,7 @@ public class CollectFeeTask extends BukkitRunnable {
OfflinePlayer player = Bukkit.getOfflinePlayer(cp.getUniqueId());
boolean success = pm.chargePlayer(player, memberFee);
if (success) {
ChatBlock.sendMessage(cp, AQUA + lang("fee.collected", cp, CurrencyFormat.format(memberFee)));
ChatBlock.sendMessage(cp, AQUA + lang("fee.collected", cp, memberFee));
clan.deposit(new BankOperator(cp, pm.playerGetMoney(player)), Cause.MEMBER_FEE, memberFee);
plugin.getStorageManager().updateClan(clan);
@@ -6,7 +6,6 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.scheduler.BukkitRunnable;
import java.text.MessageFormat;
@@ -60,7 +59,7 @@ public class CollectUpkeepTask extends BukkitRunnable {
clan.disband(null, true, false);
}
if (response == EconomyResponse.SUCCESS) {
clan.addBb(MessageFormat.format(lang("upkeep.collected"), CurrencyFormat.format(upkeep)), false);
clan.addBb(MessageFormat.format(lang("upkeep.collected"), upkeep), false);
}
});
}
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.FrameOpenEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PostComponentsCreationEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.WordWrapper;
import org.bukkit.Bukkit;
@@ -36,19 +35,19 @@ public class InventoryDrawer {
return;
}
FrameOpenEvent event = new FrameOpenEvent(frame.getViewer(), frame);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
OPENING.put(uuid, frame);
OPENING.put(uuid, frame);
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
Inventory inventory = prepareInventory(frame);
Inventory inventory = prepareInventory(frame);
if (!frame.equals(OPENING.get(uuid))) {
return;
}
Bukkit.getScheduler().runTask(plugin, () -> {
FrameOpenEvent event = new FrameOpenEvent(frame.getViewer(), frame);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
frame.getViewer().openInventory(inventory);
InventoryController.register(frame);
OPENING.remove(uuid);
@@ -83,7 +82,6 @@ public class InventoryDrawer {
frame.clear();
try {
frame.createComponents();
Bukkit.getPluginManager().callEvent(new PostComponentsCreationEvent(frame));
} catch (NoSuchFieldError ex) {
runHelpCommand(frame.getViewer());
return;
@@ -95,7 +93,7 @@ public class InventoryDrawer {
return;
}
for (SCComponent c : frame.getComponents()) {
if (c.getSlot() >= frame.getSize() || !c.isEnabled()) {
if (c.getSlot() >= frame.getSize()) {
continue;
}
checkLorePermission(frame, c);
@@ -1,62 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.OverridingMethodsMustInvokeSuper;
public abstract class PageableFrame<T> extends SCFrame {
public PageableFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
super(parent, viewer);
}
@Override
@OverridingMethodsMustInvokeSuper
public void createComponents() {
super.createComponents();
SCComponent nextPage = new SCComponentImpl.Builder(getConfig(), "next_page")
.withViewer(getViewer())
.withDisplayNameKey("gui.next.page.title").build();
setOneTimeListener(nextPage, this::nextPage, getPaginator().hasNextPage());
add(nextPage);
SCComponent previousPage = new SCComponentImpl.Builder(getConfig(), "previous_page")
.withViewer(getViewer())
.withDisplayNameKey("gui.previous.page.title").build();
setOneTimeListener(previousPage, this::previousPage, getPaginator().hasPreviousPage());
add(previousPage);
}
public abstract Paginator<T> getPaginator();
public int getPageSize() {
return getConfig().getIntegerList("components.list.slots").size();
}
private void nextPage() {
if (getPaginator().nextPage()) {
update();
}
}
private void previousPage() {
if (getPaginator().previousPage()) {
update();
}
}
private void setOneTimeListener(final SCComponent component, final Runnable runnable, boolean pageCheck) {
if (!pageCheck) {
return;
}
component.setListener(ClickType.LEFT, () -> {
component.setListener(ClickType.LEFT, null);
runnable.run();
});
}
}
@@ -19,7 +19,6 @@ import java.util.Set;
*/
public abstract class SCComponent {
private boolean enabled = true;
private final HashMap<ClickType, Runnable> listeners = new HashMap<>();
private final HashMap<ClickType, Object> permissions = new HashMap<>();
private final Set<ClickType> verified = new HashSet<>();
@@ -31,14 +30,6 @@ public abstract class SCComponent {
public abstract int getSlot();
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Nullable
public ItemMeta getItemMeta() {
return getItem().getItemMeta();
@@ -1,25 +1,15 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import java.util.ArrayList;
import java.util.List;
public class SCComponentImpl extends SCComponent {
@@ -55,7 +45,6 @@ public class SCComponentImpl extends SCComponent {
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
item.setItemMeta(itemMeta);
}
checkSlot(slot);
this.slot = slot;
}
@@ -69,66 +58,34 @@ public class SCComponentImpl extends SCComponent {
return slot;
}
private static void checkMaterial(String material) {
if (material == null || material.isEmpty()) {
throw new IllegalStateException("material cannot be null or empty");
}
}
private static void checkSlot(int slot) {
if (slot < 0) {
throw new IllegalStateException("slot must be >= 0 and < 54");
}
}
public static class Builder {
private boolean enabled;
private final ItemStack item;
private String displayName;
private int slot;
private final SCComponentImpl component = new SCComponentImpl();
private @Nullable List<String> lore;
private Player viewer;
public Builder(@NotNull XMaterial material) {
this(material.parseItem());
}
@SuppressWarnings("unused")
public Builder(@NotNull Material material) {
this(new ItemStack(material));
component.item = new ItemStack(material);
}
public Builder(@Nullable ItemStack item) {
if (item == null) {
item = new ItemStack(Material.STONE);
}
this.item = item;
}
public Builder(FileConfiguration config, String id) {
String materialName = config.getString("components." + id + ".material");
checkMaterial(materialName);
item = Objects.requireNonNull(XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE).parseItem());
slot = config.getInt("components." + id + ".slot");
checkSlot(slot);
enabled = config.getBoolean("components." + id + ".enabled");
}
public Builder withViewer(@NotNull Player player) {
this.viewer = player;
return this;
component.item = item;
}
public Builder withDisplayName(@Nullable String displayName) {
this.displayName = displayName;
ItemMeta itemMeta = component.getItemMeta();
if (itemMeta != null) {
itemMeta.setDisplayName(displayName);
component.setItemMeta(itemMeta);
}
return this;
}
public Builder withDisplayNameKey(@NotNull String key, Object... args) {
if (viewer == null) throw new IllegalStateException("viewer is null");
return withDisplayName(lang(key, viewer, args));
}
public Builder withLore(@Nullable List<String> lore) {
this.lore = lore;
return this;
@@ -142,154 +99,18 @@ public class SCComponentImpl extends SCComponent {
return this;
}
public Builder withLoreKey(@NotNull String key, Object... args) {
if (viewer == null) throw new IllegalStateException("viewer is null");
return withLoreLine(lang(key, viewer, args));
}
public Builder withSlot(int slot) {
checkSlot(slot);
this.slot = slot;
component.slot = slot;
return this;
}
public SCComponent build() {
SCComponentImpl component = new SCComponentImpl();
component.item = item;
component.setEnabled(enabled);
ItemMeta itemMeta = item.getItemMeta();
ItemMeta itemMeta = component.getItemMeta();
if (itemMeta != null) {
itemMeta.setLore(lore);
itemMeta.setDisplayName(displayName);
component.setItemMeta(itemMeta);
}
component.slot = slot;
return component;
}
}
public static class ListBuilder<T> {
private final boolean enabled;
private final XMaterial material;
private Function<T, ItemStack> item;
private Function<T, OfflinePlayer> owningPlayer;
private final List<Integer> slots;
private final List<T> elements;
private Player viewer;
private Function<T, String> displayName = (t) -> null;
private final List<Function<T, String>> lore = new ArrayList<>();
private final Map<ClickType, Function<T, Runnable>> listeners = new HashMap<>();
private final Map<ClickType, String> bukkitPermissions = new HashMap<>();
private final Map<ClickType, RankPermission> rankPermissions = new HashMap<>();
private final Set<ClickType> confirmationRequired = new HashSet<>();
private String lorePermission;
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id, @NotNull List<T> elements) {
String materialName = config.getString("components." + id + ".material");
checkMaterial(materialName);
material = XMaterial.matchXMaterial(materialName).orElse(XMaterial.STONE);
item = (t) -> Objects.requireNonNull(material.parseItem());
slots = config.getIntegerList("components." + id + ".slots").stream().filter(i -> i >= 0 && i < 54)
.collect(Collectors.toList());
this.elements = elements;
enabled = config.getBoolean("components." + id + ".enabled");
}
public ListBuilder(@NotNull FileConfiguration config, @NotNull String id) {
this(config, id, new ArrayList<>());
slots.forEach(e -> elements.add(null));
}
public ListBuilder<T> withItem(@NotNull Function<T, ItemStack> item) {
this.item = (t) -> {
ItemStack result = item.apply(t);
return result == null ? material.parseItem() : result;
};
return this;
}
public ListBuilder<T> withViewer(@NotNull Player player) {
viewer = player;
return this;
}
@SafeVarargs
public final ListBuilder<T> withDisplayNameKey(@NotNull String key, Function<T, Object>... args) {
displayName = (t) -> processLang(key, t, args);
return this;
}
@SafeVarargs
public final ListBuilder<T> withLoreKey(@NotNull String key, Function<T, Object>... args) {
lore.add((t) -> processLang(key, t, args));
return this;
}
public final ListBuilder<T> withLoreLine(Function<T, String> line) {
lore.add(line);
return this;
}
public final ListBuilder<T> withOwningPlayer(Function<T, OfflinePlayer> owningPlayer) {
this.owningPlayer = owningPlayer;
return this;
}
@NotNull
private String processLang(@NotNull String key, T t, Function<T, Object>[] args) {
Object[] processedArgs = Arrays.stream(args).map(func -> func.apply(t)).toArray();
if (viewer == null) throw new IllegalStateException("viewer is null");
return lang(key, viewer, processedArgs);
}
public ListBuilder<T> withLorePermission(@Nullable String permission) {
lorePermission = permission;
return this;
}
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable String permission) {
bukkitPermissions.put(click, permission);
listeners.put(click, runnable);
return this;
}
public ListBuilder<T> withListener(@NotNull ClickType click, @Nullable Function<T, Runnable> runnable, @Nullable RankPermission permission) {
rankPermissions.put(click, permission);
listeners.put(click, runnable);
return this;
}
public ListBuilder<T> withConfirmationRequired(@NotNull ClickType click) {
confirmationRequired.add(click);
return this;
}
public List<SCComponent> build() {
List<SCComponent> components = new ArrayList<>();
for (int i = 0; i < elements.size() && i < slots.size(); i++) {
T t = elements.get(i);
SCComponentImpl component = new SCComponentImpl();
component.setEnabled(enabled);
component.item = item.apply(t);
component.slot = slots.get(i);
ItemMeta itemMeta = component.getItemMeta();
if (itemMeta != null) {
itemMeta.setDisplayName(displayName.apply(t));
List<String> processedLore = lore.stream().map(f -> f.apply(t)).collect(Collectors.toList());
itemMeta.setLore(processedLore);
if (itemMeta instanceof SkullMeta && owningPlayer != null) {
Components.setOwningPlayer(((SkullMeta) itemMeta), owningPlayer.apply(t));
}
component.setItemMeta(itemMeta);
}
component.setLorePermission(lorePermission);
listeners.forEach((click, fn) -> component.setListener(click, fn.apply(t)));
bukkitPermissions.forEach(component::setPermission);
rankPermissions.forEach(component::setPermission);
confirmationRequired.forEach(component::setConfirmationRequired);
components.add(component);
}
return components;
}
}
}
@@ -1,19 +1,12 @@
package net.sacredlabyrinth.phaed.simpleclans.ui;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.OverridingMethodsMustInvokeSuper;
import java.util.Collection;
/**
*
* @author RoinujNosde
@@ -24,7 +17,7 @@ public abstract class SCFrame {
private final SCFrame parent;
private final Player viewer;
private final Set<SCComponent> components = ConcurrentHashMap.newKeySet();
public SCFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
this.parent = parent;
this.viewer = viewer;
@@ -43,27 +36,9 @@ public abstract class SCFrame {
return parent;
}
public int getSize() {
return getConfig().getInt("rows", 6) * 9;
}
public abstract int getSize();
@OverridingMethodsMustInvokeSuper
public void createComponents() {
SCComponent back = new SCComponentImpl.Builder(getConfig(), "back")
.withViewer(getViewer())
.withDisplayNameKey("gui.back.title").build();
back.setListener(ClickType.LEFT, () -> InventoryDrawer.open(getParent()));
add(back);
ConfigurationSection decorSection = getConfig().getConfigurationSection("components.decorations");
if (decorSection != null) {
for (String key : decorSection.getKeys(false)) {
addAll(new SCComponentImpl.ListBuilder<>(getConfig(), "decorations." + key)
.withViewer(getViewer())
.withDisplayNameKey(" ").build());
}
}
}
public abstract void createComponents();
@Nullable
public SCComponent getComponent(int slot) {
@@ -76,34 +51,18 @@ public abstract class SCFrame {
}
public void add(@NotNull SCComponent c) {
SCComponent old = getComponent(c.getSlot());
if (old != null) {
components.remove(old);
}
components.add(c);
}
public void addAll(@NotNull Collection<SCComponent> collection) {
collection.forEach(this::add);
}
public void clear() {
components.clear();
}
public void update() {
InventoryDrawer.open(this);
}
@NotNull
public Set<SCComponent> getComponents() {
return components;
}
protected FileConfiguration getConfig() {
return SimpleClans.getInstance().getSettingsManager().getConfig(getClass());
}
@Override
public boolean equals(Object other) {
if (other instanceof SCFrame) {
@@ -1,5 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
@@ -9,46 +10,77 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddAllyFrame extends PageableFrame<Clan> {
private final Paginator<Clan> paginator;
public class AddAllyFrame extends SCFrame {
private final List<Clan> notAllies;
private final Paginator paginator;
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
List<Clan> notAllies = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), notAllies);
}
public AddAllyFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
notAllies = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, notAllies);
}
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withLoreKey("gui.add.ally.clan.lore")
.withListener(ClickType.LEFT, this::addAlly, RankPermission.ALLY_ADD)
.build();
addAll(list);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
private Runnable addAlly(Clan clan) {
return () -> InventoryController.runSubcommand(getViewer(), "ally add", false, clan.getTag());
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public @NotNull String getTitle() {
return lang("gui.add.ally.title", getViewer());
}
Clan notRival = notAllies.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title", getViewer(), notRival.getColorTag(), notRival.getName()),
Collections.singletonList(lang("gui.add.ally.clan.lore", getViewer())), XMaterial.CYAN_BANNER,
slot);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"ally add", false, notRival.getTag()));
c.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.ally.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,27 +1,23 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;
import java.util.Set;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddPermissionFrame extends PageableFrame<String> {
private final List<String> availablePermissions;
private final Paginator<String> paginator;
public class AddPermissionFrame extends SCFrame {
private final String[] availablePermissions;
private final Paginator paginator;
private final Rank rank;
public AddPermissionFrame(SCFrame parent, Player viewer, Rank rank) {
@@ -29,38 +25,63 @@ public class AddPermissionFrame extends PageableFrame<String> {
this.rank = rank;
Set<String> rankPerms = rank.getPermissions();
availablePermissions = Arrays.stream(Helper.fromPermissionArray()).filter(p -> !rankPerms.contains(p))
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), availablePermissions);
.toArray(String[]::new);
paginator = new Paginator(getSize() - 9, availablePermissions.length);
}
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.add.permission.permission.title", p -> p)
.withLoreKey("gui.add.permission.permission.lore")
.withListener(ClickType.LEFT, this::addPermission, "simpleclans.leader.rank.permissions.add")
.build();
addAll(list);
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
String permission = availablePermissions[i];
SCComponent c = new SCComponentImpl(
lang("gui.add.permission.permission.title",getViewer(), permission),
Collections.singletonList(lang("gui.add.permission.permission.lore",getViewer())),
XMaterial.PAPER, slot);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"rank permissions add", true, rank.getName(), permission));
c.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(c);
slot++;
}
}
private Runnable addPermission(String permission) {
return () -> {
availablePermissions.remove(permission);
InventoryController.runSubcommand(getViewer(), "rank permissions add", true,
rank.getName(), permission);
};
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
@Override
public Paginator<String> getPaginator() {
return paginator;
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.permission.title", getViewer());
return lang("gui.add.permission.title",getViewer());
}
@Override
public int getSize() {
return 3 * 9;
}
}
@@ -1,5 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
@@ -9,45 +10,79 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AddRivalFrame extends PageableFrame<Clan> {
public class AddRivalFrame extends SCFrame {
private final Paginator<Clan> paginator;
private final List<Clan> notRivals;
private final Paginator paginator;
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
List<Clan> notRivals = plugin.getClanManager().getClans().stream().filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag())).collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), notRivals);
}
public AddRivalFrame(SCFrame parent, Player viewer, Clan subject) {
super(parent, viewer);
SimpleClans plugin = SimpleClans.getInstance();
notRivals = plugin.getClanManager().getClans().stream()
.filter(c -> !c.equals(subject) && !c.isRival(subject.getTag()) && !c.isAlly(subject.getTag()))
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, notRivals.size());
}
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.add.rival.clan.lore")
.withListener(ClickType.LEFT, this::addRival, RankPermission.RIVAL_ADD)
.withConfirmationRequired(ClickType.LEFT).build();
addAll(list);
}
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
private Runnable addRival(Clan clan) {
return () -> InventoryController.runSubcommand(getViewer(), "rival add", false, clan.getTag());
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public @NotNull String getTitle() {
return lang("gui.add.rival.title", getViewer());
}
Clan notRival = notRivals.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title",getViewer(), notRival.getColorTag(), notRival.getName()),
Collections.singletonList(lang("gui.add.rival.clan.lore", getViewer())), XMaterial.RED_BANNER,
slot);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(),
"rival add", false, notRival.getTag()));
c.setConfirmationRequired(ClickType.LEFT);
c.setPermission(ClickType.LEFT, RankPermission.RIVAL_ADD);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.add.rival.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,64 +1,94 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class AlliesFrame extends PageableFrame<Clan> {
private final Paginator<Clan> paginator;
private final Clan subject;
public class AlliesFrame extends SCFrame {
private final SimpleClans plugin = SimpleClans.getInstance();
private final Paginator paginator;
private final List<String> allies;
private final Clan subject;
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
this.subject = subject;
ClanManager manager = SimpleClans.getInstance().getClanManager();
List<Clan> allies = subject.getAllies().stream().map(manager::getClan).filter(Objects::nonNull).collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), allies);
}
public AlliesFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
this.subject = subject;
allies = subject.getAllies();
paginator = new Paginator(getSize() - 9, allies.size());
}
@Override
public void createComponents() {
super.createComponents();
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
.withViewer(getViewer())
.withDisplayNameKey("gui.allies.add.title")
.build();
add.setVerifiedOnly(ClickType.LEFT);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(add);
add(Components.getBackComponent(getParent(), 2, getViewer()));
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.allies.clan.lore")
.withListener(ClickType.RIGHT, (clan) -> () -> InventoryController.runSubcommand(getViewer(),
"ally remove", false, clan.getTag()), RankPermission.ALLY_REMOVE)
.build();
addAll(list);
}
SCComponent add = new SCComponentImpl(lang("gui.allies.add.title",getViewer()), null,
XMaterial.CYAN_WOOL, 4);
add.setVerifiedOnly(ClickType.LEFT);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddAllyFrame(this, getViewer(), subject)));
add.setPermission(ClickType.LEFT, RankPermission.ALLY_ADD);
add(add);
@Override
public Paginator<Clan> getPaginator() {
return paginator;
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public @NotNull String getTitle() {
return lang("gui.allies.title", getViewer());
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Clan clan = plugin.getClanManager().getClan(allies.get(i));
if (clan == null)
continue;
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title",getViewer(), clan.getColorTag(), clan.getName()),
Collections.singletonList(lang("gui.allies.clan.lore",getViewer())), XMaterial.CYAN_BANNER, slot);
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"ally remove", false, clan.getTag()));
c.setPermission(ClickType.RIGHT, RankPermission.ALLY_REMOVE);
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.allies.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -9,7 +9,6 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@@ -143,7 +142,6 @@ public class ClanDetailsFrame extends SCFrame {
50);
disband.setListener(ClickType.DROP, () -> InventoryController.runSubcommand(getViewer(), "disband", false));
disband.setPermission(ClickType.DROP, "simpleclans.leader.disband");
disband.setConfirmationRequired(ClickType.LEFT);
add(disband);
}
@@ -166,7 +164,7 @@ public class ClanDetailsFrame extends SCFrame {
List<String> lore = verified ? null : new ArrayList<>();
if (!verified) {
if (purchaseVerification) {
lore.add(lang("gui.clandetails.verify.price.lore", getViewer(), CurrencyFormat.format(settings.getDouble(ECONOMY_VERIFICATION_PRICE))));
lore.add(lang("gui.clandetails.verify.price.lore", getViewer(), settings.getDouble(ECONOMY_VERIFICATION_PRICE)));
}
lore.add(lang("gui.clandetails.not.verified.lore", getViewer()));
}
@@ -182,7 +180,7 @@ public class ClanDetailsFrame extends SCFrame {
String withdrawStatus = clan.isAllowWithdraw() ? lang("allowed",getViewer()) : lang("blocked",getViewer());
String depositStatus = clan.isAllowDeposit() ? lang("allowed", getViewer()) : lang("blocked", getViewer());
SCComponent bank = new SCComponentImpl(lang("gui.clandetails.bank.title", getViewer()),
Arrays.asList(lang("gui.clandetails.bank.balance.lore", getViewer(), clan.getBalanceFormatted()),
Arrays.asList(lang("gui.clandetails.bank.balance.lore", getViewer(), clan.getBalance()),
lang("gui.clandetails.bank.withdraw.status.lore", getViewer(), withdrawStatus),
lang("gui.clandetails.bank.deposit.status.lore", getViewer(), depositStatus),
lang("gui.clandetails.bank.withdraw.toggle.lore", getViewer()),
@@ -247,7 +245,7 @@ public class ClanDetailsFrame extends SCFrame {
}
List<String> lore = new ArrayList<>();
if (price != 0) lore.add(lang("gui.clandetails.regroup.lore.price", getViewer(), CurrencyFormat.format(price)));
if (price != 0) lore.add(lang("gui.clandetails.regroup.lore.price", getViewer(), price));
lore.add(lang("gui.clandetails.regroup.lore.home", getViewer()));
lore.add(lang("gui.clandetails.regroup.lore.me", getViewer()));
@@ -269,9 +267,9 @@ public class ClanDetailsFrame extends SCFrame {
double setPrice = settings.is(ECONOMY_PURCHASE_HOME_TELEPORT_SET) ? settings.getDouble(ECONOMY_HOME_TELEPORT_SET_PRICE) : 0;
List<String> lore = new ArrayList<>();
if (homePrice != 0) lore.add(lang("gui.clandetails.home.lore.teleport.price", getViewer(), CurrencyFormat.format(homePrice)));
if (homePrice != 0) lore.add(lang("gui.clandetails.home.lore.teleport.price", getViewer(), homePrice));
lore.add(lang("gui.clandetails.home.lore.teleport", getViewer()));
if (setPrice != 0) lore.add(lang("gui.clandetails.home.lore.set.price", getViewer(), CurrencyFormat.format(setPrice)));
if (setPrice != 0) lore.add(lang("gui.clandetails.home.lore.set.price", getViewer(), setPrice));
lore.add(lang("gui.clandetails.home.lore.set", getViewer()));
lore.add(lang("gui.clandetails.home.lore.clear", getViewer()));
@@ -1,28 +1,31 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SHOW_UNVERIFIED_ON_LIST;
public class ClanListFrame extends PageableFrame<Clan> {
public class ClanListFrame extends SCFrame {
private final List<Clan> clans;
private final Paginator<Clan> paginator;
private final Paginator paginator;
private final RankingNumberResolver<Clan, BigDecimal> rankingResolver;
public ClanListFrame(SCFrame parent, Player viewer) {
@@ -31,8 +34,8 @@ public class ClanListFrame extends PageableFrame<Clan> {
SettingsManager sm = plugin.getSettingsManager();
clans = plugin.getClanManager().getClans().stream()
.filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST)).collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, clans);
plugin.getClanManager().sortClansByKDR(clans);
paginator = new Paginator<>(getPageSize(), clans);
rankingResolver = new RankingNumberResolver<>(clans, c -> KDRFormat.toBigDecimal(c.getTotalKDR()), false,
sm.getRankingType());
@@ -40,26 +43,57 @@ public class ClanListFrame extends PageableFrame<Clan> {
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withItem(Clan::getBanner)
.withViewer(getViewer())
.withDisplayNameKey("gui.clanlist.clan.title", Clan::getColorTag, Clan::getName)
.withLoreKey("gui.clanlist.clan.lore.position", rankingResolver::getRankingNumber)
.withLoreKey("gui.clanlist.clan.lore.kdr", clan -> KDRFormat.format(clan.getTotalKDR()))
.withLoreKey("gui.clanlist.clan.lore.members", clan -> clan.getMembers().size())
.withLorePermission("simpleclans.anyone.list").build();
addAll(list);
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Clan clan = clans.get(i);
ItemStack banner = clan.getBanner() != null ? clan.getBanner() : XMaterial.BLACK_BANNER.parseItem();
SCComponent c = new SCComponentImpl(
lang("gui.clanlist.clan.title", getViewer(), clan.getColorTag(), clan.getName()),
Arrays.asList(lang("gui.clanlist.clan.lore.position", getViewer(),
rankingResolver.getRankingNumber(clan)),
lang("gui.clanlist.clan.lore.kdr", getViewer(), KDRFormat.format(clan.getTotalKDR())),
lang("gui.clanlist.clan.lore.members", getViewer(), clan.getMembers().size())),
banner, slot);
c.setLorePermission("simpleclans.anyone.list");
add(c);
slot++;
}
}
@Override
public Paginator<Clan> getPaginator() {
return paginator;
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.clanlist.title", getViewer(), clans.size());
return lang("gui.clanlist.title",getViewer(), clans.size());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -6,13 +6,15 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -119,7 +121,7 @@ public class Components {
double price = pl.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_CREATE) ? pl.getSettingsManager().getDouble(ECONOMY_CREATION_PRICE) : 0;
lore = new ArrayList<>();
if (price != 0) {
lore.add(lang("gui.clandetails.free.agent.create.clan.price.lore", frame.getViewer(), CurrencyFormat.format(price)));
lore.add(lang("gui.clandetails.free.agent.create.clan.price.lore", frame.getViewer(), price));
}
lore.add(lang("gui.clandetails.free.agent.create.clan.lore", frame.getViewer()));
}
@@ -148,7 +150,6 @@ public class Components {
return c;
}
@Deprecated
public static SCComponent getBackComponent(@Nullable SCFrame parent, int slot, Player viewer) {
SCComponent back = new SCComponentImpl(lang("gui.back.title", viewer), null,
XMaterial.ARROW, slot);
@@ -156,13 +157,11 @@ public class Components {
return back;
}
@Deprecated
public static SCComponent getPanelComponent(int slot) {
return new SCComponentImpl(" ", null, XMaterial.GRAY_STAINED_GLASS_PANE, slot);
}
@Deprecated
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
public static @NotNull SCComponent getPreviousPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
if (!paginator.hasPreviousPage()) {
return getPanelComponent(slot);
}
@@ -172,8 +171,7 @@ public class Components {
return c;
}
@Deprecated
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator<?> paginator, @NotNull Player viewer) {
public static @NotNull SCComponent getNextPageComponent(int slot, @Nullable Runnable listener, @NotNull Paginator paginator, @NotNull Player viewer) {
if (!paginator.hasNextPage()) {
return getPanelComponent(slot);
}
@@ -192,23 +190,18 @@ public class Components {
});
}
@SuppressWarnings("deprecation")
public static void setOwningPlayer(@NotNull ItemStack item, @NotNull OfflinePlayer player) {
if (player.getName() == null) {
SkullMeta itemMeta = (SkullMeta) item.getItemMeta();
if (itemMeta == null) {
return;
}
ItemMeta itemMeta = item.getItemMeta();
if (itemMeta instanceof SkullMeta) {
setOwningPlayer((SkullMeta) itemMeta, player);
item.setItemMeta(itemMeta);
}
}
@SuppressWarnings("deprecation")
public static void setOwningPlayer(@NotNull SkullMeta skullMeta, @NotNull OfflinePlayer player) {
try {
skullMeta.setOwningPlayer(player);
itemMeta.setOwningPlayer(player);
} catch (NoSuchMethodError e) {
skullMeta.setOwner(player.getName());
itemMeta.setOwner(player.getName());
}
item.setItemMeta(itemMeta);
}
}
@@ -1,9 +1,13 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
@@ -13,63 +17,83 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class CoordsFrame extends PageableFrame<ClanPlayer> {
public class CoordsFrame extends SCFrame {
private final List<ClanPlayer> allMembers;
private final Paginator<ClanPlayer> paginator;
private final List<ClanPlayer> allMembers;
private final Paginator paginator;
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
public CoordsFrame(Player viewer, SCFrame parent, Clan subject) {
super(parent, viewer);
allMembers = VanishUtils.getNonVanished(getViewer(), subject);
allMembers.sort((cp1, cp2) -> Boolean.compare(cp1.isLeader(), cp2.isLeader()));
paginator = new Paginator<>(getPageSize(), allMembers);
}
paginator = new Paginator(getSize() - 9, allMembers);
}
@Override
public void createComponents() {
super.createComponents();
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.playerdetails.player.title", ClanPlayer::getName)
.withLoreKey("gui.coords.player.lore.distance", cp -> {
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
return (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
}).withLoreKey("gui.coords.player.lore.coords", this::getBlocks)
.withLoreKey("gui.coords.player.lore.world", cp ->
Objects.requireNonNull(cp.toPlayer()).getWorld().getName())
.withOwningPlayer(ClanPlayer::toPlayer)
.withListener(ClickType.LEFT, cp -> () -> {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer));
}, RankPermission.COORDS).build();
addAll(list);
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
private int[] getBlocks(ClanPlayer cp) {
int[] blocks = new int[3];
Location location = Objects.requireNonNull(cp.toPlayer()).getLocation();
blocks[0] = location.getBlockX();
blocks[1] = location.getBlockY();
blocks[2] = location.getBlockZ();
return blocks;
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
ClanPlayer cp = allMembers.get(i);
Location cpLoc = Objects.requireNonNull(cp.toPlayer()).getLocation();
int distance = (int) Math.ceil(cpLoc.toVector().distance(getViewer().getLocation().toVector()));
@Override
public Paginator<ClanPlayer> getPaginator() {
return paginator;
}
SCComponent c = new SCComponentImpl(lang("gui.playerdetails.player.title",getViewer(), cp.getName()),
Arrays.asList(lang("gui.coords.player.lore.distance",getViewer(), distance),
lang("gui.coords.player.lore.coords",getViewer(), cpLoc.getBlockX(),
cpLoc.getBlockY(), cpLoc.getBlockZ()),
lang("gui.coords.player.lore.world",getViewer(), Objects.requireNonNull(cpLoc.getWorld()).getName())),
XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
c.setLorePermission(RankPermission.COORDS);
add(c);
slot++;
}
}
@Override
@NotNull
public String getTitle() {
return lang("gui.coords.title", getViewer());
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
@NotNull
public String getTitle() {
return lang("gui.coords.title",getViewer());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -1,20 +1,18 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -22,53 +20,87 @@ import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_INVITE_PRICE;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_PURCHASE_CLAN_INVITE;
public class InviteFrame extends PageableFrame<Player> {
public class InviteFrame extends SCFrame {
private final Paginator<Player> paginator;
private final SimpleClans plugin;
private final Paginator paginator;
private final SimpleClans plugin;
private final List<Player> players;
public InviteFrame(SCFrame parent, Player viewer) {
super(parent, viewer);
this.plugin = SimpleClans.getInstance();
ClanManager cm = plugin.getClanManager();
List<Player> players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
.collect(Collectors.toList());
paginator = new Paginator<>(getPageSize(), players);
}
public InviteFrame(SCFrame parent, Player viewer) {
super(parent, viewer);
this.plugin = SimpleClans.getInstance();
ClanManager cm = plugin.getClanManager();
players = plugin.getServer().getOnlinePlayers().stream().filter(p -> cm.getClanPlayer(p) == null)
.collect(Collectors.toList());
paginator = new Paginator(getSize() - 9, players.size());
@Override
public void createComponents() {
super.createComponents();
SettingsManager settings = plugin.getSettingsManager();
double price = settings.is(ECONOMY_PURCHASE_CLAN_INVITE) ? settings.getDouble(ECONOMY_INVITE_PRICE) : 0;
}
ListBuilder<Player> builder = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.invite.player.title", Player::getName)
.withOwningPlayer(p -> Bukkit.getOfflinePlayer(p.getUniqueId()))
.withListener(ClickType.LEFT, this::invite, RankPermission.INVITE);
@Override
public void createComponents() {
addHeader();
if (price != 0) {
String formattedPrice = CurrencyFormat.format(price);
builder.withLoreKey("gui.invite.player.price.lore", p -> formattedPrice);
}
builder.withLoreKey("gui.invite.player.lore")
;
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
}
Player player = players.get(i);
SCComponent c = createPlayerComponent(player, slot);
add(c);
slot++;
}
}
private Runnable invite(Player player) {
return () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName());
}
@NotNull
private SCComponent createPlayerComponent(@NotNull Player player, int slot) {
double price = plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE) ? plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE) : 0;
List<String> lore = new ArrayList<>();
if (price != 0) lore.add(lang("gui.invite.player.price.lore", getViewer(), price));
lore.add(lang("gui.invite.player.lore", getViewer()));
@Override
public Paginator<Player> getPaginator() {
return paginator;
}
SCComponent c = new SCComponentImpl(
lang("gui.invite.player.title", getViewer(), player.getName()), lore, XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT, () -> InventoryController.runSubcommand(getViewer(), "invite", false, player.getName()));
c.setPermission(ClickType.LEFT, RankPermission.INVITE);
return c;
}
@Override
public @NotNull String getTitle() {
return lang("gui.invite.title", getViewer());
}
public void addHeader() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.invite.title",getViewer());
}
@Override
public int getSize() {
return 3 * 9;
}
}
@@ -1,32 +1,38 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class LanguageSelectorFrame extends PageableFrame<Locale> {
public class LanguageSelectorFrame extends SCFrame {
private final ClanPlayer clanPlayer;
private final SimpleClans plugin;
private final Paginator<Locale> paginator;
private final Paginator paginator;
private final List<Locale> languages;
public LanguageSelectorFrame(@Nullable SCFrame parent, @NotNull Player viewer) {
super(parent, viewer);
plugin = SimpleClans.getInstance();
clanPlayer = plugin.getClanManager().getCreateClanPlayer(viewer.getUniqueId());
List<Locale> languages = LanguageResource.getAvailableLocales();
paginator = new Paginator<>(getPageSize(), languages);
languages = LanguageResource.getAvailableLocales();
paginator = new Paginator(getSize() - 9, languages);
}
@Override
@@ -39,37 +45,43 @@ public class LanguageSelectorFrame extends PageableFrame<Locale> {
}
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.languageselector.language.title",
loc -> loc.toLanguageTag().replace("-", "_"))
.withLoreKey("gui.languageselector.language.lore.left.click")
.withLoreKey("gui.languageselector.language.lore.translation.status", LanguageResource::getTranslationStatus)
.withLoreLine(loc -> !loc.equals(Locale.ENGLISH)
? lang("gui.languageselector.language.lore.right.click", getViewer()) : "")
.withListener(ClickType.LEFT, this::setLocale, (String) null)
.withListener(ClickType.RIGHT, this::translate, (String) null).build();
addAll(list);
public int getSize() {
return 3 * 9;
}
private Runnable setLocale(Locale locale) {
return () -> {
@Override
public void createComponents() {
addHeader();
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
Locale locale = languages.get(i);
addLanguage(slot, locale);
slot++;
}
}
private void addLanguage(int slot, Locale locale) {
SCComponent c = new SCComponentImpl.Builder(XMaterial.PAPER)
.withDisplayName(lang("gui.languageselector.language.title", getViewer(), locale.toLanguageTag().replace("-", "_")))
.withSlot(slot).withLore(
Arrays.asList(lang("gui.languageselector.language.lore.left.click", getViewer()),
lang("gui.languageselector.language.lore.translation.status", getViewer(),
LanguageResource.getTranslationStatus(locale)),
!locale.equals(Locale.ENGLISH) ?
lang("gui.languageselector.language.lore.right.click", getViewer()) : ""))
.build();
c.setListener(ClickType.LEFT, () -> {
clanPlayer.setLocale(locale);
plugin.getStorageManager().updateClanPlayer(clanPlayer);
InventoryDrawer.open(this);
};
}
private Runnable translate(Locale locale) {
return () -> {
if (!locale.equals(Locale.ENGLISH)) {
});
if (!locale.equals(Locale.ENGLISH)) {
c.setListener(ClickType.RIGHT, () -> {
getViewer().sendMessage(lang("click.to.help.translating", getViewer(), getCrowdinLink(locale)));
getViewer().closeInventory();
}
};
});
}
add(c);
}
private String getCrowdinLink(@NotNull Locale locale) {
@@ -85,9 +97,31 @@ public class LanguageSelectorFrame extends PageableFrame<Locale> {
return base + locale.toLanguageTag();
}
@Override
public Paginator<Locale> getPaginator() {
return paginator;
public void addHeader() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
}
@@ -1,28 +1,30 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.PageableFrame;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponent;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl.ListBuilder;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCComponentImpl;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class LeaderboardFrame extends PageableFrame<ClanPlayer> {
public class LeaderboardFrame extends SCFrame {
private final Paginator<ClanPlayer> paginator;
private final Paginator paginator;
private final List<ClanPlayer> clanPlayers;
private final RankingNumberResolver<ClanPlayer, BigDecimal> rankingResolver;
@@ -34,35 +36,58 @@ public class LeaderboardFrame extends PageableFrame<ClanPlayer> {
rankingResolver = new RankingNumberResolver<>(clanPlayers, c -> KDRFormat.toBigDecimal(c.getKDR()), false,
plugin.getSettingsManager().getRankingType());
paginator = new Paginator<>(getPageSize(), this.clanPlayers);
paginator = new Paginator(getSize() - 9, this.clanPlayers);
}
@Override
public void createComponents() {
super.createComponents();
List<SCComponent> list = new ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.leaderboard.player.title", rankingResolver::getRankingNumber, ClanPlayer::getName)
.withListener(ClickType.LEFT, this::openDetails, (String) null)
.withLorePermission("simpleclans.anyone.leaderboard")
.withLoreLine(cp ->
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
: lang("gui.playerdetails.player.lore.clan", getViewer()
))
.withLoreKey("gui.playerdetails.player.lore.kdr", cp -> KDRFormat.format(cp.getKDR()))
.withLoreKey("gui.playerdetails.player.lore.last.seen", cp -> cp.getLastSeenString(getViewer()))
.withOwningPlayer(cp -> Bukkit.getOfflinePlayer(cp.getUniqueId())).build();
addAll(list);
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 2, getViewer()));
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
ClanPlayer cp = clanPlayers.get(i);
SCComponent c = new SCComponentImpl(
lang("gui.leaderboard.player.title", getViewer(),
rankingResolver.getRankingNumber(cp), cp.getName()),
Arrays.asList(
cp.getClan() == null ? lang("gui.playerdetails.player.lore.noclan", getViewer())
: lang("gui.playerdetails.player.lore.clan", getViewer(),
cp.getClan().getColorTag(), cp.getClan().getName()),
lang("gui.playerdetails.player.lore.kdr", getViewer(), KDRFormat.format(cp.getKDR())),
lang("gui.playerdetails.player.lore.last.seen", getViewer(), cp.getLastSeenString(getViewer()))),
XMaterial.PLAYER_HEAD, slot);
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(cp.getUniqueId());
Components.setOwningPlayer(c.getItem(), offlinePlayer);
c.setListener(ClickType.LEFT,
() -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this, offlinePlayer)));
c.setLorePermission("simpleclans.anyone.leaderboard");
add(c);
slot++;
}
}
private Runnable openDetails(ClanPlayer cp) {
return () -> InventoryDrawer.open(new PlayerDetailsFrame(getViewer(), this,
Bukkit.getOfflinePlayer(cp.getUniqueId())));
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
@Override
public Paginator<ClanPlayer> getPaginator() {
return paginator;
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
@@ -70,4 +95,9 @@ public class LeaderboardFrame extends PageableFrame<ClanPlayer> {
return lang("gui.leaderboard.title", getViewer(), clanPlayers.size());
}
@Override
public int getSize() {
return 6 * 9;
}
}
@@ -4,7 +4,6 @@ import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff.StaffFrame;
import net.sacredlabyrinth.phaed.simpleclans.utils.CurrencyFormat;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
@@ -94,9 +93,8 @@ public class MainFrame extends SCFrame {
List<String> resetKdrLore;
if (plugin.getSettingsManager().is(ECONOMY_PURCHASE_RESET_KDR)) {
double price = plugin.getSettingsManager().getDouble(ECONOMY_RESET_KDR_PRICE);
resetKdrLore = Arrays.asList(
lang("gui.main.reset.kdr.lore.price", getViewer(), CurrencyFormat.format(price)),
lang("gui.main.reset.kdr.lore.price", getViewer(), plugin.getSettingsManager().getString(ECONOMY_RESET_KDR_PRICE)),
lang("gui.main.reset.kdr.lore", getViewer()));
} else {
resetKdrLore = Collections.singletonList(lang("gui.main.reset.kdr.lore", getViewer()));
@@ -1,5 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.Paginator;
@@ -7,55 +8,80 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class PermissionsFrame extends PageableFrame<String> {
private final Rank rank;
private final Paginator<String> paginator;
public class PermissionsFrame extends SCFrame {
private final Rank rank;
private final Paginator paginator;
private final String[] permissions;
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
super(parent, viewer);
this.rank = rank;
paginator = new Paginator<>(getPageSize(), new ArrayList<>(rank.getPermissions()));
}
public PermissionsFrame(SCFrame parent, Player viewer, Rank rank) {
super(parent, viewer);
this.rank = rank;
permissions = rank.getPermissions().toArray(new String[0]);
paginator = new Paginator(getSize() - 9, permissions.length);
}
@Override
public void createComponents() {
super.createComponents();
@Override
public void createComponents() {
for (int slot = 0; slot < 9; slot++) {
if (slot == 2 || slot == 4 || slot == 6 || slot == 7)
continue;
add(Components.getPanelComponent(slot));
}
SCComponent add = new SCComponentImpl.Builder(getConfig(), "add")
.withViewer(getViewer())
.withDisplayNameKey("gui.permissions.add.title")
.build();
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(add);
add(Components.getBackComponent(getParent(), 2, getViewer()));
List<SCComponent> list = new SCComponentImpl.ListBuilder<>(getConfig(), "list", paginator.getCurrentElements())
.withViewer(getViewer())
.withDisplayNameKey("gui.permissions.permission.title", p -> p)
.withLoreKey("gui.permissions.permission.lore")
.withListener(ClickType.RIGHT, this::removePermission, "simpleclans.leader.rank.permissions.remove")
.build();
addAll(list);
}
SCComponent add = new SCComponentImpl(lang("gui.permissions.add.title",getViewer()), null, XMaterial.WHITE_WOOL,
4);
add.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new AddPermissionFrame(this, getViewer(), rank)));
add.setPermission(ClickType.LEFT, "simpleclans.leader.rank.permissions.add");
add(add);
private Runnable removePermission(String permission) {
return () -> InventoryController.runSubcommand(getViewer(),
"rank permissions remove", true, rank.getName(), permission);
}
add(Components.getPreviousPageComponent(6, this::previousPage, paginator, getViewer()));
add(Components.getNextPageComponent(7, this::nextPage, paginator, getViewer()));
@Override
public Paginator<String> getPaginator() {
return paginator;
}
int slot = 9;
for (int i = paginator.getMinIndex(); paginator.isValidIndex(i); i++) {
@Override
public @NotNull String getTitle() {
return lang("gui.permissions.title", getViewer(), rank.getName());
}
String permission = permissions[i];
SCComponent c = new SCComponentImpl(lang("gui.permissions.permission.title",getViewer(), permission),
Collections.singletonList(lang("gui.permissions.permission.lore",getViewer())), XMaterial.PAPER, slot);
c.setListener(ClickType.RIGHT, () -> InventoryController.runSubcommand(getViewer(),
"rank permissions remove", true, rank.getName(), permission));
c.setPermission(ClickType.RIGHT, "simpleclans.leader.rank.permissions.remove");
add(c);
slot++;
}
}
private void previousPage() {
if (paginator.previousPage()) {
updateFrame();
}
}
private void nextPage() {
if (paginator.nextPage()) {
updateFrame();
}
}
private void updateFrame() {
InventoryDrawer.open(this);
}
@Override
public @NotNull String getTitle() {
return lang("gui.permissions.title",getViewer(), rank.getName());
}
@Override
public int getSize() {
return 3 * 9;
}
}
@@ -112,7 +112,7 @@ public class ClanDetailsFrame extends SCFrame {
}
private void addBank() {
List<String> lore = Collections.singletonList(lang("gui.clandetails.bank.balance.lore", getViewer(), clan.getBalanceFormatted()));
List<String> lore = Collections.singletonList(lang("gui.clandetails.bank.balance.lore", getViewer(), clan.getBalance()));
SCComponent bank = new SCComponentImpl(lang("gui.clandetails.bank.title", getViewer()), lore, XMaterial.GOLD_INGOT, 40);
add(bank);
@@ -1,8 +1,10 @@
package net.sacredlabyrinth.phaed.simpleclans.ui.frames.staff;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.Components;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.jetbrains.annotations.NotNull;
@@ -23,9 +25,20 @@ public class StaffFrame extends SCFrame {
return lang("gui.staff.title", getViewer());
}
@Override
public int getSize() {
return 3 * 9;
}
@Override
public void createComponents() {
super.createComponents();
for (int slot = 0; slot < 9; slot++) {
if (slot == 4)
continue;
add(Components.getPanelComponent(slot));
}
add(Components.getBackComponent(getParent(), 4, getViewer()));
addClans();
addPlayers();
addGlobalFf();
@@ -33,11 +46,10 @@ public class StaffFrame extends SCFrame {
}
private void addClans() {
SCComponent clanList = new SCComponentImpl.Builder(getConfig(), "clans")
.withViewer(getViewer())
.withDisplayNameKey("gui.main.clan.list.title")
.withLoreKey("gui.staff.clan.list.lore.left.click")
.withLoreKey("gui.staff.clan.list.lore.right.click").build();
SCComponent clanList = new SCComponentImpl.Builder(XMaterial.PURPLE_BANNER)
.withDisplayName(lang("gui.main.clan.list.title", getViewer())).withSlot(9)
.withLoreLine(lang("gui.staff.clan.list.lore.left.click", getViewer()))
.withLoreLine(lang("gui.staff.clan.list.lore.right.click", getViewer())).build();
clanList.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
Type.ALL, null)));
clanList.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new ClanListFrame(this, getViewer(),
@@ -46,19 +58,19 @@ public class StaffFrame extends SCFrame {
}
private void addPlayers() {
SCComponent players = new SCComponentImpl.Builder(getConfig(), "players")
.withViewer(getViewer())
.withDisplayNameKey("gui.staff.player.list.title")
.withLoreKey("gui.staff.player.list.lore.left.click")
.withLoreKey("gui.staff.player.list.lore.right.click").build();
SCComponent players = new SCComponentImpl.Builder(XMaterial.WHITE_BANNER)
.withDisplayName(lang("gui.staff.player.list.title", getViewer())).withSlot(10)
.withLoreLine(lang("gui.staff.player.list.lore.left.click", getViewer()))
.withLoreLine(lang("gui.staff.player.list.lore.right.click", getViewer())).build();
players.setListener(ClickType.LEFT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, false)));
players.setListener(ClickType.RIGHT, () -> InventoryDrawer.open(new PlayerListFrame(getViewer(), this, true)));
add(players);
}
private void addReload() {
SCComponent reload = new SCComponentImpl.Builder(getConfig(), "reload").withViewer(getViewer())
.withDisplayNameKey("gui.staff.reload.title").withLoreKey("gui.staff.reload.lore").build();
SCComponent reload = new SCComponentImpl.Builder(XMaterial.SPAWNER)
.withDisplayName(lang("gui.staff.reload.title", getViewer())).withSlot(17)
.withLoreLine(lang("gui.staff.reload.lore", getViewer())).build();
reload.setPermission(ClickType.LEFT, "simpleclans.admin.reload");
reload.setConfirmationRequired(ClickType.LEFT);
reload.setListener(ClickType.LEFT, () ->
@@ -70,14 +82,18 @@ public class StaffFrame extends SCFrame {
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
boolean globalffAllowed = sm.is(GLOBAL_FRIENDLY_FIRE);
String status = globalffAllowed ? lang("allowed", getViewer()) : lang("auto", getViewer());
SCComponent globalFf = new SCComponentImpl.Builder(getConfig(), "global_ff").withViewer(getViewer())
.withDisplayNameKey("gui.staff.global.ff.title")
.withLoreKey("gui.staff.global.ff.lore.status", status)
.withLoreKey("gui.staff.global.ff.lore.toggle").build();
SCComponent globalFf = new SCComponentImpl.Builder(XMaterial.DIAMOND_SWORD).withSlot(12)
.withDisplayName(lang("gui.staff.global.ff.title", getViewer()))
.withLoreLine(lang("gui.staff.global.ff.lore.status", getViewer(), status))
.withLoreLine(lang("gui.staff.global.ff.lore.toggle", getViewer())).build();
globalFf.setPermission(ClickType.LEFT, "simpleclans.mod.globalff");
globalFf.setListener(ClickType.LEFT, () -> {
String arg = globalffAllowed ? "auto" : "allow";
String arg;
if (globalffAllowed) {
arg = "auto";
} else {
arg = "allow";
}
InventoryController.runSubcommand(getViewer(), "mod globalff", true, arg);
});
add(globalFf);
@@ -150,17 +150,16 @@ public class ChatUtils {
}
public static void applyLastColorToFollowingLines(@NotNull List<String> lines) {
if (lines.get(0).isEmpty() || lines.get(0).charAt(0) != COLOR_CHAR) {
if (lines.get(0).length() == 0 || lines.get(0).charAt(0) != COLOR_CHAR) {
lines.set(0, ChatColor.WHITE + lines.get(0));
}
for (int i = 1; i < lines.size(); i++) {
final String pLine = lines.get(i - 1);
final String subLine = lines.get(i);
if (subLine.isEmpty() || subLine.charAt(0) != COLOR_CHAR) {
if (subLine.length() == 0 || subLine.charAt(0) != COLOR_CHAR) {
lines.set(i, getLastColors(pLine) + subLine);
}
}
}
}
@@ -1,21 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.utils;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import java.text.NumberFormat;
public class CurrencyFormat {
private static final SimpleClans plugin = SimpleClans.getInstance();
private static final NumberFormat fallbackFormat = NumberFormat.getCurrencyInstance();
public static String format(double value) {
PermissionsManager permissionsManager = plugin.getPermissionsManager();
if (permissionsManager.hasEconomy()) {
return permissionsManager.format(value);
}
return fallbackFormat.format(value);
}
}
@@ -1,29 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.utils;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import java.text.SimpleDateFormat;
import java.util.Date;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DATE_TIME_PATTERN;
public class DateFormat {
private static final SimpleClans plugin = SimpleClans.getInstance();
private static SimpleDateFormat format;
static {
String pattern = plugin.getSettingsManager().getString(DATE_TIME_PATTERN);
try {
format = new SimpleDateFormat(pattern);
} catch (IllegalArgumentException ex) {
plugin.getLogger().warning(String.format("%s is not a valid pattern!", (pattern)));
format = new SimpleDateFormat("HH:mm - dd/MM/yyyy");
}
}
public static String formatDateTime(long date) {
return format.format(new Date(date));
}
}
@@ -2,21 +2,19 @@ package net.sacredlabyrinth.phaed.simpleclans.utils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
*
* @author RoinujNosde
*
*/
public class Paginator<T> {
public class Paginator {
private int currentPage;
private final int sizePerPage;
private int totalElements;
private List<T> collection;
private Collection<?> collection;
public Paginator(int sizePerPage, int totalElements) {
if (sizePerPage < 1) {
@@ -29,17 +27,12 @@ public class Paginator<T> {
this.totalElements = totalElements;
}
@Deprecated
public Paginator(int sizePerPage, @NotNull Collection<T> collection) {
this(sizePerPage, new ArrayList<>(collection));
}
public Paginator(int sizePerPage, @NotNull List<T> list) {
public Paginator(int sizePerPage, @NotNull Collection<?> collection) {
if (sizePerPage < 1) {
throw new IllegalArgumentException("sizePerPage cannot be less than 1");
}
this.sizePerPage = sizePerPage;
this.collection = list;
this.collection = collection;
}
/**
@@ -88,21 +81,7 @@ public class Paginator<T> {
public int getCurrentPage() {
return currentPage;
}
/**
*
* @return the elements in the current page
*
* @throws IllegalStateException if the underlining collection is null
*/
public @NotNull List<T> getCurrentElements() throws IllegalStateException {
if (collection == null) {
throw new IllegalStateException("the collection is null");
}
int maxIndex = Math.min(getMaxIndex(), collection.size());
return collection.subList(getMinIndex(), maxIndex);
}
/**
* Increases the page number if there are elements to display
*
@@ -111,11 +90,11 @@ public class Paginator<T> {
* </p>
*/
public boolean nextPage() {
boolean hasNext = hasNextPage();
if (hasNext) {
currentPage++;
if (!hasNextPage()) {
return false;
}
return hasNext;
currentPage++;
return true;
}
/**
@@ -133,11 +112,11 @@ public class Paginator<T> {
* </p>
*/
public boolean previousPage() {
boolean hasPrevious = hasPreviousPage();
if (hasPrevious) {
if (hasPreviousPage()) {
currentPage--;
return true;
}
return hasPrevious;
return false;
}
/**
@@ -47,7 +47,7 @@ public class UpdateChecker {
connection.addRequestProperty("User-Agent", userAgent);
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
JsonElement parse = JsonParser.parseReader(reader);
JsonElement parse = new JsonParser().parse(reader);
if (parse.isJsonObject()) {
String latestVersion = parse.getAsJsonObject().get("name").getAsString();
@@ -1,167 +1,114 @@
package net.sacredlabyrinth.phaed.simpleclans.uuid;
import com.google.common.collect.ImmutableList;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
import java.util.concurrent.Callable;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Collections.singletonList;
/**
* @author evilmidget38 (previous author)
* @see <a href="http://forums.bukkit.org/threads/250926/">Bukkit Thread</a>
* @see <a href="http://web.archive.org/web/20140909143249/https://gist.github.com/evilmidget38/26d70114b834f71fb3b4">Github Gist</a>
* @author evilmidget38
*
* <a href="http://forums.bukkit.org/threads/250926/">...</a>
*
* <a href="https://gist.github.com/evilmidget38/26d70114b834f71fb3b4">...</a>
*/
public final class UUIDFetcher {
private static final String PROFILE_URL = "https://api.minetools.eu/uuid/";
private static final String FALLBACK_PROFILE_URL = "https://api.mojang.com/users/profiles/minecraft/";
private static final int BATCH_SIZE = 100;
private static final Gson gson = new Gson();
public class UUIDFetcher implements Callable<Map<String, UUID>> {
private UUIDFetcher() {
// Private constructor to prevent instantiation
private static final double PROFILES_PER_REQUEST = 100;
private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft";
private final Gson gson = new Gson();
private final List<String> names;
private final boolean rateLimiting;
public UUIDFetcher(List<String> names, boolean rateLimiting) {
this.names = ImmutableList.copyOf(names);
this.rateLimiting = rateLimiting;
}
/**
* Fetches UUIDs for a list of ClanPlayer objects.
* This method extracts the names from the ClanPlayer objects and fetches their corresponding UUIDs.
*
* @param clanPlayers A list of ClanPlayer objects for which to fetch UUIDs
* @return A Map where the keys are player names and the values are their corresponding UUIDs
* @throws InterruptedException If the operation is interrupted while waiting
* @throws ExecutionException If the computation threw an exception
*/
public static Map<String, UUID> fetchUUIDsForClanPlayers(List<ClanPlayer> clanPlayers) throws InterruptedException, ExecutionException {
List<String> names = clanPlayers.stream().map(ClanPlayer::getName).collect(Collectors.toList());
return fetchUUIDsConcurrently(names);
public UUIDFetcher(List<String> names) {
this(names, true);
}
/**
* Fetches the UUID for a single player name.
* This method is a convenience wrapper around the batch UUID fetching process.
*
* @param name The name of the player whose UUID is to be fetched
* @return The UUID of the specified player, or null if not found
* @throws InterruptedException If the operation is interrupted while waiting
* @throws ExecutionException If the computation threw an exception
*/
public static @Nullable UUID getUUIDOf(@NotNull String name) throws InterruptedException, ExecutionException {
return fetchUUIDsConcurrently(singletonList(name)).get(name);
private static void writeBody(HttpURLConnection connection, String body) throws IOException {
OutputStream stream = connection.getOutputStream();
stream.write(body.getBytes(UTF_8));
stream.flush();
stream.close();
}
// Fetch UUIDs in batches with concurrency
private static Map<String, UUID> fetchUUIDsConcurrently(List<String> names) throws InterruptedException, ExecutionException {
Map<String, UUID> resultMap = new ConcurrentHashMap<>();
ExecutorService executorService = Executors.newFixedThreadPool(10); // Thread pool for parallel execution
List<Callable<Map<String, UUID>>> tasks = new ArrayList<>();
// Split the list of names into batches and create tasks
for (int i = 0; i < names.size(); i += BATCH_SIZE) {
List<String> batch = names.subList(i, Math.min(i + BATCH_SIZE, names.size()));
tasks.add(createTask(batch));
}
// Execute all tasks in parallel
List<Future<Map<String, UUID>>> futures = executorService.invokeAll(tasks);
// Collect results from all batches
for (Future<Map<String, UUID>> future : futures) {
resultMap.putAll(future.get()); // Merge each batch result into the final result map
}
// Shutdown the executor service
executorService.shutdownNow();
if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) {
SimpleClans.getInstance().getLogger().warning("Executor did not terminate in time.");
}
return resultMap;
}
// Create connection for each name
private static HttpURLConnection createConnection(@NotNull URL url) throws IOException {
private static HttpURLConnection createConnection() throws IOException {
URL url = new URL(PROFILE_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
return connection;
}
// Get UUID by name
private static @NotNull UUID getUUID(@NotNull String id) {
private static UUID getUUID(String id) {
return UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" + id.substring(20, 32));
}
// Handle single batch of names
private static Map<String, UUID> fetchUUIDsForBatch(List<String> batch) {
Map<String, UUID> uuidMap = new HashMap<>();
public static byte[] toBytes(UUID uuid) {
ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]);
byteBuffer.putLong(uuid.getMostSignificantBits());
byteBuffer.putLong(uuid.getLeastSignificantBits());
return byteBuffer.array();
}
for (String name : batch) {
uuidMap.computeIfAbsent(name, k -> {
try {
return tryFetchUUIDWithFallback(k);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
public static UUID fromBytes(byte[] array) {
if (array.length != 16) {
throw new IllegalArgumentException("Illegal byte array length: " + array.length);
}
ByteBuffer byteBuffer = ByteBuffer.wrap(array);
long mostSignificant = byteBuffer.getLong();
long leastSignificant = byteBuffer.getLong();
return new UUID(mostSignificant, leastSignificant);
}
public static UUID getUUIDOf(String name) throws IOException, InterruptedException {
return new UUIDFetcher(Collections.singletonList(name)).call().get(name);
}
public static UUID getUUIDOfThrottled(String name) throws IOException, InterruptedException {
return new UUIDFetcher(Collections.singletonList(name), true).call().get(name);
}
@Override
public Map<String, UUID> call() throws IOException, InterruptedException {
Map<String, UUID> uuidMap = new HashMap<>();
int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST);
for (int i = 0; i < requests; i++) {
HttpURLConnection connection = createConnection();
List<String> namesToFetch = names.subList(i * 100, Math.min((i + 1) * 100, names.size()));
String body = gson.toJson(namesToFetch);
writeBody(connection, body);
JsonArray array = gson.fromJson(new InputStreamReader(connection.getInputStream(), UTF_8), JsonArray.class);
for (JsonElement profile : array) {
JsonObject jsonProfile = profile.getAsJsonObject();
String id = jsonProfile.get("id").getAsString();
String name = jsonProfile.get("name").getAsString();
UUID uuid = UUIDFetcher.getUUID(id);
uuidMap.put(name, uuid);
}
if (rateLimiting && i != requests - 1) {
Thread.sleep(10L);
}
}
return uuidMap;
}
private static @Nullable UUID tryFetchUUIDWithFallback(@NotNull String name) throws IOException {
try {
// Try the primary URL
return fetchUUID(URI.create(PROFILE_URL + name).toURL());
} catch (IOException e) {
// If the primary URL fails, attempt the fallback URL
SimpleClans.debug(String.format("Failed to fetch %s UUID by MineTools API. Trying to use Mojang API instead...", name));
return fetchUUID(URI.create(FALLBACK_PROFILE_URL + name).toURL());
}
}
private static @Nullable UUID fetchUUID(@NotNull URL url) throws IOException {
HttpURLConnection connection = createConnection(url);
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException(String.format("Unexpected response code: %d. Response: %s",
connection.getResponseCode(), connection.getResponseMessage()));
}
JsonObject response = gson.fromJson(new InputStreamReader(connection.getInputStream(), UTF_8), JsonObject.class);
if (!response.has("id")) {
return null;
}
JsonElement id = response.get("id");
JsonElement status = response.get("status");
if (id.isJsonNull() ||
(response.has("status") && status.getAsString().equals("ERR"))) {
throw new IOException(String.format("Invalid UUID: %s", id));
}
return getUUID(id.getAsString());
}
// Callable task for batch processing
private static Callable<Map<String, UUID>> createTask(List<String> batch) {
return () -> fetchUUIDsForBatch(batch);
}
}
}
@@ -25,7 +25,6 @@ public class UUIDMigration {
}
}
@Deprecated
public static UUID getForcedPlayerUUID(String playerName) {
Player player = Bukkit.getPlayerExact(playerName);
+1 -6
View File
@@ -56,13 +56,11 @@ settings:
past-clans-limit: 10
username-regex: '(\.|\*){0,1}[a-zA-Z0-9_$]{1,16}'
tag-regex: ''
date-time-pattern: 'HH:mm - dd/MM/yyyy'
bungee-servers: []
war-and-protection:
war-enabled: false
land-sharing: true
protection-providers:
- Landlord4Provider
- WorldGuardProvider
- WorldGuard6Provider
- GriefPreventionProvider
listeners:
@@ -149,7 +147,6 @@ clan:
max-description-length: 120
min-description-length: 10
max-members: 25
unverified-max-members: 10
confirmation-for-promote: false
trust-members-by-default: false
confirmation-for-demote: false
@@ -169,7 +166,6 @@ clan:
- treasurer:
display-name: "&6Treasurer"
permissions: [ bank.balance, bank.deposit, bank.withdraw ]
default-rank: "recruit"
tasks:
collect-upkeep:
@@ -246,7 +242,6 @@ mysql:
enable: false
password: ''
database: ''
table_prefix: 'sc_'
permissions:
auto-group-groupname: false
YourClanNameHere:
@@ -1,27 +0,0 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: CYAN_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,24 +0,0 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,27 +0,0 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: RED_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
-31
View File
@@ -1,31 +0,0 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: CYAN_BANNER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,27 +0,0 @@
rows: 6
components:
list:
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: BLACK_BANNER
enabled: true
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
slots: [0, 1, 3, 4, 5, 8]
enabled: true
material: GRAY_STAINED_GLASS_PANE
-31
View File
@@ -1,31 +0,0 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
-28
View File
@@ -1,28 +0,0 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: CYAN_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,24 +0,0 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 4, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,27 +0,0 @@
rows: 6
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53 ]
material: PLAYER_HEAD
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
decorations:
panels:
slots: [0, 1, 3, 4, 5, 8]
enabled: true
material: GRAY_STAINED_GLASS_PANE
@@ -1,28 +0,0 @@
rows: 3
components:
list:
enabled: true
slots: [ 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26 ]
material: PAPER
next_page:
enabled: true
slot: 7
material: STONE_BUTTON
previous_page:
enabled: true
slot: 6
material: STONE_BUTTON
back:
enabled: true
slot: 2
material: ARROW
add:
enabled: true
slot: 4
material: WHITE_WOOL
decorations:
panels:
enabled: true
slots: [ 0, 1, 3, 5, 8 ]
material: GRAY_STAINED_GLASS_PANE
@@ -1,27 +0,0 @@
rows: 3
components:
decorations:
panels:
enabled: true
slots: [ 0, 1, 2, 3, 5, 6, 7, 8 ]
material: GRAY_STAINED_GLASS_PANE
clans:
enabled: true
material: PURPLE_BANNER
slot: 9
players:
enabled: true
material: WHITE_BANNER
slot: 10
reload:
enabled: true
material: SPAWNER
slot: 17
global_ff:
enabled: true
material: DIAMOND_SWORD
slot: 12
back:
enabled: true
slot: 4
material: ARROW
-3
View File
@@ -94,8 +94,6 @@ help.command=help
leave.command=leave
join.command=join
mute.command=mute
tag.completion=[tag]
name.completion=[name]
acf-core.parameter.amount=amount
acf-core.parameter.member=member
acf-core.parameter.rank=rank
@@ -418,7 +416,6 @@ inactive.0=Inactive: {0}
clan.commands=clan commands
you.can.only.modify.the.color.and.case.of.the.tag=You can only modify the color and case of the tag
locale.has.been.changed=&cYour language has been changed
locale.is.prohibited=&cLanguage selection on the server is prohibited.
tag.changed.to.0=Tag changed to {0}
0.tag.changed.to.1=&bSuccessfully changed {0}''s tag to {1}
name.0=Name: {0}
+1 -12
View File
@@ -42,7 +42,6 @@ unassign.command=إلغاء التعيين
rival.command=منافس
bb.command=الى اللقاء
clear.command=امسح
rename.command=أعادة التسمية
toggle.command=تبديل
tag.command=العلامة
deposit.command=وديعة
@@ -58,7 +57,7 @@ fee.command=الرسوم
set.command=تعيين
purge.command=الإزالة
trust.command=موثوق به
untrust.command=غير موثوق
untrust.command=عدم الثقة
admin.command=المسؤول
mod.command=مشرف
promote.command=ترقية
@@ -78,28 +77,18 @@ regroup.command=إعادة تجميع
me.command=لي
tp.command=أنتقال
place.command=مرتبة
everyone.command=الجميع
leave.command=المغادرة
join.command=الانضمام
mute.command=كتم
acf-core.parameter.amount=القيمة
acf-core.parameter.member=عضو
acf-core.parameter.rank=الرتبة
acf-core.parameter.leader=القائد
acf-core.parameter.displayname=اسم العرض
acf-core.parameter.permission=الصلاحيات
acf-core.parameter.message=رسالة
acf-core.parameter.tag=العلامة
acf-core.parameter.name=الإسم
acf-core.parameter.fee=الرسوم
acf-core.parameter.description=الوصف
acf-core.parameter.player=لاعب
acf-core.parameter.clan=فريق
acf-core.parameter.type=النوع
alliances=إتحاد
coords=الأحداثيات
rivalries=المنافسات
leader=القائد
roster=القائمة
stats=الحالة
vitals=الحيوية
+1 -14
View File
@@ -163,7 +163,6 @@ command.description.war.end=Заканчвае вайну
command.description.resetkdr.everyone=Скідвае КДР усіх гульцоў
command.description.resetkdr.player=Скідвае КДР гульца
command.description.resetkdr=Скідвае ваш КДР
command.description.alliances=Паказвае спіс усіх саюзных кланаў
command.description.rank.permissions.add=Дае вызначанае права дадзенаму рангу
command.description.rank.permissions.remove=Забірае вызначанае права ў дадзенага рангу
home-set-menu=/{0} home set{1} - Усталяваць точку базы клана
@@ -222,18 +221,6 @@ denied.demotion={0} адмовіў паніжэнне {1}. Рашэнне не
membership.invitation={0} адмовіў запрашэнне ў клан
joined.the.clan={0} далучыўся да клана
signed.off.request.cancelled={0} выйшаў з сеткі. Запыт на {1} быў адмоўлены.
clan.deletion={0} адмовіў выдаленне клана. Рашэнне не было прынята.
has.been.disbanded=Клан {0} быў распушчаны
denied.the.promotion={0} адмовіў павышэнне {1}. Рашэнне не было прынята.
demoted.back.to.member={0} быў паніжаны назад да ўдзельніка
peace.agreement.denied=Заключэнне міра з {0} было адмоўлена
denied.to.make.peace={0} адмовіў у перамір'і з {1}
broken.the.rivalry={0} прыпыніў варожасць з кланам {1}
broken.the.rivalry.with={0} прыпыніў варожасць з кланам {1}
the.alliance.was.denied=Саюз з {0} быў адмоўлены
denied.an.alliance={0} адмовіў у саюзе з кланам {1}
accepted.an.alliance={0} прыняў саюз з {1}
created.an.alliance={0} заключыў саюз з {1}
# suppress inspection "TrailingSpacesInProperty"
player.not.a.member.of.any.clan=&cГулец не з'яўляецца ўдзельнікам ніякага клана
not.a.member.of.any.clan=Вы не з'яўляецеся ўдзельнікам ніякага клана
@@ -254,12 +241,12 @@ clan.wide.friendly.fire.blocked=Кланавы "агонь па сваім" за
clan.wide.friendly.fire.is.allowed=Кланавы "агонь па сваім" дазволены
you.are.the.only.member.online=Вы зараз адзіны ўдзельнік у сетцы
your.clan.color.tag.cannot.be.longer.than.characters=&cКаляровы тэг вашага клана ня можа быць быць даўжэй за {0} сімвалы/аў
clan.has.been.disbanded=Клан {0} быў распушчаны
add=дадаць
remove=прыбраць
allow=дазволіць
block=заблакаваць
auto=аўта
bb.days= дзён
gui.allies.title=Саюзнікі
gui.rivals.title=Супернікі
# suppress inspection "TrailingSpacesInProperty"
+9 -6
View File
@@ -303,6 +303,7 @@ has.joined={0} se připojil k {1}
proposing.to.end.the.rivalry={0} navrhuje ukončit rivalitu s {1}
proposing.an.alliance={0} navrhuje alianci s {1}
inviting.you.to.join={0} Vás pozval(a), abyste se připojil(a) do {1}
asking.for.the.deletion={0} žádá o odstranění klanu
asking.for.the.promotion={0} žádá o povýšení {1}
asking.for.the.demotion={0} žádá o degradaci {1}
# suppress inspection "TrailingSpacesInProperty"
@@ -329,6 +330,7 @@ you.have.already.voted=Již jsi hlasoval
has.voted.to.deny={0} hlasoval pro zamítnutí
view.next.page=Zadejte /{0} pro zobrazení další stránky.
voted.to.accept={0} hlasoval pro přijetí
bulletin.board.header={0}* {1}{2} nástěnka
has.been.disbanded.rivalry.ended={0} byl rozpuštěn. Rivalie skončila.
has.been.disbanded.alliance.ended={0} byl rozpuštěn. Aliance skončila.
clan.disbanded=Klan byl rozpuštěn
@@ -355,10 +357,16 @@ clan.wide.friendly.fire.blocked=V celém klanu byl zakázán friendly-fire
clan.wide.friendly.fire.is.allowed=V celém klanu byl povolen friendly-fire
you.are.the.only.member.online=Jste jediný člen online
your.clan.color.tag.cannot.be.longer.than.characters=&cBarevný tag tvého klanu nemůže být delší než {0} znaků
your.clan.tag.cannot.be.longer.than.characters=Barevný tag tvého klanu nemůže být delší než {0} znaků
your.clan.tag.must.be.longer.than.characters=Tvůj klan musí být delší než {0} znaků
your.tag.cannot.contain.the.following.colors=Tvůj tag nemůže obsahovat následující barvy\: {0}
your.tag.cannot.contain.color.codes=Tvůj tag nemůže obsahovat barevné kódy
you.cannot.set.colored.ranks=Nemůžeš nastavit barevné hodnosti
your.clan.name.cannot.be.longer.than.characters=Název tvého klanu nemůže být delší než {0} znaků
your.clan.name.must.be.longer.than.characters=Název tvého klanu musí být delší než {0} znaků
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=Tag vašeho klanu může obsahovat jenom písmena, čísla a barevné kódy
your.clan.name.cannot.contain.color.codes=Název vašeho klanu nemůže obsahovat barevné kódy
that.tag.name.is.disallowed=Název značky je zakázán
you.must.first.resign=Nejdříve musíte odstoupit od {0}
clan.with.this.tag.already.exists=Klan s tímto názvem již existuje
get.your.clan.verified.to.access.advanced.features=Pro přístup k pokročilým funkcím ověřte váš klan
@@ -366,12 +374,6 @@ clan.created=Klan {0} vytvořen
not.enough.leaders.online.to.vote.on.demotion=Není k dispozici dostatek vedoucích představitelů online aby mohli hlasovat o tomto snížení
player.is.not.a.leader.of.your.clan=CHráč není členem žádného klanu
clan.has.been.disbanded=Klan {0} byl rozpuštěn
the.player.is.already.member.of.another.clan=§4Tento hrac uz je vudce jineho klanu.
has.been.asked.to.join={0} byl nastaven na\: {1}
you.cannot.kick.yourself=Nemůžete vyhodit sami sebe
total.clans=Celkem klanů\:
legend=Legendární\:
kill.type.civilian=Způsob zabití\n\n
clan.0=Klan\: {0}
status.0=Status\: {0}
rank.0=Hodnost\: {0}
@@ -416,6 +418,7 @@ iron=železo
the.clan.cannot.be.rivaled=Klan nemůže být soupeřem
bboff=BB vypnuto
bbon=BB zapnuto
bb.days= dny
gui.allies.title=Spojenci
gui.rivals.title=Soupeř
# suppress inspection "TrailingSpacesInProperty"
+64 -81
View File
@@ -1,30 +1,30 @@
description.command=beschreibung
create.command=erstellen
description.command=Deschreibung
create.command=Erstellen
delete.command=lösche
rank.command=rang
rank.command=Rang
setdisplayname.command=setdisplayname
setdefault.command=setdefault
removedefault.command=removedefault
permissions.command=berechtigung
list.command=liste
balance.command=guthaben
permissions.command=Berechtigungen
list.command=Liste
balance.command=Guthaben
list.order.asc=aufsteigend
list.order.desc=absteigend
list.type.name=Name
list.type.kdr=kdr
list.type.size=größe
list.type.size=Größe
list.type.founded=gegründet
list.type.active=aktiv
land.command=land
break.command=abbauen
land.command=Land
break.command=Abbauen
interact.command=interagieren
place_block.command=place_block
damage.command=schaden
damage.command=Schaden
interact_entity.command=interact_entity
container.command=behälter
container.command=Behälter
confirm.command=bestätigen
profile.command=profil
roster.command=mitglieder
profile.command=Profil
roster.command=Mitglieder
lookup.command=suchen
leaderboard.command=rangliste
alliances.command=allianzen
@@ -33,7 +33,7 @@ vitals.command=vitale
coords.command=koordinaten
stats.command=stats
ally.command=verbündeter
add.command=hinzufügen
add.command=anlegen
remove.command=entfernen
allow.command=zulassen
block.command=blockieren
@@ -43,12 +43,10 @@ assign.command=zuweisen
unassign.command=aufheben
rival.command=rivale
bb.command=bb
display.command=anzeigen
clear.command=leeren
modtag.command=modtag
rename.command=umbenennen
toggle.command=umschalten
tag.command=markierung
tag.command=markieren
deposit.command=einzahlen
all.command=alles
withdraw.command=auszahlen
@@ -62,7 +60,7 @@ fee.command=gebühr
set.command=setzen
purge.command=bereinigen
trust.command=vertrauen
untrust.command=vertrauen_entziehen
untrust.command=vertrauen entziehen
admin.command=admin
mod.command=mod
promote.command=befördern
@@ -77,34 +75,34 @@ unban.command=unban
reload.command=reload
globalff.command=globalff
kills.command=kills
mostkilled.command=am_meisten_getötet
mostkilled.command=am meisten getötet
war.command=krieg
start.command=start
end.command=ende
home.command=basis
home.command=Basis
regroup.command=regroup
me.command=ich
tp.command=tp
setrank.command=setrank
place.command=platzieren
resetkdr.command=zurücksetzen_kdr
resetkdr.command=zurücksetzen kdr
everyone.command=jeder
setbanner.command=setbanner
help.command=hilfe
leave.command=verlassen
join.command=beitreten
mute.command=stummschalten
acf-core.parameter.amount=betrag
acf-core.parameter.amount=Betrag\:
acf-core.parameter.member=mitglieder
acf-core.parameter.rank=rang
acf-core.parameter.leader=anführer
acf-core.parameter.displayname=angezeigter_name
acf-core.parameter.rank=Rang
acf-core.parameter.leader=anfuehrer
acf-core.parameter.displayname=anzeigename
acf-core.parameter.permission=berechtigung
acf-core.parameter.message=nachricht
acf-core.parameter.tag=markierung
acf-core.parameter.tag=markieren
acf-core.parameter.name=Name
acf-core.parameter.fee=gebühr
acf-core.parameter.description=beschreibung
acf-core.parameter.description=Deschreibung
acf-core.parameter.player=spieler
acf-core.parameter.clan=clan
acf-core.parameter.type=typ
@@ -127,12 +125,12 @@ command.description.land.block.damage=Ermöglicht Clan-Mitgliedern, Schaden in I
command.description.stats=Zeigt die Mitgliederstatistik deines Clans an
command.description.rivalries=Zeigt alle Clan-Rivalitäten
command.description.mostkilled=Am meisten getötete Spieler (Server-weit)
command.description.kills=Anzahl deiner Tötungen oder eines anderen Spielers
command.description.kills=Anzahl deiner Kills oder eines anderen Spielers
command.description.lookup=Zeigt deine Informationen an
command.description.lookup.other=Zeigt die Informationen eines anderen Spielers an
command.description.leaderboard=Zeigt die Bestenliste
command.description.roster.other=Listet die Mitglieder eines anderen Clans auf
command.description.roster=Listet die Mitglieder deines Clans auf
command.description.roster.other=Listet Mitglieder eines anderen Clans auf
command.description.roster=Listet Mitglieder deines Clans auf
command.description.profile.other=Zeigt das Profil eines anderen Clans
command.description.profile=Zeigt das Profil deines Clans
command.description.vitals=Zeigt die Vitalwerte deines Clans und deiner Verbündeten an
@@ -157,12 +155,12 @@ command.description.unban=Entbannt einen Spieler von Clan-Befehlen
command.description.regroup.me=Gruppiert deine Gildenmitglieder an deinen Standort
command.description.regroup.home=Gruppiert deine Gildenmitglieder bei deiner Basis
command.description.home.tp=Teleportiert dich zu deiner Clan Basis
command.description.home.clear=Lösche die Basis deines Clans
command.description.home.set=Lege die Basis deines Clans fest
command.description.home.clear=Löscht die Basis deines Clans
command.description.home.set=Legt die Basis deines Clans fest
command.description.mod.home.set=Setzt die Basis eines Clans
command.description.mod.home.tp=Teleportiert dich zur Clan Basis
command.description.mod.home.tp=Teleportiert dich zu einer Clan Basis
command.description.rival.remove=Entfernt einen Rivalen
command.description.rival.add=Füge einen Rivalen hinzu
command.description.rival.add=Fügt Rivalen hinzu
command.description.ally.remove=Entfernt einen Verbündeten
command.description.kick=Wirf ein Mitglied aus deinem Clan
command.description.bb.display=Zeige das schwarze Brett deines Clans
@@ -174,7 +172,7 @@ command.description.mod.bb.post=Schreibe eine Nachricht auf das schwarze Brett d
command.description.place=Fügt einen Spieler dem Clan hinzu
command.description.reload=Lädt das Plugin und die Konfiguration neu
command.description.trust=Vertraue einem Clan-Mitglied
command.description.untrust=Vertrauen eines Clan-Mitgliedes zurückziehen
command.description.untrust=Vertrauen eines Clan-Mitglied zurückziehen
command.description.resign=Verlasse deinen Clan
command.description.help=Zeige die Hilfe an oder suche in ihr
command.description.ally.add=Eine Allianz hinzufügen
@@ -182,7 +180,7 @@ command.description.clan=Öffnet die GUI
command.description.disband=Löse deinen Clan auf
command.description.mod.disband=Löst einen Clan auf
command.description.mod.kick=Verbanne ein Mitglied aus deinem Clan
command.description.modtag.other=Ändert denn Tag eines Clans
command.description.modtag.other=Ändert das Tag eines Clans
command.description.modtag=Ändere deinen Clan-Tag
command.description.purge=Löscht die Daten von Spieler
command.description.setbanner=Setze den Banner deines Clans
@@ -198,42 +196,38 @@ command.description.bank.withdraw.amount=Hebe einen bestimmten Betrag von deinem
command.description.bank.admin.take=Nimmt einen Betrag an Geld von der Bank eines Clans
command.description.bank.deposit.all=Überweise dein komplettes Geld auf das Konto deines Clans
command.description.bank.deposit.amount=Überweise einen bestimmten Betrag auf das Konto deines Clans
command.description.bank.admin.give=Gibt einen Betrag an Geld, an die Bank eines Clans
command.description.bank.admin.set=Setzt einen Betrag an Geld, auf die Bank eines Clans
command.description.war.start=Starte einen Krieg mit einem anderen Clan
command.description.bank.admin.give=Gibt einen Betrag an Geld an die Bank eines Clans
command.description.bank.admin.set=Setzt einen Betrag an Geld auf die Bank eines Clans
command.description.war.start=Startet einen Krieg mit einem anderen Clan
command.description.war.end=Beende einen Clankrieg
command.description.resetkdr.everyone=Alle KDR zurücksetzen
command.description.resetkdr.player=KDR eines Spielers zurücksetzen
command.description.resetkdr=KDR zurücksetzen
command.description.admin.demote=Degradiert jeden Anführer von jedem Clan
command.description.demote=Degradiere einen Clanführer
command.description.demote=Degradiere einen Calnführer
command.description.admin.promote=Befördere jedes Mitglied von jedem Clan
command.description.promote=Befördere ein Mitglied zum Anführer
command.description.admin.permanent=Schalte den permanenten Status eines Verbündeten Clans um
command.description.toggle.bb=Schaltet an, ob das Bulletinboard angezeigt werden soll, wenn du dich anmeldest
command.description.toggle.invite=Schaltet um, ob Spieler dir eine Clan Einladung senden können
command.description.toggle.invite=Schaltet um, ob Spieler dir eine Clan-einladungen senden können
command.description.toggle.tag=Schaltet an, ob der Tag deines Clans neben deinem Namen angezeigt werden soll
command.description.toggle.deposit=Schalte um, ob Einzahlungen auf deine Clan Bank erlaubt sind
command.description.toggle.withdraw=Schaltet um, ob Auszahlungen für deine Clan Bank erlaubt sind
command.description.toggle.fee=Schaltet um, ob die Clan Gebühr aktiviert ist
command.description.toggle.deposit=Schalte um, ob Einzahlungen auf deinen Clan erlaubt sind
command.description.toggle.withdraw=Schaltet um, ob Auszahlungen für deinen Clan erlaubt sind
command.description.toggle.fee=Schaltet um, ob die Clan-Gebühr aktiviert ist
command.description.alliances=Listet alle Gildenallianzen auf
command.description.coords=Zeigt die Koordinaten der Mitglieder deines Clans an
command.description.rank.assign=Einem Mitglied einen Rang zuweisen
command.description.rank.unassign=Ein Mitglied von einem Rang entfernen
command.description.rank.unassign=Ein Mitglied aus einem Rang entfernen
command.description.rank.create=Erstellt einen Rang
command.description.rank.delete=Lösche einen Rang
command.description.rank.list=Liste die Ränge deines Clans auf
command.description.rank.delete=Löscht einen Rang
command.description.rank.list=Listet die Ränge deines Clans auf
command.description.rank.setdisplayname=Legt den Anzeigenamen eines Rangs fest
command.description.rank.setdefault=Legt den Standardrang fest
command.description.rank.removedefault=Entfernt den Standardrang
command.description.rank.permissions.available=Listet die verfügbaren Rangberechtigungen auf
command.description.rank.permissions.available=Listet die verfügbaren Rangberechtigungen
command.description.rank.permissions.rank=Listet die Berechtigungen eines Rangs auf
command.description.rank.permissions.add=Fügt eine Berechtigung zu einem Rang hinzu
command.description.rank.permissions.remove=Entfernt eine Berechtigung aus einem Rang
command.description.rename=Benenne deinen Clan um
command.description.mod.rename=Benenne einen Clan um
command.description.locale=Stellt Deine Sprache ein
command.description.mod.locale=Stellt die Sprache der Spieler ein
home-menu=/{0} Home{1} - Teleportiert dich in die Clan Basis
home-set-menu=/{0} Home set{1} - Setzt die Clan Basis
home-clear-menu=/{0} Home clear{1} - Entfernt die Clan Basis
@@ -252,15 +246,15 @@ rival=Rivale
civilian=Zivilist
neutral=Neutral
ally=Verbündete(r)
free.agent=Ohne Clan
free.agent=Freier Agent
days=tage
rivals=Rivalen
rivalries=rivalitäten
online=Online
player=Spieler
seen=Gesehen
leader=anführer
roster=mitglieder
leader=anfuehrer
roster=Mitglieder
trusted=Vertrauenswürdig
untrusted=Nicht Vertrauenswürdig
in.rank=im Rang
@@ -275,7 +269,7 @@ vitals=vitale
verified=Verifiziert
unverified=Nicht verifiziert
permanent=Permanent
profile=profil
profile=Profil
civilian.abbreviation=Civ
rank=Rang
leaders=Anführer
@@ -294,7 +288,6 @@ membership.invitation={0} hat die Einladung zur Mitgliedschaft abgelehnt
joined.the.clan={0} ist dem Clan beigetreten
signed.off.request.cancelled={0} hat sich abgemeldet. {1} Anfrage abgebrochen.
clan.deletion={0} hat die Löschung des Clans abgelehnt. Konsens fehlgeschlagen.
rename.refused={0} hat die Clan-Umbenennung abgelehnt. Einverständnis verweigert.
has.been.disbanded=Clan {0} wurde aufgelöst
denied.the.promotion={0} hat die Beförderung von {1}abgelehnt. Konsens fehlgeschlagen.
demoted.back.to.member={0} wurde zum Mitglied degradiert
@@ -310,17 +303,16 @@ has.joined={0} ist {1} beigetreten.
proposing.to.end.the.rivalry={0} schlägt vor die Rivalität mit (Clan-name) zu beenden {1}
proposing.an.alliance={0} schlägt vor ein Allianz mit {1} einzugehen
inviting.you.to.join={0} lädt dich zum Beitritt ein {1}
asking.for.the.deletion={0} fragt nach einer Löschung des Clans
asking.for.the.promotion={0} fragt nach einer Beförderung für {1}
asking.for.the.demotion={0} möchte, dass {1} degradiert wird
asking.to.disband={0} fragt an, den Clan zu verlassen
asking.to.rename={0} fragt an, den Clan umzubenennen zu {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n &8[&8{0}&8] &b{1}\n %accept% &bor %deny%\n
clickable.accept=&a&l[AKZEPTIEREN]
clickable.deny=&c&l[ABLEHNEN]
hover.click.to.accept=&aKlicken Sie hier, um zu akzeptieren
hover.click.to.deny=&cKlicken Sie hier, um abzulehnen
not.sufficient.money=Du hast nicht genügend Geld auf deinem Konto (du brauchst\: {0})
not.sufficient.money=Du hast nicht genügend Geld auf deinem Konto $)
account.has.been.debited=Ihr Konto wurde belastet {0}
mysql.connection.successful=Verbindung hergestellt
mysql.connection.failed=Verbindung fehlgeschlagen
@@ -338,8 +330,7 @@ you.have.already.voted=Du hast bereits abgestimmt
has.voted.to.deny={0} hat fürs verweigern gestimmt
view.next.page=Gebe /{0} ein, um die nächste Seite anzuzeigen.
voted.to.accept={0} hat fürs akzeptieren gestimmt
bulletin.board.header=&8* &e{0} &fBekanntmachungsbrett
bulletin.board.message={0}\: &f{1}
bulletin.board.header={0}* {1}{2} schwarzes Brett
has.been.disbanded.rivalry.ended={0} wurde aufgelöst. Rivalität beendet.
has.been.disbanded.alliance.ended={0} wurde aufgelöst. Allianz beendet.
clan.disbanded=Clan aufgelöst
@@ -366,17 +357,16 @@ clan.wide.friendly.fire.blocked=Clanweiter Teambeschuss blockiert
clan.wide.friendly.fire.is.allowed=Clanweiter Teambeschuss ist erlaubt
you.are.the.only.member.online=Du bist das einzige Mitglied, dass online ist
your.clan.color.tag.cannot.be.longer.than.characters=&cDer farbige Tag deines Clans darf nicht länger als {0} Zeichen sein
your.clan.tag.cannot.be.longer.than.characters=&cDer Tag deines Clans kann nicht länger als {0} Buchstaben bzw. Zeichen lang sein
your.clan.tag.must.be.longer.than.characters=&cDer Tag deines Clans muss länger als {0} Buchstaben bzw. Zeichen sein
your.tag.cannot.contain.the.following.colors=&cDer Tag deines Clans kann die Farbe "{0}" nicht enthalten
your.tag.doesnt.meet.the.requirements=&cDer Tag deines Clans erfüllt nicht die Anforderungen.
your.tag.cannot.contain.color.codes=&cDer Tag deines Clans darf keine Farbcodes enthalten
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cDer Tag deines Clans darf nur Buchstaben, Nummern und Farbcodes enthalten
your.clan.tag.cannot.be.longer.than.characters=Dein Clan-Tag darf nicht länger als {0} Zeichen sein
your.clan.tag.must.be.longer.than.characters=Dein Clan-Tag muss länger als {0} Zeichen sein
your.tag.cannot.contain.the.following.colors=Der Tag darf die folgenden Farben nicht enthalten\: {0}
your.tag.cannot.contain.color.codes=Dein Tag darf keine Farbcodes enthalten
you.cannot.set.colored.ranks=Du kannst keine farbigen Ränge setzen
your.clan.name.cannot.be.longer.than.characters=Dein Clan-Name darf nicht länger als {0} Zeichen sein
your.clan.name.must.be.longer.than.characters=Der Name deines Clans muss länger als {0} Zeichen sein
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=Der Clan-Tag darf nur Buchstaben, Zahlen und Farbcodes enthalten
your.clan.name.cannot.contain.color.codes=Der Name deines Clans darf keine Farbcodes enthalten
that.tag.name.is.disallowed=&cDieser Clan Tag ist verboten
that.tag.name.is.disallowed=Dieser Tag-Name ist nicht erlaubt
you.must.first.resign=Du musst zuerst aus {0} zurücktreten
clan.with.this.tag.already.exists=Ein Clan mit diesem Tag ist bereits vorhanden
get.your.clan.verified.to.access.advanced.features=Lass deinen Clan verifizieren, um auf erweiterte Funktionen zuzugreifen
@@ -393,7 +383,7 @@ global.friendy.fire.is.now.managed.by.each.clan=Globales Friendy-fire wird nun v
global.friendy.fire.is.already.being.managed.by.each.clan=Globales Friendy-fire wird bereits von jedem Clan verwaltet
global.friendly.fire.is.set.to.allowed=Globales Friendy-fire ist erlaubt
global.friendly.fire.is.already.being.allowed=Globales Friendy-fire ist bereits erlaubt
the.player.doesn.t.not.have.the.permissions.to.join.clans=Der Spieler hat nicht die Berechtigungen, Clans beizutreten
the.player.doesn.t.not.have.the.permissions.to.join.clans=Der Spieler hat nicht die Berechtigung, Clans beizutreten
you.cannot.invite.yourself=Du kannst dich nicht einladen
you.did.not.answer.in.time=Du hast nicht rechtzeitig geantwortet, abgebrochen...
this.player.is.banned.from.using.clan.commands=Dieser Spieler ist von der Verwendung von Clan-Befehlen ausgeschlossen
@@ -415,7 +405,6 @@ kdr.0=KDR\: {0}
inactive.0=Inaktiv\: {0}
clan.commands=clan Befehle
you.can.only.modify.the.color.and.case.of.the.tag=Du kannst nur die Farbe und die Gros- / Kleinschreibung dieses Tags ändern
locale.has.been.changed=&cDeine Sprache wurde geändert
tag.changed.to.0=Tag geändert zu {0}
0.tag.changed.to.1=&bErfolgreich den Tag von {0} zu {1} geändert
name.0=Name\: {0}
@@ -461,7 +450,7 @@ denied.war.end=Der Antrag von {0} um den Krieg zu beenden wurde von {1} abgelehn
has.initiated.a.rivalry={0} hat eine Rivalität mit {1} initiiert
start=start
end=ende
add=hinzufügen
add=anlegen
remove=entfernen
allow=zulassen
block=blockieren
@@ -496,7 +485,7 @@ depositon=Einzahlung eingeschaltet
depositoff=Einzahlung ausgeschaltet
withdrawon=Auszahlung eingeschaltet
withdrawoff=Auszahlung ausgeschaltet
feeoff=Beitrag ausgeschaltet
feeoff=Beitrag ausfeschaltet
feeon=Beitrag eingeschaltet
home.base.only.once=Basis kann nur einmal gesetzt werden
now.at.homebase=Du bist jetzt in der Basis von {0}
@@ -504,7 +493,6 @@ hombase.set=Clan Basis gesetzt\: {0}
hombase.cleared=Clan Basis entfernt
hombase.mod.set=Basis von {0} gesetzt\:
hombase.not.set=Basis nicht gesetzt
home.set.in.different.server=Home-base wurde auf einem anderen Server gesetzt
rival.limit.reached=Du hast das Rivalitäten Limit erreicht. Du kannst nicht mit mehr Clans rivalieren.
you.moved.teleport.cancelled=Du hast dich bewegt, Teleportation abgebrochen
waiting.for.teleport.stand.still.for.0.seconds=Warte auf Teleportation, bleibe stehen für {0} Sekunden
@@ -536,8 +524,6 @@ this.clan.has.reached.the.member.limit=&bDieser Clan hat das Mitgliederlimit err
you.have.reseted.your.kdr=Du hast deine KDR zurückgesetzt
you.have.reseted.0.kdr=Du hast die KDR von {0} zurückgesetzt
you.have.reseted.kdr.of.all.players=Du hast die KDR von allen Spielern zurückgesetzt
you.have.successfully.renamed.your.clan=&bDu hast deinen Clan erfolgreich zu {0} umbenannt
you.have.successfully.renamed.the.clan=&bDu hast den Clan erfolgreich zu {0} umbenannt
you.have.toggled.permanent.status=Sie haben den permanenten Status für {0} umgeschaltet
permanent.status.enabled=Der permanente Status deines Clans wurde von {0} aktiviert
permanent.status.disabled=Der permanente Status deines Clans wurde von {0} deaktiviert
@@ -545,7 +531,6 @@ yes=Ja
cancel=Abbrechen
resign.confirmation=Bist du sicher dass du zurücktreten möchtest, {0}?
disband.confirmation=Bist du sicher, dass du deinen Clan auflösen möchtest?
resetkdr.confirmation=Willst du wirklich deine KDR zurücksetzen
resign.success=Du bist erfolgreich aus deinem Clan ausgetreten
you.cannot.demote.the.last.leader=Du kannst den letzten Anführer nicht degradieren
you.cannot.move.the.last.leader=Du kannst den letzten Anführer nicht versetzen
@@ -558,7 +543,7 @@ bb.minutes= Minuten
bb.one.minute=1 Minute
bb.hours= Stunden
bb.one.hour=1 Stunde
bb.days= \ tage
bb.days= tage
bb.one.day=1 Tag
the.fee.is.0.and.its.current.value.is.1=Die Clangebühr ist {0} und hat einen aktuellen Betrag von {1} $
fee.enabled=aktiviert
@@ -596,11 +581,9 @@ deposit.not.allowed=Überweisung ist nicht erlaubt. Benutze /%clan %toggle %depo
withdraw.not.allowed=Abbuchen ist nicht erlaubt. Benutze /%clan %toggle %withdraw um das Abbuchen zu erlauben
resign.request.cancelled=Rücktrittsanfrage abgebrochen
disband.request.cancelled=Rücktrittsanfrage abgebrochen
resetkdr.request.cancelled=KDR-Zurücksetzungsanfrage abgebrochen
clan.create.request.cancelled=Clanerstellung abgebrochen
rank.create.request.cancelled=Rangerstellung abgebrochen
promotion.vote.has.been.requested.from.all.leaders=Das Wählen der Beförderung wurde von allen Anführern angefordert
rename.vote.has.been.requested.from.all.leaders=&bAbstimmung über Umbenennung wurde von allen Clan-Leadern angefragt
allowed=erlaubt
blocked=blockiert
chat.joined=beigetreten
@@ -721,7 +704,7 @@ gui.clandetails.roster.lore=&7Linksklick, um die Mitglieder deines Clans zu sehe
gui.staffclandetails.roster.lore=&7Linksklick, um die Mitglieder des Clans zu sehen
gui.clandetails.coords.title=&fKoordinaten
gui.clandetails.coords.lore=&7Linksklick, um die Koordinaten der Mitglieder deines Clans zu sehen
gui.clandetails.home.title=&fBasis
gui.clandetails.home.title=&fHaus
gui.clandetails.home.lore.teleport.price=&7Teleport-Preis\: &b{0}
gui.clandetails.home.lore.teleport=&7Linksklick um zu deiner Clan Basis zu kommen
gui.staffclandetails.home.lore.teleport=&7Linksklick um dich zur Basis deines Clans zu teleportieren
+19 -35
View File
@@ -2,17 +2,17 @@ description.command=description
create.command=create
delete.command=eliminar
rank.command=rank
setdisplayname.command=setdisplayname
setdefault.command=setdefault
removedefault.command=removedefault
permissions.command=permissions
setdisplayname.command=establecer nombre de visualización
setdefault.command=establecer predeterminado
removedefault.command=eliminar predeterminado
permissions.command=permisos
list.command=list
balance.command=balance
balance.command=Saldo
list.order.asc=asc
list.order.desc=desc
list.type.name=name
list.type.name=nombre
list.type.kdr=kdr
list.type.size=size
list.type.size=tamaño
list.type.founded=fundado
list.type.active=activo
land.command=terreno
@@ -43,10 +43,8 @@ assign.command=asignar
unassign.command=desasignar
rival.command=rival
bb.command=bb
display.command=mostrar
clear.command=limpiar
modtag.command=modtag
rename.command=renombrar
toggle.command=toggle
tag.command=etiqueta
deposit.command=deposito
@@ -99,10 +97,10 @@ acf-core.parameter.member=miembro
acf-core.parameter.rank=rank
acf-core.parameter.leader=lider
acf-core.parameter.displayname=nombre para mostrar
acf-core.parameter.permission=permissions
acf-core.parameter.permission=permisos
acf-core.parameter.message=mensaje
acf-core.parameter.tag=etiqueta
acf-core.parameter.name=name
acf-core.parameter.name=nombre
acf-core.parameter.fee=fee
acf-core.parameter.description=description
acf-core.parameter.player=jugador
@@ -230,10 +228,6 @@ command.description.rank.permissions.available=&7Muestra los permisos de rango d
command.description.rank.permissions.rank=&7Muestra los permisos de un rango.
command.description.rank.permissions.add=&7Agrega un permiso a un rango.
command.description.rank.permissions.remove=&7Elimina un permiso de un rango.
command.description.rename=Renombrar tu clan
command.description.mod.rename=Renombrar a un clan
command.description.locale=Elige el idioma
command.description.mod.locale=Elige el idioma del jugador
home-menu=/{0} home{1} - Telertransportate a la casa del clan
home-set-menu=/{0} home set{1} - Fija la casa del clan
home-clear-menu=/{0} home clear{1} - Remueve la casa del clan
@@ -294,7 +288,6 @@ membership.invitation={0} ha denegado la invitacion a miembro
joined.the.clan={0} se ha unido al clan
signed.off.request.cancelled={0} ha terminado. {1} pedido cancelado.
clan.deletion={0} denego la eliminacion del clan. Consenso fallido.
rename.refused={0} a rechazado el cambio de nombre. Error.
has.been.disbanded=El clan {0} ha sido disuelto
denied.the.promotion={0} denego promover a {1}. Consenso fallido.
demoted.back.to.member={0} ha sido degradado a miembro
@@ -310,10 +303,9 @@ has.joined={0} se ha unido a {1}
proposing.to.end.the.rivalry={0} propone terminar la rivalidad con {1}
proposing.an.alliance={0} propone una alianza con {1}
inviting.you.to.join={0} te esta invitando unirte a {1}
asking.for.the.deletion={0} esta solicitando la eliminacion del clan
asking.for.the.promotion={0} esta solicitando promover a {1}
asking.for.the.demotion={0} esta solicitando degradar a {1}
asking.to.disband={0} esta preguntando sobre eliminar el clan
asking.to.rename={0} esta preguntando para renombrar el clan a {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n [{0}] &c{1}&7\n &a%accept% &7o &c%deny%\n
clickable.accept=&a[ACEPTAR]
@@ -338,8 +330,7 @@ you.have.already.voted=Ya has votado
has.voted.to.deny={0} ha votado denegar
view.next.page=Escribe /{0} para ver la pagina siguiente.
voted.to.accept={0} ha votado aceptar
bulletin.board.header=&8* &e{0} &fbulletin board
bulletin.board.message={0}\: &f{1}
bulletin.board.header={0}* {1}{2} tablon de anuncios
has.been.disbanded.rivalry.ended={0} ha sido disuelto. La rivalidad ha finalizado.
has.been.disbanded.alliance.ended={0} ha sido disuelto. La alianza ha finalizado.
clan.disbanded=Clan Disuelto
@@ -366,17 +357,16 @@ clan.wide.friendly.fire.blocked=Fuego amigo para todo el clan bloqueado
clan.wide.friendly.fire.is.allowed=Fuego amigo para todo el clan permitido
you.are.the.only.member.online=Eres el unico miembro conectados
your.clan.color.tag.cannot.be.longer.than.characters=&8(&cClan&8)&7 La etiqueta de color de tu clan no puede ser más larga que &c{0}&7 caracteres.
your.clan.tag.cannot.be.longer.than.characters=&El tag de tu clan no puede ser mas largo que {0} caracteres
your.clan.tag.must.be.longer.than.characters=&cEl tag de tu clan debe ser mas largo que {0} caracteres
your.tag.cannot.contain.the.following.colors=&cTu tag no puede contener los siguientes formatos de colores\: {0}
your.tag.doesnt.meet.the.requirements=&cTu tag no cumple con los requisitos.
your.tag.cannot.contain.color.codes=&cTu tag no puede contener formato de colores
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cEl tag de tu clan solo puede contener letras, numeros y formato de colores
your.clan.tag.cannot.be.longer.than.characters=El tag de tu clan no puede ser mas largo que {0} caracteres
your.clan.tag.must.be.longer.than.characters=El tag de tu clan debe ser mas largo que {0} caracteres
your.tag.cannot.contain.the.following.colors=Tu tag no puede contener los siguientes formatos de colores\: {0}
your.tag.cannot.contain.color.codes=Tu tag no puede contener formato de colores
you.cannot.set.colored.ranks=No puedes poner rangos con color
your.clan.name.cannot.be.longer.than.characters=El nombre de tu clan no puede ser mas largo que {0} caracteres
your.clan.name.must.be.longer.than.characters=El nombre de tu clan debe ser mas largo que {0} caracteres
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=El tag de tu clan solo puede contener letras, numeros y formato de colores
your.clan.name.cannot.contain.color.codes=El nombre de tu clan no puede contener formato de colores
that.tag.name.is.disallowed=&cEse nombre de tag no está permitido
that.tag.name.is.disallowed=Ese nombre de tag no esta permitido
you.must.first.resign=Primero debes abandonar {0}
clan.with.this.tag.already.exists=Un clan con ese tag ya existe
get.your.clan.verified.to.access.advanced.features=Verifica tu clan para acceder a funcionalidades avanzadas
@@ -393,7 +383,7 @@ global.friendy.fire.is.now.managed.by.each.clan=Fuego amigo global es ahora mane
global.friendy.fire.is.already.being.managed.by.each.clan=Fuego amigo global ya es manejado por cada clan
global.friendly.fire.is.set.to.allowed=Fuego amigo global fue habilitado
global.friendly.fire.is.already.being.allowed=Fuego amigo global ya esta habilitado
the.player.doesn.t.not.have.the.permissions.to.join.clans=El jugador no tiene permisos para unirse a clanes
the.player.doesn.t.not.have.the.permissions.to.join.clans=El jugador no tiene permiso de unirse a clanes
you.cannot.invite.yourself=No puedes invitarte a vos mismo
you.did.not.answer.in.time=No respondiste a tiempo, cancelando...
this.player.is.banned.from.using.clan.commands=Este jugador fue baneado de usar comandos de clanes
@@ -415,7 +405,6 @@ kdr.0=KDR\: {0}
inactive.0=Inactivo\: {0}
clan.commands=comandos de clan
you.can.only.modify.the.color.and.case.of.the.tag=Solo se puede modificar el color de la etiqueta
locale.has.been.changed=&cEl idioma ha sido cambiado
tag.changed.to.0=Tag cambiado a {0}
0.tag.changed.to.1=Cambiado exitosamente la etiqueta &c{0}&7 a &c{1}&7.
name.0=Nombre\: {0}
@@ -536,8 +525,6 @@ this.clan.has.reached.the.member.limit=? ¡Este equipo ya alcanzó el límite de
you.have.reseted.your.kdr=Has reseteado tu KDR
you.have.reseted.0.kdr=Has reseteado el KDR de {0}
you.have.reseted.kdr.of.all.players=Has reseteado el KDR de todos los jugadores
you.have.successfully.renamed.your.clan=&bTu clan renombrado correctamente a {0}
you.have.successfully.renamed.the.clan=&bEl Clan renombrado correctamente a {0}
you.have.toggled.permanent.status=&8(&cClan&8)&7 Has cambiado el estado permanente de &c{0}&7.
permanent.status.enabled=&8(&cClan&8)&c {0}&7 ha habilitado el estado permanente de tu clan.
permanent.status.disabled=&8(&cClan&8)&c {0}&7 ha inhabilitado el estado permanente de tu clan.
@@ -545,7 +532,6 @@ yes=Sí
cancel=Cancelar
resign.confirmation=Estas seguro que quieres abandonar el clan? {0}
disband.confirmation=¿Estás seguro de que quieres disolver tu clan? {0}
resetkdr.confirmation=Estas seguro que deseas eliminar tu KDR? {0}
resign.success=Has abandonado el clan exitosamente
you.cannot.demote.the.last.leader=No puedes degradar al ultimo lider
you.cannot.move.the.last.leader=&8(&cClan&8)&7 No puedes mover al último líder.
@@ -558,7 +544,7 @@ bb.minutes= \ minutos
bb.one.minute=1 minuto
bb.hours= \ horas
bb.one.hour=1 hora
bb.days= \ días
bb.days= dias
bb.one.day=1 dia
the.fee.is.0.and.its.current.value.is.1=La cuota es {0} y su valor actual es {1} $
fee.enabled=enabled
@@ -596,11 +582,9 @@ deposit.not.allowed=Depositos desactivados, usa /%clan %toggle %deposit para act
withdraw.not.allowed=Retiros desactivados, usa /%clan %toggle %withdraw para activarlo
resign.request.cancelled=Solicitud para abandonar el clan cancelada.
disband.request.cancelled=Solicitud de disolución cancelada
resetkdr.request.cancelled=Se ha cancelado la petición\: KDR
clan.create.request.cancelled=Solicitud de creación de clan cancelada
rank.create.request.cancelled=Solicitud de creación de rango cancelada
promotion.vote.has.been.requested.from.all.leaders=Votacion para promover ha sido solicitada a todos los lideres
rename.vote.has.been.requested.from.all.leaders=&bSe ha organizado una votacion para renombrar el clan por los lideres
allowed=permitido
blocked=bloqueado
chat.joined=unido
@@ -43,10 +43,8 @@ assign.command=määrää
unassign.command=posta määräys
rival.command=kilpailija
bb.command=bb
display.command=näytä
clear.command=tyhjennä
modtag.command=modtag
rename.command=nimeä uudelleen
toggle.command=päälle/pois
tag.command=tunniste
deposit.command=talleta
@@ -80,165 +78,11 @@ kills.command=tapot
mostkilled.command=eniten tapetut
war.command=sota
start.command=aloita
end.command=lopeta
home.command=koti
regroup.command=uudelleen ryhmittyä
me.command=minä
tp.command=teleportti
setrank.command=aseta arvo
place.command=sijoita
resetkdr.command=nollata kdr
everyone.command=kaikki
setbanner.command=aseta sotalippu
help.command=apu
leave.command=poistua
join.command=liittyä
mute.command=mykistys
acf-core.parameter.amount=määrä
acf-core.parameter.member=jäsen
acf-core.parameter.rank=/rankki
acf-core.parameter.leader=johtaja
acf-core.parameter.displayname=käyttäjänimi
acf-core.parameter.permission=oikeus
acf-core.parameter.message=viesti
acf-core.parameter.tag=tunniste
acf-core.parameter.name=nimi
acf-core.parameter.fee=maksu
acf-core.parameter.description=/kuvaus
acf-core.parameter.player=pelaaja
acf-core.parameter.clan=klaani
acf-core.parameter.type=tyyppi
acf-core.parameter.order=järjestys
acf-core.parameter.help=sivu tai avainsanat
command.description.land.allow.all=Sallii kaikki toiminnot maassasi
command.description.land.allow.interact_entity=Sallii klaanin jäsenten vuorovaikuttaa kohteiden kanssa
command.description.land.allow.interact=Sallii klaanin jäsenten vuorovaikuttaa sinun maallasi
command.description.land.allow.container=Sallii klaanin jäsenten avata säiliöitä maassasi
command.description.land.allow.place=Sallii klaanin jäsenten aseittaa palikoita maassasi
command.description.land.allow.break=Sallii klaanin jäsenten rikkoa palikoita maassasi
command.description.land.allow.damage=Sallii klaanin jäsenten aiheuttaa vahinkoja maassasi
command.description.land.block.all=Estää kaikki toiminnot maassasi
command.description.land.block.interact_entity=Estää klaanin jäsenten vuorovaikutuksen kohteiden kanssa maassasi
command.description.land.block.interact=Estää jäsenten vuorovaikutuksen maassasi
command.description.land.block.container=Estää klaanin jäsenten mahdollisuuden avata säiliöitä
command.description.land.block.place=Estää klaanin jäseniä asettamasta palikoita maahasi
command.description.land.block.break=Estää klaanin jäseniä rikkomasta palikoita maassasi
command.description.land.block.damage=Estää klaanin jäseniä aiheuttamasta vahinkoja maahasi
command.description.stats=Näyttää klaanin jäseniesi tilastot
command.description.rivalries=Näyttää kaikki klaanin viholliset
command.description.mostkilled=Näyttää serverivälisesti isoimmat tappoluvut
command.description.kills=Näyttää sinun tai muun pelaajan tappomäärän
command.description.lookup=Katsoo sinun tietosi
command.description.lookup.other=Näyttää toisen pelaajan tiedon
command.description.leaderboard=Näyttää tulostaulukon
command.description.roster.other=Näyttää toisen klaanin jäsenet
command.description.roster=Luettelee klaanisi jäsenet
command.description.profile.other=Näyttää toisen klaanin profiilin
command.description.profile=Näyttää sinun klaanisi profiilin
command.description.vitals=Näyttää klaanisi ja liittolaisten vitaalit
command.description.list=Luettelee kaikki klaanit
command.description.list.balance=Näyttää rikkaimmat klaanit
command.description.chat=Puhuu klaani palstalla
command.description.ally=Puhuu liittolaisten palstalla
command.description.deny=Hylkää pyynnön
command.description.accept=Hyväksyy pyynnön
command.description.more=Näyttää lisätietoa
command.description.create=Luo klaanin
command.description.discord.create=Luo discord-kanavan klaanillesi
command.description.ff.allow=Asettaa henkilökohtaisen oman tulen sallituksi
command.description.ff.auto=Asettaa oman tulen automaattiseksi
command.description.globalff.allow=Asettaa maailmanlaajuisen oman tulen sallituksi
command.description.globalff.auto=Asettaa maailmanlaajuisen oman tulen automaattiseksi
command.description.clanff.allow=Asettaa klaanisi oman tulen sallituksi
command.description.clanff.block=Asettaa klaanisi oman tulen estetyksi
command.description.description=Asettaa klaanillesi kuvauksen
command.description.ban=Estää pelaajan käyttämästä klaani komentoja
command.description.unban=Poistaa pelaajan eston klaanin komentojen käytöstä
command.description.regroup.me=Uudelleen ryhmittää klaanisi jäsenet sinun sijaintiisi
command.description.regroup.home=Uudelleen ryhmittää klaanisi jäsenet klaanisi kodille
command.description.home.tp=Teleportoi sinut klaanisi kotiin
command.description.home.clear=Nollaa klaanisi kotisijainnin
command.description.home.set=Asettaa klaanisi kodin
command.description.mod.home.set=Asettaa klaanin kodin
command.description.mod.home.tp=Teleportoi klaanin kotiin
command.description.rival.remove=Poistaa vihollisen
command.description.rival.add=Lisää vihollisen
command.description.ally.remove=Poistaa liittolaisen
command.description.kick=Potkii jäsenen pois klaanistasi
command.description.bb.display=Näyttää klaanisi ilmoitustaulun
command.description.bb.clear=Tyhjentää klaanisi ilmoitustaulun
command.description.bb.post=Lähettää viestin klaanisi ilmoitustaululle
command.description.mod.bb.display=Näyttää klaanin ilmoitustaulun
command.description.mod.bb.clear=Tyhjentää klaanin ilmoitustaulun
command.description.mod.bb.post=Lähettää viestin klaanin ilmoitustaululle
command.description.place=Asettaa pelaajan klaaniin
command.description.reload=Lataa laajennuksen uudelleen ja asetustiedoston
command.description.trust=Luottaa jäseneen
command.description.untrust=Menettää luoton jäseneen
command.description.resign=Erota klaanistasi
command.description.help=Näyttää tämän avun tai haut avussa
command.description.ally.add=Lisää liittolaisen
command.description.clan=Avaa GUI\: n
command.description.disband=Lakkauttaa klaanisi
command.description.mod.disband=Lakkauttaa klaani
command.description.mod.kick=Potkia jäsen klaanista
command.description.modtag.other=Muokkaa klaanin tunnistetta
command.description.modtag=Muokkaa sinun klaanisi tunnistetta
command.description.purge=Nollaa tietyn pelaajan tiedot
command.description.setbanner=Asettaa klaanisi lipun
command.description.verify=Vahvistaa klaanisi
command.description.mod.verify=Vahvistaa klaanin
command.description.invite=Kutsuu pelaajan liittymään klaaniisi
command.description.fee.check=Tarkistaa klaanisi maksun ja tarkistaa onko maksut päällä
command.description.fee.set=Asettaa klaanisi maksun
command.description.bank.status=Tarkistaa klaanisi pankin saldon
command.description.bank.admin.status=Tarkistaa klaanin pankin saldon
command.description.bank.withdraw.all=Nostaa kaikki rahat klaanisi saldosta
command.description.bank.withdraw.amount=Nostaa tietyn määrän klaanisi saldosta
command.description.bank.admin.take=Ottaa tietyn summan klaanin pankista
command.description.bank.deposit.all=Tallettaa kaikki rahasi klaanisi pankkiin
command.description.bank.deposit.amount=Tallettaa tietyn summan klaanisi pankkiin
command.description.bank.admin.give=Antaa tietyn määrän rahaa klaanin pankkiin
command.description.bank.admin.set=Asettaa klaanin pankin saldon
command.description.war.start=Aloittaa sodan
command.description.war.end=Lopettaa sodan
command.description.resetkdr.everyone=Nollaa jokaisen KDR\: n
command.description.resetkdr.player=Nollaa tietyn pelaajan KDR\: n
command.description.resetkdr=Nollaa sinun KDR\: äsi
command.description.admin.demote=Alentaa kenet tahansa johtajan mistä klaanista vain
command.description.demote=Alentaa johtajan
command.description.admin.promote=Ylentää kenet tahansa jäsenen mistä klaanista vain
command.description.promote=Ylentää jäsenen johtajaksi
command.description.admin.permanent=Asettaa minkä tahansa klaanin pysyvän tilan
command.description.toggle.bb=Vaihtaa pitäisikö ilmoitustaulun näkyä kirjautuessa sisään
command.description.toggle.invite=Kytkee, voiko pelaajat lähettää sinulle klaaniin liittymis kutsuja
command.description.toggle.tag=Vaihtaa, pitäisikö klaanin tagin näkyä oman nimesi vieressä
command.description.toggle.deposit=Vaihtaa onko talletukset sallittuja klaanissa
command.description.toggle.withdraw=Kytkee onko rahan nostaminen sallittua klaanissa
command.description.toggle.fee=Kytkee onko klaanin maksu päällä
command.description.alliances=Luettelee kaikki klaanni liitot
command.description.coords=Näyttää klaanisi jäsenten koordinaatit
command.description.rank.assign=Määrittää arvon jäsenelle
command.description.rank.unassign=Poistaa jäsenen arvon
command.description.rank.create=Luo arvon
command.description.rank.delete=Poistaa arvo
command.description.rank.list=Luettele kaikki klaanisi arvot
command.description.rank.setdisplayname=Asettaa arvon näkyvillä olevan nimen
command.description.rank.setdefault=Asettaa oletus arvon
command.description.rank.removedefault=Poistaa oletus arvon
command.description.rank.permissions.available=Luettelee kaikki käytettävissä olevat arvo oikeudet
command.description.rank.permissions.rank=Luettelee arvon oikeudet
command.description.rank.permissions.add=Lisää arvoon oikeuden
command.description.rank.permissions.remove=Poistaa oikeuden arvolta
command.description.rename=Nimeää klaanisi uudelleen
command.description.mod.rename=Nimeää klaanin uudelleen
command.description.locale=Valitsee näyttökielesi
command.description.mod.locale=Valitsee pelaajan näyttökielen
home-menu=/{0} home{1} - Teleporttaa klaanin koti-tukikohtaan
home-set-menu=/{0} home set{1} - asettaa klaanin tukikohdan
home-clear-menu=/{0} home clear{1} - tyhjentää klaanin tukikohdan sijainnin
clan=Klaani
allies=Liitot
alliances=liittoutumat
coords=koordinaatit
name=Nimi
@@ -247,639 +91,23 @@ coords.upper=Koordinaatit
world=Maailma
kdr=KDR
members=Jäsenet
clans.lower=klaanit
rival=Vihollinen
civilian=Siivili
neutral=Neutraali
ally=Liittolainen
free.agent=Vapaa agentti
days=päivät
rivals=Viholliset
rivalries=kilpailijat
online=Kirjautuneena
player=Pelaaja
seen=Nähty
leader=johtaja
roster=lista
trusted=luotettu
untrusted=epäluotettu
in.rank=arvollinen
deaths=Kuolemat
weights=Tapon paino
stats=tilastot
health=Elämät
armor=Haarniska
weapons=Aseet
food=Ruoka
vitals=vitals
verified=Vahvistettu
unverified=Vahvistamaton
permanent=Pysyvä
profile=profiili
civilian.abbreviation=Siviili
rank=Arvo
leaders=Johtajat
none=tyhjä
today=Tänään
kills=Tapot
mostkilled=Eniten tappoja
killcount=Tapettujen määrä
attacker=Hyökkääjä
victim=Uhri
kill.death.ratio=Tappo/Kuolema kaava
nokillsfound=Ei tappoja
promoted.to.leader={0} on ylennetty johtajaksi
denied.demotion={0} hyläsi {1}\: n alennuksen. Yksimielisyys epäonnistui.
membership.invitation={0} hyläsi jäsenyyskutsun
joined.the.clan={0} liittyi klaaniin
signed.off.request.cancelled={0} kirjautui pois. {1} pyyntö peruttu.
clan.deletion={0} hyläsi klaanin poistamisen. Yksimielisyys epäonnistui.
rename.refused={0} hylkäsi klaanin uudelleen nimeämisen. Sopimus epäonnistui.
has.been.disbanded=Klaani {0} on lakkautettu
denied.the.promotion={0} hyläsi {1}\: n ylennyksen. Yksimielisyys epäonnistui.
demoted.back.to.member={0} on alennettu takaisin jäseneksi
peace.agreement.denied=Rauhansopimus {0} kanssa hylättiin
denied.to.make.peace={0} kieltäytyi rauhanteon {1}\: n kanssa
broken.the.rivalry={0} rikkoi kilpailun {1}\: n kanssa
broken.the.rivalry.with={0} rikkoi kilpailun {1}\: n kanssa
the.alliance.was.denied=Liittoutuminen {0} hylättiin
denied.an.alliance={0} kieltäytyi liittoutumasta {1}\: n kanssa
accepted.an.alliance={0} hyväksyi liittoutumisen {1}\: n kanssa
created.an.alliance={0} on liittoutunut {1}\: n kanssa
has.joined={0} on liittynyt {1}
proposing.to.end.the.rivalry={0} ehdottaa kilpailun lopettamista {1} kanssa
proposing.an.alliance={0} ehdottaa liittoutumista {1}\: n kanssa
inviting.you.to.join={0} kutsui sinut liittymään {1}
asking.for.the.promotion={0} pyytää {1}\: n ylentämistä
asking.for.the.demotion={0} pyytää {1}\: n alennusta
asking.to.disband={0} pyytää purkamaan klaanin
asking.to.rename={0} haluaa vaihtaa klaanin nimeksi {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n&8[&8{0}&8] &b{1}\n %hyväksy% &bor %kieltäydy%\n
clickable.accept=&a&l[HYVÄKSY]
clickable.deny=&c&l[KIELTÄYDY]
hover.click.to.accept=&aHyväksy painamalla
hover.click.to.deny=&cKieltäydy painamalla
not.sufficient.money=Sinulla ei ole riittävästi rahaa tililläsi (tarvitset\: {0} $)
account.has.been.debited=Tililtäsi on veloitettu {0}
mysql.connection.successful=Yhteys MySQL\: ään muodostettu
mysql.connection.failed=Yhteys MySQL\: ään epäonnistui
sqlite.connection.successful=Yhteys SQLiteen muodostettu
sqlite.connection.failed= Yhteys SQLiteen epäonnistui
purging.player.data=nollataan pelaajan tiedot\: {0}
purging.clan=Poistetaan klaani\: {0}
clan.players=Klaanin pelaajien määrä\: {0}
clans=Klaanien määrä\: {0}
banned=Sinut on estetty käyttämästä klaanien komentoja
nothing.more.to.see=Ei ole enempää nähtävää
nothing.to.vote=&cEi mitään mitä hyväksyä tai mistä kieltäytyä
no.leader.permissions=Sinulla ei ole johtajan oikeuksia
you.have.already.voted=Olet jo äänestänyt
has.voted.to.deny={0} äänesti kieltämisen puoleen
view.next.page=Kirjoita /{0} nähdäksesi seuraavan sivun.
voted.to.accept={0} äänesti hyväksymisen puolesta
bulletin.board.header=&8* &e{0} ilmoitustaulu
bulletin.board.message={0}\: &f{1}
has.been.disbanded.rivalry.ended={0} lakkautettiin. Kilpailu on päättynyt
has.been.disbanded.alliance.ended={0} lakkautettiin. Liitto on päättynyt.
clan.disbanded=Klaani lakkautettu
1.color.day=1 {0}päivä
many.color.days={0}{1} päivää
insufficient.permissions=Oikeudet eivät riitä
clan.is.not.verified=Klaania ei ole vahvistettu
player.not.a.member.of.any.clan=&cPelaaja ei ole minkään klaanin jäsen
not.a.member.of.any.clan=Et ole klaanissa
minimum.to.make.alliance=Klaanillasi täytyy olla vähintään {0} pelaajaa, jotta voit tehdä liittoutumia
cannot.be.same.clan=&cSinun tulee lisätä toinen klaani kuin sinun\!
other.clan.not.verified=&cToista klaania ei ole vahvistettu\!
your.clans.are.not.allies=Klaanisi eivät ole liittolaisia
has.broken.the.alliance={0} rikkoi liiton {1} kanssa
at.least.one.leader.accept.the.alliance=Vähintään yhden johtajan pitää olla paikalla jotta liiton voi hyväksyä
leaders.have.been.asked.for.an.alliance={0}\: n johtajilta on pyydetty liittoutumista
your.clans.are.already.allies=Klaanisi ovat jo liittolaisia
your.clan.cannot.create.rivals=Sinun klaani ei voi tehdä vihollisia
min.players.rivalries=Klaanillasi täytyy olla vähintään {0} pelaajaa, jotta voit tehdä vihollisia
this.player.is.already.banned=Tällä pelaajalla on jo porttikielto
player.added.to.banned.list=Pelaaja lisätty porttikielto listalle
you.banned=Sinut on estetty käyttämästä klaanikomentoja
clan.wide.friendly.fire.blocked=Klaanin laajuinen oma tuli estetty
clan.wide.friendly.fire.is.allowed=Klaanin laajuinen oma tuli on sallittu
you.are.the.only.member.online=Olet ainoa jäsen paikalla
your.clan.color.tag.cannot.be.longer.than.characters=&cKlaanisi värillinen tunniste ei voi olla pidempi kuin {0} kirjainta
your.clan.tag.cannot.be.longer.than.characters=&Sinun klaanisi tunniste ei voi olla pidempi kuin {0} merkkiä
your.clan.tag.must.be.longer.than.characters=&Sinun klaanisi tunnisteessa pitää olla enemmän kuin {0} kirjainta
your.tag.cannot.contain.the.following.colors=&cTunnisteesi ei voi sisältää seuraavia värejä\: {0}
your.tag.doesnt.meet.the.requirements=&cTunnisteesi ei täytä vaatimuksia.
your.tag.cannot.contain.color.codes=& Sinun tunnisteessa ei saa olla värikoodeja
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cSinun klaanisi tunnisteessa saa ainoastaan sisältää kirjaimia, numeroita ja värikoodeja
you.cannot.set.colored.ranks=Et voi asettaa värillisiä arvoja
your.clan.name.cannot.be.longer.than.characters=Sinun klaanisi nimi ei voi olla pidempi kuin {0} merkkiä
your.clan.name.must.be.longer.than.characters=Sinun klaanisi nimi pitää olla pidempi kuin {0} kirjainta
your.clan.name.cannot.contain.color.codes=Sinun klaanisi nimessä ei saa olla värikoodeja
that.tag.name.is.disallowed=&cTuo tunniste ei ole sallittu
you.must.first.resign=Sinun täytyy ensin erota klaanista {0}
clan.with.this.tag.already.exists=Klaani tällä tunnisteella on jo olemassa
get.your.clan.verified.to.access.advanced.features=Vahvista klaanisi päästäksesi käsiksi edistyneisiin ominaisuuksiin
clan.created=Klaani {0} luotu
not.enough.leaders.online.to.vote.on.demotion=Ei ole tarpeeksi johtajia paikalla äänestääkseen alennuksesta
demotion.vote.has.been.requested.from.all.leaders=Johtajilta on pyydetty alennus äänestystä
player.is.not.a.leader.of.your.clan=Pelaaja ei ole klaanisi yksi johtajista
player.is.not.a.leader=Pelaaja ei ole johtaja
clan.has.been.disbanded=Klaani {0} on lakkautettu
clan.disband.vote.has.been.requested.from.all.leaders=Klaanin lakkauttamis äänestys on pyydetty kaikilta johtajilta
friendy.fire.is.now.managed.by.your.clan=Omaa tulea hallitsee nyt sinun Klaanisi
personal.friendly.fire.is.set.to.allowed=Henkilökohtainen oma tuli sallittu
global.friendy.fire.is.now.managed.by.each.clan=Kansainvälistä oma tulta hallitsee nyt jokainen klaani
global.friendy.fire.is.already.being.managed.by.each.clan=Jokainen klaani hallinnoi jo kansainvälistä omaa tulta
global.friendly.fire.is.set.to.allowed=Kansainvälinen omatuli asetettu sallituksi
global.friendly.fire.is.already.being.allowed=Kansainvälinen omatuli jo sallittu
the.player.doesn.t.not.have.the.permissions.to.join.clans=Pelaajalla ei riitä oikeukset liittyä klaaneihin
you.cannot.invite.yourself=Et voi kutsua itseäsi
you.did.not.answer.in.time=Et vastannut tarpeeksi nopeasti, peruutetaan...
this.player.is.banned.from.using.clan.commands=Tämä pelaaja on estetty klaani komentojen käytöstä
the.player.is.already.member.of.another.clan=Pelaaja on jo toisen klaanin jäsen
has.been.asked.to.join={0} on pyydetty liittymään {1}
you.cannot.kick.yourself=Et voi potkia itseäsi ulos
the.player.is.not.a.member.of.your.clan=Pelaaja ei ole klaanisi jäsen
you.cannot.kick.another.leader=Et voi potkaista toista johtajaa
has.been.kicked.by={1} potkaisi jäsenen {0} ulos klaanista
no.clans.have.been.created=Yhtäkään klaania ei ole luotu
total.clans=Klaanien määrä\:
legend=Selite\:
kill.type.civilian=Tapon tyyppi\: {0}Siviili
no.player.data.found=Pelaajatietoja ei löytynyt
clan.0=Klaani\: {0}
status.0=Tila\: {0}
rank.0=Arvo\: {0}
kdr.0=KDR\: {0}
inactive.0=Inaktiivinen\: {0}
clan.commands=klaanin komennot
you.can.only.modify.the.color.and.case.of.the.tag=Voit ainoastaan muokata tunnisteen väriä ja muotoa
locale.has.been.changed=&cKielesi on vaihdettu
tag.changed.to.0=Tunniste on nyt {0}
0.tag.changed.to.1=&bOnnistuneesti vaihdettu {0}\: n tunniste {1}
name.0=Nimi\: {0}
description.0=Kuvaus\: {0}
leaders.0=Johtajat\: {0}
allies.0=Liittolaiset\: {0}
rivals.0=Viholliset\: {0}
other.player.must.be.online=&cPelaajan täytyy olla paikalla\!
the.player.does.not.have.the.permissions.to.lead.a.clan=Pelaajalla ei riitä oikeukset johtaa klaania
you.cannot.promote.yourself=Et voi ylentää itseäsi
the.player.is.already.a.leader=Pelaaja on jo johtaja
configuration.reloaded=Asetukset ladattu uudelleen
last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan=Viimeinen johtaja ei voi erota. Sinun täytyy nimittää toinen johtaja tai lakkauttaa klaani
0.has.resigned={0} erosi klaanista
you.cannot.trust.yourself=Et voi luottaa itseesi
leaders.are.already.trusted=Johtajat ovat jo luotettuja
this.player.is.already.trusted=Tämä pelaaja on jo luotettu
has.been.given.trusted.status.by={1} antoi luotetun tilan {0}\: lle
this.player.is.not.banned=Tällä pelaajalla ei ole porttikieltoa
player.removed.from.the.banned.list=Pelaajan porttikielto poistettu
you.have.been.unbanned.from.clan.commands=Sinun estosi klaani komentojen käytöstä on poistettu
you.cannot.untrust.yourself=Et voi menettää luottoa itseesi
leaders.cannot.be.untrusted=Johtajien luottoa ei voi menettää
this.player.is.already.untrusted=Tämä pelaaja on jo epäluotettava
has.been.given.untrusted.status.by={1} poisti {0} luotetun tilan
the.clan.does.not.exist=Klaani ei ole olemassa
the.clan.is.already.verified=Klaani on jo vahvistettu
the.clan.has.been.verified=Klaani on vahvistettu
clan.0.has.been.verified=Klaani {0} on vahvistettu\!
total.clan.players.0=Klaanin pelaajamäärä\: {0}
proposing.war={0} ehdottaa sodan aloittamista {1} kanssa
you.can.only.start.war.with.rivals=Voit ainoastaan aloittaa sodan vihollisten kanssa
leaders.have.been.asked.to.accept.the.war.request={0} johtajia on pyydetty hyväksymään sota pyyntö
leaders.asked.to.end.rivalry={0} johtajilta on pyydetty sodan lopettamista
proposing.to.end.the.war={0} ehdottaa sodan lopettamista {1} kanssa
clans.already.at.war=Klaanisi ovat jo sodassa
clans.not.at.war=Klaanisi eivät ole sodassa
you.are.at.war={0} sotivat {1} kanssa
denied.war.req={0} kieltäytyi {1} sota pyynnöstä
you.are.no.longer.at.war={0} ei enää sodi {1} kanssa
end.war.denied={0} kielsi sodan lopettamis pyynnön
denied.war.end={0} kielsi {1} pyynnön lopettamaan sodan
has.initiated.a.rivalry={0} on aloittanut kilpailun {1} kanssa
start=aloita
end=lopeta
add=lisää
remove=poista
allow=salli
block=block
auto=automaattinen
war=sota
0.s.sword.1.2.b.bow.3.4.a.arrow={0}M\=miekka{1}, {2}J\=jousipyssy{3}, {4}N\=Nuolet
weapon.S=M
weapon.B=J
weapon.A=N
materials=Materiaalit
armor.h=K
armor.c=Haarniska
armor.l=J
armor.B=J
diamond=timantti
gold=kulta
wood=puu
server.announce=Palvelimen Ilmoitus
clan.announce=Klaani Ilmoitus
leader.announce=Johtajan Ilmoitus
hunger=Nälkä
stone=kivi
iron=rauta
the.clan.cannot.be.rivaled=Klaanin kanssa ei voi kilpailla
bboff=BB poistettu käytöstä
bbon=BB vaihdettu päälle
inviteon=Kutsut laitettu päälle
inviteoff=Kutsut poistettu käytöstä
tagoff=Tunniste poistettu käytöstä
tagon=Tunniste kytketty päälle
depositon=Talletus vaihdettu päälle
depositoff=Talletus poistettukäytöstä
withdrawon=Nosto kytketty päälle
withdrawoff=Nosto kytketty pois
feeoff=Maksu poistettu käytöstä
feeon=Maksu kytketty päälle
home.base.only.once=Tukikohdan voi asettaa vain kerran
now.at.homebase=Olet nyt {0}\: n tukikohdassa
hombase.set=Klaanin tukikohda asetettu\: {0}
hombase.cleared=Klaanin tukikohta tyhjennetty
hombase.mod.set={0}\: n tukikohta asetettu\:
hombase.not.set=Tukikohtaa ei ole asetettu
home.set.in.different.server=Tukikohta asetettiin eri palvelimella
rival.limit.reached=Olet saavuttanut vihollisrajan. Et voi asettaa enempää klaaneja vihollisiksi.
you.moved.teleport.cancelled=Liikuit, teleportointi peruttu
waiting.for.teleport.stand.still.for.0.seconds=Odotetaan teleporttia, seiso vielä {0} sekuntia
on=päällä
off=pois
player.rank.changed=Arvo on asetettu
your.clans.are.already.rivals=Klaanisi ovat jo vihollisia
player.got.money=Sait {0} {1} tappamisesta KDR\: äsi takia\: {2}
cleared.bb=Klaanin ilmoitustaulu tyhjennetty
clan.balance=Klaanin saldo\: {0}
clan.admin.balance={0} saldo on\: {1} $
bb.fee.player.kicked={0} potkittiin klaanista, koska ei maksanut maksua
bb.fee.set=Maksu on {0} $
bb.clan.deposit={1} talletti {0} $
player.clan.deposit=Talletit {0}
bb.clan.withdraw={1} nosti {0} $
bb.clan.take={1} nosti {0} $
bb.clan.give={1} antoi {0} $
bb.clan.set={1} asetti saldon {0} $
player.clan.withdraw=Nostit {0}
clan.admin.take=Sinä otit {0} $ {1} pankista
clan.admin.give=Sinä annoit {0} $ {1} pankkiin
clan.admin.set=Sinä asetit {0} saldon {1}
clan.admin.bank.not.enough.money={0} pankissa ei ole tarpeeksi rahaa\!
clan.bank.not.enough.money=Klaanisi pankissa ei ole tarpeeksi rahaa
your.clans.are.not.rivals=Klaanisi ei ole vihollisia
the.clan.members.reached.limit=Sinun klaani on saavuttanut jäsenrajan
this.clan.has.reached.the.member.limit=&bTämä klaani on saavuttanut jäsenrajan
you.have.reseted.your.kdr=Olet nollannut KDR\: äsi
you.have.reseted.0.kdr=Olet nollannut {0}\: n KDR\: än
you.have.reseted.kdr.of.all.players=Sinä nollasit jokasen pelaajan KDR\: än
you.have.successfully.renamed.your.clan=&bOlet onnistuneesti vaihtanut klaanisi nimeksi {0}
you.have.successfully.renamed.the.clan=&bOlet onnistuneesti vaihtanut klaanin nimeksi {0}
you.have.toggled.permanent.status=Asetit pysyvän tilan {0}\: lle
permanent.status.enabled={0} kytki klaanisi pysyvään tilaan
permanent.status.disabled={0} poisti klaanisi pysyvän tilan
yes=Kyllä
cancel=Peruuta
resign.confirmation=Haluatko varmasti erota? {0}
disband.confirmation=Oletko varma, että haluat lakkauttaa klaanisi? {0}
resetkdr.confirmation=Oletko varma että haluat resetoida KDR\:si? {0}
resign.success=Olet onnistuneesti eronnut klaanistasi
you.cannot.demote.the.last.leader=Et voi alentaa viimestä johtajaa
you.cannot.move.the.last.leader=Et voi siirtää viimestä johtajaa
player.successfully.demoted=Pelaaja alennettu onnistuneesti
player.successfully.promoted=Pelaaja ylennetty onnistuneesti
bb.ago= \ aika sitten
bb.moments=\ hetket
bb.seconds= \ sekuntit
bb.minutes= \ minuutit
bb.one.minute=1 minuutti
bb.hours= \ tuntia
bb.one.hour=1 tunti
bb.days= \ päivää
bb.one.day=1 päivä
the.fee.is.0.and.its.current.value.is.1=Maksu on nyt {0} ja sen tämän hetkinen arvo on {1} $
fee.enabled=käytössä
fee.disabled=pois käytöstä
fee.set=Maksu asetettu onnistuneesti
max.fee.allowed.is.0=Suurin sallittu maksu on {0}
fee.collected=Klaanin maksuihin nostettiin {0} $
player.purged=Pelaajantiedot poistettu onnistuneesti
upkeep.collected={0} $ nostettiin ylläpitoa varten
balance.is.not.enough.for.upkeep=Klaanin saldo ei riitä maksamaan ylläpitoa ({0} $), talleta summa välttyäksesi lakkautettamiselta
your.clan.description.must.be.longer.than=Sinun klaanisi kuvaus pitää olla pidempi kuin {0} kirjainta
your.clan.description.cannot.be.longer.than=Sinun klaanisi kuvaus ei saa olla pidempi kuin {0} kirjainta
description.changed=Klaanisi kuvaus onnistuneesti muutettu
no.description=Ei kuvausta
the.player.must.wait.0.before.joining.your.clan.again=Tämän pelaajan on odotettava {0} minuuttia, ennen kuin hän liittyy klaaniin uudellee
disabled.command=Komento poistettu käytöstä
rank.displayname.updated=Arvon näyttönimi päivitetty\!
rank.setdefault=Klaanin oletus arvo on nyt {0}
rank.removedefault=Klaanin oletus arvo poistettu
rank.0.permissions=Arvon {0} oikeudet\:
available.rank.permissions=Käytettävissä olevat oikeudet arvoihin\:
rank.already.exists=Arvo on jo olemassa
rank.0.does.not.exist=Arvo {0} ei ole olemassa
rank.created=Arvo luotu
permission.0.added.to.rank.1=Oikeus {0} lisätty arvolle {1}
permission.0.removed.from.rank.1=Oikeus {0} poistettu arvosta {1}
rank.0.deleted=Arvo {0} poistettu
clans.ranks=Klaanin arvot\:
ranks.list.item={0}\# {1} ({2})
no.ranks=Arvoja ei luotu
rank.no.permissions=Tällä arvolla ei ole oikeuksia
player.unassigned.from.rank=Pelaajalta poistettu arvo
you.must.be.0.or.have.the.permission.1.to.use.this=7 Sinun pitää olla {0} tai johtajasi pitää antaa sinun arvollesi oikeus {1} käyttää tuota
deposit.not.allowed=Talletus ei ole sallittua, käytä /%clan %toggle %deposit salliaksesi sen
withdraw.not.allowed=Nostaminen ei ole sallittua, käytä /%clan %toggle% %withdraw salliaksesi sen
resign.request.cancelled=Eroamispyyntö peruttu
disband.request.cancelled=Lakkauttamis pyyntö peruttu
resetkdr.request.cancelled=KDR resetointi pyyntö peruttu
clan.create.request.cancelled=Klaanin luontipyyntö peruttu
rank.create.request.cancelled=Arvon luontipyyntö peruttu
promotion.vote.has.been.requested.from.all.leaders=Johtajilta on pyydetty ylennysalennusta
rename.vote.has.been.requested.from.all.leaders=&bJohtajilta on pyydetty uudelleennimeämis äänestystä
allowed=sallittu
blocked=estetty
chat.joined=liittyi
chat.not.joined=ei liittynyt
chat.didnt.join=&bEt liittynyt tälle kanavalle
gui.loading=&7Ladataan...
gui.back.title=&fTakaisin
gui.previous.page.title=&Edellinen Sivu
gui.next.page.title=&fSeuraava Sivu
gui.lore.no.permission=&7Sinulla ei riitä oikeudet nähdä tätä\!
gui.main.title={0} - klaanin valikko
gui.main.languageselector.title=Valitse kielesi
gui.main.languageselector.lore.left.click=&7Klikkaa hiiren vasenta painiketta valitaksesi kielesi
gui.main.languageselector.lore.right.click=&7Klikkaa hiiren oikealla painikkeella auttaaksesi kääntämisessä
gui.main.other.commands.title=&fMuut komennot
gui.main.other.commands.lore=&7Klikkaa vasemmalla nähdäksesi kaikki klaanikomennot
gui.main.clan.list.title=Klaani lista
gui.main.clan.list.lore=&7Klikkaa vasemmalla nähdäksesi klaaniluettelon
gui.main.reset.kdr.title=Nollaa KDR
gui.main.reset.kdr.lore.price=Hinta\: {0}
gui.main.reset.kdr.lore=&7Klikkaa vasemmalla nollataksesi KDR
gui.main.leaderboard.title=&fTulostaulukko
gui.main.leaderboard.lore=&7Klikkaa vasemmalla nähdäksesi tulostaulukon
gui.main.staff.title=&fHenkilökunta
gui.main.staff.lore=&7Napsauta vasemmalla avataksesi henkilökunnan valikon
gui.staff.title=Henkilökunta
gui.staff.clan.list.lore.left.click=&7Klikkaa vasemmalla nähdäksesi kaikki klaanit
gui.staff.clan.list.lore.right.click=&7Klikkaa hiiren kakkospainikkeella nähdäksesi kaikki vahvistamattomat klaanit
gui.player.list.title=Pelaaja luettelo
gui.staff.player.list.title=&Pelaaja luettelo
gui.staff.player.list.lore.left.click=&7Klikkaa vasemmalla nähdäksesi kaikki pelaajat
gui.staff.player.list.lore.right.click=&7Klikkaa oikealla painikkeella nähdäksesi kaikki paikalla olevat pelaajat
gui.staff.global.ff.title=&fMaailmanlaajuinen Oma tuli
gui.staff.global.ff.lore.status=&7Tila\: &b{0}
gui.staff.global.ff.lore.toggle=&7Klikkaa hiiren vasemmalla painikkeella vaihtaaksesi oma tulen tilan
gui.staff.reload.title=&fLataa uudelleen
gui.staff.reload.lore=&7Klikkaa hiiren vasenta ladataksesi laajennuksen uudelleen
gui.staff.clanlist.unverified.title=Vahvistamattomat klaanit - yhteensä\: {0}
gui.staff.clanlist.toplace.title=Valitse {0}\: n uusi klaani
gui.warning.title=Varoitus
gui.warning.no.permission.title=&fEi käyttöoikeuksia
gui.warning.no.permission.plugin.lore=&7Sinulla ei riitä oikeudet tehdä noin\!
gui.warning.no.permission.leader.lore=&7Oletko sinä yksi klaanin johtajista?
gui.warning.no.permission.rank.lore=&7 Sinun pitää olla {0} tai johtajasi pitää antaa sinun arvollesi oikeus {1} käyttää tuota\!
gui.warning.not.verified.title=&fEi vahvistettu
gui.warning.not.verified.lore=&7Klaanisi pitää olla vahvistettu\!
gui.allies.title=Liitot
gui.allies.clan.lore=&7Napsauta hiiren kakkospainikkeella poistaaksesi tämän liittolaisen
gui.allies.add.title=&fLisää liittolainen
gui.add.ally.title=Lisää liittolainen
gui.add.ally.clan.lore=&7Klikkaa hiiren vasemmalla liittoutuaksesi tämän klaanin kanssa
gui.rivals.title=Viholliset
gui.rivals.clan.lore=&7Klikkaa hiiren oikeata painiketta poistaaksesi tämän vihollisen
gui.rivals.add.title=&fLisää vihollinen
gui.add.rival.title=Lisää vihollinen
gui.add.rival.clan.lore=&7Klikkaa vasemmalla kilpaileaksesi tämän klaanin kanssa
gui.clanlist.title=Klaanit - Yhteensä\: {0}
gui.clanlist.clan.title=&fKlaani\: [{0}&f] {1}
gui.clanlist.clan.lore.position=&b\#{0}
gui.clanlist.clan.lore.kdr=&7KDR\: &B{0}
gui.clanlist.clan.lore.members=&7Jäsenet\: &b{0}
gui.coords.title=Koordinaatit
gui.coords.player.lore.distance=&7Etäisyys\: &b{0}
gui.coords.player.lore.coords=&7Koordinaatit\: &b{0} {1} {2}
gui.coords.player.lore.world=&7Maailma\: &b{0}
gui.invite.title=Kutsu pelaaja
gui.invite.player.title=&f{0}
gui.invite.player.price.lore=Hinta\: {0}
gui.invite.player.lore=&7Kutsu hiiren vasemmalla painikkeella
gui.roster.title={0}'s joukkue
gui.roster.invite.title=&fKutsu
gui.roster.invite.lore=&7Kutsu pelaaja liittymään klaaniisi
gui.leaderboard.title=Tulostaulukko - Pelaajat\: {0}
gui.leaderboard.player.title=&f\#{0} {1}
gui.ranks.title=Arvot
gui.ranks.title.set.rank=Aseta arvo - Nykyinen\: {0}
gui.ranks.create.title=&fLuo arvo
gui.ranks.create.lore=&7Klikkaa hiiren vasemmalla painikkeella luodaksesi arvon
gui.ranks.rank.title=&Arvo\: {0}
gui.ranks.rank.displayname.lore=&7Näyttönimi\: &b{0}
gui.ranks.rank.remove.lore=&7Klikkaa hiiren oikeata painiketta poistaaksesi tämän arvon
gui.ranks.rank.edit.permissions.lore=&7Klikkaa vasemmalla painikkeella muokataksesi arvon oikeuksia
gui.ranks.rank.assign.lore=&7Klikkaa hiiren vasemmalla painikkeella määrittääksesi tämän arvon {0}\: lle
gui.permissions.title={0}\: n oikeudet
gui.permissions.add.title=&fLisää käyttöoikeus
gui.permissions.permission.title=&f{0}
gui.permissions.permission.lore=&7Napsauta hiiren kakkospainikkeella poistaaksesi tämän oikeuden arvolta
gui.add.permission.title=Add a permission
gui.add.permission.permission.title=&f{0}
gui.add.permission.permission.lore=&7Klikkaa hiiren vasemmalla lisätäksesi tämän oikeuden arvolle
gui.clandetails.title=[{0}\# {1}
gui.clandetails.free.agent.title=&Vapaa agentti
gui.clandetails.free.agent.create.clan.price.lore=Hinta\: {0}
gui.clandetails.free.agent.create.clan.lore=&7Klikkaa hiiren vasemmalla luodaksesi klaanin
gui.clandetails.clan.title=&f[{0}&f] {1}
gui.clandetails.clan.lore.description=&Kuvaus\: {0}
gui.clandetails.clan.lore.status=&7Tila\: &b{0}
gui.clandetails.clan.lore.leaders=&Johtajat\: {0}
gui.clandetails.clan.lore.online.members=&7Paikalla olevat jäsenet\: &b{0}/{1}
gui.clandetails.clan.lore.kdr=&7KDR\: &B{0}
gui.clandetails.clan.lore.kill.totals=&7Tappoja yhteensä\: &b[Vastustajat\:{0}, Neutraali\: {1}\: Siviili {2}]
gui.clandetails.clan.lore.deaths=&7Kuolemat\: &b{0}
gui.clandetails.clan.lore.fee=&7Maksu\: &b{0}, {1}$
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.allies.separator=&b,
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.rivals.separator=&b,
gui.clandetails.clan.lore.allies=&Liittolaiset\: {0}
gui.clandetails.clan.lore.rivals=&Viholliset\: {0}
gui.clandetails.clan.lore.founded=&7Perustettu\: &b{0}
gui.clandetails.clan.lore.inactive=&7Inaktiivinen\: &b{0}/{1} päivää
gui.clandetails.allies.title=&fLiittolaiset
gui.clandetails.allies.lore=&7Klikkaa vasemmalla hiirenpainikkeella nähdäksesi liittolaisesi tai lisätä uusia
gui.clandetails.rivals.title=&fViholliset
gui.clandetails.rivals.lore=&7Klikkaa vasemmalla hiirenpainikkeella nähdäksesi vihollisesi tai lisätä uusia
gui.clandetails.roster.title=&fNimilista
gui.clandetails.roster.lore=&7Klikkaa hiiren vasemmalla nähdäksesi klaanisi jäsenet tai kutsuaksesi lisää
gui.staffclandetails.roster.lore=&7Klikkaa hiiren vasemmalla nähdäksesi klaanin jäsenet
gui.clandetails.coords.title=&fKoordinaatit
gui.clandetails.coords.lore=&7Klikkaa vasemmalla nähdäksesi klaanisi jäsenien koordinaatit
gui.clandetails.home.title=&fKoti
gui.clandetails.home.lore.teleport.price=&7Teleporttaushinta\: &b{0}
gui.clandetails.home.lore.teleport=&7Klikkaa hiiren vasemmalla painikkeella teleporttaaksesi klaanin tukikohtaan
gui.staffclandetails.home.lore.teleport=&7Klikkaa hiiren vasemmalla painikkeella teleporttaaksesi tämän klaanin kotiin
gui.clandetails.home.lore.clear=&7Pudota esine tyhjentääksesi klaanin koti
gui.clandetails.home.lore.set.price=&7Aseta hinta\: &b{0}
gui.clandetails.home.lore.set=&7Klikkaa hiiren oikealla asettaaksesi klaanisi kodin
gui.staffclandetails.home.lore.set=&7Klikkaa hiiren oikealla asettaaksesi tämän klaanin kodin
gui.clandetails.regroup.title=&fUudelleen ryhmittäydy
gui.clandetails.regroup.lore.price=Hinta\: {0}
gui.clandetails.regroup.lore.home=&7Klikkaa hiiren vasemalla ryhmittääksesi klaanisi jäsenet klaanin kotiin
gui.clandetails.regroup.lore.me=&7Klikkaa hiiren oikealla ryhmittääksesi klaanisi jäsenet sinun sijainillesi
gui.clandetails.ff.title=&fOmatuli
gui.clandetails.ff.personal.lore=&7Henkilökohtainen\: &b{0}
gui.clandetails.ff.clan.lore=&7Klaani\: &b{0}
gui.clandetails.ff.personal.toggle.lore=&7Klikkaa hiiren vasemmalla painikkeella vaihtaaksesi oma tulen tilan
gui.clandetails.ff.clan.toggle.lore=&7Klikkaa hiiren oikealla painikkeella vaihtaaksesi klaanisi oman tulen tilan
gui.clandetails.bank.title=&fPankki
gui.clandetails.bank.balance.lore=&7Saldo\: &b{0}
gui.clandetails.bank.withdraw.status.lore=&7Nosta\: &b{0}
gui.clandetails.bank.deposit.status.lore=&7Talletus\: &b{0}
gui.clandetails.bank.withdraw.toggle.lore=&7Tiputa tavara kytkeäksesi nostamisen tilan
gui.clandetails.bank.deposit.toggle.lore=&7Klikkaa hiiren oikealla painikkeella vaihtaaksesi talletuksen tilan
gui.clandetails.fee.title=&fMaksu
gui.clandetails.fee.status.lore=&7Tila\: &b{0}
gui.clandetails.fee.value.lore=&7Arvo\: &b{0}
gui.clandetails.fee.toggle.lore=&7Paina hiiren vasemmalla vaihtaaksesi maksun tilan
gui.clandetails.rank.title=&fArvo
gui.clandetails.rank.lore=&7Klikkaa vasemmalle nähdäksesi klaanin arvot ja muokkaa niitä
gui.clandetails.verified.title=&fVarmennettu
gui.clandetails.not.verified.title=&fEi vahvistettu
gui.clandetails.verify.price.lore=Hinta\: {0}
gui.clandetails.not.verified.lore=&7Klikkaa hiiren vasemmalla varmistaaksesi klaanisi
gui.staffclandetails.not.verified.lore=&7Klikkaa hiiren vasemmalla varmistaaksesi tämän klaanin
gui.clandetails.resign.title=&fErota
gui.clandetails.resign.lore=&7Klikkaa hiiren vasemmalla erotaksesi klaanista
gui.clandetails.disband.title=&fLakkauta
gui.clandetails.disband.lore=&7Pudota esine lakkauttaaksesi klaanisi
gui.staffclandetails.disband.lore=&7Paina hiiren vasemmalla lakkauttaaksesi tämän klaanin
gui.clandetails.chat.title=&fChatti
gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - &bLähettää viestin klaanin keskustelupalstalle
gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &bLiittyy/poistuu klaanikeskustelusta
gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - &bLähettää viestin liittolaisten keskustelupalstalle
gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &bLiittyy/poistuu liittolaistenkeskustelusta
gui.clandetails.chat.clan.status.lore=&7Klaani\: &b{0}
gui.clandetails.chat.ally.status.lore=&7Liittolainen\: &b{0}
gui.clandetails.chat.clan.toggle.lore=&7Klikkaa vasemmalla vaihtaaksesi klaanin keskustelu tilan
gui.clandetails.chat.ally.toggle.lore=&7Klikkaa hiiren oikealla vaihtaaksesi liittolaisten keskustelu tilan
gui.playerdetails.title={0}
gui.playerdetails.player.title=&f{0}
gui.playerdetails.player.lore.noclan=&7Klaani\: &bEi ole
gui.playerdetails.player.lore.clan=&fKlaani\: [{0}&f] {1}
gui.playerdetails.player.lore.rank=&7Arvo\: &b{0}
gui.playerdetails.player.lore.status=&7Tila\: &b{0}
gui.playerdetails.player.lore.kdr=&7KDR\: &B{0}
gui.playerdetails.player.lore.kill.totals=&7Tappoja yhteensä\: &b[Vastustajat\:{0}, Neutraali\: {1}\: Siviili {2}]
gui.playerdetails.player.lore.deaths=&7Kuolemat\: &b{0}
gui.playerdetails.player.lore.join.date=&7Liittymispäivämäärä\: &b{0}
gui.playerdetails.player.lore.last.seen=&7Viimeksi nähty\: &b{0}
# suppress inspection "TrailingSpacesInProperty"
gui.playerdetails.player.lore.past.clans.separator=&b,
gui.playerdetails.player.lore.past.clans=&7Aiemmat klaanit\: &b{0}
gui.playerdetails.player.lore.inactive=&7Inaktiivinen\: &b{0}/{1} päivää
gui.playerdetails.kick.title=&fPotkia
gui.playerdetails.promote.demote.title=&fYlentää/Alentaa
gui.playerdetails.promote.lore.left.click=&7Paina hiiren vasemmalla ylentääksesi
gui.playerdetails.demote.lore.right.click=&7Paina hiiren oikealla alentaaksesi
gui.playerdetails.assign.unassign.title=&fAnna arvo/Poista arvo
gui.playerdetails.assign.lore.left.click=&7Paina hiiren vasemmalla antaaksesi arvon
gui.playerdetails.unassign.lore.right.click=&7Paina hiiren oikealla poistaaksesi arvon
gui.playerdetails.trust.untrust.title=&fLuota/Poista luottamus
gui.playerdetails.trust.lore.left.click=&7Paina hiiren vasemmalla luottaaksesi
gui.playerdetails.untrust.lore.right.click=&7Paina hiiren oikealla poistaaksesi luottamus
gui.playerdetails.ban.unban.title=&fPorttikiellä/Poista porttikielto
gui.playerdetails.ban.left.click=&7Klikkaa vasemmalla kieltääksesi pelaaja klaaneista
gui.playerdetails.unban.right.click=&7Klikkaa oikealla poistaaksesi kiellon pelaajalta
gui.playerdetails.resetkdr.lore=&7Klikkaa vasemmalla resetoidaksesi pelaajan KDR\:än
gui.playerdetails.purge.title=&fPuhdista
gui.playerdetails.purge.lore=&7Klikkaa vasemmalla puhdistaaksesi tämän pelaajan tiedot
gui.playerdetails.place.title=&fAnna
gui.playerdetails.place.lore=&7Klikkaa vasemmalla valitaksesi klaanin pelaajalle
gui.languageselector.title=Kielet - Nykyinen\: {0}
gui.languageselector.language.title=&f{0}
gui.languageselector.language.lore.left.click=&7Klikkaa vasemmalla valitaksesi tämän kieleksesi
gui.languageselector.language.lore.translation.status=&7Käännöksen tila\: &b{0}%
gui.languageselector.language.lore.right.click=&7Klikkaa hiiren oikealla painikkeella auttaaksesi kääntämisessä
gui.confirmation.title=Vahvistus
gui.confirmation.confirm=&7Klikkaa tästä vahvistaaksesi
gui.confirmation.return=&7Klikkaa tästä mennäksesi takaisin
gui.not.supported=&cVirhe tapahtui GUI\:ta avatessa\! Otetaan pois käytöstä... Latasitko varmasti oikean version?
staff.member.verify.clan=&cHenkilökunnan jäsenen pitää vahvistaa klaanisi\!
player.already.has.that.rank=&cPelaajalla on jo kyseinen arvo\!
joined.clan.chat=&bLiityit klaani chattiin
already.joined.clan.chat=&bOlet jo liittynyt klaani chattiin
left.clan.chat=&bLähdit klaanichatista
muted.clan.chat=&bMykistit klaanichatin
unmuted.clan.chat=&bPoistit mykistyksen klaanichatista
joined.ally.chat=&bLiityit liittolaisten chattiin
left.ally.chat=&bLähdit liittolaisten chatista
muted.ally.chat=&bMykistit liittolaisten chatin
unmuted.ally.chat=&bPoistit mykistyksen liittolaisten chatista
already.joined.ally.chat=&bOlet jo liittynyt liittolaisten chattiin
player.already.in.this.clan=&cPelaaja on jo tässä klaanissa
your.clan.reached.max.alliances=&cKlaanisi on saavuttanut liittolaisten enimmäismäärän
other.clan.reached.max.alliances=&cToinen klaani jo saavuttanut liittolaisten enimmäismäärän
insert.clan.tag=&bKirjoita klaanin tunniste (tai "{0}")\:
insert.clan.name=&bKirjoita klaanin tunniste\:
insert.rank.name=&bKirjoita arvon nimi (tai "{0}")\:
click.to.help.translating=&bKlikkaa tätä linkkiä auttaaksesi kääntämisessä\:\n&r{0}
your.clan.must.have.members.to.verify=&bKlaanillasi täytyy olla ainakin {0} jäsentä jotta klaani voidaan vahvistaa\!
you.must.hold.a.banner=&cSinulla pitää olla lippu kädessäsi\!
you.changed.clan.banner=&bVaihdoit klaanisi lippua\!
your.clan.already.verified=&cKlaanisi on jo vahvistettu\!
# suppress inspection "TrailingSpacesInProperty"
clan.profile=\n&b%clan_name%&7 profiili &8-------------------------------------------\n \n &7Nimi\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Kuvaus\: &f%clan_description%\n &7Tila\: &f%clan_status%\n &7Johtajat\: %clan_leaders%\n &7Jäseniä pelaamassa\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Tapot yhteensä\: &8[Rival\:&f%clan_rival_kills% &8Liittolaiset\:&f%clan_ally_kills% &8Neutraali\:&f%clan_neutral_kills% &8Siviili\:&f%clan_civilian_kills%&8]\n &7Kuolemat\: &f%clan_deaths%\n &7Vero\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Liittolaiset\: &f%clan_allies%\n &7Viholliset\: &f%clan_rivals%\n &7Perustettu\: &f%clan_founded%\n &7Toimeeton\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% päivää\n
player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name%
# suppress inspection "TrailingSpacesInProperty"
player.lookup.killtype=&7Tappotyyppi\: %player_kill_type%
player.lookup=\n&b%player_name%&7's pelaajan tiedot &8-------------------------------------------\n \n &7Klaani\: &f%clan_name%\n &7Arvo\: &f%player_rank%\n &7Tila\: &f%player_status%\n &7KDR\: &e%player_kdr%\n &7Tappoja yhteensä\: &8[Viholliset\:&f%player_rival_kills% &8Liittolaiset\:&7%player_ally_kills% &8Neutraali\:&f%player_neutral_kills% &8Siviili\:&f%player_civilian_kills%&8]\n &7Kuolema\: &f%player_deaths%\n &7Liittymispäivä\: &f%player_join_date%\n &7Viimeksi nähty\: &f%player_last_seen%\n &7Aiemmat klaanit\: &f%player_past_clans%\n &7Toimeeton &f%player_inactive_days%&7/&f%player_max_inactive_days% päivää\n %kill_type_line%
economy.disabled=&cEkonomia poistettu käytöstä\!
has.been.purged=Pelaajan {0} tiedot puhdistettu
accepted.invitation=&bHyväksyit {0} pyynnön
denied.invitation=&cKielisit {0} pyynnön
must.be.in.clan.to.pvp=&cSinun ja pelaajan {0} pitää olla klaanissa jotta voitte PVP\!
clans.not.at.war.pvp.denied=&cKlaanisi ei sodi klaanin {0} kanssa\!
cannot.attack.civilians=&cEt voi hyökätä siviilejä\!
cannot.attack.clan.member=&cEt voi hyökätä toista klaanin jäsentä\!
cannot.attack.ally=&cEt voi hyökätä liittolaistasi\!
cannot.send.discord.message=Et voi lähettää viestejä {0}. Et ole klaanin jäsen\!
discordhook.is.disabled=&cDiscord-integraatio on poistettu käytöstä tai sitä ei ole saatavilla\!
your.clan.doesnt.have.any.linked.player=Klaanillasi ei ole liitettyjä jäseniä
your.clan.doesnt.have.minimum.linked.player=Klaanillasi ei ole tarpeeksi liitettyjä jäseniä
your.clan.is.not.on.the.whitelist=Klaanisi ei ole sallittu
your.clan.already.has.channel=Klaanillasi on jo discord kanava
discord.reached.category.limit=Discord on osunut kategorien rajaan\!
discord.reached.channels.limit=Discord on osunut kanavien rajaan\!
discord.created.successfully=&bDiscord-kanava luotiin onnistuneesti\!
you.did.not.link.your.account=Et ole linkittänyt tiliäsi\!
# suppress inspection "TrailingSpacesInProperty"
cannot.change.member.fee.now=&cEt voi vaihtaa jäsenmaksua lähellä sen keräilyaikaa.
cannot.change.member.fee.hours=&cYritä uudelleen {0} tunnin kuluttua...
cannot.change.member.fee.minutes=&cYritä uudelleen {0} minuutin kuluttua...
cannot.kick.last.leader=&Et voi siirtää viimeistä johtajaa\!
cannot.disband.permanent=&cEt voi poistaa tätä klaania. Sillä on pysyvä tila.
you.can.only.set.base.in.your.land=&cVoit asettaa kodin vain maallasi\!
only.leaders.can.create.lands=&cVain johtajat voivat luoda maita\!
only.one.land.per.clan=&cKlaanillasi on jo maa\!
only.clan.members.can.create.lands=&cVain klaanin jäsenet voivat luoda maita\!
land.allowed.all.actions=&bKaikki toiminnot ovat nyt sallittuja\!
land.blocked.all.actions=&bKaikki toiminnot ovat nyt estettyjä\!
land.allowed.action=&bSallittu toiminto\!
land.blocked.action=&bEstetty toiminto\!
you.do.not.own.lands=&cEt omista maata\!
land.sharing.disabled=&cMaiden jakaminen on poistettu käytöstä\!
clan.chat.disabled=&cKlaani chatti on pois päältä\!
ally.chat.disabled=&cLiittolaisten chatti on pois päältä\!
war.expired=Sota {0} kanssa on päättynyt\!
you.cant.start.war.online.members.difference=Et voi alottaa sotaa. Toisella klaanilla on enemmän jäseniä paikalla kuin toisella.
invitedplayer.invite.off=Tämä pelaaja on poistanut klaanikutsut pois käytöstä
user.hasnt.played.before=&cTämä käyttäjä ei ole pelannut ennen
clan.list.balance.header=\n{0} &7korkein saldo &8-----------------------\n\n&8Klaaneja yhteensä\: &7{1}\n\n&8\#&7. &8Klaani &7- &8Saldo
clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$
+12 -222
View File
@@ -8,7 +8,6 @@ removedefault.command=supprimerdefaut
permissions.command=permissions
list.command=liste
balance.command=solde
list.order.asc=ascendant
list.order.desc=desc
list.type.name=nom
list.type.kdr=kda
@@ -24,7 +23,7 @@ interact_entity.command=interaction_entite
container.command=conteneur
confirm.command=confirmer
profile.command=profile
roster.command=liste des membres
roster.command=membres
lookup.command=recherche
leaderboard.command=classement
alliances.command=alliances
@@ -32,7 +31,7 @@ rivalries.command=rivalités
vitals.command=vitaux
coords.command=coordonnées
stats.command=statistiques
ally.command=allié
ally.command=allie
add.command=ajoute
remove.command=retirer
allow.command=autoriser
@@ -43,10 +42,8 @@ assign.command=assigner
unassign.command=enlever
rival.command=rival
bb.command=bb
display.command=affichage
clear.command=effacer
modtag.command=modtag
rename.command=renommer
toggle.command=basculer
tag.command=tag
deposit.command=dépôt
@@ -169,37 +166,27 @@ command.description.bb.display=Affichez le bulletin de votre clan
command.description.bb.clear=Effacez le bulletin de votre clan
command.description.bb.post=Postez un message sur le bulletin de votre clan
command.description.mod.bb.display=Affiche le tableau de bord d'un clan
command.description.mod.bb.clear=Effacer le bulletin de votre clan
command.description.mod.bb.post=Poster un message sur le bulletin de votre clan
command.description.place=Place un joueur dans un clan
command.description.reload=Recharge le plugin et sa configuration
command.description.trust=Fait confiance à un membre
command.description.untrust=Ne fait plus confiance à un membre
command.description.resign=Rejette de votre clan
command.description.help=Affiche cette aide ou recherche dans l'aide
command.description.ally.add=Ajoute un allié
command.description.clan=Ouvre l'interface
command.description.disband=Dissoudre votre clan
command.description.mod.disband=Dissoudre un clan
command.description.mod.kick=Exclure un joueur du clan
command.description.modtag.other=Modifier le tag du clan
command.description.modtag=Modifie votre tag de clan
command.description.purge=Purge certainnes données du joueur
command.description.setbanner=Défini votre bannière de clan
command.description.verify=Vérifie ton clan
command.description.mod.verify=Vérifie un clan
command.description.invite=Invite un joueur dans votre clan
command.description.fee.check=Regarder la taxe de votre clan et s'il est disponible
command.description.fee.set=Entrer la taxe de votre clan
command.description.bank.status=Vérifie la balance bancaire de votre clan
command.description.bank.admin.status=Vérifier le solde bancaire d'un clan
command.description.bank.withdraw.all=Retirer tout de la banque de votre clan
command.description.bank.withdraw.amount=Retirer un montant de la banque de votre clan
command.description.bank.admin.take=Prélever une somme d'argent dans la banque d'un clan
command.description.bank.deposit.all=Déposez tout votre argent dans la banque de votre clan
command.description.bank.deposit.amount=Déposez une somme d'argent dans la banque de votre clan
command.description.bank.admin.give=Donne une somme d'argent à la banque d'un clan
command.description.bank.admin.set=Définis la somme d'argent de la banque d'un clan
command.description.war.start=Commence une guerre
command.description.war.end=Termine une guerre
command.description.resetkdr.everyone=Réinitialise la KDA de tout le monde
@@ -207,33 +194,6 @@ command.description.resetkdr.player=Réinitialise la KDA d'un joueur
command.description.resetkdr=Réinitialise ton KDA
command.description.admin.demote=Rétrograder n'importe quel chef de n'importe quel clan
command.description.demote=Rétrograde un chef
command.description.admin.promote=Promouvoir n'importe quel membre de n'importe quel clan
command.description.promote=Promouvoir un membre en tant que leader
command.description.admin.permanent=Bascule le statut permanent de n'importe quel clan
command.description.toggle.bb=Permet d'afficher ou non le tableau d'affichage lors de la connexion
command.description.toggle.invite=Bascule si les joueurs peuvent vous envoyer des invitations de clan ou non
command.description.toggle.tag=Permet d'afficher ou non l'étiquette de votre clan à côté de votre nom
command.description.toggle.deposit=Permet de déterminer si les dépôts sont autorisés dans votre clan
command.description.toggle.withdraw=Bascule si les retraits dans le clan sont activés ou non
command.description.toggle.fee=Bascule si la taxe du clan est activée ou non
command.description.alliances=Liste toutes les alliances de clan
command.description.coords=Montre les coordonnées des membres du clan
command.description.rank.assign=Assigne un rang à un membre
command.description.rank.unassign=Enlève un rang à un membre
command.description.rank.create=Crée un rang
command.description.rank.delete=Retire un rang
command.description.rank.list=Liste les rangs de votre clan
command.description.rank.setdisplayname=Sélectionner l'affichage d'un rang
command.description.rank.setdefault=Sélectionné le rang par défaut
command.description.rank.removedefault=Enlève le rang par défaut
command.description.rank.permissions.available=Liste les permissions de rang disponible
command.description.rank.permissions.rank=Liste les permissions d'un rang
command.description.rank.permissions.add=Ajoute une permission à un rang
command.description.rank.permissions.remove=Enlève une permission à un rang
command.description.rename=Renommer votre clan
command.description.mod.rename=Renommer un clan
command.description.locale=Définir votre langue
command.description.mod.locale=Définir la langue d'un joueur
home-menu=/{0} home{1} - Téléporte au domicile du clan
home-set-menu=/{0} home set{1} - Définir le domicile du clan
home-clear-menu=/{0} home set{1} - Effacer le domicile du clan
@@ -251,7 +211,6 @@ clans.lower=clans
rival=Rival
civilian=Civil
neutral=Neutre
ally=Allié
free.agent=Agent Libre
days=jours
rivals=Rivaux
@@ -260,10 +219,9 @@ online=En ligne
player=Joueur
seen=Vu
leader=chef
roster=liste des membres
roster=membres
trusted=fiable
untrusted=non fiable
in.rank=en rang
deaths=Morts
weights=Poids
stats=statistiques
@@ -274,12 +232,10 @@ food=Nourriture
vitals=vitaux
verified=Vérifié
unverified=Non vérifié
permanent=Permanent
profile=profile
civilian.abbreviation=Civ
rank=Rang
leaders=Chefs
none=&8Aucun
today=Aujourd'hui
kills=Tue
mostkilled=Plus Tués
@@ -294,7 +250,6 @@ membership.invitation={0} a refusé l'invitation à rejoindre
joined.the.clan={0} a rejoint le clan
signed.off.request.cancelled={0} s'est déconnecté. Demande {1} annulée.
clan.deletion={0} a refusé la suppression du clan. Le consensus a échoué.
rename.refused={0} a refusé le changement de nom du clan. Le consensus a échoué.
has.been.disbanded=Le clan {0} a été dissous
denied.the.promotion={0} a refusé la promotion de {1}. Le consensus a échoué.
demoted.back.to.member={0} a été rétrogradé en tant que membre
@@ -310,17 +265,12 @@ has.joined={0} a rejoint {1}
proposing.to.end.the.rivalry={0} propose de mettre fin à la rivalité avec {1}
proposing.an.alliance={0} propose une alliance avec {1}
inviting.you.to.join={0} vous invite à rejoindre {1}
asking.for.the.deletion={0} demande la suppression du clan
asking.for.the.promotion={0} demande la promotion de {1}
asking.for.the.demotion={0} demande la rétrogradation de {1}
asking.to.disband={0} demande la dissolution du clan
asking.to.rename={0} demande à renommer le clan en {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \ &8[&8{0}&8] &b{1}\n %accepter% &bor %refuser%\n
clickable.accept=&a&l[ACCEPTER]
clickable.deny=&c&l[REFUSER]
hover.click.to.accept=Cliquez ici pour accepter
hover.click.to.deny=&cCliquez ici pour refuser
not.sufficient.money=Vous n'avez pas assez d'argent sur votre compte (nécessaire \: {0} $)
account.has.been.debited=Votre compte a été débité {0}
mysql.connection.successful=MySQL Connexion réussie
mysql.connection.failed=MySQL Échec de la connexion
@@ -332,14 +282,12 @@ clan.players=Joueurs du Clan\: {0}
clans=Clans\: {0}
banned=Vous êtes banni des commandes de clan
nothing.more.to.see=Rien de plus à voir
nothing.to.vote=&cRien à accepter ou à refuser
no.leader.permissions=Vous n'avez pas les permissions de chef
you.have.already.voted=Vous avez déjà voté
has.voted.to.deny={0} a voté pour refuser
view.next.page=Tapez /{0} pour voir la page suivante.
voted.to.accept={0} a voté pour accepter
bulletin.board.header=&8* &e{0} &ftableau d'affichage
bulletin.board.message={0}\: &f{1}
bulletin.board.header={0}* {1}{2} tableau d’affichage
has.been.disbanded.rivalry.ended={0} a été dissous. Rivalité terminée.
has.been.disbanded.alliance.ended={0} a été dissous. L'alliance est terminée.
clan.disbanded=Clan Dissous
@@ -347,11 +295,8 @@ clan.disbanded=Clan Dissous
many.color.days={0}{1} jours
insufficient.permissions=Permissions insuffisantes
clan.is.not.verified=Le clan n'est pas vérifié
player.not.a.member.of.any.clan=&cLe joueur n'est membre d'aucun clan
not.a.member.of.any.clan=Vous n'êtes membre d'aucun clan
minimum.to.make.alliance=Votre clan doit avoir au moins {0} joueurs pour faire des alliances
cannot.be.same.clan=&cVous devez insérer un clan différent du vôtre \!
other.clan.not.verified=&cL'autre clan n'est pas vérifié \!
your.clans.are.not.allies=Vos clans ne sont pas alliés
has.broken.the.alliance={0} a rompu l'alliance avec {1}
at.least.one.leader.accept.the.alliance=Au moins un chef de l'alliance doit être en ligne pour accepter l'alliance
@@ -366,17 +311,16 @@ clan.wide.friendly.fire.blocked=Tir allié de clan bloqué
clan.wide.friendly.fire.is.allowed=Tir allié de clan autorisé
you.are.the.only.member.online=Vous êtes le seul membre en ligne
your.clan.color.tag.cannot.be.longer.than.characters=&Votre tag de clan ne peut pas dépasser {0} caractères
your.clan.tag.cannot.be.longer.than.characters=&cVotre tag de clan ne peut pas être plus long que {0} caractères
your.clan.tag.must.be.longer.than.characters=&cVotre tag de clan doit être plus grand que {0} caractères
your.tag.cannot.contain.the.following.colors=&cVotre tag de clan ne peut pas contenir les couleurs suivantes\: {0}
your.tag.doesnt.meet.the.requirements=&cVotre tag ne répond pas aux exigences.
your.tag.cannot.contain.color.codes=&cVotre tag ne peut pas contenir des codes de couleur
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cLe tag de votre clan ne peut contenir que des lettres, des chiffres et des codes de couleur
your.clan.tag.cannot.be.longer.than.characters=Votre tag de clan ne peut pas dépasser {0} caractères
your.clan.tag.must.be.longer.than.characters=Votre tag de clan doit être plus grand que {0} caractères
your.tag.cannot.contain.the.following.colors=Votre tag de clan ne peut pas contenir les couleurs suivantes\: {0}
your.tag.cannot.contain.color.codes=Votre tag ne peut pas contenir des codes de couleur
you.cannot.set.colored.ranks=Vous ne pouvez pas définir de rangs colorés
your.clan.name.cannot.be.longer.than.characters=Votre tag de clan ne peut pas dépasser {0} caractères
your.clan.name.must.be.longer.than.characters=Le nom d'utilisateur doit être composé de plus de {0} caractères
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=Le tag de votre clan ne peut contenir que des lettres, des chiffres et des codes de couleur
your.clan.name.cannot.contain.color.codes=Votre tag ne peut pas contenir des codes de couleur
that.tag.name.is.disallowed=&cCe nom de tag n'est pas autorisé
that.tag.name.is.disallowed=Ce nom de tag n'est pas autorisé
you.must.first.resign=Vous devez d'abord démissionner de {0}
clan.with.this.tag.already.exists=Un clan avec cette étiquette existe déjà
get.your.clan.verified.to.access.advanced.features=Faites vérifier votre clan pour accéder aux fonctionnalités avancées
@@ -384,7 +328,6 @@ clan.created=Clan {0} créé
not.enough.leaders.online.to.vote.on.demotion=Il n'y a pas assez de chefs en ligne pour voter sur cette rétrogradation
demotion.vote.has.been.requested.from.all.leaders=Le vote de rétrogradation a été demandé par tous les chefs
player.is.not.a.leader.of.your.clan=Le joueur n'est pas un chef de votre clan
player.is.not.a.leader=Le joueur n'est pas un leader
clan.has.been.disbanded=Le clan {0} a été dissous
clan.disband.vote.has.been.requested.from.all.leaders=Le vote de dissolution du clan a été demandé par tous les chefs
friendy.fire.is.now.managed.by.your.clan=Le feu d'allié est maintenant géré par votre clan
@@ -393,9 +336,8 @@ global.friendy.fire.is.now.managed.by.each.clan=Le feu d'allié est maintenant g
global.friendy.fire.is.already.being.managed.by.each.clan=Le feu d'allié est déjà géré par chaque clan
global.friendly.fire.is.set.to.allowed=Le feu d'allié global est configuré sur autorisé
global.friendly.fire.is.already.being.allowed=Le feu d'allié global est déjà configuré sur autorisé
the.player.doesn.t.not.have.the.permissions.to.join.clans=Le joueur n'a pas les permissions nécessaires pour rejoindre les clans
the.player.doesn.t.not.have.the.permissions.to.join.clans=Le joueur n'a pas les permissions pour rejoindre les clans
you.cannot.invite.yourself=Vous ne pouvez pas vous invitez vous-même
you.did.not.answer.in.time=Vous n'avez pas répondu à temps, annulation...
this.player.is.banned.from.using.clan.commands=Ce joueur n'est pas autorisé à utiliser les commandes du clan
the.player.is.already.member.of.another.clan=Le joueur est déjà membre d'un autre clan
has.been.asked.to.join={0} a été demandé à rejoindre {1}
@@ -415,20 +357,16 @@ kdr.0=KDR\: {0}
inactive.0=Inactif\: {0}
clan.commands=commandes de clan
you.can.only.modify.the.color.and.case.of.the.tag=Vous ne pouvez seulement modifier la couleur et le tag
locale.has.been.changed=&cVotre langue a été modifiée
tag.changed.to.0=Tag changé à {0}
0.tag.changed.to.1=&bLe tag de {0} a été changé avec succès en {1}
name.0=Nom\: {0}
description.0=Description\: {0}
leaders.0=Chefs\: {0}
allies.0=Alliés\: {0}
rivals.0=Rivaux\: {0}
other.player.must.be.online=Le joueur doit être en ligne \!
the.player.does.not.have.the.permissions.to.lead.a.clan=Le joueur n'a pas la permission de diriger un clan
you.cannot.promote.yourself=Vous ne pouvez pas vous promouvoir vous-même
the.player.is.already.a.leader=Le joueur est déjà un chef
configuration.reloaded=Configuration rechargée
last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan=Le dernier chef ne peut pas démissionner. Vous devez nommer un autre chef ou dissoudre le clan
0.has.resigned={0} a démissionné
you.cannot.trust.yourself=Vous ne pouvez pas vous faire confiance
leaders.are.already.trusted=Les chefs sont déjà de confiance
@@ -488,8 +426,6 @@ iron=fer
the.clan.cannot.be.rivaled=Le clan ne peut pas être rivalisé
bboff=BB désactivé
bbon=BB activé
inviteon=Invitation activée
inviteoff=Invitation désactivée
tagoff=Tag désavtivé
tagon=Tag activé
depositon=Dépôt activé
@@ -504,7 +440,6 @@ hombase.set=Domicile du clan est fixée à \: {0}
hombase.cleared=Domicile du clan effacé
hombase.mod.set=Le domicile de {0} a été définie à\:
hombase.not.set=Domicile non défini
home.set.in.different.server=La base de clan a été définie dans un autre serveur
rival.limit.reached=Vous avez atteint la limite de rivaux. Vous ne pouvez plus rivaliser avec aucun autre clan.
you.moved.teleport.cancelled=Vous avez bougé, téléportation annulée
waiting.for.teleport.stand.still.for.0.seconds=En attente de téléportation, restez immobile pendant {0} secondes
@@ -515,48 +450,20 @@ your.clans.are.already.rivals=Vos clans sont déjà rivaux
player.got.money=Vous avez reçu {0} pour avoir tué {1} selon votre KDR \: {2}
cleared.bb=Tableau d'affichage effacé
clan.balance=Solde du clan\: {0}
clan.admin.balance={0}'s solde\: {1} $
bb.fee.player.kicked={0} a été expulsé pour ne pas avoir payé les frais
bb.fee.set={0} $ est le montant des frais
bb.clan.deposit={0} $ ont été déposés par {1}
player.clan.deposit=Vous avez déposé {0}
bb.clan.withdraw={0} $ ont été retirés par {1}
bb.clan.take={0} $ ont été pris par {1}
bb.clan.give={0} $ ont été données par {1}
bb.clan.set={0} $ ont été définis par {1}
player.clan.withdraw=Vous retirez {0}
clan.admin.take=Vous avez prélevé {0} $ sur la solde de {1}
clan.admin.give=Vous avez donné {0} $ à la solde de {1}
clan.admin.set=Vous mettez le solde bancaire de {0} à {1}
clan.admin.bank.not.enough.money=La solde de {0} n'a pas assez d'argent \!
clan.bank.not.enough.money=Votre banque de clans n'a pas assez d'argent
your.clans.are.not.rivals=Vos clans ne sont pas rivaux
the.clan.members.reached.limit=Votre clan a atteint la limite de membres
this.clan.has.reached.the.member.limit=&bCe clan à atteint la limite de clan maximale
you.have.reseted.your.kdr=Vous avez réinitialisé votre KDR
you.have.reseted.0.kdr=Vous avez réinitialisé la KDR de {0}
you.have.reseted.kdr.of.all.players=Vous avez réinitialisé la KDR de tous les joueurs
you.have.successfully.renamed.your.clan=&bVous avez renommé votre clan en {0} avec succès
you.have.successfully.renamed.the.clan=&bVous avez renommé le clan en {0} avec succès
you.have.toggled.permanent.status=Vous avez activé le statut permanent pour {0}
permanent.status.enabled=Le statut permanent de votre clan à été activé par {0}
permanent.status.disabled=Le statut permanent de votre clan à été désactivé par {0}
yes=Oui
cancel=Annuler
resign.confirmation=Êtes-vous sûr de vouloir démissionner ? {0}
disband.confirmation=Êtes-vous sûr de dissoudre votre clan ? {0}
resetkdr.confirmation=Êtes-vous sûr de réinitialisé votre KDR ? {0}
resign.success=Vous avez démissionné de votre clan avec succès
you.cannot.demote.the.last.leader=Vous ne pouvez pas rétrograder le dernier chef
you.cannot.move.the.last.leader=Vous ne pouvez pas bouger le dernier leader
player.successfully.demoted=Le lecteur a été rétrogradé avec succès
player.successfully.promoted=Ce joueur à été promu avec succès
bb.ago= auparavant
bb.moments=moments
bb.seconds= secondes
bb.minutes= \ minutes
bb.one.minute=1 minute
bb.hours= heures
bb.one.hour=1 heure
bb.days= jours
bb.one.day=1 jour
@@ -576,8 +483,6 @@ no.description=Sans description
the.player.must.wait.0.before.joining.your.clan.again=Ce joueur doit attendre {0} minute(s) avant de rejoindre votre clan à nouveau
disabled.command=Commande désactivée
rank.displayname.updated=Le nom d'affichage du rang a été mis à jour \!
rank.setdefault=Le rang par défaut du clan a été mis a {0}
rank.removedefault=Le rang par défaut du clan a été retiré
rank.0.permissions=Permissions du rang {0}\:
available.rank.permissions=Permissions disponibles pour les rangs\:
rank.already.exists=Le rang existe déjà
@@ -592,29 +497,17 @@ no.ranks=Aucun rang n'a été créé
rank.no.permissions=Ce rang n'a aucune permission
player.unassigned.from.rank=Joueur retiré d'un rang
you.must.be.0.or.have.the.permission.1.to.use.this=Vous devez être {0} ou votre chef doit donner à votre rang la permission {1} pour utiliser ceci
deposit.not.allowed=Les dépôts d'argent sont désactivés, utilisés /%clan %toggle %deposit pour l'activé
withdraw.not.allowed=Les retraits sont désactivés, utilisé /%clan %toggle %withdraw pour l'activé
resign.request.cancelled=Demande de démission annulée
disband.request.cancelled=Demande de démission annulée
resetkdr.request.cancelled=Demande de réinitialisation du KDR annulée
clan.create.request.cancelled=Demande de création de clan annulée
rank.create.request.cancelled=Demande de création de rang annulée
promotion.vote.has.been.requested.from.all.leaders=Le vote de promotion a été demandé par tous les chefs
rename.vote.has.been.requested.from.all.leaders=&bLe vote de changement de nom a été demandé par tout les leaders
allowed=autorisé
blocked=bloqué
chat.joined=rejoint
chat.not.joined=non rejoint
chat.didnt.join=&bVous n'avez pas rejoint ce salon
gui.loading=§7Chargement ...
gui.back.title=&fRetour
gui.previous.page.title=&fPage Précédente
gui.next.page.title=&fPage Suivante
gui.lore.no.permission=Vous n'avez pas la permission pour effectuer cela\!
gui.main.title={0} - menu du clan
gui.main.languageselector.title=Sélectionnez votre langue
gui.main.languageselector.lore.left.click=&7Clic gauche pour sélectionner votre langue
gui.main.languageselector.lore.right.click=&7Clic droit pour aider à traduire
gui.main.other.commands.title=&fAutres commandes
gui.main.other.commands.lore=&7Clic gauche pour voir toutes les commandes du clan
gui.main.clan.list.title=&fListe des Clans
@@ -624,22 +517,7 @@ gui.main.reset.kdr.lore.price=&7Prix\: &b{0}
gui.main.reset.kdr.lore=&7Clic gauche pour réinitialiser votre KDR
gui.main.leaderboard.title=&fClassement
gui.main.leaderboard.lore=&fClique gauche pour voir le classement
gui.main.staff.title=&fStaff
gui.main.staff.lore=&7Clic gauche pour ouvrir le menu du staff
gui.staff.title=Staff
gui.staff.clan.list.lore.left.click=&7Clic gauche pour voir tous les clans
gui.staff.clan.list.lore.right.click=&7Clic droit pour voir tous les clans non vérifiés
gui.player.list.title=Liste des joueurs
gui.staff.player.list.title=&Liste des joueurs
gui.staff.player.list.lore.left.click=&7Clic gauche pour voir tous les joueurs
gui.staff.player.list.lore.right.click=&7Clic droit pour voir tous les joueurs en ligne
gui.staff.global.ff.title=&fTirs d'amis global
gui.staff.global.ff.lore.status=&fStatus\: {0}
gui.staff.global.ff.lore.toggle=&7Clique gauche pour activer le statut de tir d'ami
gui.staff.reload.title=&fRecharger
gui.staff.reload.lore=&7Clique gauche pour recharger le plugin
gui.staff.clanlist.unverified.title=Clans non vérifiés - Total\: {0}
gui.staff.clanlist.toplace.title=Sélectionnés le nouveau clan de {0}
gui.warning.title=Avertissement
gui.warning.no.permission.title=&fAucune permission
gui.warning.no.permission.plugin.lore=Vous n'avez pas la permission pour effectuer cela\!
@@ -725,7 +603,6 @@ gui.clandetails.home.title=&fMaison
gui.clandetails.home.lore.teleport.price=&7Prix de téléportation \: &b{0}
gui.clandetails.home.lore.teleport=&fClic gauche pour vous téléporter à la maison de votre clan
gui.staffclandetails.home.lore.teleport=&fClic gauche pour vous téléporter à ce home de votre clan
gui.clandetails.home.lore.clear=&7Poser l'objet pour nettoyer votre home de clan
gui.clandetails.home.lore.set.price=&7Définir le prix\: &b{0}
gui.clandetails.home.lore.set=&fClic droit pour définir le domicile de votre clan
gui.staffclandetails.home.lore.set=&fClic droit pour définir ce home de clan
@@ -742,12 +619,9 @@ gui.clandetails.bank.title=&fBank
gui.clandetails.bank.balance.lore=§7Solde \: &b{0}
gui.clandetails.bank.withdraw.status.lore=&7Retirer \: &b{0}
gui.clandetails.bank.deposit.status.lore=&7Dépôt\: &b{0}
gui.clandetails.bank.withdraw.toggle.lore=&7Lâcher l'élément pour activer/désactiver le statut de retrait
gui.clandetails.bank.deposit.toggle.lore=&7Clic droit pour activer/désactiver le statut de dépôt
gui.clandetails.fee.title=&fFrais
gui.clandetails.fee.status.lore=&fStatus\: {0}
gui.clandetails.fee.value.lore=&7Valeur \: &b{0}
gui.clandetails.fee.toggle.lore=&7Clic gauche pour basculer le statut des frais
gui.clandetails.rank.title=&fRang
gui.clandetails.rank.lore=&7Clic gauche pour voir les rangs du clan et les modifier
gui.clandetails.verified.title=&fVérifié
@@ -755,20 +629,13 @@ gui.clandetails.not.verified.title=&fNon vérifié
gui.clandetails.verify.price.lore=&7Prix\: &b{0}
gui.clandetails.not.verified.lore=&7Clic gauche pour vérifier votre clan
gui.staffclandetails.not.verified.lore=&7Clic gauche pour vérifier ce clan
gui.clandetails.resign.title=&fAbandonner
gui.clandetails.resign.lore=&7Clic gauche pour abandonner votre clan
gui.clandetails.disband.title=&fDissoudre
gui.clandetails.disband.lore=&7Lâchez l'objet pour dissoudre votre clan
gui.staffclandetails.disband.lore=&7Clic gauche pour dissoudre ce clan
gui.clandetails.chat.title=&fChat
gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - Envoie un message au chat du clan
gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &bRejoindre/quitte le chat du clan
gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - Envoie un message au chat d'allié
gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &bRejoindre/Quitter le chat d'alliés
gui.clandetails.chat.clan.status.lore=&fClan\: {0}
gui.clandetails.chat.ally.status.lore=&7Allié\: &b{0}
gui.clandetails.chat.clan.toggle.lore=&7Clic gauche pour basculer le statut du chat du clan
gui.clandetails.chat.ally.toggle.lore=&7Clique droit pour activer le statut de chat d'allié
gui.playerdetails.title={0}
gui.playerdetails.player.title=&f{0}
gui.playerdetails.player.lore.noclan=&fClan\: Aucun
@@ -794,92 +661,15 @@ gui.playerdetails.unassign.lore.right.click=&fClic droit pour dés-assigner
gui.playerdetails.trust.untrust.title=&fFaire confiance/Ne pas faire confiance
gui.playerdetails.trust.lore.left.click=&fClic gauche pour faire confiance
gui.playerdetails.untrust.lore.right.click=&fClic droit pour ne pas faire confiance
gui.playerdetails.ban.unban.title=&fBannir/Débannir
gui.playerdetails.ban.left.click=&7Clic gauche pour bannir ce joueur des clans
gui.playerdetails.unban.right.click=&7Clic droit pour débannir ce joueur
gui.playerdetails.resetkdr.lore=&7Clic gauche pour réinitialiser le KDR de ce joueur
gui.playerdetails.purge.title=&fPurger
gui.playerdetails.purge.lore=&7Clic gauche pour purger les données de ce joueur
gui.playerdetails.place.title=&fPlace
gui.playerdetails.place.lore=&7Clic gauche pour choisir un clan pour ce joueur
gui.languageselector.title=Langues - Actuellement \: {0}
gui.languageselector.language.title=&f{0}
gui.languageselector.language.lore.left.click=&7Clic gauche pour définir ceci comme votre langue
gui.languageselector.language.lore.translation.status=&7État de la traduction \: &b{0}%
gui.languageselector.language.lore.right.click=&7Clic droit pour aider à traduire
gui.confirmation.title=Confirmation
gui.confirmation.confirm=&7Cliquez ici pour confirmer
gui.confirmation.return=&7Cliquez ici pour revenir
gui.not.supported=&cUne erreur s'est produite lors de l'ouverture de l'interface graphique \! Désactivation... Avez-vous téléchargé la bonne version ?
staff.member.verify.clan=&cUn membre du staff doit vérifier votre clan \!
player.already.has.that.rank=&cLe joueur a déjà ce rang \!
joined.clan.chat=&bVous avez rejoint le chat du clan
already.joined.clan.chat=&bVous êtes déjà connecté au chat du clan
left.clan.chat=&bVous avez quitté le chat du clan
muted.clan.chat=&bVous avez rendu muet le chat du clan
unmuted.clan.chat=&bVous avez débloqué le chat du clan
joined.ally.chat=&bVous avez rejoint le chat allié
left.ally.chat=&bVous avez quitté le chat allié
muted.ally.chat=&bVous avez rendu muet le chat allié
unmuted.ally.chat=&bVous avez réactivé le chat allié
already.joined.ally.chat=&bVous avez deja rejoind le chat d'allié
player.already.in.this.clan=&cLe joueur est déjà dans ce clan
your.clan.reached.max.alliances=&cVotre clan a atteint le nombre maximum d'alliances
other.clan.reached.max.alliances=&cL'autre clan a atteint le nombre maximum d'alliances
insert.clan.tag=&bInsérez le tag du clan (ou "{0} ") \:
insert.clan.name=&bInsérer le nom du clan \:
insert.rank.name=&bInsérez le nom du rang (ou "{0} ") \:
click.to.help.translating=&bCliquez sur ce lien pour aider à traduire \:\n&r{0}
your.clan.must.have.members.to.verify=&cVotre clan doit avoir au moins {0} membres pour être vérifié \!
you.must.hold.a.banner=&cVous devez avoir une bannière dans votre main \!
you.changed.clan.banner=&bVous avez changé la bannière de votre clan\!
your.clan.already.verified=&cVotre clan est déjà vérifié \!
# suppress inspection "TrailingSpacesInProperty"
clan.profile=&b%clan_name%&7 profile &8-------------------------------------------\n \n &7Nom\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Description\: &f%clan_description%\n &7Statust\: &f%clan_status%\n &7Leaders\: %clan_leaders%\n &7Membres En Lignes\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Totales des meurtres\: &8[Rival\:&f%clan_rival_kills% &8Allié\:&f%clan_ally_kills% &8Neutre\:&f%clan_neutral_kills% &8Civil\:&f%clan_civilian_kills%&8]\n &7Morts\: &f%clan_deaths%\n &7Taxe\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Alliés\: &f%clan_allies%\n &7Rivaux\: &f%clan_rivals%\n &7Fondés\: &f%clan_founded%\n &7Inactif\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% days\n
player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name%
# suppress inspection "TrailingSpacesInProperty"
player.lookup.killtype=&7Type de Kill \: %player_kill_type%\n
player.lookup=\nInfos du joueur%player_name%&7-------------------------------------------\n \n &7Clan\: &f%clan_name%\n &7Rang \: &f%player_rank%\n &7Statut\: &f%player_status%\n &7KDR \: &e%player_kdr%\n &7Totaux de Kill \: &8[Rival\:&f%player_rival_kills% &8Allié\:&7%player_ally_kills% &8Neutre\:%player_neutral_kills% &8Civil\:&f%player_civilian_kills%&8]\n &7Morts\: &7Deaths\: &f%player_deaths%\n &7Date d'entrée\:%player_join_date%\n &7Dernière fois en ligne \:%player_last_seen%\n &7Clans précédents \:%player_past_clans%\n &7Inactif depuis\: &f%player_inactive_days%&7/&f%player_max_inactive_days% jours\n %kill_type_line%
economy.disabled=&cÉconomie désactivée\!
has.been.purged=Les données de {0} ont été purgées
accepted.invitation=&bVous avez accepté l'invitation de {0}
denied.invitation=&cVous avez refusé l'invitation de {0}
must.be.in.clan.to.pvp=&cVous et {0} devez être membre de clan en PvP \!
clans.not.at.war.pvp.denied=&cVotre clan n'est pas en guerre avec {0}\!
cannot.attack.civilians=&cVous ne pouvez pas attaquer un civil \!
cannot.attack.clan.member=&cVous ne pouvez pas attaquer un autre membre du clan \!
cannot.attack.ally=&cVous ne pouvez pas attaquer un allié \!
cannot.send.discord.message=Vous ne pouvez pas envoyer de messages à {0}. Vous n'êtes pas membre de ce clan \!
discordhook.is.disabled=&cL'intégration de Discord est désactivée ou indisponible \!
your.clan.doesnt.have.any.linked.player=Votre clan n'a aucun joueur lié
your.clan.doesnt.have.minimum.linked.player=Votre clan n'a pas un minimum de joueurs liés
your.clan.is.not.on.the.whitelist=Votre clan n'est pas dans la liste blanche
your.clan.already.has.channel=Votre clan a déjà un salon Discord
discord.reached.category.limit=Discord a atteint la limite de catégories \!
discord.reached.channels.limit=Discord a atteint la limite de salons \!
discord.created.successfully=&bSalon Discord créé avec succès \!
you.did.not.link.your.account=Vous n'avez pas lié votre compte \!
# suppress inspection "TrailingSpacesInProperty"
cannot.change.member.fee.now=&cVous ne pouvez pas modifier les frais de membre à proximité de l'heure de recouvrement.
cannot.change.member.fee.hours=&cRéessayez dans {0} heures...
cannot.change.member.fee.minutes=&cRéessayez dans {0} minute(s)...
cannot.kick.last.leader=&cVous ne pouvez pas expulser le dernier leader\!
cannot.disband.permanent=&cVous ne pouvez pas dissoudre ce clan. Il a un statut permanent.
you.can.only.set.base.in.your.land=&cVous ne pouvez vous installer un home que sur votre terre \!
only.leaders.can.create.lands=&cSeuls les leaders peuvent créer des territoires \!
only.one.land.per.clan=&cVotre clan a déjà une terre \!
only.clan.members.can.create.lands=&cSeuls les membres du clan peuvent créer des terres \!
land.allowed.all.actions=&bToutes les actions sont maintenant autorisées \!
land.blocked.all.actions=&bToutes les actions sont maintenant bloquées \!
land.allowed.action=&bAction autorisée \!
land.blocked.action=&bAction bloquée \!
you.do.not.own.lands=&cVous ne possédez pas de terre \!
land.sharing.disabled=&cLe partage de terres est désactivé \!
clan.chat.disabled=&cLe chat du clan est désactivé \!
ally.chat.disabled=&cLe chat allié est désactivé \!
war.expired=La guerre avec {0} a expiré\!
you.cant.start.war.online.members.difference=Vous ne pouvez pas commencer la guerre. Un clan a plus de membres en ligne que l'autre.
invitedplayer.invite.off=Ce joueur a désactivé les invitations de clan
user.hasnt.played.before=&cCet utilisateur n'a pas joué avant
clan.list.balance.header=\n{0} &7Solde la plus haute &8-----------------------\n \n&8Total des clans\: &7{1}\n \n&8\#&7. &8Clan &7- &8Solde
clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$
+1 -14
View File
@@ -2,24 +2,11 @@ description.command=תיאור
create.command=צור
delete.command=למחוק
rank.command=דרוג
setdisplayname.command=להביא שם
permissions.command=הרשאה
list.command=רשימה
balance.command=יתרה
give.command=להביא
resign.command=להטפטר
reload.command=רענון
start.command=התחל
leave.command=לעזוב
acf-core.parameter.amount=סכום
acf-core.parameter.member=חברים
acf-core.parameter.rank=דרוג
acf-core.parameter.description=תיאור
acf-core.parameter.clan=קלאן
acf-core.parameter.type=סוג
acf-core.parameter.order=סדר
# suppress inspection "TrailingSpacesInProperty"
start=התחל
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
# suppress inspection "TrailingSpacesInProperty"
+10 -132
View File
@@ -43,10 +43,8 @@ assign.command=hozzárendel
unassign.command=szétválaszt
rival.command=vetélytárs
bb.command=bb
display.command=kijelző
clear.command=törlés
modtag.command=modtag
rename.command=átnevezés
toggle.command=váltás
tag.command=címke
deposit.command=letét
@@ -230,10 +228,6 @@ command.description.rank.permissions.available=Felsorolja az elérhető rangsoro
command.description.rank.permissions.rank=Rangod jogainak megtekintése
command.description.rank.permissions.add=Hozzáad egy jogot a ranghoz
command.description.rank.permissions.remove=Megvon egy jogot a rangtól
command.description.rename=Átnevezi a klánodat
command.description.mod.rename=Átnevezi a klánodat
command.description.locale=Kiválasztja a nyelvedet
command.description.mod.locale=Kiválasztja a játékos nyelvét
home-menu=/{0} home{1} - Teleportálás a klán hazai bázisához
home-set-menu=/{0} home set{1} - Beállítsa a klán hazai bázisát
home-clear-menu=/{0} home clear{1} - Törli a klán hazai bázisát
@@ -294,7 +288,6 @@ membership.invitation={0} tagadta a tagsági meghívást
joined.the.clan={0} csatlakozott a klánhoz
signed.off.request.cancelled={0} aláírták. {1} kérés törölve.
clan.deletion={0} tagadta a klán törlését. A konszenzus sikertelen volt.
rename.refused={0} tagadta a klán törlését. A törlés sikertelen volt.
has.been.disbanded=A(z) {0} klán feloszlott
denied.the.promotion={0} tagadta a {1} promócióját. A konszenzus sikertelen volt.
demoted.back.to.member={0} visszatért a taghoz
@@ -310,10 +303,9 @@ has.joined={0} csatlakozott {1}
proposing.to.end.the.rivalry={0} azt javasolja, hogy vessen véget a rivalizálás {1}
proposing.an.alliance={0} szövetséget javasol {1}
inviting.you.to.join={0} meghívott téged, hogy csatlakozz {1}
asking.for.the.deletion={0} a klán törlését kéri
asking.for.the.promotion={0} kéri a promóció {1}
asking.for.the.demotion={0} kéri a promóció {1}
asking.to.disband={0} törölni akarja a klánt
asking.to.rename={0} azt akarja hogy a klán neve ez legyen {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \n &8[&8{0}&8] &b{1}\n %accept% &bvagy %deny%\n
clickable.accept=&a&l[ELFOGADÁS]
@@ -338,8 +330,7 @@ you.have.already.voted=Már szavaztál
has.voted.to.deny={0} tagadta a szavazást
view.next.page=Típus /{0} a következő oldal megtekintéséhez.
voted.to.accept={0} elfogadták
bulletin.board.header=&8* &e{0} &ffaliújság
bulletin.board.message={0}\: &f{1}
bulletin.board.header={0}* {1}{2} hirdetőtábla
has.been.disbanded.rivalry.ended={0} feloszlott. A rivalizálás véget ért.
has.been.disbanded.alliance.ended={0} feloszlott. A Szövetség véget ért.
clan.disbanded=A klán megszűnt
@@ -366,17 +357,16 @@ clan.wide.friendly.fire.blocked=A klán egész barátságos tűz zárt
clan.wide.friendly.fire.is.allowed=A Klánbarát barátságos tűz megengedett
you.are.the.only.member.online=Te vagy az egyetlen tag online
your.clan.color.tag.cannot.be.longer.than.characters=&cA klánod színezett tag-je nem lehet több {0} karakternél
your.clan.tag.cannot.be.longer.than.characters=&cA klán emblémája nem lehet {0} karakternél hosszabb
your.clan.tag.must.be.longer.than.characters=&cA klán emblémája nem lehet {0} karakternél rövidebb
your.tag.cannot.contain.the.following.colors=&cAz emblémád nem tartalmazhatja a következő színeket\: {0}
your.tag.doesnt.meet.the.requirements=&cAz emblémád nem felel meg a követelményeknek.
your.tag.cannot.contain.color.codes=&cAz emblémád nem tartalmazhat színeket
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cAz emblémád csak betűket, számokat, és színeket tartalmazhat
your.clan.tag.cannot.be.longer.than.characters=A klán tagja legfeljebb {0} karakter lehet
your.clan.tag.must.be.longer.than.characters=A klán tagjának hosszabbnak kell lennie, mint {0} karakter
your.tag.cannot.contain.the.following.colors=A címke nem tartalmazhatja a következő színeket\: {0}
your.tag.cannot.contain.color.codes=A címke nem tartalmazhat színkódokat
you.cannot.set.colored.ranks=Nem használhatsz színes rangokat
your.clan.name.cannot.be.longer.than.characters=A klán neve legfeljebb {0} karakter lehet
your.clan.name.must.be.longer.than.characters=A klán neveinek {0} karakter hosszúnak kell lenniük
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=A klán tagja csak betűket, számokat és színkódokat tartalmazhat
your.clan.name.cannot.contain.color.codes=A klán neve nem tartalmazhat színkódokat
that.tag.name.is.disallowed=&cAz adott embléma nem engedélyezett
that.tag.name.is.disallowed=A címke neve elutasítva
you.must.first.resign=Először lemondania a {0}
clan.with.this.tag.already.exists=Ezzel a címkével már létezik egy klán
get.your.clan.verified.to.access.advanced.features=Szerezd meg a klánt, hogy ellenőrizze a speciális funkciók elérését
@@ -393,7 +383,7 @@ global.friendy.fire.is.now.managed.by.each.clan=A globális barátságos tüzet
global.friendy.fire.is.already.being.managed.by.each.clan=A globális barátságos tüzeket már kezelik minden egyes klán
global.friendly.fire.is.set.to.allowed=A globális barátságos tűz megengedett
global.friendly.fire.is.already.being.allowed=A globális barátságos tűz már engedélyezett
the.player.doesn.t.not.have.the.permissions.to.join.clans=A játékosnak nincs joga ahhoz hogy belépjén egy klánba
the.player.doesn.t.not.have.the.permissions.to.join.clans=A játékosnak nincs joga a klánokhoz való csatlakozáshoz
you.cannot.invite.yourself=Nem hívhatod meg magad
you.did.not.answer.in.time=Nem válaszoltál időben, felfüggesztés...
this.player.is.banned.from.using.clan.commands=Ez a játékos tiltja a klánparancsok használatát
@@ -415,7 +405,6 @@ kdr.0=KDR\: {0}
inactive.0=Elérhetetlen(ek)\: {0}
clan.commands=klán parancsok
you.can.only.modify.the.color.and.case.of.the.tag=Csak a címke színét és esetét módosíthatod
locale.has.been.changed=&cA nyelvedet megváltoztattad
tag.changed.to.0=A címke megváltoztatva {0}
0.tag.changed.to.1=&bSikeresen megváltoztattad {0} tagját erre\: {1}
name.0=Név\: {0}
@@ -504,7 +493,6 @@ hombase.set=Klán bázis beállítva\: {0}
hombase.cleared=Klán bázis törölve
hombase.mod.set={0} bázisa beállítva\:
hombase.not.set=Bázis nincs beállítva
home.set.in.different.server=A bázis más szereveren van
rival.limit.reached=Elérted a rivális limitet. Nem tehetsz többé klánokkal.
you.moved.teleport.cancelled=Elmozdultál, a teleportálás megszakítva
waiting.for.teleport.stand.still.for.0.seconds=Várakozás a teleportálásra, állj meg {0} másodpercig
@@ -536,8 +524,6 @@ this.clan.has.reached.the.member.limit=&bEz a klán elérte a tag limitet
you.have.reseted.your.kdr=Visszaállítottad KDR-t
you.have.reseted.0.kdr=Visszaállítottad a(z) {0} KDR-t
you.have.reseted.kdr.of.all.players=Visszaállítottad a játékosok KDR-jét
you.have.successfully.renamed.your.clan=&bSikeresen megváltoztattad a klán nevét erre\: {0}
you.have.successfully.renamed.the.clan=&bSikeresen megváltoztattad a klán nevét erre\: {0}
you.have.toggled.permanent.status={0} -nak/nek átállítottad a végleges státuszát
permanent.status.enabled=A klánod végleges státusza be lett kapcsolva {0} által
permanent.status.disabled=A klánod végleges státusza ki lett kapcsolva {0} által
@@ -545,7 +531,6 @@ yes=Igen
cancel=Mégse
resign.confirmation=Biztos, hogy el akarod hagyni a klánt? {0}
disband.confirmation=Biztos, hogy fel akarod oszlatni a klánod? {0}
resetkdr.confirmation=Biztos benne, hogy visszaállítod a KDR-edet? {0}
resign.success=Sikeresen kiléptél a klánból
you.cannot.demote.the.last.leader=Nem fokozhatod le az utolsó vezetőt
you.cannot.move.the.last.leader=Nem mozdíthatod az utolsó vezetőt
@@ -558,7 +543,7 @@ bb.minutes= \ perc
bb.one.minute=1 perc
bb.hours= \ óra
bb.one.hour=1 óra
bb.days= \ napok
bb.days= nap
bb.one.day=1 nap
the.fee.is.0.and.its.current.value.is.1=Az adó {0} és a jelenlegi értéke {1} $
fee.enabled=engedélyezve
@@ -566,18 +551,9 @@ fee.disabled=letiltva
fee.set=Az adó sikeresen beállítva
max.fee.allowed.is.0={0} a maximális adó
fee.collected={0} $ kilett véve klán adó miatt
player.purged=A játékos sikeresen nullázva lett
upkeep.collected={0} $ kilett véve a fenntartás miatt
balance.is.not.enough.for.upkeep=Nincs elég pénz a klán bankjában ({0} $), hogy ne törlödjön
your.clan.description.must.be.longer.than=A klán leírásodnak minimum ennyi {0} karakternek kell lennie
your.clan.description.cannot.be.longer.than=A klán leírásod nem lehet hosszabb {0} karakternél
description.changed=Sikeresen megváltoztattad a klánodnak a leírását
no.description=Nincs leírás
the.player.must.wait.0.before.joining.your.clan.again=Ennek a játékosnak várnia kell {0} percet mielőtt újra belépne a klánodba
disabled.command=Tiltott parancs
rank.displayname.updated=A rang kijelzett neve frissítve lett\!
rank.setdefault=A klánnak az alapértelmezett rangja erre lett állítva {0}
rank.removedefault=A klán alapértelmezett rangja el lett távolítva
rank.0.permissions=Rang {0} jogai\:
available.rank.permissions=Elérhető jogok a rangokhoz\:
rank.already.exists=Ez a rang már létezik
@@ -590,17 +566,10 @@ clans.ranks=Klán rangok\:
ranks.list.item={0}\# {1} ({2})
no.ranks=Nem lettek rangok létrehozva
rank.no.permissions=Ennek a rangnak nincs leírása
player.unassigned.from.rank=A játékosnak nincs besorolása a rangból
you.must.be.0.or.have.the.permission.1.to.use.this=Szükséges {0} nak lenned vagy a tulajnak ezt a jogot adnia {1}, hogy ezt használd
deposit.not.allowed=Betétel nem engedélyezett, használd /%clan %toggle %deposit az engedélyezéséhez
withdraw.not.allowed=Kivétel nem engedélyezett, használd /%clan %toggle %withdraw az engedélyezéséhez
resign.request.cancelled=Lemondási kérelem megszakítva
disband.request.cancelled=Lemondási kérelem megszakítva
resetkdr.request.cancelled=Lemondási kérelem megszakítva
clan.create.request.cancelled=Klán készítési kérelem megszakítva
rank.create.request.cancelled=Rang készítési kérelem megszakítva
promotion.vote.has.been.requested.from.all.leaders=Felfokozási szavazás kérvényezve lett minden vezetőtől
rename.vote.has.been.requested.from.all.leaders=&b Átnevezési szavazást kértek minden vezetőtől
allowed=engedélyezve
blocked=letiltva
chat.joined=belépett
@@ -628,32 +597,22 @@ gui.main.staff.title=&fStaff
gui.main.staff.lore=&7Jobb-klikk a staff menü megnyitásához
gui.staff.title=Személyzet
gui.staff.clan.list.lore.left.click=&7Jobb-klikk hogy megnézd az összes klánt
gui.staff.clan.list.lore.right.click=Jobb-katt a összes nem hitelesített klánhoz
gui.player.list.title=Játékoslista
gui.staff.player.list.title=&fJátékoslista
gui.staff.player.list.lore.left.click=Bal-kattintás hogy megnézed az összes játékost
gui.staff.player.list.lore.right.click=Jobb-katt hogy megnézed az összes elérhető játékost
gui.staff.global.ff.title=&fÁltalános baráti tűz
gui.staff.global.ff.lore.status=&7Állapot\: &b{0}
gui.staff.global.ff.lore.toggle=Bal-katt hogy beállítsd a barátságos státuszt
gui.staff.reload.title=&fÚjratöltés
gui.staff.reload.lore=Bal-katt hogy újraindítsd a plugint
gui.staff.clanlist.unverified.title=Nem ellenőrzött klánok - Összes\: {0}
gui.staff.clanlist.toplace.title=Válaszd ki {0} új klánját
gui.warning.title=Figyelem
gui.warning.no.permission.title=&fNincs jog
gui.warning.no.permission.plugin.lore=&7Nincsen jogod ahhoz hogy ezt csináld\!
gui.warning.no.permission.leader.lore=Te vagy a klánnak a vezetője?
gui.warning.no.permission.rank.lore=&7Szükséges {0} nak lenned vagy a tulajnak ezt a jogot adnia {1}, hogy ezt használd\!
gui.warning.not.verified.title=&fNem ellenőrzött
gui.warning.not.verified.lore=&7A te klánodnak hitelesítve kell hogy legyen\!
gui.allies.title=Szövetségesek
gui.allies.clan.lore=&7Jobb-klikk, hogy töröld ezt a szövetségest
gui.allies.add.title=&fHozzáad egy szövetségest
gui.add.ally.title=Hozzáad egy szövetségest
gui.add.ally.clan.lore=&7Jobb-klikk hogy szövetkezz a klánnal
gui.rivals.title=Versenytárs
gui.rivals.clan.lore=&7Jobb-klikk, hogy töröld ezt az ellenséget
gui.rivals.add.title=&fRivális hozzáadása
gui.add.rival.title=Rivális hozzáadása
gui.add.rival.clan.lore=&7Jobb-klikk hogy riválisok legyetek a klánnal
@@ -670,105 +629,43 @@ gui.invite.title=Játékos meghívása
gui.invite.player.title=&f{0}
gui.invite.player.price.lore=&7Ár\: &b{0}
gui.invite.player.lore=&7Jobb-klikk az meghíváshoz
gui.roster.title={0} névsorja
gui.roster.invite.title=&fMeghívás
gui.roster.invite.lore=Hívj meg egy játékost a klánodba
gui.leaderboard.title=Toplista - Játékosok\: {0}
gui.leaderboard.player.title=&f\#{0} {1}
gui.ranks.title=Rangok
gui.ranks.title.set.rank=Rang beállítások - Jelenlegi\: {0}
gui.ranks.create.title=&Rang létrehozása
gui.ranks.create.lore=&7Bal-katt a rang elkészítéséhez
gui.ranks.rank.title=&fRang\: {0}
gui.ranks.rank.displayname.lore=&7Kijelzett név\: &b{0}
gui.ranks.rank.remove.lore=&7Jobb-katt a rang eltávolításához
gui.ranks.rank.edit.permissions.lore=&7Bal-katt a rang jogainak átállításához
gui.ranks.rank.assign.lore=&7Bal-katt a rang hozzárendeléséhez {0}
gui.permissions.title={0} jogosultságai
gui.permissions.add.title=&fJog hozzáadása
gui.permissions.permission.title=&f{0}
gui.permissions.permission.lore=&7Jobb-katt a rang jogosultságának eltávolításához
gui.add.permission.title=Jog hozzáadása
gui.add.permission.permission.title=&f{0}
gui.add.permission.permission.lore=&7Bal-katt a rang jogosultságának eltávolításához
gui.clandetails.title=[{0}] {1}
gui.clandetails.free.agent.title=&Szabadúszó
gui.clandetails.free.agent.create.clan.price.lore=&7Ár\: &b{0}
gui.clandetails.free.agent.create.clan.lore=&7Bal-katt a rang elkészítéséhez
gui.clandetails.clan.title=&f[{0}&f] {1}
gui.clandetails.clan.lore.description=&7Leírás\: &b{0}
gui.clandetails.clan.lore.status=&7Állapot\: &b{0}
gui.clandetails.clan.lore.leaders=&7Vezetők\: &b{0}
gui.clandetails.clan.lore.online.members=&7Elérhető tagok\: &b{0}/{1}
gui.clandetails.clan.lore.kdr=&7KDR\: &b{0}
gui.clandetails.clan.lore.kill.totals=&7Összes ölés\: &b[Rival\:{0} Neutral\:{1} Civilian\:{2}]
gui.clandetails.clan.lore.deaths=&7Halálok\: &b{0}
gui.clandetails.clan.lore.fee=&7Díj\: &b{0}, {1} $
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.allies.separator=&b,
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.rivals.separator=&b,
gui.clandetails.clan.lore.allies=&7Szövetségesek\: &b{0}
gui.clandetails.clan.lore.rivals=&Vetélytárs(ak)\: {0}
gui.clandetails.clan.lore.founded=&7Alapítva\: &b{0}
gui.clandetails.clan.lore.inactive=&7Inaktív\: &b{0}/{1} napok
gui.clandetails.allies.title=&fSzövetségesek
gui.clandetails.allies.lore=&7Bal-katt az allysok megtekintéséhez
gui.clandetails.rivals.title=&fRiválisok
gui.clandetails.rivals.lore=&7Bal-katt az allysok megtekintéséhez
gui.clandetails.roster.title=&fNévsor
gui.clandetails.roster.lore=&7Bal-katt a klán tagjainak megtekintéséhez, vagy hívj be többet
gui.staffclandetails.roster.lore=&7Bal-klikk hogy megnézd a klánlistát
gui.clandetails.coords.title=&fKoordináták
gui.clandetails.coords.lore=&7Ball-klikk megmutatja a koordinátákat a klánod tagjáiról
gui.clandetails.home.title=&fOtthon
gui.clandetails.home.lore.teleport.price=&7Teleportációs összeg\: &b{0}
gui.clandetails.home.lore.teleport=&7Bal-katt a haza teleportáláshoz
gui.staffclandetails.home.lore.teleport=&7Bal-katt a haza teleportáláshoz
gui.clandetails.home.lore.clear=&7Dobd ki az itemet hogy kiürítsd a klánod házát
gui.clandetails.home.lore.set.price=&7Teleportációs összeg\: &b{0}
gui.clandetails.home.lore.set=&7Jobb-katt a haza teleportáláshoz
gui.staffclandetails.home.lore.set=&7Jobb-katt a haza beállításához
gui.clandetails.regroup.title=&fÖsszecsoportosítás
gui.clandetails.regroup.lore.price=&7Ár\: &b{0}
gui.clandetails.regroup.lore.home=&7Bal-katt a klán tagjainak megtekintéséhez, vagy hívj be többet
gui.clandetails.regroup.lore.me=&7Jobb-katt a klán tagjainak összecsoportosításához
gui.clandetails.ff.title=&fBaráti tűz
gui.clandetails.ff.personal.lore=&7Személyes\: &b{0}
gui.clandetails.ff.clan.lore=&7Klán\: &b{0}
gui.clandetails.ff.personal.toggle.lore=Bal-katt hogy beállítsd a barátságos státuszt
gui.clandetails.ff.clan.toggle.lore=Jobb-katt hogy beállítsd a barátságos státuszt
gui.clandetails.bank.title=&fBank
gui.clandetails.bank.balance.lore=&fEgyenleg\: &b{0}
gui.clandetails.bank.withdraw.status.lore=&7Kivétel\: &b{0}
gui.clandetails.bank.deposit.status.lore=&7Betétel\: &b{0}
gui.clandetails.bank.withdraw.toggle.lore=&7Dobd el az elemet a visszavonás állapotának váltásához
gui.clandetails.bank.deposit.toggle.lore=&7Kattints a jobb gombbal a befizetés állapotának váltásához
gui.clandetails.fee.title=&fAdó
gui.clandetails.fee.status.lore=&7Állapot\: &b{0}
gui.clandetails.fee.value.lore=&7Érték\: &b{0}
gui.clandetails.fee.toggle.lore=&7Kattints a bal gombbal a befizetés állapotának váltásához
gui.clandetails.rank.title=&fRang
gui.clandetails.rank.lore=&7Kattints a bal gombbal a klán rangjainak megtekintéséhez és szerkesztéséhez
gui.clandetails.verified.title=&fHitelesítve
gui.clandetails.not.verified.title=&fNem ellenőrzött
gui.clandetails.verify.price.lore=&7Ár\: &b{0}
gui.clandetails.not.verified.lore=&7Kattintsa bal gombbal a klán megerősítéséhez
gui.staffclandetails.not.verified.lore=&7Kattintson a bal gombbal a klán megerősítéséhez
gui.clandetails.resign.title=&fKilépés
gui.clandetails.resign.lore=&7Kattints a bal gombbal a klán kilépéséhez
gui.clandetails.disband.title=&7Feloszlatás
gui.clandetails.disband.lore=&7Dobd el az itemet a klánod feloszlatásához
gui.staffclandetails.disband.lore=&7Kattints a bal gombbal a klán feloszlatásához
gui.clandetails.chat.title=&fChat
gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - &bÜzenetet küld a klán chatbe
gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &bBelép/kilép a klán chatből
gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - &bÜzenetet küld a ally chatbe
gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &bBelép/kilép a ally chatből
gui.clandetails.chat.clan.status.lore=&7Klán\: &b{0}
gui.clandetails.chat.ally.status.lore=&7Szövetségesek\: &b{0}
gui.clandetails.chat.clan.toggle.lore=Bal-katt hogy beállítsd a klán chat státuszt
gui.clandetails.chat.ally.toggle.lore=Jobb-katt hogy beállítsd a ally chat státuszt
gui.playerdetails.title={0}
gui.playerdetails.player.title=&f{0}
gui.playerdetails.player.lore.noclan=&7Klán\: &bNincs
@@ -776,40 +673,21 @@ gui.playerdetails.player.lore.clan=&7Klán\: &b[{0}&b] {1}
gui.playerdetails.player.lore.rank=&7Rang\: &b{0}
gui.playerdetails.player.lore.status=&7Állapot\: &b{0}
gui.playerdetails.player.lore.kdr=&7KDR\: &b{0}
gui.playerdetails.player.lore.kill.totals=&7Összes ölés\: &b[Rival\:{0} Neutral\:{1} Civilian\:{2}]
gui.playerdetails.player.lore.deaths=&7Halálok\: &b{0}
gui.playerdetails.player.lore.join.date=&7Csatlakozás\: &b{0}
gui.playerdetails.player.lore.last.seen=&7Utoljára látva\: &b{0}
# suppress inspection "TrailingSpacesInProperty"
gui.playerdetails.player.lore.past.clans.separator=&b,
gui.playerdetails.player.lore.past.clans=&7Előző klánok\: &b{0}
gui.playerdetails.player.lore.inactive=&7Inaktív\: &b{0}/{1} napok
gui.playerdetails.kick.title=&fKirúgás
gui.playerdetails.promote.demote.title=&fFokozás/Lefokozás
gui.playerdetails.promote.lore.left.click=&7Bal-klikk a felfokozáshoz
gui.playerdetails.demote.lore.right.click=&7Jobb-klikk a lefokozáshoz
gui.playerdetails.assign.unassign.title=&fRang kiosztása/kiosztása
gui.playerdetails.assign.lore.left.click=&7Bal-klikk a kiosztáshoz
gui.playerdetails.unassign.lore.right.click=&7Jobb-klikk a kiosztáshoz
gui.playerdetails.trust.untrust.title=&fBizalom/bizalmatlanság
gui.playerdetails.trust.lore.left.click=Bal-kattintás a bizalomhoz
gui.playerdetails.untrust.lore.right.click=&7Jobb-katt a bizalom eltávolításához
gui.playerdetails.ban.unban.title=&fTiltás/Tiltás visszavonása
gui.playerdetails.ban.left.click=&7Bal-katt a játékos kitiltásához a klánból
gui.playerdetails.unban.right.click=&7Jobb-katt a kitiltás feloldásához
gui.playerdetails.resetkdr.lore=&7Bal-katt a játékos KDR-jének újrafrissítéséhez
gui.playerdetails.purge.title=&fKitisztitás
gui.playerdetails.purge.lore=&7Bal-katt a játékos adatának a törléséhez
gui.playerdetails.place.title=&fLerakás
gui.playerdetails.place.lore=&7Bal-katt hogy kiválaszd a klánba egy játékost
gui.languageselector.title=Nyelvek - Jelenlegi\: {0}
gui.languageselector.language.title=&f{0}
gui.languageselector.language.lore.left.click=&7Bal klikk, hogy beállítsd ezt a fordítást
gui.languageselector.language.lore.translation.status=&7Fordítási státusz\: &b{0}%
gui.languageselector.language.lore.right.click=&7Bal-klikk hogy segítsd a fordítást
gui.confirmation.title=Megerősítés
gui.confirmation.confirm=&7Kattints ide a megerősítéshez
gui.confirmation.return=&7Kattints ide a visszavonáshoz
gui.not.supported=&cHiba történt a GUI megnyitása közben\! Kikapcsolása... Biztos a jó verziót töltötted le?
staff.member.verify.clan=&cEgy staffnak hitelesítenie kell a klánodat\!
player.already.has.that.rank=&cEnnek a játékosnak már ez a rankja\!
+10 -276
View File
@@ -1,5 +1,5 @@
description.command=descrizione
create.command=creare
create.command=crea
delete.command=elimina
rank.command=rango
setdisplayname.command=setdisplayname
@@ -9,7 +9,7 @@ permissions.command=permessi
list.command=list
balance.command=balance
list.order.asc=aSC
list.order.desc=descrizione
list.order.desc=disc
list.type.name=nome
list.type.kdr=kdr
list.type.size=size
@@ -43,10 +43,8 @@ assign.command=assegna
unassign.command=annulla assegnazione
rival.command=rivale
bb.command=bb
display.command=mostra
clear.command=elimina
modtag.command=modtag
rename.command=rinomina
toggle.command=scambia
tag.command=tag
deposit.command=deposito
@@ -230,10 +228,6 @@ command.description.rank.permissions.available=Elenca i ranghi disponibili
command.description.rank.permissions.rank=Modifica i permessi di un rank
command.description.rank.permissions.add=Aggiungi un permesso a un rango
command.description.rank.permissions.remove=Rimuovi un permesso da un rango
command.description.rename=Rinomina il tuo clan
command.description.mod.rename=Rinomina un clan
command.description.locale=Seleziona la tua lingua
command.description.mod.locale=Imposta la lingua del giocatore
home-menu=/{0} home{1} - Teletrasporta alla base di casa
home-set-menu=/{0} home set{1} - Imposta la base principale del clan
home-clear-menu=/{0} home set{1} - Cancella la base principale del clan
@@ -294,7 +288,6 @@ membership.invitation={0} ha rifiutato l'invito di adesione
joined.the.clan={0} si è unito al clan
signed.off.request.cancelled={0} si è disconnesso. {1} richiesta annullata.
clan.deletion={0} ha negato l'eliminazione del clan. Consenso fallito.
rename.refused={0} rifiutata la rinominazione del clan. Consenso negato.
has.been.disbanded=Il Clan {0} è stato sciolto
denied.the.promotion={0} ha negato la promozione di {1}. Consenso fallito.
demoted.back.to.member={0} è stato degradato di nuovo a membro
@@ -310,10 +303,9 @@ has.joined={0} si è unito a {1}
proposing.to.end.the.rivalry={0} sta proponendo di porre fine alla rivalità con {1}
proposing.an.alliance={0} sta proponendo un'alleanza con {1}
inviting.you.to.join={0} ti sta invitando ad unirti a {1}
asking.for.the.deletion={0} chiede l'eliminazione del clan
asking.for.the.promotion={0} chiede la promozione di {1}
asking.for.the.demotion={0} chiede la promozione di {1}
asking.to.disband={0} sta chiedendo di sottrarsi dal clan
asking.to.rename={0} sta chiedendo di rinominare il clan con in {1}
# suppress inspection "TrailingSpacesInProperty"
request.message= \ &8[&8{0}&8] &b{1}\n %accetta% &bor %deny%
clickable.accept=&a&l[ACCETTA]
@@ -338,8 +330,6 @@ you.have.already.voted=Hai già votato
has.voted.to.deny={0} ha votato per negare
view.next.page=Digita /{0} per visualizzare la pagina successiva.
voted.to.accept={0} ha votato per accettare
bulletin.board.header=&8* &e{0} &fbacheca bollettino
bulletin.board.message={0}\: &f{1}
has.been.disbanded.rivalry.ended={0} è stato sciolto. La rivalità è finita.
has.been.disbanded.alliance.ended={0} è stato sciolto. L'alleanza è finita.
clan.disbanded=Clan sciolto
@@ -365,26 +355,17 @@ you.banned=Sei stato bannato dai comandi di clan
clan.wide.friendly.fire.blocked=Fuoco alleato del clan bloccato
clan.wide.friendly.fire.is.allowed=Fuoco alleato del clan bloccato
you.are.the.only.member.online=Sei l'unico membro online
your.clan.color.tag.cannot.be.longer.than.characters=&cLa targa colorata del tuo clan non può essere più lunga di {0} caratteri
your.clan.tag.cannot.be.longer.than.characters=&cIl nome del tuo clan non può contenere più di {0} caratteri
your.clan.tag.must.be.longer.than.characters=&cIl nome del tuo clan deve essere più lungo di {0} caratteri
your.tag.cannot.contain.the.following.colors=&cIl nome del clan non può contenere i seguenti colori\: {0}
your.tag.doesnt.meet.the.requirements=&cIl nome del tuo clan non soddisfa i requisiti.
your.tag.cannot.contain.color.codes=&cIl nome del clan non può contenere codici colore
your.clan.tag.can.only.contain.letters.numbers.and.color.codes=&cIl nome del tuo clan può contenere solo lettere, numeri e codici colore
your.clan.tag.cannot.be.longer.than.characters=Il tag del tuo clan non può contenere più di {0} caratteri
your.clan.tag.must.be.longer.than.characters=Il tag del tuo clan deve contenere più di {0} caratteri
your.tag.cannot.contain.the.following.colors=Il tuo tag non può contenere i seguenti colori\: {0}
your.tag.cannot.contain.color.codes=Il tuo tag non può contenere codici di colore
you.cannot.set.colored.ranks=Non puoi impostare ranghi colorati
your.clan.name.cannot.be.longer.than.characters=Il nome del tuo clan non può contenere più di {0} caratteri
your.clan.name.must.be.longer.than.characters=Il nome del clan deve essere più lungo di {0} caratteri
your.clan.name.cannot.contain.color.codes=Il tuo tag non può contenere codici di colore
that.tag.name.is.disallowed=Questo nome per il tuo clan non è ammesso
that.tag.name.is.disallowed=Quel nome tag non è consentito
you.must.first.resign=È necessario prima dimettersi da {0}
clan.with.this.tag.already.exists=Un clan con questo nome esiste già.
get.your.clan.verified.to.access.advanced.features=Ottieni la verifica del tuo clan per accedere alle funzioni avanzate
clan.created=Clan {0} creati
not.enough.leaders.online.to.vote.on.demotion=È necessario siano online più leader per votare questa demozione di ruolo
demotion.vote.has.been.requested.from.all.leaders=Il voto di dimissione e stato richiesto da tutti i leader
player.is.not.a.leader.of.your.clan=Il giocatore non un leader del tuo clan
player.is.not.a.leader=Il giocatore non è un leader
clan.has.been.disbanded=Il Clan {0} è stato sciolto
clan.disband.vote.has.been.requested.from.all.leaders=È stato richiesto il voto di scioglimento del clan da tutti i leader
friendy.fire.is.now.managed.by.your.clan=Il fuoco amichevole è ora gestito dal tuo clan
@@ -393,72 +374,21 @@ global.friendy.fire.is.now.managed.by.each.clan=Il fuoco amichevole globale vien
global.friendy.fire.is.already.being.managed.by.each.clan=Il fuoco amichevole globale è già gestito da ogni clan
global.friendly.fire.is.set.to.allowed=Il fuoco amichevole globale è impostato su consentito
global.friendly.fire.is.already.being.allowed=Il fuoco amichevole globale è già stato consentito
the.player.doesn.t.not.have.the.permissions.to.join.clans=Il giocatore non ha i permessi per aggiungersi ai clan
the.player.doesn.t.not.have.the.permissions.to.join.clans=Il giocatore non ha i permessi per unirsi ai clan
you.cannot.invite.yourself=Non puoi invitare te stesso
you.did.not.answer.in.time=Non ho fatto in tempo a rispondere, annulla...
this.player.is.banned.from.using.clan.commands=Questo giocatore è bannato dall'utilizzo dei comandi clan
the.player.is.already.member.of.another.clan=Il giocatore è già membro di un altro clan
has.been.asked.to.join={0} è stato chiesto di unirsi a {1}
you.cannot.kick.yourself=Non puoi kickarti da solo\!
the.player.is.not.a.member.of.your.clan=Questo giocatore non un membro del tuo clan
you.cannot.kick.another.leader=Non puoi calciare un'altro leader
has.been.kicked.by={0} è stato rimosso dal clan da {1}
no.clans.have.been.created=Nessun clan è stato creato
total.clans=Clan totali\:
legend=Legenda\:
kill.type.civilian=Tipo di Uccisione\: {0}Civile
no.player.data.found=Nessun dato del giocatore trovato
clan.0=Clan\: {0}
status.0=Stato\: {0}
rank.0=Rango\: {0}
kdr.0=KDR\: {0}
inactive.0=Inattivo da\: {0}
clan.commands=clan comandi
you.can.only.modify.the.color.and.case.of.the.tag=È possibile modificare solo il colore e le maiuscole del nome clan
locale.has.been.changed=La lingua è stata cambiata con successo
tag.changed.to.0=Tag cambiato in {0}
0.tag.changed.to.1=&bIl tag di {0} è stato modificato con successo in {1}
name.0=Nome\: {0}
description.0=Descrizione\: {0}
leaders.0=Leader\: {0}
allies.0=Alleati\: {0}
rivals.0=Rivali\: {0}
other.player.must.be.online=&cIl giocatore deve essere online\!
the.player.does.not.have.the.permissions.to.lead.a.clan=Il giocatore non ha i permessi adeguati per aggiungersi ai clan
you.cannot.promote.yourself=Non puoi auto promuoverti
the.player.is.already.a.leader=Questo giocatore è già leader di un clan
configuration.reloaded=Configurazioni aggiornate
last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan=L'ultimo leader non può dimettersi. Devi nominare un altro capo o sciogliere il clan
0.has.resigned={0} si è dimesso
you.cannot.trust.yourself=Non puoi eseguire questa azione su te stesso
leaders.are.already.trusted=I leader sono già autorizzati
this.player.is.already.trusted=Questo giocatore è già autorizzato
has.been.given.trusted.status.by={0} ha appena ricevuto fiducia da {1}
this.player.is.not.banned=Questo utente non è bannato
player.removed.from.the.banned.list=Giocatore rimosso dalla lista nera
you.have.been.unbanned.from.clan.commands=Sei stato sbannato dai comandi del clan
you.cannot.untrust.yourself=Non puoi eseguire questa azione su te stesso
leaders.cannot.be.untrusted=Lo stato di fiducia dei leader non può essere alterato
this.player.is.already.untrusted=Quest giocatore non ha già lo stato di fiducia
has.been.given.untrusted.status.by={0} ha appena rimosso lo stato di fiducia da {1}
the.clan.does.not.exist=Il clan non esiste
the.clan.is.already.verified=Il clan e già verificato
the.clan.has.been.verified=Il clan è stato verificato
clan.0.has.been.verified=Il clan {0} è stato verificato con successo\!
total.clan.players.0=Giocatori del clan\: {0}
proposing.war={0} sta proponendo di iniziare una guerra contro {1}
you.can.only.start.war.with.rivals=Puoi iniziare una guerra solo contro clan rivali
leaders.have.been.asked.to.accept.the.war.request=Ai capi di {0} è stato chiesto di accettare la richiesta di guerra
leaders.asked.to.end.rivalry=Ai capi di {0} è stato chiesto di terminare la guerra
proposing.to.end.the.war={0} sta proponendo di terminare la guerra contro {1}
clans.already.at.war=I vostri clan sono già in guerra tra loro
clans.not.at.war=I vostri clan non sono in guerra tra loro
you.are.at.war={0} è ora in guerra con {1}
denied.war.req={0} ha negato la richiesta di guerra inviata da {1}
you.are.no.longer.at.war={0} non è più in guerra contro {1}
end.war.denied=La richiesta di porre fine alla guerra è stata negata da {0}
denied.war.end={0} ha rifiutato la richiesta di {1} di porre fine alla guerra
has.initiated.a.rivalry={0} ha iniziato una rivalità contro {1}
start=inizia
end=fine
add=aggiungi
@@ -467,15 +397,7 @@ allow=permetti
block=blocca
auto=automatico
war=guerra
0.s.sword.1.2.b.bow.3.4.a.arrow={0}S\=Spada{1}, {2}B\=Arco{3}, {4}A\=Frecce
weapon.S=S
weapon.B=B
weapon.A=A
materials=Materiali
armor.h=H
armor.c=C
armor.l=L
armor.B=B
diamond=diamante
gold=oro
wood=legna
@@ -486,132 +408,43 @@ hunger=Fame
stone=pietra
iron=ferro
the.clan.cannot.be.rivaled=Il clan non può essere rivale
bboff=BB disattivato
bbon=BB attivata
inviteon=Invito attivato su
inviteoff=Invito disattivato
tagoff=Tag clan disabilitato
tagon=Tag clan attivato
depositon=Deposito attivato
depositoff=Deposito disattivato
withdrawon=Prelievo attivato
withdrawoff=Prelievo disattivato
feeoff=Tassa disattivata
feeon=Tassa attivata
home.base.only.once=La base principale può essere impostata una sola volta
now.at.homebase=Sei ora nella base del clan {0}
hombase.set=Base del clan impostata a\: {0}
hombase.cleared=Clan del base eliminata
hombase.mod.set=Base del clan {0} reimpostata a\:
hombase.not.set=la base del clan non è stata impostata ancora.
home.set.in.different.server=La Home-base è stata impostata in un altro server
rival.limit.reached=Hai raggiunto il limite di rivali. Non puoi rivaleggiare più clan.
you.moved.teleport.cancelled=Ti sei mosso, teletrasporto annullato
waiting.for.teleport.stand.still.for.0.seconds=In attesa di teletrasporto, resta fermo per {0} secondi
on=attivo
off=disattivato
player.rank.changed=Il Rango è stato impostato
your.clans.are.already.rivals=I vostri clan sono già rivali
player.got.money=Hai ottenuto {0} per aver ucciso {1} in base al tuo KDR\: {2}
cleared.bb=La bacheca è stata svuotata
clan.balance=Bilancio-Clan\: {0}
clan.admin.balance=Saldo di {0}\: {1}$
bb.fee.player.kicked={0} è stato espulso per non aver pagato le tasse
bb.fee.set={0} $ è la tassa
bb.clan.deposit={0} $ sono stati depositati da {1}
player.clan.deposit=Hai depositato {0}
bb.clan.withdraw={0} $ sono stati prelevati da {1}
bb.clan.take={0} $ sono stati presi da {1}
bb.clan.give={0} $ sono stati dati da {1}
bb.clan.set={0} $ sono stati impostati da {1}
player.clan.withdraw=Prelievi {0}
clan.admin.take=Hai prelevato {0} $ dalla banca di {1}
clan.admin.give=Hai depositato {0} $ in banca di {1}
clan.admin.set=Hai impostato il saldo bancario di {0} su {1}
clan.admin.bank.not.enough.money=La banca di {0} non dispone di abbastanza soldi\!
clan.bank.not.enough.money=La banca del tuo clan non ha abbastanza soldi
your.clans.are.not.rivals=I vostri clan non sono rivali
the.clan.members.reached.limit=Il tuo clan ha raggiunto il limite di membri
this.clan.has.reached.the.member.limit=&bQuesto clan ha raggiunto il limite di membri
you.have.reseted.your.kdr=Hai resettato il tuo KDR
you.have.reseted.0.kdr=Hai resettato il KDR di {0}
you.have.reseted.kdr.of.all.players=Hai resettato il KDR di tutti i giocatori
you.have.successfully.renamed.your.clan=&bHai rinominato con successo il tuo clan in {0}
you.have.successfully.renamed.the.clan=&bHai rinominato con successo il clan in {0}
you.have.toggled.permanent.status=Hai abilitato lo stato permanente per
permanent.status.enabled=Lo stato permanente del tuo clan è stato abilitato da {0}
permanent.status.disabled=Lo stato permanente del tuo clan è stato disabilitato da {0}
yes=Sì
cancel=Annulla
resign.confirmation=Sei sicuro di volerti dimettere da questo clan? {0}
disband.confirmation=Sei sicuro di voler sciogliere il tuo clan? {0}
resetkdr.confirmation=Sei sicuro di volere resettare il tuo punteggio KDR? {0}
resign.success=Ti sei dimesso con successo dal tuo clan
you.cannot.demote.the.last.leader=Non puoi far retrocedere l'ultimo leader rimasto
you.cannot.move.the.last.leader=Non puoi spostare l'ultimo leader rimasto
player.successfully.demoted=Il giocatore è stato retrocesso con successo
player.successfully.promoted=Il giocatore è stato promosso con successo
bb.ago= \ fa
bb.moments=\ momenti
bb.seconds= \ secondi
bb.minutes= \ minuti
bb.one.minute=1 minuto
bb.hours= \ ore
bb.one.hour=1 ora
bb.days= \ giorni
bb.days= giorni
bb.one.day=1 giorno
the.fee.is.0.and.its.current.value.is.1=La commissione è {0} e il suo valore attuale è {1}$
fee.enabled=abilitato
fee.disabled=disabilitato
fee.set=La tassa è stata impostata con successo
max.fee.allowed.is.0=La tariffa massima consentita è {0}
fee.collected={0} $ sono stati sottratti per la caparra del clan
player.purged=Il giocatore e stato epurato con successo
upkeep.collected={0} $ sono stati sottratti per il mantenimento del clan
balance.is.not.enough.for.upkeep=Il saldo del clan non è sufficiente per pagare la manutenzione ({0} $), deposita l'importo per evitare che il clan venga sciolto
your.clan.description.must.be.longer.than=La descrizione del tuo clan deve essere più lunga di {0} caratteri
your.clan.description.cannot.be.longer.than=La descrizione del tuo clan non può essere più lunga di {0} caratteri
description.changed=Hai cambiato con successo la descrizione del tuo clan
no.description=Nessuna descrizione
the.player.must.wait.0.before.joining.your.clan.again=Questo giocatore deve aspettare {0} minuto/i prima di unirsi di nuovo ad un nuovo clan
disabled.command=Comando disabilitato
rank.displayname.updated=Il nome visualizzato del rango è stato aggiornato\!
rank.setdefault=Il rango predefinito del clan è stato ora impostato su {0}
rank.removedefault=Il rango predefinito del clan è stato rimosso
rank.0.permissions=Permessi del Rango {0}\:
available.rank.permissions=Permessi disponibili per i ranghi\:
rank.already.exists=Rango già esistente
rank.0.does.not.exist=Il Rango {0} non esiste
rank.created=Rango creato
permission.0.added.to.rank.1=Permesso {0} aggiunto al rango {1}
permission.0.removed.from.rank.1=Permesso {0} rimosso dal rango {1}
rank.0.deleted=Rango {0} eliminato
clans.ranks=Classifica del Clan\:
ranks.list.item={0}\# {1} ({2})
no.ranks=Nessun rango è stato ancora creato
rank.no.permissions=Questo rango non ha alcun permesso
player.unassigned.from.rank=Giocatore non assegnato dal rango
you.must.be.0.or.have.the.permission.1.to.use.this=Devi essere {0} o il tuo leader deve dare al tuo rango il permesso {1} per utilizzare questo
deposit.not.allowed=Il deposito non è abilitato, usa /%clan %toggle %deposit per permetterlo
withdraw.not.allowed=Il prelievo non è permesso, usa /%clan %toggle %withdraw per permetterlo
resign.request.cancelled=Richiesta di dimissioni cancellata
disband.request.cancelled=Richiesta di scioglimento annullata
resetkdr.request.cancelled=Richiesta di ripristino KDR annullata
clan.create.request.cancelled=Richiesta di creazione clan annullata
rank.create.request.cancelled=Richiesta di creazione del Rango annullata
promotion.vote.has.been.requested.from.all.leaders=Il voto di promozione è stato richiesto a tutti i leader
rename.vote.has.been.requested.from.all.leaders=La richiesta di cambio nome è stata richiesta a tutti i leader
allowed=permesso
blocked=bloccato
chat.joined=si è unito
chat.not.joined=non si è unito
chat.didnt.join=&bNon sei entrato in questo canale
gui.loading=&7Caricamento...
gui.back.title=&fIndietro
gui.previous.page.title=Pagina Precedente
gui.next.page.title=&fPagina Successiva
gui.lore.no.permission=&7Non hai i permessi per vedere questo\!
gui.main.title={0} - Menu del clan
gui.main.languageselector.title=Seleziona la tua lingua
gui.main.languageselector.lore.left.click=&7Click sinistro per selezionare la lingua
gui.main.languageselector.lore.right.click=&7Click destro per aiutare la traduzione
@@ -623,28 +456,10 @@ gui.main.reset.kdr.title=&fResetta il KDR
gui.main.reset.kdr.lore.price=&7Prezzo\: &b{0}
gui.main.reset.kdr.lore=&7Click sinistro per resettare il tuo KDR
gui.main.leaderboard.title=&fClassifica
gui.main.leaderboard.lore=&7Clicca sinistro per vedere la classifica
gui.main.staff.title=&fStaff
gui.main.staff.lore=&7Clicca sinistro per aprire il menu Staff
gui.staff.title=Staff
gui.staff.clan.list.lore.left.click=&7Clicca sinistro per vedere tutti i clan
gui.staff.clan.list.lore.right.click=&7Clicca destro per vedere tutti i clan non verificati
gui.player.list.title=Elenco dei giocatori
gui.staff.player.list.title=&fElenco Giocatori
gui.staff.player.list.lore.left.click=&7Clicca sinistro per vedere tutti i giocatori
gui.staff.player.list.lore.right.click=&7Clicca destro per vedere tutti i giocatori online
gui.staff.global.ff.title=Fuoco Amico Globale
gui.staff.global.ff.lore.status=&7Stato\: &b{0}
gui.staff.global.ff.lore.toggle=&7Clicca sinistro per attivare il fuoco amico
gui.staff.reload.title=&fAggiorna
gui.staff.reload.lore=&7Clicca sinistro per ricaricare il plugin
gui.staff.clanlist.unverified.title=Clan Non Verificati - Totale\: {0}
gui.staff.clanlist.toplace.title=Seleziona il nuovo clan {0}
gui.warning.title=Attenzione
gui.warning.no.permission.title=&fNessun permesso
gui.warning.no.permission.plugin.lore=&7Non hai i permessi per eseguire questa azione\!
gui.warning.no.permission.leader.lore=&7Sei uno dei leader del clan?
gui.warning.no.permission.rank.lore=&7Devi essere {0} o un leader deve dare al tuo rango il permesso {1} per usarlo\!
gui.warning.not.verified.title=&fNon verificato
gui.warning.not.verified.lore=&7Il tuo clan deve essere verificato\!
gui.allies.title=Alleati
@@ -658,8 +473,6 @@ gui.rivals.add.title=&fAggiungi un rivale
gui.add.rival.title=Aggiungi un rivale
gui.add.rival.clan.lore=&7Click sinistro per rivaleggiare questo clan
gui.clanlist.title=Clans - Totale\: {0}
gui.clanlist.clan.title=&7Clan\: &b[{0}&b] {1}
gui.clanlist.clan.lore.position=&b\#{0}
gui.clanlist.clan.lore.kdr=&7KDR\: &b{0}
gui.clanlist.clan.lore.members=&7Membri\: &b{0}
gui.coords.title=Coordinate
@@ -691,11 +504,8 @@ gui.permissions.permission.lore=&7Click destro per rimuovere questo permesso dal
gui.add.permission.title=Aggiungi un permesso
gui.add.permission.permission.title=&f{0}
gui.add.permission.permission.lore=&7Click sinistro per aggiungere questo permesso al rango
gui.clandetails.title=[{0}] {1}
gui.clandetails.free.agent.title=&Utente libero
gui.clandetails.free.agent.create.clan.price.lore=&7Prezzo\: &b{0}
gui.clandetails.free.agent.create.clan.lore=&7Click sinistro per creare un clan
gui.clandetails.clan.title=&f[{0}&f] {1}
gui.clandetails.clan.lore.description=&7Descrizione\: &b{0}
gui.clandetails.clan.lore.status=&7Stato\: &b{0}
gui.clandetails.clan.lore.leaders=&7Leader\: &b{0}
@@ -709,26 +519,16 @@ gui.clandetails.clan.lore.allies.separator=&b,
# suppress inspection "TrailingSpacesInProperty"
gui.clandetails.clan.lore.rivals.separator=&b,
gui.clandetails.clan.lore.allies=&7Alleati\: &b{0}
gui.clandetails.clan.lore.rivals=&7Rivali\: &b{0}
gui.clandetails.clan.lore.founded=&7Fondato\: &b{0}
gui.clandetails.clan.lore.inactive=&7Inattivo\: &b{0}/{1} giorni
gui.clandetails.allies.title=&fAlleati
gui.clandetails.allies.lore=&7Clicca sinistro per vedere i tuoi alleati o aggiungerne altri
gui.clandetails.rivals.title=&fRivali
gui.clandetails.rivals.lore=&7Clicca sinistro per vedere i tuoi rivali o aggiungerne altri
gui.clandetails.roster.title=&fElenco
gui.clandetails.roster.lore=&7Clicca sinistro per vedere i membri del tuo clan o invitarne altri
gui.staffclandetails.roster.lore=&7Clicca sinistro per vedere i membri del clan
gui.clandetails.coords.title=&fCoordinate
gui.clandetails.coords.lore=&7Clic sinistro per vedere le coordinate dei membri del tuo clan
gui.clandetails.home.title=&fCasa
gui.clandetails.home.lore.teleport.price=&7Prezzo teletrasporto\: &b{0}
gui.clandetails.home.lore.teleport=&7Clic sinistro per teletrasportarti nella casa del tuo clan
gui.staffclandetails.home.lore.teleport=&7Clic sinistro per teletrasportarti nella casa di questo clan
gui.clandetails.home.lore.clear=&7Rilascia l'oggetto per cancellare la casa del tuo clan
gui.clandetails.home.lore.set.price=&7Imposta prezzo\: &b{0}
gui.clandetails.home.lore.set=&7Clicca destro per impostare la casa del tuo clan
gui.staffclandetails.home.lore.set=&7Clicca destro per impostare la casa di questo clan
gui.clandetails.regroup.title=&fRaggruppare
gui.clandetails.regroup.lore.price=&7Prezzo\: &b{0}
gui.clandetails.regroup.lore.home=&7Clic sinistro per raggruppare i membri del tuo clan nella casa del clan
@@ -736,35 +536,11 @@ gui.clandetails.regroup.lore.me=&7Click destro per raggruppare i membri del tuo
gui.clandetails.ff.title=&fFuoco Amico
gui.clandetails.ff.personal.lore=&7Personale\: &b{0}
gui.clandetails.ff.clan.lore=&7Clan\: &b{0}
gui.clandetails.ff.personal.toggle.lore=&7Clicca sinistro per attivare o disattivare il tuo fuoco amico
gui.clandetails.ff.clan.toggle.lore=&7Clicca destro per attivare o disattivare il fuoco amico del tuo clan
gui.clandetails.bank.title=&fBanca
gui.clandetails.bank.balance.lore=&7Saldo\: &b{0}
gui.clandetails.bank.withdraw.status.lore=&7Prelievo\: &b{0}
gui.clandetails.bank.deposit.status.lore=&7Deposito\: &b{0}
gui.clandetails.bank.withdraw.toggle.lore=&7Rilascia l'elemento per attivare o disattivare lo stato di prelievo
gui.clandetails.bank.deposit.toggle.lore=&7Clicca destro per attivare o disattivare lo stato del deposito
gui.clandetails.fee.title=&fTassa
gui.clandetails.fee.status.lore=&7Stato\: &b{0}
gui.clandetails.fee.value.lore=&7Valore\: &b{0}
gui.clandetails.fee.toggle.lore=&7Clicca sinistro per attivare o disattivare lo stato della tassa
gui.clandetails.rank.title=&fRango
gui.clandetails.rank.lore=&7Clicca sinistro per vedere i ranghi del clan e modificarli
gui.clandetails.verified.title=&fVerificato
gui.clandetails.not.verified.title=&fNon verificato
gui.clandetails.verify.price.lore=&7Prezzo\: &b{0}
gui.clandetails.not.verified.lore=&7Clicca sinistro per verificare il tuo clan
gui.staffclandetails.not.verified.lore=&7Clicca sinistro per verificare questo clan
gui.clandetails.resign.title=&fDimettiti
gui.clandetails.resign.lore=&7Clicca sinistro per dimetterti dal tuo clan
gui.clandetails.disband.title=&fSciogli
gui.clandetails.disband.lore=&7Rilascia l'oggetto per sciogliere il tuo clan
gui.staffclandetails.disband.lore=&7Clicca sinistro per sciogliere questo clan
gui.clandetails.chat.title=&fChat
gui.clandetails.chat.clan.chat.lore=&7/{0} [message] - &bInvia un messaggio alla chat del clan
gui.clandetails.chat.clan.join.leave.lore=&7/{0} {1}/{2} - &bEntra/esci dalla chat del clan
gui.clandetails.chat.ally.chat.lore=&7/{0} [message] - &bInvia un messaggio nella chat alleati
gui.clandetails.chat.ally.join.leave.lore=&7/{0} {1}/{2} - &bEntra/esci dalla chat alleati
gui.clandetails.chat.clan.status.lore=&7Clan\: &b{0}
gui.clandetails.chat.ally.status.lore=&7Alleati\: &b{0}
gui.clandetails.chat.clan.toggle.lore=&7Click sinistro per attivare o disattivare lo stato della chat
@@ -788,23 +564,14 @@ gui.playerdetails.kick.title=&fEspelli
gui.playerdetails.promote.demote.title=&fPromuovi/Retrocedi
gui.playerdetails.promote.lore.left.click=&7Click sinistro per promuovere
gui.playerdetails.demote.lore.right.click=&7Click destro per retrocedere
gui.playerdetails.assign.unassign.title=&fAssegna/Rimuovi rango
gui.playerdetails.assign.lore.left.click=&7Clicca sinistro per assegnare
gui.playerdetails.unassign.lore.right.click=&7Premi destro per rimuovere l'assegnazione
gui.playerdetails.trust.untrust.title=&fFidato/Non fidato
gui.playerdetails.trust.lore.left.click=&7Clicca sinistro per concedere lo stato di Fiducia
gui.playerdetails.untrust.lore.right.click=&7Clicca destro per rimuovere lo stato di Fiducia
gui.playerdetails.ban.unban.title=&fBandisci/Sbandisci
gui.playerdetails.ban.left.click=&7Clic sinistro per bannare questo giocatore dai clan
gui.playerdetails.unban.right.click=&7Clicca destro per sbannare questo utente
gui.playerdetails.resetkdr.lore=&7Clic sinistro per resettare il KDR di questo giocatore
gui.playerdetails.purge.title=&fEliminare
gui.playerdetails.purge.lore=&7Clic sinistro per eliminare i dati di questo giocatore
gui.playerdetails.place.title=&fPosizione
gui.playerdetails.place.lore=&7Clic sinistro per scegliere un clan per questo giocatore
gui.languageselector.title=Lingue - Attuale\: {0}
gui.languageselector.language.title=&f{0}
gui.languageselector.language.lore.left.click=&7Clicca sinistro per selezionare la tua lingua
gui.languageselector.language.lore.translation.status=&7Stato traduzione\: &b{0}%
gui.languageselector.language.lore.right.click=&7Click destro per aiutare la traduzione
gui.confirmation.title=Conferma
@@ -814,19 +581,9 @@ gui.not.supported=&cSi è verificato un errore durante l'apertura della GUI\! Di
staff.member.verify.clan=&cUn membro dello staff deve verificare il tuo clan\!
player.already.has.that.rank=&cIl giocatore ha già questo rango\!
joined.clan.chat=&bSei entrato nella chat del clan
already.joined.clan.chat=&bSei già dentro la chat del clan
left.clan.chat=&bSei uscito dalla la chat del clan
muted.clan.chat=&bHai silenziato la chat del clan
unmuted.clan.chat=&bHai riabilitato la lettura della la chat del clan
joined.ally.chat=&bSei entrato nella chat alleati
left.ally.chat=&bSei uscito dalla chat alleati
muted.ally.chat=&bHai silenziato la chat alleati
unmuted.ally.chat=&bHai riabilitato la lettura della chat alleati
already.joined.ally.chat=&bSei già dentro la chat alleati
player.already.in.this.clan=&cIl giocatore è già in questo clan
your.clan.reached.max.alliances=&cIl tuo clan ha raggiunto il numero massimo di alleanze
other.clan.reached.max.alliances=&cL'altro clan ha raggiunto il numero massimo di alleanze
insert.clan.tag=&bInserisci il nome del clan (o "{0}")\:
insert.clan.name=&bInserisci il nome del clan\:
insert.rank.name=&bInserisci il nome del rango (o "{0}")\:
click.to.help.translating=&bClicca su questo link per aiutarci a tradurre\:\n&r{0}
@@ -835,38 +592,21 @@ you.must.hold.a.banner=&cDevi avere un stendardo in mano\!
you.changed.clan.banner=&bHai cambiato lo stendardo del tuo clan\!
your.clan.already.verified=&cIl tuo clan è già stato verificato\!
# suppress inspection "TrailingSpacesInProperty"
clan.profile=\n&7Profilo del clan\: &b%clan_name% &8-------------------------------------------\n \n &7Nome\: &e[&8%clan_color_tag%&e] &b%clan_name%\n &7Descrizione\: &f%clan_description%\n &7Stato\: &f%clan_status%\n &7Leader\: %clan_leaders%\n &7Membri Online\: &f%clan_online_count%&7/&f%clan_size%\n &7KDR\: &e%clan_kdr%\n &7Uccisioni totali\: &8[Nemici\:&f%clan_rival_kills% &8Alleati\:&f%clan_ally_kills% &8Neutrali\:&f%clan_neutral_kills% &8Civili\:&f%clan_civilian_kills%&8]\n &7Morti\: &f%clan_deaths%\n &7Tasse\: &f%clan_fee_enabled%&7, &f%clan_fee_value% $\n &7Alleanze\: &f%clan_allies%\n &7Nemici\: &f%clan_rivals%\n &7Creazione\: &f%clan_founded%\n &7Inattivo da\: &f%clan_inactive_days%&7/&f%clan_max_inactive_days% giorni\n
player.lookup.clanname=&e[&8%clan_color_tag%&e] &b%clan_name%
# suppress inspection "TrailingSpacesInProperty"
player.lookup.killtype=&7Tipo Uccisione\: %player_kill_type%\n
player.lookup=\n&7 Informazioni utente\: &b%player_name% &8-------------------------------------------\n \n &7Clan\: &f%clan_name%\n &7Rango\: &f%player_rank%\n &7Stato\: &f%player_status%\n &7KDR\: &e%player_kdr%\n &7Uccisioni totali\: &8[Nemici\:&f%player_rival_kills% &8Alleati\:&7%player_ally_kills% &8Neutrali\:&f%player_neutral_kills% &8Civili\:&f%player_civilian_kills%&8]\n &7Morti\: &f%player_deaths%\n &7Data unione\: &f%player_join_date%\n &7Ultimo login\: &f%player_last_seen%\n &7Clan passati\: &f%player_past_clans%\n &7Inattivo da\: &f%player_inactive_days%&7/&f%player_max_inactive_days% giorni\n %kill_type_line%
economy.disabled=&cEconomia disattivata\!
has.been.purged=I dati di {0} sono stati eliminati
accepted.invitation=&bHai accettato l'invito di {0}
denied.invitation=&cHai negato l'invito di {0}
must.be.in.clan.to.pvp=&cTu e {0} dovete essere membri del clan per fare pvp\!
clans.not.at.war.pvp.denied=&cIl tuo clan non è in guerra con {0}\!
cannot.attack.civilians=&cNon puoi attaccare i civili\!
cannot.attack.clan.member=&cNon puoi attaccare un altro membro del clan\!
cannot.attack.ally=&cNon puoi attaccare un alleato\!
cannot.send.discord.message=Non puoi inviare messaggi a {0}. Non sei un membro di quel clan\!
discordhook.is.disabled=&cL'integrazione di Discord è disabilitata o non disponibile\!
your.clan.doesnt.have.any.linked.player=Il tuo clan non ha nessun giocatore collegato
your.clan.doesnt.have.minimum.linked.player=Il tuo clan non ha minimo giocatori collegati
your.clan.is.not.on.the.whitelist=Il tuo clan non è whitelist
your.clan.already.has.channel=Il tuo clan ha già un canale discord
discord.reached.category.limit=Discord ha raggiunto il limite delle categorie\!
discord.reached.channels.limit=Discord ha raggiunto il limite dei canali\!
discord.created.successfully=&bCanale Discord creato con successo\!
you.did.not.link.your.account=Non hai collegato il tuo account\!
# suppress inspection "TrailingSpacesInProperty"
cannot.change.member.fee.now=&cNon puoi cambiare l'importo della tassa dei membri vicino alla scadenza di pagamento.
cannot.change.member.fee.hours=&cRiprova tra {0} ore...
cannot.change.member.fee.minutes=&cRiprova tra {0} minuto/i...
cannot.kick.last.leader=&cNon puoi espellere l'ultimo leader\!
cannot.disband.permanent=&cNon puoi dissolvere questo clan. Ha stato permanente.
you.can.only.set.base.in.your.land=&cPuoi impostare casa solo nella tua terra\!
only.leaders.can.create.lands=&cSolo i leader possono claimare terreni\!
only.one.land.per.clan=&cIl tuo clan ha già una terra\!
only.clan.members.can.create.lands=&cSolo i membri di un clan possono creare terre\!
land.allowed.all.actions=&bTutte le azioni sono state permesse\!
@@ -875,11 +615,5 @@ land.allowed.action=&bAzione permessa\!
land.blocked.action=&bAzione bloccata\!
you.do.not.own.lands=&cNon possiedi una terra\!
land.sharing.disabled=&cCondivisione di terra è disattivata\!
clan.chat.disabled=&cLa chat del Clan è disabilitata\!
ally.chat.disabled=&cLa chat alleati è disabilitata\!
war.expired=La guerra con {0} è scaduta\!
you.cant.start.war.online.members.difference=Non puoi iniziare la guerra. Un clan ha più membri online dell'altro.
invitedplayer.invite.off=Questo giocatore ha disabilitato gli inviti al clan
user.hasnt.played.before=&cQuesto utente non ha mai giocato prima
clan.list.balance.header=\n{0} &7Classifica Bilanci &8-----------------------\n \n&8Clan Totali\: &7{1}\n \n&8\#&7. &8Clan &7- &8Bilancio
clan.list.balance.line=&f{0}. {1}{2}{3}&b{4} &7- &e{5}$
Loaded 100 of 117 files, more files were not shown because too many files have changed in this diff. Show more