PlaceholderAPI supporting

This commit is contained in:
tanyaofei 2024-08-15 09:31:03 +08:00
parent 835f139132
commit 4b6fbcfb67
7 changed files with 112 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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();
}

View File

@ -124,7 +124,7 @@ public class FakeplayerList {
return this.playersByUUID.values().stream();
}
public int count() {
public int getSize() {
return this.playersByUUID.size();
}

View File

@ -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"));
}

View File

@ -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();
}

View File

@ -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();
}
}
}

View File

@ -9,6 +9,7 @@ depend:
softdepend:
- OpenInv
- PlaceholderAPI
permissions:
fakeplayer.command.spawn: