mirror of
https://github.com/PlaceholderAPI/PlaceholderAPI.git
synced 2024-12-27 03:17:45 +01:00
Merge pull request #717 from PlaceholderAPI/feature/log-expansio-version
Include version in registration message and other QOL changes
This commit is contained in:
commit
e11d551071
@ -24,7 +24,6 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
implementation "org.bstats:bstats-bukkit:2.2.1"
|
||||
|
||||
implementation "net.kyori:adventure-platform-bukkit:4.0.0"
|
||||
|
||||
compileOnly "org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT"
|
||||
|
@ -27,8 +27,11 @@ import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Indicates that a {@link PlaceholderExpansion} has been registered by
|
||||
* PlaceholderAPI.
|
||||
* This event indicates that a <b>single</b> {@link PlaceholderExpansion PlaceholderExpansion} has
|
||||
* been registered in PlaceholderAPI.
|
||||
*
|
||||
* <p>To know when <b>all</b> Expansions have been registered, use the
|
||||
* {@link me.clip.placeholderapi.events.ExpansionsLoadedEvent ExpansionsLoadedEvent} instead.
|
||||
*/
|
||||
public final class ExpansionRegisterEvent extends Event implements Cancellable {
|
||||
|
||||
@ -48,15 +51,25 @@ public final class ExpansionRegisterEvent extends Event implements Cancellable {
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link PlaceholderExpansion expansion} that was registered.
|
||||
* The {@link PlaceholderExpansion PlaceholderExpansion} that was registered in PlaceholderAPI.
|
||||
* <br>The PlaceholderExpansion will be available for use when the event
|
||||
* {@link #isCancelled() was not cancelled}!
|
||||
*
|
||||
* @return The {@link PlaceholderExpansion} instance.
|
||||
* @return Current instance of the registered {@link PlaceholderExpansion PlaceholderExpansion}
|
||||
*/
|
||||
@NotNull
|
||||
public PlaceholderExpansion getExpansion() {
|
||||
return expansion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if this event was cancelled or not.
|
||||
* <br>A cancelled Event will result in the {@link #getExpansion() PlaceholderExpansion} NOT
|
||||
* being added to PlaceholderAPI's internal list and will therefore be considered not registered
|
||||
* anymore.
|
||||
*
|
||||
* @return Whether the event has been cancelled or not.
|
||||
*/
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
|
@ -26,15 +26,19 @@ import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Indicates that a {@link PlaceholderExpansion} had been unregistered by
|
||||
* PlaceholderAPI.
|
||||
* This event indicates that a {@link PlaceholderExpansion PlaceholderExpansion} has been
|
||||
* unregistered by PlaceholderAPI.
|
||||
*
|
||||
* <p>Note that this event is triggered <b>before</b> the PlaceholderExpansion is completely
|
||||
* removed.
|
||||
* <br>This includes removing any Listeners, stopping active tasks and clearing the cache of
|
||||
* the PlaceholderExpansion.
|
||||
*/
|
||||
public final class ExpansionUnregisterEvent extends Event {
|
||||
|
||||
@NotNull
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
|
||||
|
||||
@NotNull
|
||||
private final PlaceholderExpansion expansion;
|
||||
|
||||
@ -48,9 +52,9 @@ public final class ExpansionUnregisterEvent extends Event {
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link PlaceholderExpansion expansion} that was unregistered.
|
||||
* The {@link PlaceholderExpansion PlaceholderExpansion} that was unregistered.
|
||||
*
|
||||
* @return The {@link PlaceholderExpansion} instance.
|
||||
* @return The {@link PlaceholderExpansion PlaceholderExpansion} instance.
|
||||
*/
|
||||
@NotNull
|
||||
public PlaceholderExpansion getExpansion() {
|
||||
|
@ -21,18 +21,42 @@
|
||||
package me.clip.placeholderapi.events;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Indicates that <b>all</b> {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlayceholderExpansions}
|
||||
* have been loaded.
|
||||
* <br/>This event is fired on Server load and when reloading the
|
||||
* confiuration.
|
||||
* This event indicated that <b>all</b> {@link PlaceholderExpansion PlaceholderExpansions} have
|
||||
* been registered in PlaceholderAPI and can now be used.
|
||||
* <br>This even will also be triggered whenever PlaceholderAPI gets reloaded.
|
||||
*
|
||||
* <p>All PlaceholderExpansions, except for those loaded by plugins, are loaded
|
||||
* after Spigot triggered its ServerLoadEvent (1.13+), or after PlaceholderAPI has been enabled.
|
||||
*/
|
||||
public class ExpansionsLoadedEvent extends Event {
|
||||
|
||||
private final List<PlaceholderExpansion> expansions;
|
||||
|
||||
public ExpansionsLoadedEvent(List<PlaceholderExpansion> expansions) {
|
||||
this.expansions = Collections.unmodifiableList(expansions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a unmodifiable list of {@link PlaceholderExpansion PlaceholderExpansions} that
|
||||
* have been registered by PlaceholderAPI.
|
||||
*
|
||||
* <p><b>This list does not include manually registered PlaceholderExpansions.</b>
|
||||
*
|
||||
* @return List of {@link PlaceholderExpansion registered PlaceholderExpansions}.
|
||||
*/
|
||||
@NotNull
|
||||
public final List<PlaceholderExpansion> getExpansions(){
|
||||
return expansions;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
|
@ -21,9 +21,11 @@
|
||||
package me.clip.placeholderapi.expansion;
|
||||
|
||||
/**
|
||||
* This interface allows a class which extends a {@link PlaceholderExpansion} to have the clear
|
||||
* method called when the implementing expansion is unregistered from PlaceholderAPI. This is useful
|
||||
* if we want to do things when the implementing hook is unregistered
|
||||
* Classes implementing this interface will have a {@link #clear() clear void} that is called
|
||||
* by PlaceholderAPI whenever the {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansion}
|
||||
* is unregistered.
|
||||
*
|
||||
* <p>This allows you to execute things such as clearing internal caches, saving data to files, etc.
|
||||
*
|
||||
* @author Ryan McCarthy
|
||||
*/
|
||||
|
@ -23,9 +23,11 @@ package me.clip.placeholderapi.expansion;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* This interface allows a class which extends a {@link PlaceholderExpansion} to have the cleanup
|
||||
* method called every time a player leaves the server. This is useful if we want to clean up after
|
||||
* the player
|
||||
* Classes implementing this interface will have a {@link #cleanup(Player) cleanup void} that is
|
||||
* called by PlaceholderAPI whenever a Player leaves the server.
|
||||
*
|
||||
* <p>This can be useful for cases where you keep data of the player in a cache or similar
|
||||
* and want to free up space whenever they leave.
|
||||
*
|
||||
* @author Ryan McCarthy
|
||||
*/
|
||||
|
@ -23,18 +23,32 @@ package me.clip.placeholderapi.expansion;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Any {@link PlaceholderExpansion} class which implements configurable will have any options listed
|
||||
* in the {@link #getDefaults()} map automatically added to the PlaceholderAPI config.yml file
|
||||
* Implementing this interface allows {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansions}
|
||||
* to set a list of default configuration values through the {@link #getDefaults() getDefaults method}
|
||||
* that should be added to the config.yml of PlaceholderAPI.
|
||||
*
|
||||
* <p>The entries will be added under {@code expansions} as their own section.
|
||||
* <h2>Example:</h2>
|
||||
* returning a Map with key {@code foo} and value {@code bar} will result in the following config entry:
|
||||
*
|
||||
* <pre><code>
|
||||
* expansions:
|
||||
* myexpansion:
|
||||
* foo: "bar"
|
||||
* </code></pre>
|
||||
*
|
||||
* <p><b>The configuration is set before the PlaceholderExpansion is registered!</b>
|
||||
*
|
||||
* @author Ryan McCarthy
|
||||
*/
|
||||
public interface Configurable {
|
||||
|
||||
/**
|
||||
* This method will be called before the implementing class is registered to obtain a map of
|
||||
* configuration options that the implementing class needs These paths and values will be added to
|
||||
* the PlaceholderAPI config.yml in the configuration section expansions.(placeholder
|
||||
* identifier).(your key): (your value)
|
||||
* The map returned by this method will be used to set config options in PlaceholderAPI's config.yml.
|
||||
*
|
||||
* <p>The key and value pairs are set under a section named after your
|
||||
* {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansion} in the
|
||||
* {@code expansions} section of the config.
|
||||
*
|
||||
* @return Map of config path / values which need to be added / removed from the PlaceholderAPI
|
||||
* config.yml file
|
||||
|
@ -22,7 +22,22 @@ package me.clip.placeholderapi.expansion;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Implementing this interface allows your {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansion}
|
||||
* to be used as a relational placeholder expansion.
|
||||
*
|
||||
* <p>Relational placeholders take two Players as input and are always prefixed with {@code rel_},
|
||||
* so {@code %foo_bar%} becomes {@code %rel_foo_bar%}
|
||||
*/
|
||||
public interface Relational {
|
||||
|
||||
/**
|
||||
* This method is called whenever a placeholder starting with {@code rel_} is called.
|
||||
*
|
||||
* @param one The first player used for the placeholder.
|
||||
* @param two The second player used for the placeholder.
|
||||
* @param identifier The text right after the expansion's name (%expansion_<b>identifier</b>%)
|
||||
* @return Parsed String from the expansion.
|
||||
*/
|
||||
String onPlaceholderRequest(Player one, Player two, String identifier);
|
||||
}
|
||||
|
@ -20,18 +20,24 @@
|
||||
|
||||
package me.clip.placeholderapi.expansion;
|
||||
|
||||
|
||||
/**
|
||||
* Implementing this interface adds the {@link #start() start} and {@link #stop() stop} void
|
||||
* methods to your {@link me.clip.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansion}.
|
||||
*
|
||||
* <p>This can be used to execute methods and tasks whenever the PlaceholderExpansion has been
|
||||
* successfully (un)registered.
|
||||
*/
|
||||
public interface Taskable {
|
||||
|
||||
/**
|
||||
* Called when the implementing class has successfully been registered to the placeholder map
|
||||
* Tasks that need to be performed when this expansion is registered should go here
|
||||
* Called when the implementing class has successfully been registered to the placeholder map.
|
||||
* <br>Tasks that need to be performed when this expansion is registered should go here
|
||||
*/
|
||||
void start();
|
||||
|
||||
/**
|
||||
* Called when the implementing class has been unregistered from PlaceholderAPI Tasks that need to
|
||||
* be performed when this expansion has unregistered should go here
|
||||
* Called when the implementing class has been unregistered from PlaceholderAPI.
|
||||
* <br>Tasks that need to be performed when this expansion has unregistered should go here
|
||||
*/
|
||||
void stop();
|
||||
}
|
||||
|
@ -160,7 +160,11 @@ public final class LocalExpansionManager implements Listener {
|
||||
@NotNull final Class<? extends PlaceholderExpansion> clazz) {
|
||||
try {
|
||||
final PlaceholderExpansion expansion = createExpansionInstance(clazz);
|
||||
|
||||
|
||||
if(expansion == null){
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
Objects.requireNonNull(expansion.getAuthor(), "The expansion author is null!");
|
||||
Objects.requireNonNull(expansion.getIdentifier(), "The expansion identifier is null!");
|
||||
Objects.requireNonNull(expansion.getVersion(), "The expansion version is null!");
|
||||
@ -259,7 +263,8 @@ public final class LocalExpansionManager implements Listener {
|
||||
Bukkit.getPluginManager().registerEvents(((Listener) expansion), plugin);
|
||||
}
|
||||
|
||||
plugin.getLogger().info("Successfully registered expansion: " + expansion.getIdentifier());
|
||||
plugin.getLogger().info("Successfully registered expansion: " + expansion.getIdentifier() +
|
||||
" [" + expansion.getVersion() + "]");
|
||||
|
||||
if (expansion instanceof Taskable) {
|
||||
((Taskable) expansion).start();
|
||||
@ -319,18 +324,37 @@ public final class LocalExpansionManager implements Listener {
|
||||
plugin.getLogger().log(Level.SEVERE, "failed to load class files of expansions", exception);
|
||||
return;
|
||||
}
|
||||
|
||||
final long registered = classes.stream()
|
||||
|
||||
final List<PlaceholderExpansion> registered = classes.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(this::register)
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
final long needsUpdate = registered.stream()
|
||||
.map(expansion -> plugin.getCloudExpansionManager().findCloudExpansionByName(expansion.getName()).orElse(null))
|
||||
.filter(Objects::nonNull)
|
||||
.filter(CloudExpansion::shouldUpdate)
|
||||
.count();
|
||||
|
||||
Msg.msg(sender,
|
||||
registered == 0 ? "&6No expansions were registered!"
|
||||
: registered + "&a placeholder hooks successfully registered!");
|
||||
StringBuilder message = new StringBuilder(registered.size() == 0 ? "&6" : "&a")
|
||||
.append(registered.size())
|
||||
.append(' ')
|
||||
.append("placeholder hook(s) registered!");
|
||||
|
||||
if (needsUpdate > 0) {
|
||||
message.append(' ')
|
||||
.append("&6")
|
||||
.append(needsUpdate)
|
||||
.append(' ')
|
||||
.append("placeholder hook(s) have an update available.");
|
||||
}
|
||||
|
||||
|
||||
Msg.msg(sender, message.toString());
|
||||
|
||||
Bukkit.getPluginManager().callEvent(new ExpansionsLoadedEvent());
|
||||
Bukkit.getPluginManager().callEvent(new ExpansionsLoadedEvent(registered));
|
||||
});
|
||||
}
|
||||
|
||||
@ -346,7 +370,12 @@ public final class LocalExpansionManager implements Listener {
|
||||
|
||||
@NotNull
|
||||
public CompletableFuture<@NotNull List<@Nullable Class<? extends PlaceholderExpansion>>> findExpansionsOnDisk() {
|
||||
return Arrays.stream(folder.listFiles((dir, name) -> name.endsWith(".jar")))
|
||||
File[] files = folder.listFiles((dir, name) -> name.endsWith(".jar"));
|
||||
if(files == null){
|
||||
return CompletableFuture.completedFuture(Collections.emptyList());
|
||||
}
|
||||
|
||||
return Arrays.stream(files)
|
||||
.map(this::findExpansionInFile)
|
||||
.collect(Futures.collector());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user