From 4b6fbcfb67bd5e252a6b4e52a79352fe7e7cfa8e Mon Sep 17 00:00:00 2001 From: tanyaofei Date: Thu, 15 Aug 2024 09:31:03 +0800 Subject: [PATCH] PlaceholderAPI supporting --- .../fakeplayer/core/FakeplayerModule.java | 12 ++++ .../github/hello09x/fakeplayer/core/Main.java | 11 +++ .../core/manager/FakeplayerList.java | 2 +- .../core/manager/FakeplayerManager.java | 6 +- .../FakeplayerPlaceholderExpansion.java | 13 ++++ .../FakeplayerPlaceholderExpansionImpl.java | 69 +++++++++++++++++++ fakeplayer-core/src/main/resources/plugin.yml | 1 + 7 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansion.java create mode 100644 fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansionImpl.java diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java index 2c88c39..ff018b3 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java @@ -10,9 +10,12 @@ import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; import io.github.hello09x.fakeplayer.core.manager.invsee.OpenInvInvseeManagerImpl; import io.github.hello09x.fakeplayer.core.manager.invsee.SimpleInvseeManagerImpl; +import io.github.hello09x.fakeplayer.core.placeholder.FakeplayerPlaceholderExpansion; +import io.github.hello09x.fakeplayer.core.placeholder.FakeplayerPlaceholderExpansionImpl; import io.github.hello09x.fakeplayer.core.util.ClassUtils; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.Nullable; import java.util.ServiceLoader; import java.util.logging.Logger; @@ -59,4 +62,13 @@ public class FakeplayerModule extends AbstractModule { return bridge; } + @Singleton + @Provides + private @Nullable FakeplayerPlaceholderExpansion fakeplayerPlaceholderExpansion(FakeplayerManager fakeplayerManager) { + if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI") || !ClassUtils.isClassExists("me.clip.placeholderapi.expansion.PlaceholderExpansion")) { + return null; + } + return new FakeplayerPlaceholderExpansionImpl(fakeplayerManager); + } + } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java index b7ae4b1..8e96bd3 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/Main.java @@ -17,6 +17,7 @@ import io.github.hello09x.fakeplayer.core.manager.FakeplayerAutofishManager; import io.github.hello09x.fakeplayer.core.manager.FakeplayerReplenishManager; import io.github.hello09x.fakeplayer.core.manager.WildFakeplayerManager; import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; +import io.github.hello09x.fakeplayer.core.placeholder.FakeplayerPlaceholderExpansion; import io.github.hello09x.fakeplayer.core.util.update.UpdateChecker; import lombok.Getter; import org.bukkit.plugin.java.JavaPlugin; @@ -67,6 +68,16 @@ public final class Main extends JavaPlugin { manager.registerEvents(injector.getInstance(InvseeManager.class), this); } + { + var placeholderExpansion = injector.getInstance(FakeplayerPlaceholderExpansion.class); + if (placeholderExpansion != null) { + if (placeholderExpansion.register()) { + getServer().getPluginManager().registerEvents(placeholderExpansion, this); + getLogger().info("Successfully registered PlaceholderExpansion"); + } + } + } + if (injector.getInstance(FakeplayerConfig.class).isCheckForUpdates()) { checkForUpdatesAsync(); } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerList.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerList.java index 418e4d0..a8751eb 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerList.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerList.java @@ -124,7 +124,7 @@ public class FakeplayerList { return this.playersByUUID.values().stream(); } - public int count() { + public int getSize() { return this.playersByUUID.size(); } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java index e3c6798..a26044c 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/FakeplayerManager.java @@ -293,6 +293,10 @@ public class FakeplayerManager { return stream.toList(); } + public int getSize() { + return this.playerList.getSize(); + } + /** * 判断一名玩家是否是假人 * @@ -467,7 +471,7 @@ public class FakeplayerManager { return; } - if (this.playerList.count() >= this.config.getServerLimit()) { + if (this.playerList.getSize() >= this.config.getServerLimit()) { throw new CommandException(translatable("fakeplayer.command.spawn.error.server-limit")); } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansion.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansion.java new file mode 100644 index 0000000..e35353e --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansion.java @@ -0,0 +1,13 @@ +package io.github.hello09x.fakeplayer.core.placeholder; + +import org.bukkit.event.Listener; + +/** + * @author tanyaofei + * @since 2024/8/15 + **/ +public interface FakeplayerPlaceholderExpansion extends Listener { + + boolean register(); + +} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansionImpl.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansionImpl.java new file mode 100644 index 0000000..1783788 --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/placeholder/FakeplayerPlaceholderExpansionImpl.java @@ -0,0 +1,69 @@ +package io.github.hello09x.fakeplayer.core.placeholder; + +import com.google.common.collect.Iterables; +import com.google.inject.Inject; +import com.google.inject.Singleton; +import io.github.hello09x.fakeplayer.core.Main; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.PluginDisableEvent; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +/** + * @author tanyaofei + * @since 2024/8/15 + **/ +@Singleton +public class FakeplayerPlaceholderExpansionImpl extends PlaceholderExpansion implements FakeplayerPlaceholderExpansion, Listener { + + private final FakeplayerManager manager; + + @Inject + public FakeplayerPlaceholderExpansionImpl(FakeplayerManager manager) { + this.manager = manager; + } + + @Override + public @NotNull String getIdentifier() { + return Main.getInstance().getName(); + } + + @Override + public @NotNull String getAuthor() { + return Iterables.getFirst(Main.getInstance().getPluginMeta().getAuthors(), "hello09x"); + } + + @Override + public @NotNull String getVersion() { + return "1.0"; + } + + @Override + public @Nullable String onPlaceholderRequest(@Nullable Player player, @NotNull String params) { + // /papi parse --null fakeplayer_total + if (params.equalsIgnoreCase("total")) { + return String.valueOf(manager.getSize()); + } + + // /papi parse CONSOLE_1 fakeplayer_creator + if (params.equalsIgnoreCase("creator") && player != null && manager.isFake(player)) { + return Optional.ofNullable(manager.getCreatorName(player)).orElse(params); + } + + return params; + + } + + @EventHandler + public void unregister(@NotNull PluginDisableEvent event) { + if (event.getPlugin() == Main.getInstance()) { + this.unregister(); + } + } +} diff --git a/fakeplayer-core/src/main/resources/plugin.yml b/fakeplayer-core/src/main/resources/plugin.yml index 429c9c7..c1ea77f 100644 --- a/fakeplayer-core/src/main/resources/plugin.yml +++ b/fakeplayer-core/src/main/resources/plugin.yml @@ -9,6 +9,7 @@ depend: softdepend: - OpenInv + - PlaceholderAPI permissions: fakeplayer.command.spawn: