- Msg.send/broadcast/actionBar/title/legacy/plain for all 58 files sendMessage replacements (plan step 3) - ChatEventListener: AsyncChatEvent->AsyncPlayerChatEvent, getRecipients filtering, manual render+Msg.send loop, HIGHEST|ignoreCancelled, nobodyHeard via Bukkit scheduler (step 4) - EnhancedChatRenderer: remove ChatRenderer/Audience, render(Player,Component,Component,Player), getLocale String, Msg.actionBar - PlayerEventListener: join/quit/death String API, getCustomName/getDisplayName legacy, Msg.broadcast - FoliaUtil: IS_FOLIA false, Bukkit scheduler only; AutoMessageManager BukkitTask - CustomCommandManager: reflective getCommandMap; other mechanical fixes (displayName, kick, inventory titles) - single universal jar (variant A) - loads on Spigot 1.20.1 and Paper
121 lines
4 KiB
Java
121 lines
4 KiB
Java
package com.loki.lochat.integrations;
|
|
|
|
import com.loki.lochat.LoChat;
|
|
import com.loki.lochat.api.service.ChatService;
|
|
import com.loki.lochat.api.service.MessagingService;
|
|
import com.loki.lochat.gradient.GradientModule;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.OfflinePlayer;
|
|
import org.bukkit.entity.Player;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import java.util.Optional;
|
|
import java.util.UUID;
|
|
|
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
|
|
|
public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|
|
|
private final LoChat plugin;
|
|
private final MessagingService messagingService;
|
|
private final ChatService chatService;
|
|
|
|
public PlaceholderAPIHook(LoChat plugin) {
|
|
this.plugin = plugin;
|
|
this.messagingService = plugin.getServiceRegistry().get(MessagingService.class);
|
|
this.chatService = plugin.getServiceRegistry().get(ChatService.class);
|
|
}
|
|
|
|
@Override
|
|
public @NotNull String getIdentifier() {
|
|
return "lochat";
|
|
}
|
|
|
|
@Override
|
|
public @NotNull String getAuthor() {
|
|
return "loki";
|
|
}
|
|
|
|
@Override
|
|
public @NotNull String getVersion() {
|
|
return plugin.getDescription().getVersion();
|
|
}
|
|
|
|
@Override
|
|
public boolean persist() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
|
|
if (player == null) {
|
|
return "";
|
|
}
|
|
|
|
UUID uuid = player.getUniqueId();
|
|
|
|
return switch (params.toLowerCase()) {
|
|
case "ignored_count" -> String.valueOf(messagingService.getIgnoredCount(uuid));
|
|
case "global_enabled" -> String.valueOf(!chatService.isGlobalChatDisabled(uuid));
|
|
case "last_pm" -> resolveLastPm(player, uuid);
|
|
case "spy_enabled" -> String.valueOf(messagingService.isSpying(uuid));
|
|
case "gradient_full", "full" -> resolveGradient(player, GradientQuery.FULL);
|
|
case "gradient_name", "name" -> resolveGradient(player, GradientQuery.NAME);
|
|
case "gradient_prefix", "prefix" -> resolveGradient(player, GradientQuery.PREFIX);
|
|
case "lp_prefix" -> resolveGradient(player, GradientQuery.LP_PREFIX);
|
|
default -> null;
|
|
};
|
|
}
|
|
|
|
private enum GradientQuery { FULL, NAME, PREFIX, LP_PREFIX }
|
|
|
|
private String resolveGradient(OfflinePlayer player, GradientQuery query) {
|
|
GradientModule gradient = plugin.getGradientModule();
|
|
Player onlinePlayer = player.getPlayer();
|
|
|
|
if (onlinePlayer == null) {
|
|
return switch (query) {
|
|
case FULL, NAME -> player.getName() != null ? player.getName() : "";
|
|
case PREFIX, LP_PREFIX -> "";
|
|
};
|
|
}
|
|
|
|
return switch (query) {
|
|
case FULL -> {
|
|
if (gradient == null || !gradient.isEnabled()) {
|
|
yield player.getName() != null ? player.getName() : "";
|
|
}
|
|
yield gradient.getFormattedNameForTab(onlinePlayer);
|
|
}
|
|
case NAME -> {
|
|
if (gradient == null || !gradient.isEnabled()) {
|
|
yield player.getName();
|
|
}
|
|
yield gradient.getGradientNick(onlinePlayer);
|
|
}
|
|
case PREFIX -> {
|
|
if (gradient == null || !gradient.isEnabled()) {
|
|
yield "";
|
|
}
|
|
yield gradient.getPrefix(onlinePlayer);
|
|
}
|
|
case LP_PREFIX -> {
|
|
if (gradient == null || !gradient.isEnabled()) {
|
|
yield "";
|
|
}
|
|
yield gradient.getLuckPermsPrefix(onlinePlayer);
|
|
}
|
|
};
|
|
}
|
|
|
|
private String resolveLastPm(OfflinePlayer player, UUID uuid) {
|
|
Optional<UUID> lastOpt = messagingService.getLastConversation(uuid);
|
|
if (lastOpt.isEmpty()) {
|
|
return "";
|
|
}
|
|
var lastPlayer = Bukkit.getOfflinePlayer(lastOpt.get());
|
|
return lastPlayer.getName() != null ? lastPlayer.getName() : "";
|
|
}
|
|
}
|