Compare commits

..

1 Commits

Author SHA1 Message Date
darbyjack
95786e32d2 Started working on Folia support 2023-03-24 13:26:56 -05:00
19 changed files with 112 additions and 177 deletions

View File

@@ -1,7 +1,7 @@
[issue]: https://github.com/PlaceholderAPI/PlaceholderAPI/issues/new [issue]: https://github.com/PlaceholderAPI/PlaceholderAPI/issues/new
[discord]: https://helpch.at/discord [discord]: https://helpch.at/discord
[code of conduct]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/CODE_OF_CONDUCT.md [code of conduct]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/CODE_OF_CONDUCT.md
[wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/wiki [wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/docs/wiki/wiki
[master]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master [master]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master
[docs-wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/docs/wiki [docs-wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/docs/wiki
[style]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master/config/style [style]: https://github.com/PlaceholderAPI/PlaceholderAPI/tree/master/config/style
@@ -40,8 +40,7 @@ In those cases should you report the issue to the issue tracker of the expansion
## Pull requests ## 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. 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.
> [!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.**
> 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 ### Code contributions
> **Source and Target Branch:** [`master`][master] > **Source and Target Branch:** [`master`][master]
@@ -57,10 +56,12 @@ Javadocs changes should usually be combined with [code contributions](#code-cont
\*This branch may change in the future. \*This branch may change in the future.
### Wiki contributions ### Wiki contributions
> **Source and Target Branch:** [`wiki`][docs-wiki] > **Source and Target Branch:** [`docs/wiki`][docs-wiki]
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. The Wiki of PlaceholderAPI has a unique quirk by having a dedicated [`wiki` folder][wiki] hosting the pages found on the actual wiki itself.
We welcome contributions that update outdated information, add new expansions/plugins supporting PlaceholderAPI or even correct spelling mistakes and typos. 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.**
## Code of Conduct ## Code of Conduct
We have a [Code of Conduct] to maintain a welcoming atmosphere in this project. We have a [Code of Conduct] to maintain a welcoming atmosphere in this project.

View File

@@ -25,4 +25,4 @@ Closes N/A <!-- If your PR is based on an issue, change "N/A" the the issue ID (
<!-- DO NOT ALTER ANYTHING BELOW THIS LINE! --> <!-- DO NOT ALTER ANYTHING BELOW THIS LINE! -->
[Wiki]: https://wiki.placeholderapi.com [Wiki]: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki

View File

@@ -1,8 +1,8 @@
comment: comment:
footer: "\ footer: "\
----\n\n ----\n\n
> [!NOTE]\n > **Note**\n
> *This is an automated response created by a **GitHub Action***<br> > *This is an automated response created by a **GitHub Action***\n
> *Mentioning the bot won't have any effect!* > *Mentioning the bot won't have any effect!*
" "

View File

@@ -7,8 +7,6 @@
[discord]: https://helpch.at/discord [discord]: https://helpch.at/discord
[spigot]: https://www.spigotmc.org/resources/6245/ [spigot]: https://www.spigotmc.org/resources/6245/
[hangar]: https://hangar.papermc.io/HelpChat/PlaceholderAPI
[bbb]: https://builtbybit.com/resources/placeholderapi.24306
[Expansions cloud]: https://api.extendedclip.com/home [Expansions cloud]: https://api.extendedclip.com/home
[placeholder list]: https://helpch.at/placeholders [placeholder list]: https://helpch.at/placeholders
[statistics]: https://bstats.org/plugin/bukkit/PlaceholderAPI [statistics]: https://bstats.org/plugin/bukkit/PlaceholderAPI
@@ -17,10 +15,10 @@
[ciImg]: http://ci.extendedclip.com/buildStatus/icon?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 [APIversionImg]: https://img.shields.io/nexus/placeholderapi/me.clip/placeholderapi?server=https%3A%2F%2Frepo.extendedclip.com&label=API%20Version
[logo]: https://wiki.placeholderapi.com/assets/img/papi-logo.png [logo]: https://raw.githubusercontent.com/PlaceholderAPI/PlaceholderAPI/wiki/img/papi-logo.png
[contributing]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/.github/CONTRIBUTING.md [contributing]: https://github.com/PlaceholderAPI/PlaceholderAPI/blob/master/.github/CONTRIBUTING.md
[placeholderexpansion]: https://wiki.placeholderapi.com/developers/creating-a-placeholderexpansion/ [placeholderexpansion]: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/PlaceholderExpansion
<!-- The stuff above isn't visible in the readme --> <!-- The stuff above isn't visible in the readme -->
[![logo]][spigot] [![logo]][spigot]
@@ -49,6 +47,4 @@ If you would like to create your own Placeholder Expansion for PlaceholderAPI, t
- [Expansions Cloud] - [Expansions Cloud]
- [Placeholder List] - [Placeholder List]
- [Spigot Page][spigot] - [Spigot Page][spigot]
- [Hangar Page][hangar]
- [BuiltByBit Page][bbb]
- [Plugin Statistics][statistics] - [Plugin Statistics][statistics]

View File

@@ -8,7 +8,7 @@ plugins {
} }
group = "me.clip" group = "me.clip"
version = "2.11.6-DEV-${System.getProperty("BUILD_NUMBER")}" version = "2.11.4-DEV-${System.getProperty("BUILD_NUMBER")}"
description = "An awesome placeholder provider!" description = "An awesome placeholder provider!"
@@ -24,9 +24,9 @@ repositories {
dependencies { dependencies {
implementation("org.bstats:bstats-bukkit:3.0.1") implementation("org.bstats:bstats-bukkit:3.0.1")
implementation("net.kyori:adventure-platform-bukkit:4.3.1") implementation("net.kyori:adventure-platform-bukkit:4.3.0")
compileOnly("org.spigotmc:spigot-api:1.20-R0.1-SNAPSHOT") compileOnlyApi("dev.folia:folia-api:1.19.4-R0.1-SNAPSHOT") // this is temp
compileOnlyApi("org.jetbrains:annotations:23.0.0") compileOnlyApi("org.jetbrains:annotations:23.0.0")
testImplementation("org.openjdk.jmh:jmh-core:1.32") testImplementation("org.openjdk.jmh:jmh-core:1.32")
@@ -38,8 +38,8 @@ dependencies {
java { java {
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_17 // this is temp
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_17 // this is temp
withJavadocJar() withJavadocJar()
withSourcesJar() withSourcesJar()

View File

@@ -162,7 +162,7 @@ public final class PlaceholderAPIPlugin extends JavaPlugin {
HandlerList.unregisterAll(this); HandlerList.unregisterAll(this);
Bukkit.getScheduler().cancelTasks(this); Bukkit.getAsyncScheduler().cancelTasks(this); // this is hopefully temp
adventure.close(); adventure.close();
adventure = null; adventure = null;

View File

@@ -20,7 +20,6 @@
package me.clip.placeholderapi.commands.impl.cloud; package me.clip.placeholderapi.commands.impl.cloud;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -38,16 +37,6 @@ public final class CommandECloudDownload extends PlaceholderCommand {
super("download"); 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 @Override
public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, public void evaluate(@NotNull final PlaceholderAPIPlugin plugin,
@NotNull final CommandSender sender, @NotNull final String alias, @NotNull final CommandSender sender, @NotNull final String alias,
@@ -58,12 +47,6 @@ public final class CommandECloudDownload extends PlaceholderCommand {
return; return;
} }
if (isBlockedExpansion(params.get(0))) {
Msg.msg(sender,
"&cThis expansion can't be downloaded.");
return;
}
final CloudExpansion expansion = plugin.getCloudExpansionManager() final CloudExpansion expansion = plugin.getCloudExpansionManager()
.findCloudExpansionByName(params.get(0)).orElse(null); .findCloudExpansionByName(params.get(0)).orElse(null);
if (expansion == null) { if (expansion == null) {
@@ -72,11 +55,6 @@ public final class CommandECloudDownload extends PlaceholderCommand {
return; 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; final CloudExpansion.Version version;
if (params.size() < 2) { if (params.size() < 2) {
version = expansion.getVersion(expansion.getLatestVersion()); version = expansion.getVersion(expansion.getLatestVersion());
@@ -108,7 +86,9 @@ public final class CommandECloudDownload extends PlaceholderCommand {
.getVersion() + "] &ato file: &f" + file.getName(), .getVersion() + "] &ato file: &f" + file.getName(),
"&aMake sure to type &f/papi reload &ato enable your new expansion!"); "&aMake sure to type &f/papi reload &ato enable your new expansion!");
plugin.getCloudExpansionManager().load(); plugin.getCloudExpansionManager().clean();
plugin.getCloudExpansionManager()
.fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions());
}); });
} }

View File

@@ -38,7 +38,9 @@ public final class CommandECloudRefresh extends PlaceholderCommand {
public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, public void evaluate(@NotNull final PlaceholderAPIPlugin plugin,
@NotNull final CommandSender sender, @NotNull final String alias, @NotNull final CommandSender sender, @NotNull final String alias,
@NotNull @Unmodifiable final List<String> params) { @NotNull @Unmodifiable final List<String> params) {
plugin.getCloudExpansionManager().load(); plugin.getCloudExpansionManager().clean();
plugin.getCloudExpansionManager()
.fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions());
Msg.msg(sender, Msg.msg(sender,
"&aThe eCloud manager has been refreshed!"); "&aThe eCloud manager has been refreshed!");

View File

@@ -200,9 +200,7 @@ public final class CommandDump extends PlaceholderCommand {
for (final Plugin other : plugins) { for (final Plugin other : plugins) {
builder.append(" ") builder.append(" ")
.append(String.format("%-" + size + "s", other.getName())) .append(String.format("%-" + size + "s", other.getName()))
.append(" [Authors: [") .append(" [Version: ")
.append(String.join(", ", other.getDescription().getAuthors()))
.append("], Version: ")
.append(other.getDescription().getVersion()) .append(other.getDescription().getVersion())
.append("]") .append("]")
.append("\n"); .append("\n");

View File

@@ -54,7 +54,7 @@ public final class CommandExpansionRegister extends PlaceholderCommand {
final LocalExpansionManager manager = plugin.getLocalExpansionManager(); final LocalExpansionManager manager = plugin.getLocalExpansionManager();
final File file = new File(manager.getExpansionsFolder(), params.get(0)); final File file = new File(manager.getExpansionsFolder(), params.get(0));
if (!file.exists() || !file.getParentFile().equals(manager.getExpansionsFolder())) { if (!file.exists()) {
Msg.msg(sender, Msg.msg(sender,
"&cThe file &f" + file.getName() + "&c doesn't exist!"); "&cThe file &f" + file.getName() + "&c doesn't exist!");
return; return;

View File

@@ -38,6 +38,10 @@ public final class PlaceholderAPIConfig {
return plugin.getConfig().getBoolean("check_updates"); return plugin.getConfig().getBoolean("check_updates");
} }
public boolean cloudAllowUnverifiedExpansions() {
return plugin.getConfig().getBoolean("cloud_allow_unverified_expansions");
}
public boolean isCloudEnabled() { public boolean isCloudEnabled() {
return plugin.getConfig().getBoolean("cloud_enabled"); return plugin.getConfig().getBoolean("cloud_enabled");

View File

@@ -46,8 +46,7 @@ public enum NMSVersion {
SPIGOT_1_18_R1("v1_18_R1"), SPIGOT_1_18_R1("v1_18_R1"),
SPIGOT_1_19_R1("v1_19_R1"), SPIGOT_1_19_R1("v1_19_R1"),
SPIGOT_1_19_R2("v1_19_R2"), 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");
private final String version; private final String version;

View File

@@ -40,14 +40,6 @@ import org.jetbrains.annotations.Nullable;
*/ */
public abstract class PlaceholderExpansion extends PlaceholderHook { 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 %}, * The placeholder identifier of this expansion. May not contain {@literal %},
* {@literal {}} or _ * {@literal {}} or _
@@ -167,27 +159,6 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
return PlaceholderAPIPlugin.getInstance(); 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 === // === Configuration ===
/** /**
@@ -195,7 +166,7 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
* null when not specified. * null when not specified.
* <br>You may use the {@link Configurable} interface to define default values set * <br>You may use the {@link Configurable} interface to define default values set
* *
* @return ConfigurationSection that this expansion has. * @return ConfigurationSection that this epxpansion has.
*/ */
@Nullable @Nullable
public final ConfigurationSection getConfigSection() { public final ConfigurationSection getConfigSection() {
@@ -423,8 +394,8 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
*/ */
@Override @Override
public final String toString() { public final String toString() {
return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s', type: '%s']", getName(), return String.format("PlaceholderExpansion[name: '%s', author: '%s', version: '%s']", getName(),
getAuthor(), getVersion(), getExpansionType()); getAuthor(), getVersion());
} }
// === Deprecated API === // === Deprecated API ===
@@ -461,19 +432,4 @@ public abstract class PlaceholderExpansion extends PlaceholderHook {
public String getLink() { public String getLink() {
return null; 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
}
} }

View File

@@ -100,7 +100,7 @@ public final class CloudExpansionManager {
public void load() { public void load() {
clean(); clean();
fetch(); fetch(plugin.getPlaceholderAPIConfig().cloudAllowUnverifiedExpansions());
} }
public void kill() { public void kill() {
@@ -170,7 +170,7 @@ public final class CloudExpansionManager {
await.clear(); await.clear();
} }
public void fetch() { public void fetch(final boolean allowUnverified) {
plugin.getLogger().info("Fetching available expansion information..."); plugin.getLogger().info("Fetching available expansion information...");
ASYNC_EXECUTOR.submit( ASYNC_EXECUTOR.submit(
@@ -190,6 +190,9 @@ public final class CloudExpansionManager {
|| expansion.getVersion(expansion.getLatestVersion()) == null) { || expansion.getVersion(expansion.getLatestVersion()) == null) {
toRemove.add(entry.getKey()); toRemove.add(entry.getKey());
} }
if (!allowUnverified && !expansion.isVerified()) {
toRemove.add(entry.getKey());
}
} }
for (String name : toRemove) { for (String name : toRemove) {
@@ -200,13 +203,7 @@ public final class CloudExpansionManager {
plugin.getLogger().log(Level.WARNING, "Failed to download expansion information", e); plugin.getLogger().log(Level.WARNING, "Failed to download expansion information", e);
} }
// loop through what's left on the main thread //todo: Figure out why this was being scheduled back on the main thread
plugin
.getServer()
.getScheduler()
.runTask(
plugin,
() -> {
try { try {
for (Map.Entry<String, CloudExpansion> entry : values.entrySet()) { for (Map.Entry<String, CloudExpansion> entry : values.entrySet()) {
String name = entry.getKey(); String name = entry.getKey();
@@ -234,7 +231,6 @@ public final class CloudExpansionManager {
.log(Level.WARNING, "Failed to download expansion information", e); .log(Level.WARNING, "Failed to download expansion information", e);
} }
}); });
});
} }
public boolean isDownloading(@NotNull final CloudExpansion expansion) { public boolean isDownloading(@NotNull final CloudExpansion expansion) {

View File

@@ -188,8 +188,6 @@ public final class LocalExpansionManager implements Listener {
} }
} }
expansion.setExpansionType(PlaceholderExpansion.Type.EXTERNAL);
if (!expansion.register()) { if (!expansion.register()) {
Msg.warn("Cannot load expansion %s due to an unknown issue.", expansion.getIdentifier()); Msg.warn("Cannot load expansion %s due to an unknown issue.", expansion.getIdentifier());
return Optional.empty(); return Optional.empty();
@@ -211,11 +209,6 @@ public final class LocalExpansionManager implements Listener {
return Optional.empty(); return Optional.empty();
} }
/**
* Attempt to register a {@link PlaceholderExpansion}
* @param expansion the expansion to register
* @return if the expansion was registered
*/
@ApiStatus.Internal @ApiStatus.Internal
public boolean register(@NotNull final PlaceholderExpansion expansion) { public boolean register(@NotNull final PlaceholderExpansion expansion) {
final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT); final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT);
@@ -224,9 +217,9 @@ public final class LocalExpansionManager implements Listener {
return false; return false;
} }
// Avoid loading two external expansions with the same identifier if (expansions.containsKey(identifier)) {
if (expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL && expansions.containsKey(identifier)) { Msg.warn("Failed to load expansion %s. Identifier is already in use.",
Msg.warn("Failed to load external expansion %s. Identifier is already in use.", expansion.getIdentifier()); expansion.getIdentifier());
return false; return false;
} }
@@ -276,12 +269,13 @@ public final class LocalExpansionManager implements Listener {
return false; return false;
} }
final ExpansionRegisterEvent event = new ExpansionRegisterEvent(expansion); // this is temp
Bukkit.getPluginManager().callEvent(event); // final ExpansionRegisterEvent event = new ExpansionRegisterEvent(expansion);
// Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) { //
return false; // if (event.isCancelled()) {
} // return false;
// }
expansionsLock.lock(); expansionsLock.lock();
try { try {
@@ -294,24 +288,21 @@ public final class LocalExpansionManager implements Listener {
Bukkit.getPluginManager().registerEvents(((Listener) expansion), plugin); Bukkit.getPluginManager().registerEvents(((Listener) expansion), plugin);
} }
Msg.info( Msg.info("Successfully registered expansion: %s [%s]", expansion.getIdentifier(),
"Successfully registered %s expansion: %s [%s]", expansion.getVersion());
expansion.getExpansionType().name().toLowerCase(),
expansion.getIdentifier(),
expansion.getVersion()
);
if (expansion instanceof Taskable) { if (expansion instanceof Taskable) {
((Taskable) expansion).start(); ((Taskable) expansion).start();
} }
// Check eCloud for updates only if the expansion is external if (plugin.getPlaceholderAPIConfig().isCloudEnabled()) {
if (plugin.getPlaceholderAPIConfig().isCloudEnabled() && expansion.getExpansionType() == PlaceholderExpansion.Type.EXTERNAL) { final Optional<CloudExpansion> cloudExpansionOptional =
final Optional<CloudExpansion> cloudExpansionOptional = plugin.getCloudExpansionManager().findCloudExpansionByName(identifier); plugin.getCloudExpansionManager().findCloudExpansionByName(identifier);
if (cloudExpansionOptional.isPresent()) { if (cloudExpansionOptional.isPresent()) {
CloudExpansion cloudExpansion = cloudExpansionOptional.get(); CloudExpansion cloudExpansion = cloudExpansionOptional.get();
cloudExpansion.setHasExpansion(true); cloudExpansion.setHasExpansion(true);
cloudExpansion.setShouldUpdate(!cloudExpansion.getLatestVersion().equals(expansion.getVersion())); cloudExpansion.setShouldUpdate(
!cloudExpansion.getLatestVersion().equals(expansion.getVersion()));
} }
} }

View File

@@ -24,6 +24,7 @@ import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.clip.placeholderapi.util.Msg; import me.clip.placeholderapi.util.Msg;
@@ -54,8 +55,10 @@ public class UpdateChecker implements Listener {
return spigotVersion; return spigotVersion;
} }
//todo: Figure out a better approach for this?
public void fetch() { public void fetch() {
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { CompletableFuture<Boolean> update = new CompletableFuture<>();
CompletableFuture.supplyAsync(() -> {
try { try {
HttpsURLConnection con = (HttpsURLConnection) new URL( HttpsURLConnection con = (HttpsURLConnection) new URL(
"https://api.spigotmc.org/legacy/update.php?resource=" + RESOURCE_ID).openConnection(); "https://api.spigotmc.org/legacy/update.php?resource=" + RESOURCE_ID).openConnection();
@@ -63,26 +66,32 @@ public class UpdateChecker implements Listener {
spigotVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); spigotVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine();
} catch (Exception ex) { } catch (Exception ex) {
plugin.getLogger().info("Failed to check for updates on spigot."); plugin.getLogger().info("Failed to check for updates on spigot.");
return; return false;
} }
if (spigotVersion == null || spigotVersion.isEmpty()) { if (spigotVersion == null || spigotVersion.isEmpty()) {
return; plugin.getLogger().info("Failed to check for updates on spigot.");
return false;
} }
updateAvailable = spigotIsNewer(); updateAvailable = spigotIsNewer();
if (!updateAvailable) { if (!updateAvailable) {
return; plugin.getLogger().info("PlaceholderAPI is up to date.");
return false;
} }
Bukkit.getScheduler().runTask(plugin, () -> { return true;
});
update.whenComplete((result, error) -> {
if (result) {
plugin.getLogger() plugin.getLogger()
.info("An update for PlaceholderAPI (v" + getSpigotVersion() + ") is available at:"); .info("An update for PlaceholderAPI (v" + getSpigotVersion() + ") is available at:");
plugin.getLogger() plugin.getLogger()
.info("https://www.spigotmc.org/resources/placeholderapi." + RESOURCE_ID + "/"); .info("https://www.spigotmc.org/resources/placeholderapi." + RESOURCE_ID + "/");
Bukkit.getPluginManager().registerEvents(this, plugin); Bukkit.getPluginManager().registerEvents(UpdateChecker.this, plugin);
}); }
}); });
} }

View File

@@ -40,11 +40,7 @@ public final class Futures {
@NotNull final CompletableFuture<T> future, @NotNull final CompletableFuture<T> future,
@NotNull final BiConsumer<T, Throwable> consumer) { @NotNull final BiConsumer<T, Throwable> consumer) {
future.whenComplete((value, exception) -> { future.whenComplete((value, exception) -> {
if (Bukkit.isPrimaryThread()) {
consumer.accept(value, exception); consumer.accept(value, exception);
} else {
Bukkit.getScheduler().runTask(plugin, () -> consumer.accept(value, exception));
}
}); });
} }

View File

@@ -1,16 +1,17 @@
# PlaceholderAPI # PlaceholderAPI
# Version: ${version} # Version: @version@
# Created by: extended_clip # Created by: extended_clip
# Contributors: https://github.com/PlaceholderAPI/PlaceholderAPI/graphs/contributors # Contributors: https://github.com/PlaceholderAPI/PlaceholderAPI/graphs/contributors
# Issues: https://github.com/PlaceholderAPI/PlaceholderAPI/issues # Issues: https://github.com/PlaceholderAPI/PlaceholderAPI/issues
# Expansions: https://placeholderapi.com/ecloud # Expansions: https://api.extendedclip.com/all/
# Wiki: https://wiki.placeholderapi.com/ # Wiki: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki
# Discord: https://helpch.at/discord # Discord: https://helpch.at/discord
# No placeholders are provided with this plugin by default. # No placeholders are provided with this plugin by default.
# Download placeholders: /papi ecloud # Download placeholders: /papi ecloud
check_updates: true check_updates: true
cloud_enabled: true cloud_enabled: true
cloud_sorting: "name" cloud_sorting: "name"
cloud_allow_unverified_expansions: false
boolean: boolean:
'true': 'yes' 'true': 'yes'
'false': 'no' 'false': 'no'

View File

@@ -4,6 +4,8 @@ main: "me.clip.placeholderapi.PlaceholderAPIPlugin"
version: ${version} version: ${version}
author: HelpChat author: HelpChat
folia-supported: true
api-version: "1.13" api-version: "1.13"
description: "An awesome placeholder provider!" description: "An awesome placeholder provider!"
@@ -37,6 +39,7 @@ permissions:
placeholderapi.ecloud.info: true placeholderapi.ecloud.info: true
placeholderapi.ecloud.list: true placeholderapi.ecloud.list: true
placeholderapi.ecloud.clear: true placeholderapi.ecloud.clear: true
placeholderapi.ecloud.toggle: true
placeholderapi.ecloud.status: true placeholderapi.ecloud.status: true
placeholderapi.ecloud.update: true placeholderapi.ecloud.update: true
placeholderapi.ecloud.refresh: true placeholderapi.ecloud.refresh: true
@@ -81,6 +84,9 @@ permissions:
placeholderapi.ecloud.clear: placeholderapi.ecloud.clear:
default: "op" default: "op"
description: "Allows you to clear the local eCloud expansion cache" 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: placeholderapi.ecloud.status:
default: "op" default: "op"
description: "Allows you to view the status of eCloud expansions" description: "Allows you to view the status of eCloud expansions"