diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 11e2923..9f56021 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,7 +1,7 @@ [issue]: https://github.com/PlaceholderAPI/PlaceholderAPI/issues/new [discord]: https://helpch.at/discord [code of conduct]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/CODE_OF_CONDUCT.md -[wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/docs/wiki/wiki +[wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/wiki [master]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master [docs-wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/docs/wiki [style]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master/config/style @@ -40,7 +40,8 @@ In those cases should you report the issue to the issue tracker of the expansion ## Pull requests As an open source project are we welcoming all contributions to improve PlaceholderAPI, being it changes to its code, or contributions to its documentation such as the [Wiki] or the Javadocs. -**When contributing, make sure to both base of and target the mentioned branch. Pull requests targeting the wrong branch may get closed without a warning.** +> [!IMPORTANT] +> When contributing, make sure to both base of and target the mentioned branch. Pull requests targeting the wrong branch may get closed without a warning. ### Code contributions > **Source and Target Branch:** [`master`][master] @@ -56,12 +57,10 @@ Javadocs changes should usually be combined with [code contributions](#code-cont \*This branch may change in the future. ### Wiki contributions -> **Source and Target Branch:** [`docs/wiki`][docs-wiki] +> **Source and Target Branch:** [`wiki`][docs-wiki] -The Wiki of PlaceholderAPI has a unique quirk by having a dedicated [`wiki` folder][wiki] hosting the pages found on the actual wiki itself. -If you find outdated information, want to add missing expansions/plugins or just like to correct some wrong spelling should you both base of and target your contributions on the `docs/wiki` branch. - -**Please only PR changes for the `wiki` folder on the `docs/wiki` branch! Pull requests not following this guidelines will be closed unnanounced.** +The Wiki of PlaceholderAPI is located on its own dedicated branch, hosting all the assets and files that get used to create it through the usage of GitHub Actions and GitHub Pages. +We welcome contributions that update outdated information, add new expansions/plugins supporting PlaceholderAPI or even correct spelling mistakes and typos. ## Code of Conduct We have a [Code of Conduct] to maintain a welcoming atmosphere in this project. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 87244dc..f8075c7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -25,4 +25,4 @@ Closes N/A -[Wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki +[Wiki]: https://wiki.placeholderapi.com diff --git a/.github/label-commenter-config.yml b/.github/label-commenter-config.yml index 852b4bb..a8922ea 100644 --- a/.github/label-commenter-config.yml +++ b/.github/label-commenter-config.yml @@ -1,8 +1,8 @@ comment: footer: "\ ----\n\n - > **Note**\n - > *This is an automated response created by a **GitHub Action***\n + > [!NOTE]\n + > *This is an automated response created by a **GitHub Action***
> *Mentioning the bot won't have any effect!* " diff --git a/README.md b/README.md index a6c7291..99868d9 100644 --- a/README.md +++ b/README.md @@ -7,18 +7,20 @@ [discord]: https://helpch.at/discord [spigot]: https://www.spigotmc.org/resources/6245/ -[Expansions cloud]: https://api.extendedclip.com/home +[hangar]: https://hangar.papermc.io/HelpChat/PlaceholderAPI +[bbb]: https://builtbybit.com/resources/placeholderapi.24306 +[Expansions cloud]: https://api.placeholderapi.net/home [placeholder list]: https://helpch.at/placeholders [statistics]: https://bstats.org/plugin/bukkit/PlaceholderAPI [ci]: http://ci.extendedclip.com/job/PlaceholderAPI/ [ciImg]: http://ci.extendedclip.com/buildStatus/icon?job=PlaceholderAPI -[APIversionImg]: https://img.shields.io/nexus/placeholderapi/me.clip/placeholderapi?server=https%3A%2F%2Frepo.extendedclip.com&label=API%20Version -[logo]: https://raw.githubusercontent.com/PlaceholderAPI/PlaceholderAPI/wiki/img/papi-logo.png +[APIversionImg]: https://repo.extendedclip.com/api/badge/latest/releases/me/clip/placeholderapi?name=API%20Version +[logo]: https://wiki.placeholderapi.com/assets/img/papi-logo.png [contributing]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/.github/CONTRIBUTING.md -[placeholderexpansion]: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/PlaceholderExpansion +[placeholderexpansion]: https://wiki.placeholderapi.com/developers/creating-a-placeholderexpansion/ [![logo]][spigot] @@ -30,7 +32,7 @@ Support for specific plugins are provided either by the plugin itself or through expansions. The expansions may be downloaded in-game through the PAPI Expansion Cloud. There are currently over 240+ expansions that support a wide variety of plugins, such as Essentials, Factions, LuckPerms, and Vault. -PlaceholderAPI has been downloaded over 1,000,000 times and has been used concurrently on over 40,000 servers, which makes it a must-have for a server of any type or scale. +PlaceholderAPI has been downloaded over 1,700,000 times on Spigot and has been used concurrently on over 45,000 servers, which makes it a must-have for a server of any type or scale. ## Contribute If you would like to contribute towards PlaceholderAPI should you take a look at our [Contributing file][contributing] for the ins and outs on how you can do that and what you need to keep in mind. @@ -47,4 +49,6 @@ If you would like to create your own Placeholder Expansion for PlaceholderAPI, t - [Expansions Cloud] - [Placeholder List] - [Spigot Page][spigot] +- [Hangar Page][hangar] +- [BuiltByBit Page][bbb] - [Plugin Statistics][statistics] diff --git a/build.gradle.kts b/build.gradle.kts index ba02025..a26bb6d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,11 +4,11 @@ plugins { `java-library` `maven-publish` id("com.github.hierynomus.license") version "0.16.1" - id("com.github.johnrengelman.shadow") version "8.1.0" + id("io.github.goooler.shadow") version "8.1.7" } group = "me.clip" -version = "2.11.4-DEV-${System.getProperty("BUILD_NUMBER")}" +version = "2.11.7-DEV-${System.getProperty("BUILD_NUMBER")}" description = "An awesome placeholder provider!" @@ -24,9 +24,9 @@ repositories { dependencies { implementation("org.bstats:bstats-bukkit:3.0.1") - implementation("net.kyori:adventure-platform-bukkit:4.3.0") + implementation("net.kyori:adventure-platform-bukkit:4.3.3") - compileOnly("org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT") + compileOnly("org.spigotmc:spigot-api:1.21-R0.1-SNAPSHOT") compileOnlyApi("org.jetbrains:annotations:23.0.0") testImplementation("org.openjdk.jmh:jmh-core:1.32") @@ -54,7 +54,7 @@ license { encoding = "UTF-8" ext { - set("year", 2021) + set("year", 2024) } } @@ -71,6 +71,7 @@ tasks { withType { options.encoding = "UTF-8" + options.release = 8 } withType { @@ -88,6 +89,8 @@ tasks { relocate("org.bstats", "me.clip.placeholderapi.metrics") relocate("net.kyori", "me.clip.placeholderapi.libs.kyori") + + exclude("META-INF/versions/**") } test { diff --git a/config/headers/jsonmessage.txt b/config/headers/jsonmessage.txt index 9fddec6..fab9d03 100644 --- a/config/headers/jsonmessage.txt +++ b/config/headers/jsonmessage.txt @@ -1,4 +1,4 @@ -Copyright (c) 2018-2021 Peter Blood +Copyright (c) 2018-2024 Peter Blood Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180..ccebba7 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e1bef7e..2617362 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index c53aefa..79a61d4 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright 2015-2021 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,10 +32,10 @@ # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions $var, ${var}, ${var:-default}, ${var+SET}, -# ${var#prefix}, ${var%suffix}, and $( cmd ); -# * compound commands having a testable exit status, especially case; -# * various built-in commands including command, set, and ulimit. +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/java/me/clip/placeholderapi/PlaceholderAPI.java b/src/main/java/me/clip/placeholderapi/PlaceholderAPI.java index a5228db..97b6c48 100644 --- a/src/main/java/me/clip/placeholderapi/PlaceholderAPI.java +++ b/src/main/java/me/clip/placeholderapi/PlaceholderAPI.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -136,8 +136,8 @@ public final class PlaceholderAPI { * @return String containing all translated placeholders */ @NotNull - public static List setBracketPlaceholders(final OfflinePlayer player, - @NotNull final List text) { + public static List<@NotNull String> setBracketPlaceholders(final OfflinePlayer player, + @NotNull final List<@NotNull String> text) { return text.stream().map(line -> setBracketPlaceholders(player, line)) .collect(Collectors.toList()); } @@ -150,7 +150,8 @@ public final class PlaceholderAPI { * @param text Text to set the placeholder values in * @return String containing all translated placeholders */ - public static String setBracketPlaceholders(Player player, String text) { + @NotNull + public static String setBracketPlaceholders(Player player, @NotNull String text) { return setBracketPlaceholders((OfflinePlayer) player, text); } @@ -162,7 +163,8 @@ public final class PlaceholderAPI { * @param text List of Strings to set the placeholder values in * @return String containing all translated placeholders */ - public static List setBracketPlaceholders(Player player, List text) { + @NotNull + public static List setBracketPlaceholders(Player player, @NotNull List text) { return setBracketPlaceholders((OfflinePlayer) player, text); } diff --git a/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java b/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java index 1fc84bf..e4af6e0 100644 --- a/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java +++ b/src/main/java/me/clip/placeholderapi/PlaceholderAPIPlugin.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ package me.clip.placeholderapi; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import me.clip.placeholderapi.commands.PlaceholderCommandRouter; @@ -55,7 +56,17 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { private static PlaceholderAPIPlugin instance; static { - final String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + String version = Bukkit.getServer().getBukkitVersion().split("-")[0]; + String suffix; + if (version.chars() + .filter(c -> c == '.') + .count() == 1) { + suffix = "R1"; + version = 'v' + version.replace('.', '_') + '_' + suffix; + } else { + int minor = Integer.parseInt(version.split("\\.")[2].charAt(0) + ""); + version = 'v' + version.replace('.', '_').replace("_" + minor, "") + '_' + "R" + (minor - 1); + } boolean isSpigot; try { @@ -127,6 +138,7 @@ public final class PlaceholderAPIPlugin extends JavaPlugin { } } + @Deprecated public static Version getServerVersion() { return VERSION; } diff --git a/src/main/java/me/clip/placeholderapi/PlaceholderHook.java b/src/main/java/me/clip/placeholderapi/PlaceholderHook.java index 622260f..9906b8a 100644 --- a/src/main/java/me/clip/placeholderapi/PlaceholderHook.java +++ b/src/main/java/me/clip/placeholderapi/PlaceholderHook.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ public abstract class PlaceholderHook { @Nullable public String onRequest(final OfflinePlayer player, @NotNull final String params) { if (player != null && player.isOnline()) { - return onPlaceholderRequest((Player) player, params); + return onPlaceholderRequest(player.getPlayer(), params); } return onPlaceholderRequest(null, params); diff --git a/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommand.java b/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommand.java index 53d7c8e..8136168 100644 --- a/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommand.java +++ b/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommand.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommandRouter.java b/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommandRouter.java index cf6b191..7ea3f42 100644 --- a/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommandRouter.java +++ b/src/main/java/me/clip/placeholderapi/commands/PlaceholderCommandRouter.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloud.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloud.java index 5ebbd70..4d03de1 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloud.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloud.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudClear.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudClear.java index 6d6121c..6083d5d 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudClear.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudClear.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudDownload.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudDownload.java index 5717447..1085eb8 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudDownload.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudDownload.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ package me.clip.placeholderapi.commands.impl.cloud; +import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -37,6 +38,16 @@ public final class CommandECloudDownload extends PlaceholderCommand { super("download"); } + private boolean isBlockedExpansion(String name) { + String env = System.getenv("PAPI_BLOCKED_EXPANSIONS"); + if (env == null) { + return false; + } + + return Arrays.stream(env.split(",")) + .anyMatch(s -> s.equalsIgnoreCase(name)); + } + @Override public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, @NotNull final CommandSender sender, @NotNull final String alias, @@ -47,6 +58,12 @@ public final class CommandECloudDownload extends PlaceholderCommand { return; } + if (isBlockedExpansion(params.get(0))) { + Msg.msg(sender, + "&cThis expansion can't be downloaded."); + return; + } + final CloudExpansion expansion = plugin.getCloudExpansionManager() .findCloudExpansionByName(params.get(0)).orElse(null); if (expansion == null) { @@ -55,6 +72,11 @@ public final class CommandECloudDownload extends PlaceholderCommand { return; } + if (!expansion.isVerified()) { + Msg.msg(sender, "&cThe expansion '&f" + params.get(0) + "&c' is not verified and can only be downloaded manually from &fhttps://placeholderapi.com/ecloud"); + return; + } + final CloudExpansion.Version version; if (params.size() < 2) { version = expansion.getVersion(expansion.getLatestVersion()); @@ -86,9 +108,7 @@ public final class CommandECloudDownload extends PlaceholderCommand { .getVersion() + "] &ato file: &f" + file.getName(), "&aMake sure to type &f/papi reload &ato enable your new expansion!"); - plugin.getCloudExpansionManager().clean(); - plugin.getCloudExpansionManager() - .fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions()); + plugin.getCloudExpansionManager().load(); }); } diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java index 7e0c5b2..d7b9b97 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionInfo.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java index 9334a73..e5075bb 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionList.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java index e1def67..f379365 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudExpansionPlaceholders.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java index fb11086..c814d9e 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudRefresh.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,9 +38,7 @@ public final class CommandECloudRefresh extends PlaceholderCommand { public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, @NotNull final CommandSender sender, @NotNull final String alias, @NotNull @Unmodifiable final List params) { - plugin.getCloudExpansionManager().clean(); - plugin.getCloudExpansionManager() - .fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions()); + plugin.getCloudExpansionManager().load(); Msg.msg(sender, "&aThe eCloud manager has been refreshed!"); diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudStatus.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudStatus.java index b8e6ab1..b9b7ee6 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudStatus.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudStatus.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java index cdd8233..4aa8454 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/cloud/CommandECloudUpdate.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandDump.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandDump.java index 6d236d1..f9d848a 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandDump.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandDump.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -200,7 +200,9 @@ public final class CommandDump extends PlaceholderCommand { for (final Plugin other : plugins) { builder.append(" ") .append(String.format("%-" + size + "s", other.getName())) - .append(" [Version: ") + .append(" [Authors: [") + .append(String.join(", ", other.getDescription().getAuthors())) + .append("], Version: ") .append(other.getDescription().getVersion()) .append("]") .append("\n"); diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionRegister.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionRegister.java index c6085b6..a37d793 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionRegister.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionRegister.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,7 +54,7 @@ public final class CommandExpansionRegister extends PlaceholderCommand { final LocalExpansionManager manager = plugin.getLocalExpansionManager(); final File file = new File(manager.getExpansionsFolder(), params.get(0)); - if (!file.exists()) { + if (!file.exists() || !file.getParentFile().equals(manager.getExpansionsFolder())) { Msg.msg(sender, "&cThe file &f" + file.getName() + "&c doesn't exist!"); return; diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionUnregister.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionUnregister.java index bf0861b..ff6c6da 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionUnregister.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandExpansionUnregister.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandHelp.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandHelp.java index b648f1d..47c1da8 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandHelp.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandHelp.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandInfo.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandInfo.java index 3d98b61..95e84c1 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandInfo.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandInfo.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandList.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandList.java index 6d8506b..0284b89 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandList.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandList.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandParse.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandParse.java index 3793116..1ff59b9 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandParse.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandParse.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -87,7 +87,8 @@ public final class CommandParse extends PlaceholderCommand { final boolean command) { if (params.size() < 2) { Msg.msg(sender, - "&cYou must supply a target, and a message: &b/papi " + (broadcast ? "bcparse" : "parse") + "&cYou must provide a target and message: &b/papi " + + (command ? "cmdparse" : (broadcast ? "bcparse" : "parse")) + " &7{target} &a{message}"); return; } @@ -132,24 +133,49 @@ public final class CommandParse extends PlaceholderCommand { @NotNull @Unmodifiable final List params) { if (params.size() < 3) { Msg.msg(sender, - "&cYou must supply two targets, and a message: &b/papi parserel &7{target one} {target two} &a{message}"); + "&cYou must supply two targets, and a message: &b/papi parserel &7{target one} " + + "{target two} &a{message}"); return; } - - final OfflinePlayer targetOne = resolvePlayer(params.get(0)); - if (targetOne == null || !targetOne.isOnline()) { + + OfflinePlayer playerOne; + + if ("me".equalsIgnoreCase(params.get(0))) { + if (!(sender instanceof Player)) { + Msg.msg(sender, "&cYou must be a player to use &7me&c as a target!"); + return; + } + + playerOne = ((Player) sender); + } else { + playerOne = resolvePlayer(params.get(0)); + } + + if (playerOne == null || !playerOne.isOnline()) { Msg.msg(sender, "&cFailed to find player: &f" + params.get(0)); return; } - - final OfflinePlayer targetTwo = resolvePlayer(params.get(1)); - if (targetTwo == null || !targetTwo.isOnline()) { + + OfflinePlayer playerTwo; + + if ("me".equalsIgnoreCase(params.get(1))) { + if (!(sender instanceof Player)) { + Msg.msg(sender, "&cYou must be a player to use &7me&c as a target!"); + return; + } + + playerTwo = ((Player) sender); + } else { + playerTwo = resolvePlayer(params.get(1)); + } + + if (playerTwo == null || !playerTwo.isOnline()) { Msg.msg(sender, "&cFailed to find player: &f" + params.get(1)); return; } final String message = PlaceholderAPI - .setRelationalPlaceholders(((Player) targetOne), ((Player) targetTwo), + .setRelationalPlaceholders((Player) playerOne, (Player) playerTwo, String.join(" ", params.subList(2, params.size()))); sender.sendMessage(message); diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandReload.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandReload.java index ca48275..44e1b43 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandReload.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandReload.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandVersion.java b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandVersion.java index 0c7a285..f637d9c 100644 --- a/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandVersion.java +++ b/src/main/java/me/clip/placeholderapi/commands/impl/local/CommandVersion.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/configuration/ExpansionSort.java b/src/main/java/me/clip/placeholderapi/configuration/ExpansionSort.java index ed4211d..87a795c 100644 --- a/src/main/java/me/clip/placeholderapi/configuration/ExpansionSort.java +++ b/src/main/java/me/clip/placeholderapi/configuration/ExpansionSort.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/configuration/PlaceholderAPIConfig.java b/src/main/java/me/clip/placeholderapi/configuration/PlaceholderAPIConfig.java index e10733e..0dc895b 100644 --- a/src/main/java/me/clip/placeholderapi/configuration/PlaceholderAPIConfig.java +++ b/src/main/java/me/clip/placeholderapi/configuration/PlaceholderAPIConfig.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,10 +38,6 @@ public final class PlaceholderAPIConfig { return plugin.getConfig().getBoolean("check_updates"); } - public boolean cloudAllowUnverifiedExpansions() { - return plugin.getConfig().getBoolean("cloud_allow_unverified_expansions"); - } - public boolean isCloudEnabled() { return plugin.getConfig().getBoolean("cloud_enabled"); diff --git a/src/main/java/me/clip/placeholderapi/events/ExpansionRegisterEvent.java b/src/main/java/me/clip/placeholderapi/events/ExpansionRegisterEvent.java index f50ea75..21df3ab 100644 --- a/src/main/java/me/clip/placeholderapi/events/ExpansionRegisterEvent.java +++ b/src/main/java/me/clip/placeholderapi/events/ExpansionRegisterEvent.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/events/ExpansionUnregisterEvent.java b/src/main/java/me/clip/placeholderapi/events/ExpansionUnregisterEvent.java index 0e630d9..e899b60 100644 --- a/src/main/java/me/clip/placeholderapi/events/ExpansionUnregisterEvent.java +++ b/src/main/java/me/clip/placeholderapi/events/ExpansionUnregisterEvent.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/events/ExpansionsLoadedEvent.java b/src/main/java/me/clip/placeholderapi/events/ExpansionsLoadedEvent.java index 56e7ae8..872d275 100644 --- a/src/main/java/me/clip/placeholderapi/events/ExpansionsLoadedEvent.java +++ b/src/main/java/me/clip/placeholderapi/events/ExpansionsLoadedEvent.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/events/PlaceholderHookUnloadEvent.java b/src/main/java/me/clip/placeholderapi/events/PlaceholderHookUnloadEvent.java index 48d2edf..e0a8ce5 100644 --- a/src/main/java/me/clip/placeholderapi/events/PlaceholderHookUnloadEvent.java +++ b/src/main/java/me/clip/placeholderapi/events/PlaceholderHookUnloadEvent.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/exceptions/NoDefaultCommandException.java b/src/main/java/me/clip/placeholderapi/exceptions/NoDefaultCommandException.java index 203c48e..99c9602 100644 --- a/src/main/java/me/clip/placeholderapi/exceptions/NoDefaultCommandException.java +++ b/src/main/java/me/clip/placeholderapi/exceptions/NoDefaultCommandException.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/Cacheable.java b/src/main/java/me/clip/placeholderapi/expansion/Cacheable.java index 0ebc2a8..a12a595 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Cacheable.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Cacheable.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/Cleanable.java b/src/main/java/me/clip/placeholderapi/expansion/Cleanable.java index 48967f5..ae14598 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Cleanable.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Cleanable.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/Configurable.java b/src/main/java/me/clip/placeholderapi/expansion/Configurable.java index ad38418..8b2558e 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Configurable.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Configurable.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/NMSVersion.java b/src/main/java/me/clip/placeholderapi/expansion/NMSVersion.java index 37c18b8..a9a8940 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/NMSVersion.java +++ b/src/main/java/me/clip/placeholderapi/expansion/NMSVersion.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,7 +46,12 @@ public enum NMSVersion { SPIGOT_1_18_R1("v1_18_R1"), SPIGOT_1_19_R1("v1_19_R1"), SPIGOT_1_19_R2("v1_19_R2"), - SPIGOT_1_19_R3("v1_19_R3"); + SPIGOT_1_19_R3("v1_19_R3"), + SPIGOT_1_20_R1("v1_20_R1"), + SPIGOT_1_20_R2("v1_20_R2"), + SPIGOT_1_20_R3("v1_20_R3"), + SPIGOT_1_20_R4("v1_20_R4"), + SPIGOT_1_21_R1("v1_21_R1"); private final String version; diff --git a/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java b/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java index 5cd3029..3fb24f9 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java +++ b/src/main/java/me/clip/placeholderapi/expansion/PlaceholderExpansion.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,6 +40,14 @@ import org.jetbrains.annotations.Nullable; */ public abstract class PlaceholderExpansion extends PlaceholderHook { + /** + * The type is {@link Type#INTERNAL} by default. + * For external expansions, the type is updated on {@link me.clip.placeholderapi.expansion.manager.LocalExpansionManager#register(Class) register}. + * @since 2.11.4 + */ + @ApiStatus.Internal + protected Type expansionType = Type.INTERNAL; + /** * The placeholder identifier of this expansion. May not contain {@literal %}, * {@literal {}} or _ @@ -159,6 +167,27 @@ public abstract class PlaceholderExpansion extends PlaceholderHook { return PlaceholderAPIPlugin.getInstance(); } + /** + * Get the type of the expansion + * + * @return the type of the expansion + * @since 2.11.4 + */ + @ApiStatus.Internal + public Type getExpansionType() { + return expansionType; + } + + /** + * Set the type of the expansion + * @param expansionType the new type + * @since 2.11.4 + */ + @ApiStatus.Internal + public void setExpansionType(Type expansionType) { + this.expansionType = expansionType; + } + // === Configuration === /** @@ -166,7 +195,7 @@ public abstract class PlaceholderExpansion extends PlaceholderHook { * null when not specified. *
You may use the {@link Configurable} interface to define default values set * - * @return ConfigurationSection that this epxpansion has. + * @return ConfigurationSection that this expansion has. */ @Nullable public final ConfigurationSection getConfigSection() { @@ -394,8 +423,8 @@ public abstract class PlaceholderExpansion extends PlaceholderHook { */ @Override public final String toString() { - return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s']", getName(), - getAuthor(), getVersion()); + return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s', type: '%s']", getName(), + getAuthor(), getVersion(), getExpansionType()); } // === Deprecated API === @@ -432,4 +461,19 @@ public abstract class PlaceholderExpansion extends PlaceholderHook { public String getLink() { return null; } + + public enum Type { + + /** + * An expansion provided by a plugin is considered internal + */ + INTERNAL, + + /** + * An expansion loaded from the expansions folder is considered external + */ + EXTERNAL + + } + } diff --git a/src/main/java/me/clip/placeholderapi/expansion/Relational.java b/src/main/java/me/clip/placeholderapi/expansion/Relational.java index 9d39785..4b7c7d4 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Relational.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Relational.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/Taskable.java b/src/main/java/me/clip/placeholderapi/expansion/Taskable.java index a26b661..b4bea67 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Taskable.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Taskable.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/Version.java b/src/main/java/me/clip/placeholderapi/expansion/Version.java index 4cbb1ab..d9ac195 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/Version.java +++ b/src/main/java/me/clip/placeholderapi/expansion/Version.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ package me.clip.placeholderapi.expansion; +@Deprecated public final class Version { private final boolean isSpigot; diff --git a/src/main/java/me/clip/placeholderapi/expansion/VersionSpecific.java b/src/main/java/me/clip/placeholderapi/expansion/VersionSpecific.java index 97ddf42..51080cc 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/VersionSpecific.java +++ b/src/main/java/me/clip/placeholderapi/expansion/VersionSpecific.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +27,10 @@ package me.clip.placeholderapi.expansion; * with that version. * * @author Ryan McCarthy + * + * @deprecated Will be removed in a future release. */ +@Deprecated public interface VersionSpecific { /** diff --git a/src/main/java/me/clip/placeholderapi/expansion/cloud/CloudExpansion.java b/src/main/java/me/clip/placeholderapi/expansion/cloud/CloudExpansion.java index cc644d7..f5d158f 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/cloud/CloudExpansion.java +++ b/src/main/java/me/clip/placeholderapi/expansion/cloud/CloudExpansion.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java b/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java index 11d7cb3..ed152b7 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java +++ b/src/main/java/me/clip/placeholderapi/expansion/manager/CloudExpansionManager.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ import org.jetbrains.annotations.Unmodifiable; public final class CloudExpansionManager { @NotNull - private static final String API_URL = "http://api.extendedclip.com/v2/"; + private static final String API_URL = "http://api.placeholderapi.net/v2/"; @NotNull private static final Gson GSON = new Gson(); @@ -100,7 +100,7 @@ public final class CloudExpansionManager { public void load() { clean(); - fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions()); + fetch(); } public void kill() { @@ -170,7 +170,7 @@ public final class CloudExpansionManager { await.clear(); } - public void fetch(final boolean allowUnverified) { + public void fetch() { plugin.getLogger().info("Fetching available expansion information..."); ASYNC_EXECUTOR.submit( @@ -190,9 +190,6 @@ public final class CloudExpansionManager { || expansion.getVersion(expansion.getLatestVersion()) == null) { toRemove.add(entry.getKey()); } - if (!allowUnverified && !expansion.isVerified()) { - toRemove.add(entry.getKey()); - } } for (String name : toRemove) { @@ -203,7 +200,7 @@ public final class CloudExpansionManager { plugin.getLogger().log(Level.WARNING, "Failed to download expansion information", e); } - // loop thru what's left on the main thread + // loop through what's left on the main thread plugin .getServer() .getScheduler() diff --git a/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java b/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java index 80c785a..1584a5f 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java +++ b/src/main/java/me/clip/placeholderapi/expansion/manager/LocalExpansionManager.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -187,6 +187,8 @@ public final class LocalExpansionManager implements Listener { return Optional.empty(); } } + + expansion.setExpansionType(PlaceholderExpansion.Type.EXTERNAL); if (!expansion.register()) { Msg.warn("Cannot load expansion %s due to an unknown issue.", expansion.getIdentifier()); @@ -209,6 +211,11 @@ public final class LocalExpansionManager implements Listener { return Optional.empty(); } + /** + * Attempt to register a {@link PlaceholderExpansion} + * @param expansion the expansion to register + * @return if the expansion was registered + */ @ApiStatus.Internal public boolean register(@NotNull final PlaceholderExpansion expansion) { final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT); @@ -216,10 +223,10 @@ public final class LocalExpansionManager implements Listener { if (!expansion.canRegister()) { return false; } - - if (expansions.containsKey(identifier)) { - Msg.warn("Failed to load expansion %s. Identifier is already in use.", - expansion.getIdentifier()); + + // Avoid loading two external expansions with the same identifier + if (expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL && expansions.containsKey(identifier)) { + Msg.warn("Failed to load external expansion %s. Identifier is already in use.", expansion.getIdentifier()); return false; } @@ -287,21 +294,24 @@ public final class LocalExpansionManager implements Listener { Bukkit.getPluginManager().registerEvents(((Listener) expansion), plugin); } - Msg.info("Successfully registered expansion: %s [%s]", expansion.getIdentifier(), - expansion.getVersion()); + Msg.info( + "Successfully registered %s expansion: %s [%s]", + expansion.getExpansionType().name().toLowerCase(), + expansion.getIdentifier(), + expansion.getVersion() + ); if (expansion instanceof Taskable) { ((Taskable) expansion).start(); } - if (plugin.getPlaceholderAPIConfig().isCloudEnabled()) { - final Optional cloudExpansionOptional = - plugin.getCloudExpansionManager().findCloudExpansionByName(identifier); + // Check eCloud for updates only if the expansion is external + if (plugin.getPlaceholderAPIConfig().isCloudEnabled() && expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL) { + final Optional cloudExpansionOptional = plugin.getCloudExpansionManager().findCloudExpansionByName(identifier); if (cloudExpansionOptional.isPresent()) { CloudExpansion cloudExpansion = cloudExpansionOptional.get(); cloudExpansion.setHasExpansion(true); - cloudExpansion.setShouldUpdate( - !cloudExpansion.getLatestVersion().equals(expansion.getVersion())); + cloudExpansion.setShouldUpdate(!cloudExpansion.getLatestVersion().equals(expansion.getVersion())); } } diff --git a/src/main/java/me/clip/placeholderapi/expansion/manager/MethodSignature.java b/src/main/java/me/clip/placeholderapi/expansion/manager/MethodSignature.java index 87519b1..095c5b5 100644 --- a/src/main/java/me/clip/placeholderapi/expansion/manager/MethodSignature.java +++ b/src/main/java/me/clip/placeholderapi/expansion/manager/MethodSignature.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/listeners/ServerLoadEventListener.java b/src/main/java/me/clip/placeholderapi/listeners/ServerLoadEventListener.java index ca8703d..7fdfba3 100644 --- a/src/main/java/me/clip/placeholderapi/listeners/ServerLoadEventListener.java +++ b/src/main/java/me/clip/placeholderapi/listeners/ServerLoadEventListener.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/replacer/CharsReplacer.java b/src/main/java/me/clip/placeholderapi/replacer/CharsReplacer.java index 8848648..e0fdc88 100644 --- a/src/main/java/me/clip/placeholderapi/replacer/CharsReplacer.java +++ b/src/main/java/me/clip/placeholderapi/replacer/CharsReplacer.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/replacer/Replacer.java b/src/main/java/me/clip/placeholderapi/replacer/Replacer.java index b96140a..e0c6e48 100644 --- a/src/main/java/me/clip/placeholderapi/replacer/Replacer.java +++ b/src/main/java/me/clip/placeholderapi/replacer/Replacer.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java b/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java index 8001d61..ac3b137 100644 --- a/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java +++ b/src/main/java/me/clip/placeholderapi/updatechecker/UpdateChecker.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/FileUtil.java b/src/main/java/me/clip/placeholderapi/util/FileUtil.java index 83c4a1f..5d41c8f 100644 --- a/src/main/java/me/clip/placeholderapi/util/FileUtil.java +++ b/src/main/java/me/clip/placeholderapi/util/FileUtil.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/Format.java b/src/main/java/me/clip/placeholderapi/util/Format.java index 0a6bfcf..a149ec5 100644 --- a/src/main/java/me/clip/placeholderapi/util/Format.java +++ b/src/main/java/me/clip/placeholderapi/util/Format.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/Futures.java b/src/main/java/me/clip/placeholderapi/util/Futures.java index c29892f..deb0e46 100644 --- a/src/main/java/me/clip/placeholderapi/util/Futures.java +++ b/src/main/java/me/clip/placeholderapi/util/Futures.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/Msg.java b/src/main/java/me/clip/placeholderapi/util/Msg.java index 98b9e09..84307c7 100644 --- a/src/main/java/me/clip/placeholderapi/util/Msg.java +++ b/src/main/java/me/clip/placeholderapi/util/Msg.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/TimeFormat.java b/src/main/java/me/clip/placeholderapi/util/TimeFormat.java index 29bd2d7..f66f9da 100644 --- a/src/main/java/me/clip/placeholderapi/util/TimeFormat.java +++ b/src/main/java/me/clip/placeholderapi/util/TimeFormat.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/java/me/clip/placeholderapi/util/TimeUtil.java b/src/main/java/me/clip/placeholderapi/util/TimeUtil.java index 17c261f..d23a571 100644 --- a/src/main/java/me/clip/placeholderapi/util/TimeUtil.java +++ b/src/main/java/me/clip/placeholderapi/util/TimeUtil.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6fa0861..26f937a 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,17 +1,16 @@ # PlaceholderAPI -# Version: @version@ +# Version: ${version} # Created by: extended_clip # Contributors: https://github.com/PlaceholderAPI/PlaceholderAPI/graphs/contributors # Issues: https://github.com/PlaceholderAPI/PlaceholderAPI/issues -# Expansions: https://api.extendedclip.com/all/ -# Wiki: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki +# Expansions: https://placeholderapi.com/ecloud +# Wiki: https://wiki.placeholderapi.com/ # Discord: https://helpch.at/discord # No placeholders are provided with this plugin by default. # Download placeholders: /papi ecloud check_updates: true cloud_enabled: true cloud_sorting: "name" -cloud_allow_unverified_expansions: false boolean: 'true': 'yes' 'false': 'no' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 077b274..84c3f5f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -37,7 +37,6 @@ permissions: placeholderapi.ecloud.info: true placeholderapi.ecloud.list: true placeholderapi.ecloud.clear: true - placeholderapi.ecloud.toggle: true placeholderapi.ecloud.status: true placeholderapi.ecloud.update: true placeholderapi.ecloud.refresh: true @@ -82,9 +81,6 @@ permissions: placeholderapi.ecloud.clear: default: "op" description: "Allows you to clear the local eCloud expansion cache" - placeholderapi.ecloud.toggle: - default: "op" - description: "Allows you to toggle/enable/disable the eCloud manager" placeholderapi.ecloud.status: default: "op" description: "Allows you to view the status of eCloud expansions" @@ -99,4 +95,4 @@ permissions: description: "Allows you to download an expansion from the eCloud" placeholderapi.ecloud.placeholders: default: "op" - description: "Allows you to view the placeholders of a eCloud expansion" \ No newline at end of file + description: "Allows you to view the placeholders of a eCloud expansion" diff --git a/src/test/java/me/clip/placeholderapi/Values.java b/src/test/java/me/clip/placeholderapi/Values.java index f985ad9..d3d1f63 100644 --- a/src/test/java/me/clip/placeholderapi/Values.java +++ b/src/test/java/me/clip/placeholderapi/Values.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/test/java/me/clip/placeholderapi/replacer/ReplacerBenchmarks.java b/src/test/java/me/clip/placeholderapi/replacer/ReplacerBenchmarks.java index a824318..e08de47 100644 --- a/src/test/java/me/clip/placeholderapi/replacer/ReplacerBenchmarks.java +++ b/src/test/java/me/clip/placeholderapi/replacer/ReplacerBenchmarks.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/test/java/me/clip/placeholderapi/replacer/ReplacerUnitTester.java b/src/test/java/me/clip/placeholderapi/replacer/ReplacerUnitTester.java index 5f1148e..bb079e2 100644 --- a/src/test/java/me/clip/placeholderapi/replacer/ReplacerUnitTester.java +++ b/src/test/java/me/clip/placeholderapi/replacer/ReplacerUnitTester.java @@ -2,7 +2,7 @@ * This file is part of PlaceholderAPI * * PlaceholderAPI - * Copyright (c) 2015 - 2021 PlaceholderAPI Team + * Copyright (c) 2015 - 2024 PlaceholderAPI Team * * PlaceholderAPI free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by