refactor: split god classes, fix OCP/ISP/SRP, migrate commands to BaseCommand hierarchy
This commit is contained in:
parent
793924c9ba
commit
90c3cac5cf
244 changed files with 1677 additions and 1570 deletions
|
|
@ -11,6 +11,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.integrations.DiscordIntegration;
|
||||
import com.loki.lochat.managers.AutoMessageManager;
|
||||
import com.loki.lochat.managers.CustomCommandManager;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
@ -82,9 +83,15 @@ public final class LoChat extends JavaPlugin {
|
|||
configManager.reload();
|
||||
messageConfig.reload();
|
||||
autoMessageManager.reload();
|
||||
if (gradientModule != null) gradientModule.reload();
|
||||
if (customCommandManager != null) customCommandManager.reload();
|
||||
if (discordIntegration != null) discordIntegration.reload();
|
||||
if (gradientModule != null) {
|
||||
gradientModule.reload();
|
||||
}
|
||||
if (customCommandManager != null) {
|
||||
customCommandManager.reload();
|
||||
}
|
||||
if (discordIntegration != null) {
|
||||
discordIntegration.reload();
|
||||
}
|
||||
if (serviceRegistry != null) {
|
||||
try {
|
||||
serviceRegistry.get(PunishmentService.class).save();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.api.filter;
|
||||
|
||||
import com.loki.lochat.data.model.ChatMessage;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.api.service;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Optional;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.api.service;
|
||||
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.api.service;
|
|||
|
||||
import com.loki.lochat.data.model.BanRecord;
|
||||
import com.loki.lochat.data.model.WarnEntry;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package com.loki.lochat.commands;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.commands.admin.broadcast.*;
|
||||
import com.loki.lochat.commands.admin.chat.*;
|
||||
import com.loki.lochat.commands.admin.system.*;
|
||||
import com.loki.lochat.commands.admin.broadcast.*;
|
||||
import com.loki.lochat.commands.chat.*;
|
||||
import com.loki.lochat.commands.messaging.*;
|
||||
import com.loki.lochat.commands.moderation.ban.*;
|
||||
|
|
@ -11,6 +11,7 @@ import com.loki.lochat.commands.moderation.mute.*;
|
|||
import com.loki.lochat.commands.moderation.warn.*;
|
||||
import com.loki.lochat.commands.nick.*;
|
||||
import com.loki.lochat.commands.rp.*;
|
||||
|
||||
import org.bukkit.command.PluginCommand;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
@ -94,7 +95,9 @@ public class CommandManager {
|
|||
PluginCommand cmd = plugin.getCommand(name);
|
||||
if (cmd != null) {
|
||||
cmd.setExecutor((org.bukkit.command.CommandExecutor) executor);
|
||||
if (executor instanceof org.bukkit.command.TabCompleter tc) cmd.setTabCompleter(tc);
|
||||
if (executor instanceof org.bukkit.command.TabCompleter tc) {
|
||||
cmd.setTabCompleter(tc);
|
||||
}
|
||||
} else {
|
||||
plugin.getLogger().warning("[LoChat] Команда '" + name + "' не найдена в plugin.yml!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.commands;
|
||||
|
||||
import com.loki.lochat.managers.CustomCommandManager;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ package com.loki.lochat.commands;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.managers.CustomCommandManager;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ package com.loki.lochat.commands.admin.broadcast;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.title.Title;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -38,8 +40,9 @@ public class AnnounceCommand implements CommandExecutor {
|
|||
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
player.sendMessage(formatted);
|
||||
if (plugin.getConfigManager().isAnnouncementActionBarEnabled())
|
||||
if (plugin.getConfigManager().isAnnouncementActionBarEnabled()) {
|
||||
player.sendActionBar(formatted);
|
||||
}
|
||||
if (plugin.getConfigManager().isAnnouncementTitleEnabled()) {
|
||||
player.showTitle(Title.title(
|
||||
ChatFormatter.parse(plugin.getConfigManager().getAnnouncementTitleHeader()),
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.admin.broadcast;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.integrations.DiscordIntegration;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -29,22 +30,34 @@ public class DiscordCommand implements CommandExecutor, TabCompleter {
|
|||
sender.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("errors.no-permission")));
|
||||
return true;
|
||||
}
|
||||
if (args.length == 0) { sendHelp(sender); return true; }
|
||||
if (args.length == 0) {
|
||||
sendHelp(sender);
|
||||
return true;
|
||||
}
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "status" -> sender.sendMessage(ChatFormatter.parse(discord.isEnabled() ? "⚖C9Discord ẲE9включён" : "⚖C9Discord &#CF6679отключён"));
|
||||
case "reload" -> {
|
||||
try { discord.reload(); sender.sendMessage(ChatFormatter.parse("⚖C9Discord ẲE9перезагружен")); }
|
||||
catch (Exception e) { sender.sendMessage(ChatFormatter.parse("&#CF6679Ошибка: " + e.getMessage())); }
|
||||
try {
|
||||
discord.reload();
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Discord ẲE9перезагружен"));
|
||||
} catch (Exception e) {
|
||||
sender.sendMessage(ChatFormatter.parse("&#CF6679Ошибка: " + e.getMessage()));
|
||||
}
|
||||
}
|
||||
case "test" -> {
|
||||
if (!discord.isEnabled()) { sender.sendMessage(ChatFormatter.parse("&#CF6679Discord отключён")); return true; }
|
||||
if (!discord.isEnabled()) {
|
||||
sender.sendMessage(ChatFormatter.parse("&#CF6679Discord отключён"));
|
||||
return true;
|
||||
}
|
||||
String msg = args.length > 1 ? String.join(" ", Arrays.copyOfRange(args, 1, args.length)) : "Тест от " + sender.getName();
|
||||
sender.sendMessage(ChatFormatter.parse("&#B798A8Отправка..."));
|
||||
java.util.concurrent.CompletableFuture.runAsync(() -> {
|
||||
discord.sendTestMessage(msg, sender.getName());
|
||||
if (sender instanceof org.bukkit.entity.Player p)
|
||||
if (sender instanceof org.bukkit.entity.Player p) {
|
||||
p.getScheduler().run(plugin, t -> sender.sendMessage(ChatFormatter.parse("⚖C9Отправлено ẲE9✓")), null);
|
||||
else sender.sendMessage(ChatFormatter.parse("⚖C9Отправлено ẲE9✓"));
|
||||
} else {
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Отправлено ẲE9✓"));
|
||||
}
|
||||
});
|
||||
}
|
||||
default -> sendHelp(sender);
|
||||
|
|
@ -58,8 +71,12 @@ public class DiscordCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.discord.admin")) return null;
|
||||
if (args.length == 1) return List.of("status", "reload", "test");
|
||||
if (!sender.hasPermission("lochat.discord.admin")) {
|
||||
return null;
|
||||
}
|
||||
if (args.length == 1) {
|
||||
return List.of("status", "reload", "test");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.admin.chat;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.commands.admin.chat;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -21,7 +22,9 @@ public class ClearChatCommand implements CommandExecutor {
|
|||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
int lines = plugin.getConfigManager().getAppearanceConfig().getClearLines();
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
for (int i = 0; i < lines; i++) player.sendMessage("");
|
||||
for (int i = 0; i < lines; i++) {
|
||||
player.sendMessage("");
|
||||
}
|
||||
if (plugin.getConfigManager().isClearChatMessageEnabled()) {
|
||||
player.sendMessage(ChatFormatter.parse(
|
||||
plugin.getConfigManager().getClearChatMessage().replace("{player}", sender.getName())));
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.commands.admin.chat;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -31,10 +32,19 @@ public class ClearChatConfigCommand implements CommandExecutor, TabCompleter {
|
|||
return true;
|
||||
}
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "enable" -> { plugin.getConfigManager().setClearChatMessageEnabled(true); sender.sendMessage(ChatFormatter.parse("⚖C9Сообщение очистки ẲE9включено")); }
|
||||
case "disable" -> { plugin.getConfigManager().setClearChatMessageEnabled(false); sender.sendMessage(ChatFormatter.parse("⚖C9Сообщение очистки &#B798A8отключено")); }
|
||||
case "enable" -> {
|
||||
plugin.getConfigManager().setClearChatMessageEnabled(true);
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Сообщение очистки ẲE9включено"));
|
||||
}
|
||||
case "disable" -> {
|
||||
plugin.getConfigManager().setClearChatMessageEnabled(false);
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Сообщение очистки &#B798A8отключено"));
|
||||
}
|
||||
case "message" -> {
|
||||
if (args.length < 2) { sender.sendMessage(ChatFormatter.parse("&#CF6679Укажите текст!")); return true; }
|
||||
if (args.length < 2) {
|
||||
sender.sendMessage(ChatFormatter.parse("&#CF6679Укажите текст!"));
|
||||
return true;
|
||||
}
|
||||
String msg = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
||||
plugin.getConfigManager().setClearChatMessage(msg);
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Сообщение установлено: &f" + msg));
|
||||
|
|
@ -50,8 +60,10 @@ public class ClearChatConfigCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
if (args.length == 1) return List.of("enable", "disable", "message", "status").stream()
|
||||
.filter(s -> s.startsWith(args[0].toLowerCase())).toList();
|
||||
if (args.length == 1) {
|
||||
return List.of("enable", "disable", "message", "status").stream()
|
||||
.filter(s -> s.startsWith(args[0].toLowerCase())).toList();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.google.common.io.ByteArrayDataOutput;
|
|||
import com.google.common.io.ByteStreams;
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.commands.admin.system;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -54,9 +55,15 @@ public class LoChatCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.admin")) return new ArrayList<>();
|
||||
if (args.length == 1) return List.of("reload", "commands").stream().filter(s -> s.startsWith(args[0].toLowerCase())).toList();
|
||||
if (args.length == 2 && args[0].equalsIgnoreCase("commands")) return List.of("reload");
|
||||
if (!sender.hasPermission("lochat.admin")) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
if (args.length == 1) {
|
||||
return List.of("reload", "commands").stream().filter(s -> s.startsWith(args[0].toLowerCase())).toList();
|
||||
}
|
||||
if (args.length == 2 && args[0].equalsIgnoreCase("commands")) {
|
||||
return List.of("reload");
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.commands.admin.system;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.commands.base;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.commands.base;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.commands.base;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ package com.loki.lochat.commands.chat;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.ChatService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ package com.loki.lochat.commands.chat;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.ChatService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.messaging;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -22,13 +23,28 @@ public class IgnoreCommand implements CommandExecutor {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) { sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly()); return true; }
|
||||
if (args.length == 0) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/ignore <ник>"))); return true; }
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly());
|
||||
return true;
|
||||
}
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/ignore <ник>")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
if (target == null) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getPlayerNotFound())); return true; }
|
||||
if (target.equals(player)) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.self"))); return true; }
|
||||
if (messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.already-ignored"))); return true; }
|
||||
if (target == null) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getPlayerNotFound()));
|
||||
return true;
|
||||
}
|
||||
if (target.equals(player)) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.self")));
|
||||
return true;
|
||||
}
|
||||
if (messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.already-ignored")));
|
||||
return true;
|
||||
}
|
||||
|
||||
messagingService.addIgnore(player.getUniqueId(), target.getUniqueId());
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.added", "{player}", target.getName())));
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -25,15 +26,23 @@ public class IgnoreListCommand implements CommandExecutor {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) { sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly()); return true; }
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly());
|
||||
return true;
|
||||
}
|
||||
|
||||
Set<UUID> ignored = messagingService.getIgnoredPlayers(player.getUniqueId());
|
||||
if (ignored.isEmpty()) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-empty"))); return true; }
|
||||
if (ignored.isEmpty()) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-empty")));
|
||||
return true;
|
||||
}
|
||||
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-header")));
|
||||
for (UUID uuid : ignored) {
|
||||
String name = PlayerUtil.getPlayerName(uuid);
|
||||
if (name != null) player.sendMessage(ChatFormatter.parse("⚖C9◆ &f" + name));
|
||||
if (name != null) {
|
||||
player.sendMessage(ChatFormatter.parse("⚖C9◆ &f" + name));
|
||||
}
|
||||
}
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-footer").replace("{count}", String.valueOf(ignored.size()))));
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.command.Command;
|
||||
|
|
@ -28,17 +29,31 @@ public class MsgCommand implements CommandExecutor {
|
|||
sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly());
|
||||
return true;
|
||||
}
|
||||
if (!plugin.getConfigManager().isPmEnabled()) return true;
|
||||
if (!plugin.getConfigManager().isPmEnabled()) {
|
||||
return true;
|
||||
}
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/msg <ник> <сообщение>")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
if (target == null) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.player-offline"))); return true; }
|
||||
if (target.equals(player)) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.self"))); return true; }
|
||||
if (messagingService.isIgnoring(target.getUniqueId(), player.getUniqueId())) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored"))); return true; }
|
||||
if (messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored"))); return true; }
|
||||
if (target == null) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.player-offline")));
|
||||
return true;
|
||||
}
|
||||
if (target.equals(player)) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.self")));
|
||||
return true;
|
||||
}
|
||||
if (messagingService.isIgnoring(target.getUniqueId(), player.getUniqueId())) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored")));
|
||||
return true;
|
||||
}
|
||||
if (messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored")));
|
||||
return true;
|
||||
}
|
||||
|
||||
String message = String.join(" ", java.util.Arrays.copyOfRange(args, 1, args.length));
|
||||
sendPm(player, target, message);
|
||||
|
|
@ -50,12 +65,15 @@ public class MsgCommand implements CommandExecutor {
|
|||
target.sendMessage(ChatFormatter.formatPmReceivedNew(plugin.getMessageConfig().getPmFormatReceived(), sender, target, message));
|
||||
if (plugin.getConfigManager().isPmSoundEnabled()) {
|
||||
Sound sound = PlayerUtil.parseSound(plugin.getConfigManager().getPmSoundType(), null);
|
||||
if (sound != null) target.playSound(target.getLocation(), sound, 1.0f, 1.0f);
|
||||
if (sound != null) {
|
||||
target.playSound(target.getLocation(), sound, 1.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
messagingService.broadcastPM(sender, target, message);
|
||||
messagingService.setLastConversation(sender.getUniqueId(), target.getUniqueId());
|
||||
messagingService.setLastConversation(target.getUniqueId(), sender.getUniqueId());
|
||||
if (plugin.getConfigManager().isPmLogEnabled())
|
||||
if (plugin.getConfigManager().isPmLogEnabled()) {
|
||||
plugin.getLogger().info("[PM] " + sender.getName() + " -> " + target.getName() + ": " + message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.command.Command;
|
||||
|
|
@ -31,30 +32,44 @@ public class ReplyCommand implements CommandExecutor {
|
|||
sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly());
|
||||
return true;
|
||||
}
|
||||
if (!plugin.getConfigManager().isPmEnabled()) return true;
|
||||
if (!plugin.getConfigManager().isPmEnabled()) {
|
||||
return true;
|
||||
}
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/reply <сообщение>")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Optional<UUID> lastUuid = messagingService.getLastConversation(player.getUniqueId());
|
||||
if (lastUuid.isEmpty()) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.no-reply"))); return true; }
|
||||
if (lastUuid.isEmpty()) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.no-reply")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(lastUuid.get());
|
||||
if (target == null) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.player-offline"))); return true; }
|
||||
if (messagingService.isIgnoring(target.getUniqueId(), player.getUniqueId())) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored"))); return true; }
|
||||
if (target == null) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.player-offline")));
|
||||
return true;
|
||||
}
|
||||
if (messagingService.isIgnoring(target.getUniqueId(), player.getUniqueId())) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("pm.ignored")));
|
||||
return true;
|
||||
}
|
||||
|
||||
String message = String.join(" ", args);
|
||||
player.sendMessage(ChatFormatter.formatPmSentNew(plugin.getMessageConfig().getPmFormatSent(), player, target, message));
|
||||
target.sendMessage(ChatFormatter.formatPmReceivedNew(plugin.getMessageConfig().getPmFormatReceived(), player, target, message));
|
||||
if (plugin.getConfigManager().isPmSoundEnabled()) {
|
||||
Sound sound = PlayerUtil.parseSound(plugin.getConfigManager().getPmSoundType(), null);
|
||||
if (sound != null) target.playSound(target.getLocation(), sound, 1.0f, 1.0f);
|
||||
if (sound != null) {
|
||||
target.playSound(target.getLocation(), sound, 1.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
messagingService.broadcastPM(player, target, message);
|
||||
messagingService.setLastConversation(target.getUniqueId(), player.getUniqueId());
|
||||
if (plugin.getConfigManager().isPmLogEnabled())
|
||||
if (plugin.getConfigManager().isPmLogEnabled()) {
|
||||
plugin.getLogger().info("[PM] " + player.getName() + " -> " + target.getName() + ": " + message);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.messaging;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -22,12 +23,24 @@ public class UnignoreCommand implements CommandExecutor {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) { sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly()); return true; }
|
||||
if (args.length == 0) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/unignore <ник>"))); return true; }
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(plugin.getConfigManager().getMessagesConfig().getPlayerOnly());
|
||||
return true;
|
||||
}
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getInvalidUsage("/unignore <ник>")));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
if (target == null) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getPlayerNotFound())); return true; }
|
||||
if (!messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) { player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.not-ignored"))); return true; }
|
||||
if (target == null) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().getPlayerNotFound()));
|
||||
return true;
|
||||
}
|
||||
if (!messagingService.isIgnoring(player.getUniqueId(), target.getUniqueId())) {
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.not-ignored")));
|
||||
return true;
|
||||
}
|
||||
|
||||
messagingService.removeIgnore(player.getUniqueId(), target.getUniqueId());
|
||||
player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.removed", "{player}", target.getName())));
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.loki.lochat.config.MessagesConfig;
|
|||
import com.loki.lochat.data.model.BanRecord;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -78,7 +79,9 @@ public class BanCommand implements CommandExecutor, TabCompleter {
|
|||
if (timeStr == null && isTimeFormat(args[i])) {
|
||||
timeStr = args[i];
|
||||
} else {
|
||||
if (reasonBuilder.length() > 0) reasonBuilder.append(" ");
|
||||
if (reasonBuilder.length() > 0) {
|
||||
reasonBuilder.append(" ");
|
||||
}
|
||||
reasonBuilder.append(args[i]);
|
||||
}
|
||||
}
|
||||
|
|
@ -98,7 +101,9 @@ public class BanCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
String reason = reasonBuilder.length() > 0 ? reasonBuilder.toString() : msg.getModerationDefaultReason();
|
||||
String finalName = PlayerUtil.getPlayerName(targetUuid);
|
||||
if (finalName == null) finalName = targetName;
|
||||
if (finalName == null) {
|
||||
finalName = targetName;
|
||||
}
|
||||
|
||||
punishmentService.ban(targetUuid, finalName, durationMs, reason, sender.getName());
|
||||
|
||||
|
|
@ -126,8 +131,11 @@ public class BanCommand implements CommandExecutor, TabCompleter {
|
|||
@NotNull String alias, @NotNull String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) {
|
||||
for (Player p : Bukkit.getOnlinePlayers())
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) c.add(p.getName());
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||
c.add(p.getName());
|
||||
}
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
c.addAll(List.of("1h", "1d", "7d", "30d", "perm"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.api.service.PunishmentService;
|
|||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -56,7 +57,9 @@ public class UnbanCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
|
||||
String name = PlayerUtil.getPlayerName(uuid);
|
||||
if (name == null) name = args[0];
|
||||
if (name == null) {
|
||||
name = args[0];
|
||||
}
|
||||
|
||||
punishmentService.unban(uuid);
|
||||
sender.sendMessage(ChatFormatter.parse(msg.getUnbanConfirm().replace("{player}", name)));
|
||||
|
|
@ -70,7 +73,9 @@ public class UnbanCommand implements CommandExecutor, TabCompleter {
|
|||
if (args.length == 1) {
|
||||
String p = args[0].toLowerCase();
|
||||
for (Player pl : Bukkit.getOnlinePlayers()) {
|
||||
if (pl.getName().toLowerCase().startsWith(p)) out.add(pl.getName());
|
||||
if (pl.getName().toLowerCase().startsWith(p)) {
|
||||
out.add(pl.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.moderation.mute;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -30,16 +31,28 @@ public class MuteBlameCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.muteblame")) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission")); return true; }
|
||||
if (args.length < 1) { sender.sendMessage("&#CF6679Использование: /lmuteblame <модератор>"); return true; }
|
||||
if (!sender.hasPermission("lochat.muteblame")) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission"));
|
||||
return true;
|
||||
}
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage("&#CF6679Использование: /lmuteblame <модератор>");
|
||||
return true;
|
||||
}
|
||||
|
||||
List<MuteData.MuteHistoryEntry> mutes = muteService.getMutesByOperator(args[0]);
|
||||
if (mutes.isEmpty()) { sender.sendMessage("⚖C9Модератор ẲE9" + args[0] + " ⚖C9не выдавал мутов"); return true; }
|
||||
if (mutes.isEmpty()) {
|
||||
sender.sendMessage("⚖C9Модератор ẲE9" + args[0] + " ⚖C9не выдавал мутов");
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("ẲE9▬▬▬▬▬ &#B798A8Муты от ⚖C9" + args[0] + " ⚖C9(" + mutes.size() + "⚖C9) ẲE9▬▬▬▬▬");
|
||||
int idx = 1;
|
||||
for (MuteData.MuteHistoryEntry e : mutes) {
|
||||
if (idx > 15) { sender.sendMessage("&#B798A8...и ещё " + (mutes.size() - 15) + " записей"); break; }
|
||||
if (idx > 15) {
|
||||
sender.sendMessage("&#B798A8...и ещё " + (mutes.size() - 15) + " записей");
|
||||
break;
|
||||
}
|
||||
String status = e.unmuted ? "⚖C9Размучен" : (e.duration == 0 ? "&#CF6679Активен (навсегда)" :
|
||||
System.currentTimeMillis() > e.mutedAt + e.duration ? "&#B798A8Истёк" : "&#CF6679Активен");
|
||||
sender.sendMessage("⚖C9" + idx + ". &f" + (e.playerName != null ? e.playerName : "???") + " &#B798A8— " + status);
|
||||
|
|
@ -53,7 +66,13 @@ public class MuteBlameCommand implements CommandExecutor, TabCompleter {
|
|||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) for (Player p : Bukkit.getOnlinePlayers()) if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) c.add(p.getName());
|
||||
if (args.length == 1) {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||
c.add(p.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -62,7 +63,9 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
|
|||
} else if (timeStr == null && isTimeFormat(arg)) {
|
||||
timeStr = arg;
|
||||
} else {
|
||||
if (reasonBuilder.length() > 0) reasonBuilder.append(" ");
|
||||
if (reasonBuilder.length() > 0) {
|
||||
reasonBuilder.append(" ");
|
||||
}
|
||||
reasonBuilder.append(arg);
|
||||
}
|
||||
}
|
||||
|
|
@ -78,12 +81,17 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
|
|||
long duration;
|
||||
if (timeStr == null || timeStr.isEmpty()) {
|
||||
duration = sender instanceof Player p ? muteService.getMaxDuration(p) : 0;
|
||||
if (duration == -1) duration = muteService.parseTime(hm.getDefaultMuteDuration());
|
||||
if (duration == -1) {
|
||||
duration = muteService.parseTime(hm.getDefaultMuteDuration());
|
||||
}
|
||||
} else if (timeStr.equalsIgnoreCase("perm") || timeStr.equals("0")) {
|
||||
duration = 0;
|
||||
} else {
|
||||
duration = muteService.parseTime(timeStr);
|
||||
if (duration < 0) { sender.sendMessage(ChatFormatter.parse(hm.getMuteTimeHelp())); return true; }
|
||||
if (duration < 0) {
|
||||
sender.sendMessage(ChatFormatter.parse(hm.getMuteTimeHelp()));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (sender instanceof Player p && !muteService.canMuteForDuration(p, duration)) {
|
||||
|
|
@ -94,8 +102,14 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
|
||||
UUID targetUUID = com.loki.lochat.utils.player.PlayerUtil.findPlayerUUID(targetName);
|
||||
if (targetUUID == null) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found")); return true; }
|
||||
if (muteService.isMuted(targetUUID)) { sender.sendMessage(ChatFormatter.parse("&#CF6679Игрок уже замучен!")); return true; }
|
||||
if (targetUUID == null) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found"));
|
||||
return true;
|
||||
}
|
||||
if (muteService.isMuted(targetUUID)) {
|
||||
sender.sendMessage(ChatFormatter.parse("&#CF6679Игрок уже замучен!"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(targetUUID);
|
||||
String finalName = com.loki.lochat.utils.player.PlayerUtil.getPlayerName(targetUUID);
|
||||
|
|
@ -116,7 +130,11 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
if (silent) {
|
||||
String msgText = hm.getPlayerMutedSilent().replace("{player}", finalName).replace("{time}", timeDisplay);
|
||||
for (Player p : Bukkit.getOnlinePlayers()) if (p.hasPermission("lochat.mute.see-silent")) p.sendMessage(ChatFormatter.parse(msgText));
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.hasPermission("lochat.mute.see-silent")) {
|
||||
p.sendMessage(ChatFormatter.parse(msgText));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String broadcastMsg = (duration == 0 ? hm.getPlayerMutedPermanent() : hm.getPlayerMuted())
|
||||
.replace("{player}", finalName).replace("{time}", timeDisplay).replace("{reason}", reason);
|
||||
|
|
@ -141,8 +159,11 @@ public class MuteCommand implements CommandExecutor, TabCompleter {
|
|||
@NotNull String alias, @NotNull String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) {
|
||||
for (Player p : Bukkit.getOnlinePlayers())
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) c.add(p.getName());
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||
c.add(p.getName());
|
||||
}
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
c.addAll(List.of("10m", "30m", "1h", "6h", "12h", "1d", "7d", "30d", "perm", "-s"));
|
||||
} else if (args.length == 3) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.moderation.mute;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -31,15 +32,29 @@ public class MuteHistoryCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.mutehistory")) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission")); return true; }
|
||||
if (args.length < 1) { sender.sendMessage("&#CF6679Использование: /lmutehistory <ник>"); return true; }
|
||||
if (!sender.hasPermission("lochat.mutehistory")) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission"));
|
||||
return true;
|
||||
}
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage("&#CF6679Использование: /lmutehistory <ник>");
|
||||
return true;
|
||||
}
|
||||
|
||||
UUID uuid = com.loki.lochat.utils.player.PlayerUtil.findPlayerUUID(args[0]);
|
||||
if (uuid == null) uuid = muteService.getUUIDByName(args[0]);
|
||||
if (uuid == null) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found")); return true; }
|
||||
if (uuid == null) {
|
||||
uuid = muteService.getUUIDByName(args[0]);
|
||||
}
|
||||
if (uuid == null) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found"));
|
||||
return true;
|
||||
}
|
||||
|
||||
List<MuteData.MuteHistoryEntry> history = muteService.getPlayerHistory(uuid);
|
||||
if (history.isEmpty()) { sender.sendMessage("⚖C9У ẲE9" + args[0] + " ⚖C9нет истории мутов"); return true; }
|
||||
if (history.isEmpty()) {
|
||||
sender.sendMessage("⚖C9У ẲE9" + args[0] + " ⚖C9нет истории мутов");
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("ẲE9▬▬▬▬▬ &#B798A8История мутов ⚖C9" + args[0] + " ⚖C9(" + history.size() + "⚖C9) ẲE9▬▬▬▬▬");
|
||||
int idx = 1;
|
||||
|
|
@ -50,17 +65,26 @@ public class MuteHistoryCommand implements CommandExecutor, TabCompleter {
|
|||
sender.sendMessage("⚖C9" + idx + ". &f" + fmt.format(new Date(e.mutedAt)) + " &#B798A8— " + status);
|
||||
sender.sendMessage(" &#B798A8Длительность: &f" + (e.duration == 0 ? "навсегда" : muteService.formatTime(e.duration)));
|
||||
sender.sendMessage(" &#B798A8Причина: &f" + (e.reason != null ? e.reason : "—") + " &#B798A8Выдал: ẲE9" + e.mutedBy);
|
||||
if (e.unmuted && e.unmutedBy != null)
|
||||
if (e.unmuted && e.unmutedBy != null) {
|
||||
sender.sendMessage(" &#B798A8Размутил: ẲE9" + e.unmutedBy + " &f(" + fmt.format(new Date(e.unmutedAt)) + ")");
|
||||
}
|
||||
}
|
||||
if (history.size() > 10) {
|
||||
sender.sendMessage("&#B798A8...и ещё " + (history.size() - 10) + " записей");
|
||||
}
|
||||
if (history.size() > 10) sender.sendMessage("&#B798A8...и ещё " + (history.size() - 10) + " записей");
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) for (Player p : Bukkit.getOnlinePlayers()) if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) c.add(p.getName());
|
||||
if (args.length == 1) {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||
c.add(p.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.moderation.mute;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -27,10 +28,16 @@ public class MuteListCommand implements CommandExecutor {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.mutelist")) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission")); return true; }
|
||||
if (!sender.hasPermission("lochat.mutelist")) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Map<UUID, MuteData> mutes = muteService.getActiveMutes();
|
||||
if (mutes.isEmpty()) { sender.sendMessage("⚖C9Нет активных мутов"); return true; }
|
||||
if (mutes.isEmpty()) {
|
||||
sender.sendMessage("⚖C9Нет активных мутов");
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("ẲE9▬▬▬▬▬ &#B798A8Активные муты ⚖C9(" + mutes.size() + "⚖C9) ẲE9▬▬▬▬▬");
|
||||
int i = 1;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.commands.moderation.mute;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -28,14 +29,23 @@ public class UnmuteCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("lochat.unmute")) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission")); return true; }
|
||||
if (args.length < 1) { sender.sendMessage(ChatFormatter.parse("&#CF6679Использование: /unmute <ник> [-s]")); return true; }
|
||||
if (!sender.hasPermission("lochat.unmute")) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.no-permission"));
|
||||
return true;
|
||||
}
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage(ChatFormatter.parse("&#CF6679Использование: /unmute <ник> [-s]"));
|
||||
return true;
|
||||
}
|
||||
|
||||
String targetName = null;
|
||||
boolean silent = false;
|
||||
for (String a : args) {
|
||||
if (a.equalsIgnoreCase("-s")) silent = true;
|
||||
else if (targetName == null) targetName = a;
|
||||
if (a.equalsIgnoreCase("-s")) {
|
||||
silent = true;
|
||||
} else if (targetName == null) {
|
||||
targetName = a;
|
||||
}
|
||||
}
|
||||
if (silent && !sender.hasPermission("lochat.mute.silent")) {
|
||||
sender.sendMessage(ChatFormatter.parse(plugin.getConfigManager().getMessagesConfig().getNoSilentUnmutePermission()));
|
||||
|
|
@ -43,7 +53,10 @@ public class UnmuteCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
|
||||
UUID uuid = com.loki.lochat.utils.player.PlayerUtil.findPlayerUUID(targetName);
|
||||
if (uuid == null) { sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found")); return true; }
|
||||
if (uuid == null) {
|
||||
sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found"));
|
||||
return true;
|
||||
}
|
||||
|
||||
String name = com.loki.lochat.utils.player.PlayerUtil.getPlayerName(uuid);
|
||||
Player target = Bukkit.getPlayer(uuid);
|
||||
|
|
@ -51,10 +64,16 @@ public class UnmuteCommand implements CommandExecutor, TabCompleter {
|
|||
|
||||
if (muteService.unmute(uuid, op)) {
|
||||
sender.sendMessage(ChatFormatter.parse("⚖C9Игрок ẲE9" + name + " ⚖C9размучен"));
|
||||
if (target != null) target.sendMessage(ChatFormatter.parse("⚖C9Вы были ẲE9размучены!"));
|
||||
if (target != null) {
|
||||
target.sendMessage(ChatFormatter.parse("⚖C9Вы были ẲE9размучены!"));
|
||||
}
|
||||
if (silent) {
|
||||
String msg = "&#B798A8[⚖C9ТИХО&#B798A8] ẲE9" + name + " &#B798A8размучен ⚖C9(" + op + ")";
|
||||
for (Player p : Bukkit.getOnlinePlayers()) if (p.hasPermission("lochat.mute.see-silent")) p.sendMessage(ChatFormatter.parse(msg));
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.hasPermission("lochat.mute.see-silent")) {
|
||||
p.sendMessage(ChatFormatter.parse(msg));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Bukkit.broadcast(ChatFormatter.parse("⚖C9Игрок ẲE9" + name + " ⚖C9размучен модератором ẲE9" + op));
|
||||
}
|
||||
|
|
@ -67,8 +86,15 @@ public class UnmuteCommand implements CommandExecutor, TabCompleter {
|
|||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) for (Player p : Bukkit.getOnlinePlayers()) if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) c.add(p.getName());
|
||||
else if (args.length == 2) c.add("-s");
|
||||
if (args.length == 1) {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
if (p.getName().toLowerCase().startsWith(args[0].toLowerCase())) {
|
||||
c.add(p.getName());
|
||||
}
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
c.add("-s");
|
||||
}
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.api.service.PunishmentService;
|
|||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -55,7 +56,9 @@ public class SilentWarnCommand implements CommandExecutor, TabCompleter {
|
|||
? String.join(" ", java.util.Arrays.copyOfRange(args, 1, args.length))
|
||||
: msg.getModerationDefaultReason();
|
||||
String name = PlayerUtil.getPlayerName(targetUuid);
|
||||
if (name == null) name = args[0];
|
||||
if (name == null) {
|
||||
name = args[0];
|
||||
}
|
||||
|
||||
punishmentService.addWarn(targetUuid, name, mod, reason, true);
|
||||
|
||||
|
|
@ -77,7 +80,9 @@ public class SilentWarnCommand implements CommandExecutor, TabCompleter {
|
|||
if (args.length == 1) {
|
||||
String p = args[0].toLowerCase();
|
||||
for (Player pl : Bukkit.getOnlinePlayers()) {
|
||||
if (pl.getName().toLowerCase().startsWith(p)) out.add(pl.getName());
|
||||
if (pl.getName().toLowerCase().startsWith(p)) {
|
||||
out.add(pl.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.api.service.PunishmentService;
|
|||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -58,7 +59,9 @@ public class WarnCommand implements CommandExecutor, TabCompleter {
|
|||
String mod = sender.getName();
|
||||
String reason = buildReason(msg, args, 1);
|
||||
String name = PlayerUtil.getPlayerName(targetUuid);
|
||||
if (name == null) name = args[0];
|
||||
if (name == null) {
|
||||
name = args[0];
|
||||
}
|
||||
|
||||
Player targetOnline = Bukkit.getPlayer(targetUuid);
|
||||
if (targetOnline != null && targetOnline.hasPermission("lochat.bypass.warn")) {
|
||||
|
|
@ -82,7 +85,9 @@ public class WarnCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = from; i < args.length; i++) {
|
||||
if (sb.length() > 0) sb.append(" ");
|
||||
if (sb.length() > 0) {
|
||||
sb.append(" ");
|
||||
}
|
||||
sb.append(args[i]);
|
||||
}
|
||||
return sb.toString();
|
||||
|
|
@ -95,7 +100,9 @@ public class WarnCommand implements CommandExecutor, TabCompleter {
|
|||
if (args.length == 1) {
|
||||
String p = args[0].toLowerCase();
|
||||
for (Player pl : Bukkit.getOnlinePlayers()) {
|
||||
if (pl.getName().toLowerCase().startsWith(p)) out.add(pl.getName());
|
||||
if (pl.getName().toLowerCase().startsWith(p)) {
|
||||
out.add(pl.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
|
|
|
|||
|
|
@ -3,8 +3,10 @@ package com.loki.lochat.commands.nick;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.NickService;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -84,8 +86,12 @@ public class NickCommand implements CommandExecutor, TabCompleter {
|
|||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
List<String> c = new ArrayList<>();
|
||||
if (args.length == 1) {
|
||||
if ("reset".startsWith(args[0].toLowerCase())) c.add("reset");
|
||||
if (sender instanceof Player p) nickService.getNickname(p.getUniqueId()).ifPresent(c::add);
|
||||
if ("reset".startsWith(args[0].toLowerCase())) {
|
||||
c.add("reset");
|
||||
}
|
||||
if (sender instanceof Player p) {
|
||||
nickService.getNickname(p.getUniqueId()).ifPresent(c::add);
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.loki.lochat.data.model.MuteData;
|
|||
import com.loki.lochat.data.model.WarnEntry;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
@ -55,7 +56,9 @@ public class PlayerInfoCommand implements CommandExecutor, TabCompleter {
|
|||
}
|
||||
|
||||
String name = PlayerUtil.getPlayerName(uuid);
|
||||
if (name == null) name = args[0];
|
||||
if (name == null) {
|
||||
name = args[0];
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(uuid);
|
||||
|
||||
|
|
@ -129,7 +132,9 @@ public class PlayerInfoCommand implements CommandExecutor, TabCompleter {
|
|||
if (args.length == 1) {
|
||||
String p = args[0].toLowerCase();
|
||||
for (Player pl : Bukkit.getOnlinePlayers()) {
|
||||
if (pl.getName().toLowerCase().startsWith(p)) out.add(pl.getName());
|
||||
if (pl.getName().toLowerCase().startsWith(p)) {
|
||||
out.add(pl.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.commands.base.PlayerCommand;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -26,7 +28,9 @@ public class DoCommand extends PlayerCommand {
|
|||
@Override
|
||||
protected boolean executePlayerCommand(@NotNull Player player, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!requirePermission(player, "lochat.rp.do")) return true;
|
||||
if (!requirePermission(player, "lochat.rp.do")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.do", 0);
|
||||
if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_do", cooldown)) {
|
||||
|
|
@ -54,7 +58,9 @@ public class DoCommand extends PlayerCommand {
|
|||
int radius = plugin.getConfigManager().getInt("rp.radius", 100);
|
||||
RpUtil.sendToRadius(player, message, radius);
|
||||
|
||||
if (cooldown > 0) playerService.setCooldown(player.getUniqueId(), "rp_do");
|
||||
if (cooldown > 0) {
|
||||
playerService.setCooldown(player.getUniqueId(), "rp_do");
|
||||
}
|
||||
plugin.getLogger().info("[DO] " + player.getName() + ": " + description);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.commands.base.PlayerCommand;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -26,7 +28,9 @@ public class MeCommand extends PlayerCommand {
|
|||
@Override
|
||||
protected boolean executePlayerCommand(@NotNull Player player, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!requirePermission(player, "lochat.rp.me")) return true;
|
||||
if (!requirePermission(player, "lochat.rp.me")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.me", 0);
|
||||
if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_me", cooldown)) {
|
||||
|
|
@ -54,7 +58,9 @@ public class MeCommand extends PlayerCommand {
|
|||
int radius = plugin.getConfigManager().getInt("rp.radius", 100);
|
||||
RpUtil.sendToRadius(player, message, radius);
|
||||
|
||||
if (cooldown > 0) playerService.setCooldown(player.getUniqueId(), "rp_me");
|
||||
if (cooldown > 0) {
|
||||
playerService.setCooldown(player.getUniqueId(), "rp_me");
|
||||
}
|
||||
plugin.getLogger().info("[ME] " + player.getName() + ": " + action);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.commands.base.PlayerCommand;
|
||||
import com.loki.lochat.config.RatConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -29,7 +31,9 @@ public class RollCommand extends PlayerCommand {
|
|||
@Override
|
||||
protected boolean executePlayerCommand(@NotNull Player player, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!requirePermission(player, "lochat.rp.roll")) return true;
|
||||
if (!requirePermission(player, "lochat.rp.roll")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int max = RatConfig.ROLL_DEFAULT_MAX;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ package com.loki.lochat.commands.rp;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.player.DistanceUtil;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
@ -34,7 +36,8 @@ public final class RpUtil {
|
|||
if (plugin.getGradientModule() != null && plugin.getGradientModule().isEnabled()) {
|
||||
return plugin.getGradientModule().getFormattedName(player);
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
|
||||
// Пробуем взять displayName (может содержать градиент от NickService)
|
||||
Component displayName = player.displayName();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ import com.loki.lochat.LoChat;
|
|||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.commands.base.PlayerCommand;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -29,7 +31,9 @@ public class TryCommand extends PlayerCommand {
|
|||
@Override
|
||||
protected boolean executePlayerCommand(@NotNull Player player, @NotNull Command command,
|
||||
@NotNull String label, @NotNull String[] args) {
|
||||
if (!requirePermission(player, "lochat.rp.try")) return true;
|
||||
if (!requirePermission(player, "lochat.rp.try")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.try", 0);
|
||||
if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_try", cooldown)) {
|
||||
|
|
@ -64,7 +68,9 @@ public class TryCommand extends PlayerCommand {
|
|||
int radius = plugin.getConfigManager().getInt("rp.radius", 100);
|
||||
RpUtil.sendToRadius(player, message, radius);
|
||||
|
||||
if (cooldown > 0) playerService.setCooldown(player.getUniqueId(), "rp_try");
|
||||
if (cooldown > 0) {
|
||||
playerService.setCooldown(player.getUniqueId(), "rp_try");
|
||||
}
|
||||
plugin.getLogger().info("[TRY] " + player.getName() + ": " + action + " -> " + (success ? "SUCCESS" : "FAIL"));
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ package com.loki.lochat.config;
|
|||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Конфигурация внешнего вида чата (config/appearance.yml)
|
||||
|
|
@ -48,19 +48,43 @@ public class AppearanceConfig extends BaseConfig {
|
|||
return config.getString("prefixes." + chatType + "." + key, defaultValue);
|
||||
}
|
||||
|
||||
public String getGlobalEmoji() { return getPrefixValue("global", "emoji", "🌍"); }
|
||||
public String getGlobalText() { return getPrefixValue("global", "text", "GLOBAL"); }
|
||||
public List<String> getGlobalColors() { return config.getStringList("prefixes.global.colors"); }
|
||||
public String getGlobalSeparatorText() { return getPrefixValue("global", "separator.text", " ▶ "); }
|
||||
public String getGlobalSeparatorColor() { return getPrefixValue("global", "separator.color", "#FFD700"); }
|
||||
public String getGlobalMessageColor() { return getPrefixValue("global", "message-color", "#FFFFFF"); }
|
||||
public String getGlobalEmoji() {
|
||||
return getPrefixValue("global", "emoji", "🌍");
|
||||
}
|
||||
public String getGlobalText() {
|
||||
return getPrefixValue("global", "text", "GLOBAL");
|
||||
}
|
||||
public List<String> getGlobalColors() {
|
||||
return config.getStringList("prefixes.global.colors");
|
||||
}
|
||||
public String getGlobalSeparatorText() {
|
||||
return getPrefixValue("global", "separator.text", " ▶ ");
|
||||
}
|
||||
public String getGlobalSeparatorColor() {
|
||||
return getPrefixValue("global", "separator.color", "#FFD700");
|
||||
}
|
||||
public String getGlobalMessageColor() {
|
||||
return getPrefixValue("global", "message-color", "#FFFFFF");
|
||||
}
|
||||
|
||||
public String getLocalEmoji() { return getPrefixValue("local", "emoji", ""); }
|
||||
public String getLocalText() { return getPrefixValue("local", "text", "LOCAL"); }
|
||||
public List<String> getLocalColors() { return config.getStringList("prefixes.local.colors"); }
|
||||
public String getLocalSeparatorText() { return getPrefixValue("local", "separator.text", " ▶ "); }
|
||||
public String getLocalSeparatorColor() { return getPrefixValue("local", "separator.color", "#FFFFFF"); }
|
||||
public String getLocalMessageColor() { return getPrefixValue("local", "message-color", "#FFFFFF"); }
|
||||
public String getLocalEmoji() {
|
||||
return getPrefixValue("local", "emoji", "");
|
||||
}
|
||||
public String getLocalText() {
|
||||
return getPrefixValue("local", "text", "LOCAL");
|
||||
}
|
||||
public List<String> getLocalColors() {
|
||||
return config.getStringList("prefixes.local.colors");
|
||||
}
|
||||
public String getLocalSeparatorText() {
|
||||
return getPrefixValue("local", "separator.text", " ▶ ");
|
||||
}
|
||||
public String getLocalSeparatorColor() {
|
||||
return getPrefixValue("local", "separator.color", "#FFFFFF");
|
||||
}
|
||||
public String getLocalMessageColor() {
|
||||
return getPrefixValue("local", "message-color", "#FFFFFF");
|
||||
}
|
||||
|
||||
// ========== ФОРМАТ СООБЩЕНИЙ ==========
|
||||
|
||||
|
|
@ -74,36 +98,72 @@ public class AppearanceConfig extends BaseConfig {
|
|||
|
||||
// ========== HOVER ЭФФЕКТЫ ==========
|
||||
|
||||
public boolean isHoverEnabled() { return config.getBoolean("hover.enabled", true); }
|
||||
public List<String> getHoverFormat() { return config.getStringList("hover.format"); }
|
||||
public boolean isHoverEnabled() {
|
||||
return config.getBoolean("hover.enabled", true);
|
||||
}
|
||||
public List<String> getHoverFormat() {
|
||||
return config.getStringList("hover.format");
|
||||
}
|
||||
|
||||
// ========== ЭМОДЗИ ==========
|
||||
|
||||
public Map<String, String> getEmojis() { return new HashMap<>(emojiCache); }
|
||||
public String getEmoji(String key) { return emojiCache.get(key); }
|
||||
public Map<String, String> getEmojis() {
|
||||
return new HashMap<>(emojiCache);
|
||||
}
|
||||
public String getEmoji(String key) {
|
||||
return emojiCache.get(key);
|
||||
}
|
||||
|
||||
// ========== НАСТРОЙКИ ЧАТА ==========
|
||||
|
||||
public int getLocalRadius() { return config.getInt("chat.local_radius", 100); }
|
||||
public int getClearLines() { return config.getInt("chat.clear_lines", 100); }
|
||||
public int getMinMessageLength() { return config.getInt("chat.min_message_length", 1); }
|
||||
public int getMaxMessageLength() { return config.getInt("chat.max_message_length", 2000); }
|
||||
public int getLocalRadius() {
|
||||
return config.getInt("chat.local_radius", 100);
|
||||
}
|
||||
public int getClearLines() {
|
||||
return config.getInt("chat.clear_lines", 100);
|
||||
}
|
||||
public int getMinMessageLength() {
|
||||
return config.getInt("chat.min_message_length", 1);
|
||||
}
|
||||
public int getMaxMessageLength() {
|
||||
return config.getInt("chat.max_message_length", 2000);
|
||||
}
|
||||
|
||||
private String getChatColor(String type, String defaultColor) {
|
||||
return config.getString("chat.colors." + type, defaultColor);
|
||||
}
|
||||
|
||||
public String getNobodyHeardColor() { return getChatColor("nobody_heard", "#FFA726"); }
|
||||
public String getErrorColor() { return getChatColor("error", "#FF6B6B"); }
|
||||
public String getSuccessColor() { return getChatColor("success", "#6BCB77"); }
|
||||
public String getWarningColor() { return getChatColor("warning", "#FFA726"); }
|
||||
public String getInfoColor() { return getChatColor("info", "#87CEEB"); }
|
||||
public String getNobodyHeardColor() {
|
||||
return getChatColor("nobody_heard", "#FFA726");
|
||||
}
|
||||
public String getErrorColor() {
|
||||
return getChatColor("error", "#FF6B6B");
|
||||
}
|
||||
public String getSuccessColor() {
|
||||
return getChatColor("success", "#6BCB77");
|
||||
}
|
||||
public String getWarningColor() {
|
||||
return getChatColor("warning", "#FFA726");
|
||||
}
|
||||
public String getInfoColor() {
|
||||
return getChatColor("info", "#87CEEB");
|
||||
}
|
||||
|
||||
// ========== DISCORD ==========
|
||||
|
||||
public String getDiscordEmoji(String event) { return config.getString("discord.emojis." + event, ""); }
|
||||
public String getDiscordEventTitle(String event) { return config.getString("discord.event_titles." + event, ""); }
|
||||
public String getDefaultAvatarUrl() { return config.getString("discord.avatar_urls.default", "https://mc-heads.net/avatar/minecraft/64"); }
|
||||
public String getPlayerAvatarUrl() { return config.getString("discord.avatar_urls.player", "https://mc-heads.net/avatar/{player}/64"); }
|
||||
public String getDefaultEmbedColor() { return config.getString("discord.default_embed_color", "5865F2"); }
|
||||
public String getDiscordEmoji(String event) {
|
||||
return config.getString("discord.emojis." + event, "");
|
||||
}
|
||||
public String getDiscordEventTitle(String event) {
|
||||
return config.getString("discord.event_titles." + event, "");
|
||||
}
|
||||
public String getDefaultAvatarUrl() {
|
||||
return config.getString("discord.avatar_urls.default", "https://mc-heads.net/avatar/minecraft/64");
|
||||
}
|
||||
public String getPlayerAvatarUrl() {
|
||||
return config.getString("discord.avatar_urls.player", "https://mc-heads.net/avatar/{player}/64");
|
||||
}
|
||||
public String getDefaultEmbedColor() {
|
||||
return config.getString("discord.default_embed_color", "5865F2");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package com.loki.lochat.config;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.config.core.ConfigLoader;
|
||||
import com.loki.lochat.config.core.ConfigAccessor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import com.loki.lochat.config.core.ConfigLoader;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package com.loki.lochat.config;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.config.core;
|
||||
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.util.List;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import com.loki.lochat.listener.ModerationListener;
|
|||
import com.loki.lochat.listener.PlayerEventListener;
|
||||
import com.loki.lochat.managers.AutoMessageManager;
|
||||
import com.loki.lochat.managers.CustomCommandManager;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@ package com.loki.lochat.core;
|
|||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MessagingService;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.api.service.PunishmentService;
|
||||
import com.loki.lochat.api.service.NickService;
|
||||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.api.service.PunishmentService;
|
||||
import com.loki.lochat.core.registry.ServiceRegistry;
|
||||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.integrations.DiscordIntegration;
|
||||
import com.loki.lochat.managers.AutoMessageManager;
|
||||
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
|
|
@ -59,7 +60,9 @@ public class PluginShutdown {
|
|||
* Сохранить все данные через сервисы
|
||||
*/
|
||||
private void saveAllData(ServiceRegistry serviceRegistry) {
|
||||
if (serviceRegistry == null) return;
|
||||
if (serviceRegistry == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Статистика игроков
|
||||
PlayerService playerService = serviceRegistry.get(PlayerService.class);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.loki.lochat.core.service.mute.MuteHistoryManager;
|
|||
import com.loki.lochat.core.service.mute.strategies.ChatMuteStrategy;
|
||||
import com.loki.lochat.core.service.mute.strategies.MuteStrategy;
|
||||
import com.loki.lochat.core.service.mute.strategies.VoiceMuteStrategy;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -21,6 +22,9 @@ import java.util.List;
|
|||
*/
|
||||
public class ServiceFactory {
|
||||
|
||||
private ServiceFactory() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Создать MuteService со всеми зависимостями
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.filter;
|
||||
|
||||
import com.loki.lochat.core.filter.filters.*;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
@ -80,24 +81,32 @@ public class AdvancedMessageFilter {
|
|||
// 2. Мат
|
||||
if (config.getBoolean("filters.swear.enabled", true) && !canBypassFilter(player, "swear")) {
|
||||
FilterResult swear = swearFilter.filter(player, message);
|
||||
if (!swear.allowed()) return swear;
|
||||
if (!swear.allowed()) {
|
||||
return swear;
|
||||
}
|
||||
message = swear.filteredMessage();
|
||||
}
|
||||
|
||||
// 3. URL фильтры
|
||||
if (config.getBoolean("filters.advertising.enabled", true)) {
|
||||
FilterResult r = urlFilter.filterUrls(player, message);
|
||||
if (!r.allowed()) return r;
|
||||
if (!r.allowed()) {
|
||||
return r;
|
||||
}
|
||||
message = r.filteredMessage();
|
||||
|
||||
r = urlFilter.filterHiddenUrls(player, message);
|
||||
if (!r.allowed()) return r;
|
||||
if (!r.allowed()) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. IP
|
||||
if (config.getBoolean("filters.ip.enabled", true)) {
|
||||
FilterResult r = urlFilter.filterIPs(player, message);
|
||||
if (!r.allowed()) return r;
|
||||
if (!r.allowed()) {
|
||||
return r;
|
||||
}
|
||||
message = r.filteredMessage();
|
||||
}
|
||||
|
||||
|
|
@ -109,13 +118,17 @@ public class AdvancedMessageFilter {
|
|||
// 6. Anti-flood
|
||||
if (config.getBoolean("filters.flood.enabled", true) && !canBypassFilter(player, "flood")) {
|
||||
FilterResult r = floodFilter.filter(player);
|
||||
if (!r.allowed()) return r;
|
||||
if (!r.allowed()) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
// 7. Anti-spam
|
||||
if (config.getBoolean("filters.spam.enabled", true) && !canBypassFilter(player, "spam")) {
|
||||
FilterResult r = spamFilter.filter(player, message);
|
||||
if (!r.allowed()) return r;
|
||||
if (!r.allowed()) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
return FilterResult.ok(message);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.core.filter;
|
|||
import com.loki.lochat.api.filter.MessageFilter;
|
||||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.data.model.ChatMessage;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.api.service.MuteService;
|
|||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.data.model.ChatMessage;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.filter.filters;
|
||||
|
||||
import com.loki.lochat.core.filter.FilterResult;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.filter.filters;
|
||||
|
||||
import com.loki.lochat.core.filter.FilterResult;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
@ -41,15 +42,21 @@ public class SpamFilter {
|
|||
|
||||
// Добавляем в историю (храним последние 10)
|
||||
history.addLast(message);
|
||||
if (history.size() > 10) history.pollFirst();
|
||||
if (history.size() > 10) {
|
||||
history.pollFirst();
|
||||
}
|
||||
|
||||
return FilterResult.ok(null);
|
||||
}
|
||||
|
||||
private int similarity(String a, String b) {
|
||||
if (a.equals(b)) return 100;
|
||||
if (a.equals(b)) {
|
||||
return 100;
|
||||
}
|
||||
int maxLen = Math.max(a.length(), b.length());
|
||||
if (maxLen == 0) return 100;
|
||||
if (maxLen == 0) {
|
||||
return 100;
|
||||
}
|
||||
|
||||
int dist = levenshtein(
|
||||
a.toLowerCase().substring(0, Math.min(a.length(), 50)),
|
||||
|
|
@ -60,7 +67,9 @@ public class SpamFilter {
|
|||
|
||||
private int levenshtein(String a, String b) {
|
||||
int[] dp = new int[b.length() + 1];
|
||||
for (int j = 0; j <= b.length(); j++) dp[j] = j;
|
||||
for (int j = 0; j <= b.length(); j++) {
|
||||
dp[j] = j;
|
||||
}
|
||||
|
||||
for (int i = 1; i <= a.length(); i++) {
|
||||
int prev = dp[0];
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.filter.filters;
|
||||
|
||||
import com.loki.lochat.core.filter.FilterResult;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
package com.loki.lochat.core.filter.filters;
|
||||
|
||||
import com.loki.lochat.core.filter.FilterResult;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.config.ConfigManager;
|
|||
import com.loki.lochat.config.MessageConfig;
|
||||
import com.loki.lochat.core.factory.ServiceFactory;
|
||||
import com.loki.lochat.core.service.*;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
|
|||
|
|
@ -3,10 +3,12 @@ package com.loki.lochat.core.service;
|
|||
import com.loki.lochat.api.service.ChatService;
|
||||
import com.loki.lochat.core.registry.ServiceRegistry;
|
||||
import com.loki.lochat.renderer.EnhancedChatRenderer;
|
||||
import com.loki.lochat.utils.player.DistanceUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
import com.loki.lochat.utils.player.DistanceUtil;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -97,12 +99,15 @@ public class ChatServiceImpl implements ChatService {
|
|||
// ──────────────────────────────────────────────────────────────────────────
|
||||
|
||||
private void loadDisabled() {
|
||||
if (!playersFile.exists()) return;
|
||||
if (!playersFile.exists()) {
|
||||
return;
|
||||
}
|
||||
YamlConfiguration cfg = YamlConfiguration.loadConfiguration(playersFile);
|
||||
for (String uuidStr : cfg.getStringList("global-chat-disabled")) {
|
||||
try {
|
||||
globalChatDisabled.add(UUID.fromString(uuidStr));
|
||||
} catch (IllegalArgumentException ignored) {}
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -123,7 +128,9 @@ public class ChatServiceImpl implements ChatService {
|
|||
|
||||
private void ensureDir() {
|
||||
File dir = playersFile.getParentFile();
|
||||
if (!dir.exists()) dir.mkdirs();
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
private Component toComponent(Object message) {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.core.service;
|
|||
import com.loki.lochat.api.service.MentionService;
|
||||
import com.loki.lochat.config.ConfigManager;
|
||||
import com.loki.lochat.utils.player.PlayerUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -113,8 +114,12 @@ public class MentionServiceImpl implements MentionService {
|
|||
|
||||
@Override
|
||||
public void notifyIfMentioned(String message, Player viewer, Player sender) {
|
||||
if (viewer.equals(sender)) return;
|
||||
if (!configManager.isMentionSoundEnabled()) return;
|
||||
if (viewer.equals(sender)) {
|
||||
return;
|
||||
}
|
||||
if (!configManager.isMentionSoundEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPlayerMentioned(message, viewer)) {
|
||||
String soundName = configManager.getMentionSoundType();
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
package com.loki.lochat.core.service;
|
||||
|
||||
import com.loki.lochat.api.filter.MessageFilter;
|
||||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.api.service.MessageService;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.core.filter.CooldownFilter;
|
||||
import com.loki.lochat.core.filter.MuteFilter;
|
||||
import com.loki.lochat.core.registry.ServiceRegistry;
|
||||
import com.loki.lochat.data.model.ChatMessage;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ import com.loki.lochat.config.MessageConfig;
|
|||
import com.loki.lochat.core.service.messaging.IgnoreService;
|
||||
import com.loki.lochat.core.service.messaging.PrivateMessageService;
|
||||
import com.loki.lochat.core.service.messaging.SpyService;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.loki.lochat.core.service.mute.MutePermissionChecker;
|
|||
import com.loki.lochat.core.service.mute.strategies.MuteStrategy;
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
import com.loki.lochat.utils.format.TimeFormatter;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
@ -82,12 +83,18 @@ public class MuteServiceImpl implements MuteService {
|
|||
|
||||
@Override
|
||||
public boolean isMuted(UUID uuid) {
|
||||
if (uuid == null) return false;
|
||||
if (uuid == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MuteData data = storage.get(uuid);
|
||||
if (data == null) return false;
|
||||
if (data == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isExpired(data)) return true;
|
||||
if (!isExpired(data)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Мут истек - удаляем
|
||||
storage.remove(uuid);
|
||||
|
|
@ -104,8 +111,12 @@ public class MuteServiceImpl implements MuteService {
|
|||
@Override
|
||||
public long getRemainingTime(UUID uuid) {
|
||||
MuteData data = storage.get(uuid);
|
||||
if (data == null) return 0;
|
||||
if (data.getEndTime() == 0) return -1;
|
||||
if (data == null) {
|
||||
return 0;
|
||||
}
|
||||
if (data.getEndTime() == 0) {
|
||||
return -1;
|
||||
}
|
||||
return Math.max(0, data.getEndTime() - System.currentTimeMillis());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,10 @@ package com.loki.lochat.core.service;
|
|||
import com.loki.lochat.api.service.NickService;
|
||||
import com.loki.lochat.config.RatConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.core.service;
|
|||
|
||||
import com.loki.lochat.api.service.PlayerService;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
@ -47,7 +48,9 @@ public class PlayerServiceImpl implements PlayerService {
|
|||
Map<UUID, Long> cooldowns = getCooldownMap(type);
|
||||
Long lastTime = cooldowns.get(player);
|
||||
|
||||
if (lastTime == null) return false;
|
||||
if (lastTime == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
long elapsed = (System.currentTimeMillis() - lastTime) / 1000;
|
||||
return elapsed < cooldownSeconds;
|
||||
|
|
@ -58,7 +61,9 @@ public class PlayerServiceImpl implements PlayerService {
|
|||
Map<UUID, Long> cooldowns = getCooldownMap(type);
|
||||
Long lastTime = cooldowns.get(player);
|
||||
|
||||
if (lastTime == null) return 0;
|
||||
if (lastTime == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
long elapsed = (System.currentTimeMillis() - lastTime) / 1000;
|
||||
return Math.max(0, cooldownSeconds - (int) elapsed);
|
||||
|
|
@ -89,6 +94,8 @@ public class PlayerServiceImpl implements PlayerService {
|
|||
case "global" -> globalChatCount.incrementAndGet();
|
||||
case "local" -> localChatCount.incrementAndGet();
|
||||
case "pm" -> pmCount.incrementAndGet();
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -152,6 +159,8 @@ public class PlayerServiceImpl implements PlayerService {
|
|||
|
||||
private void ensureDir() {
|
||||
File dir = statsFile.getParentFile();
|
||||
if (!dir.exists()) dir.mkdirs();
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@ import com.loki.lochat.api.service.PunishmentService;
|
|||
import com.loki.lochat.config.MessagesConfig;
|
||||
import com.loki.lochat.data.model.BanRecord;
|
||||
import com.loki.lochat.data.model.WarnEntry;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
import com.loki.lochat.utils.format.TimeFormatter;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.*;
|
||||
|
|
@ -48,7 +50,9 @@ public class PunishmentServiceImpl implements PunishmentService {
|
|||
@Override
|
||||
public List<WarnEntry> getWarns(UUID uuid) {
|
||||
List<WarnEntry> list = warns.get(uuid);
|
||||
if (list == null) return List.of();
|
||||
if (list == null) {
|
||||
return List.of();
|
||||
}
|
||||
synchronized (list) {
|
||||
return List.copyOf(list);
|
||||
}
|
||||
|
|
@ -81,8 +85,12 @@ public class PunishmentServiceImpl implements PunishmentService {
|
|||
@Override
|
||||
public boolean isBanned(UUID uuid) {
|
||||
BanRecord b = bans.get(uuid);
|
||||
if (b == null) return false;
|
||||
if (b.isPermanent()) return true;
|
||||
if (b == null) {
|
||||
return false;
|
||||
}
|
||||
if (b.isPermanent()) {
|
||||
return true;
|
||||
}
|
||||
if (b.isExpired()) {
|
||||
bans.remove(uuid, b);
|
||||
saveAsync();
|
||||
|
|
@ -93,7 +101,9 @@ public class PunishmentServiceImpl implements PunishmentService {
|
|||
|
||||
@Override
|
||||
public BanRecord getActiveBan(UUID uuid) {
|
||||
if (!isBanned(uuid)) return null;
|
||||
if (!isBanned(uuid)) {
|
||||
return null;
|
||||
}
|
||||
return bans.get(uuid);
|
||||
}
|
||||
|
||||
|
|
@ -153,11 +163,15 @@ public class PunishmentServiceImpl implements PunishmentService {
|
|||
}
|
||||
|
||||
private void load() {
|
||||
if (!dataFile.exists()) return;
|
||||
if (!dataFile.exists()) {
|
||||
return;
|
||||
}
|
||||
try (Reader r = new InputStreamReader(new FileInputStream(dataFile), java.nio.charset.StandardCharsets.UTF_8)) {
|
||||
Type type = new TypeToken<PunishmentSnapshot>() {}.getType();
|
||||
Type type = new TypeToken<PunishmentSnapshot>() { }.getType();
|
||||
PunishmentSnapshot snap = gson.fromJson(r, type);
|
||||
if (snap == null) return;
|
||||
if (snap == null) {
|
||||
return;
|
||||
}
|
||||
if (snap.warns != null) {
|
||||
for (Map.Entry<String, List<WarnEntry>> e : snap.warns.entrySet()) {
|
||||
try {
|
||||
|
|
@ -173,7 +187,9 @@ public class PunishmentServiceImpl implements PunishmentService {
|
|||
BanRecord br = e.getValue();
|
||||
if (br != null) {
|
||||
br.uuid = id;
|
||||
if (!br.isPermanent() && br.isExpired()) continue;
|
||||
if (!br.isPermanent() && br.isExpired()) {
|
||||
continue;
|
||||
}
|
||||
bans.put(id, br);
|
||||
}
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.service.messaging;
|
||||
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
@ -36,15 +37,21 @@ public class IgnoreService {
|
|||
public boolean addIgnore(UUID player, UUID target) {
|
||||
Set<UUID> ignored = ignoreMap.computeIfAbsent(player, k -> ConcurrentHashMap.newKeySet());
|
||||
boolean added = ignored.add(target);
|
||||
if (added) saveAsync();
|
||||
if (added) {
|
||||
saveAsync();
|
||||
}
|
||||
return added;
|
||||
}
|
||||
|
||||
public boolean removeIgnore(UUID player, UUID target) {
|
||||
Set<UUID> ignored = ignoreMap.get(player);
|
||||
if (ignored == null) return false;
|
||||
if (ignored == null) {
|
||||
return false;
|
||||
}
|
||||
boolean removed = ignored.remove(target);
|
||||
if (removed) saveAsync();
|
||||
if (removed) {
|
||||
saveAsync();
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +70,9 @@ public class IgnoreService {
|
|||
}
|
||||
|
||||
public void load() {
|
||||
if (!ignoreFile.exists()) return;
|
||||
if (!ignoreFile.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(ignoreFile);
|
||||
for (String key : config.getKeys(false)) {
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@ package com.loki.lochat.core.service.messaging;
|
|||
|
||||
import com.loki.lochat.config.MessageConfig;
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
@ -53,7 +55,9 @@ public class SpyService {
|
|||
}
|
||||
|
||||
public void sendToSpies(Player sender, Component message, boolean isGlobal) {
|
||||
if (spyEnabled.isEmpty()) return;
|
||||
if (spyEnabled.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String chatType = isGlobal ? "Global" : "Local";
|
||||
String plainMessage = PlainTextComponentSerializer.plainText().serialize(message);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.google.gson.GsonBuilder;
|
|||
import com.google.gson.reflect.TypeToken;
|
||||
import com.loki.lochat.data.model.MuteData;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.*;
|
||||
|
|
@ -59,7 +60,7 @@ public class MuteDataStorage {
|
|||
}
|
||||
|
||||
try (Reader reader = new FileReader(dataFile)) {
|
||||
Type type = new TypeToken<Map<String, MuteData>>() {}.getType();
|
||||
Type type = new TypeToken<Map<String, MuteData>>() { }.getType();
|
||||
Map<String, MuteData> loaded = gson.fromJson(reader, type);
|
||||
if (loaded != null) {
|
||||
loaded.forEach((key, value) -> {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.core.service.mute;
|
||||
|
||||
import com.loki.lochat.utils.format.TimeFormatter;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -57,7 +57,9 @@ public class VoiceMuteStrategy implements MuteStrategy {
|
|||
}
|
||||
|
||||
private void muteVoiceChat(UUID uuid, boolean mute) {
|
||||
if (voicechatService == null) return;
|
||||
if (voicechatService == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Player player = Bukkit.getPlayer(uuid);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ public class BanRecord {
|
|||
}
|
||||
|
||||
public boolean isExpired() {
|
||||
if (isPermanent()) return false;
|
||||
if (isPermanent()) {
|
||||
return false;
|
||||
}
|
||||
return System.currentTimeMillis() >= until;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.loki.lochat.gradient.listeners.GradientGUIListener;
|
|||
import com.loki.lochat.gradient.listeners.GradientPlayerListener;
|
||||
import com.loki.lochat.gradient.service.GradientService;
|
||||
import com.loki.lochat.gradient.service.PrefixService;
|
||||
|
||||
import org.black_ixx.playerpoints.PlayerPoints;
|
||||
import org.black_ixx.playerpoints.PlayerPointsAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
|
|
@ -113,7 +114,9 @@ public class GradientModule {
|
|||
* Получает отформатированное имя игрока (префикс + ник с градиентом)
|
||||
*/
|
||||
public String getFormattedName(Player player) {
|
||||
if (!enabled) return player.getName();
|
||||
if (!enabled) {
|
||||
return player.getName();
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return prefixService.getFullName(player, data);
|
||||
|
|
@ -123,7 +126,9 @@ public class GradientModule {
|
|||
* Получает отформатированное имя для TAB плагина
|
||||
*/
|
||||
public String getFormattedNameForTab(Player player) {
|
||||
if (!enabled) return player.getName();
|
||||
if (!enabled) {
|
||||
return player.getName();
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return prefixService.getFullNameForTab(player, data);
|
||||
|
|
@ -133,7 +138,9 @@ public class GradientModule {
|
|||
* Получает только градиентный ник (без префикса)
|
||||
*/
|
||||
public String getGradientNick(Player player) {
|
||||
if (!enabled) return player.getName();
|
||||
if (!enabled) {
|
||||
return player.getName();
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return GradientService.applyGradient(player, player.getName(), data);
|
||||
|
|
@ -143,7 +150,9 @@ public class GradientModule {
|
|||
* Получает префикс игрока (кастомный или LuckPerms) с градиентом
|
||||
*/
|
||||
public String getPrefix(Player player) {
|
||||
if (!enabled) return "";
|
||||
if (!enabled) {
|
||||
return "";
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return prefixService.getPrefix(player, data);
|
||||
|
|
@ -153,7 +162,9 @@ public class GradientModule {
|
|||
* Получает суффикс игрока из LuckPerms с градиентом
|
||||
*/
|
||||
public String getSuffix(Player player) {
|
||||
if (!enabled) return "";
|
||||
if (!enabled) {
|
||||
return "";
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return prefixService.getLuckPermsSuffix(player, data);
|
||||
|
|
@ -163,7 +174,9 @@ public class GradientModule {
|
|||
* Получает только LuckPerms префикс
|
||||
*/
|
||||
public String getLuckPermsPrefix(Player player) {
|
||||
if (!enabled) return "";
|
||||
if (!enabled) {
|
||||
return "";
|
||||
}
|
||||
|
||||
GradientPlayerData data = dataManager.getPlayerData(player.getUniqueId());
|
||||
return prefixService.getLuckPermsPrefix(player, data);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.loki.lochat.gradient.config.GradientMessages;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.Command;
|
||||
|
|
@ -125,7 +126,9 @@ public class GradientAdminCommand implements CommandExecutor, TabCompleter {
|
|||
@Override
|
||||
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command,
|
||||
@NotNull String alias, @NotNull String[] args) {
|
||||
if (!sender.hasPermission("gradient.admin")) return new ArrayList<>();
|
||||
if (!sender.hasPermission("gradient.admin")) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
if (args.length == 1) {
|
||||
return Arrays.asList("reload", "info", "setcolor", "setprefix", "coloron", "coloroff",
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.loki.lochat.gradient.commands;
|
|||
import com.loki.lochat.config.RatConfig;
|
||||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.gradient.commands.handlers.color.*;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.gradient.commands;
|
|||
|
||||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.gradient.commands.handlers.prefix.*;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.loki.lochat.gradient.data.GradientPlayerData;
|
|||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.gradient.util.GradientUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.loki.lochat.gradient.config.GradientMessages;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
|
@ -38,7 +39,9 @@ public class PrefixCommandHandler {
|
|||
|
||||
StringBuilder prefixBuilder = new StringBuilder();
|
||||
for (int i = 2; i < args.length; i++) {
|
||||
if (i > 2) prefixBuilder.append(" ");
|
||||
if (i > 2) {
|
||||
prefixBuilder.append(" ");
|
||||
}
|
||||
prefixBuilder.append(args[i]);
|
||||
}
|
||||
String prefix = prefixBuilder.toString();
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.loki.lochat.gradient.config.GradientConfig;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.gui.GradientConfirmGUI;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.loki.lochat.gradient.data.GradientPlayerData;
|
|||
import com.loki.lochat.gradient.gui.GradientConfirmGUI;
|
||||
import com.loki.lochat.gradient.util.GradientUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.loki.lochat.gradient.GradientModule;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.loki.lochat.gradient.config.GradientMessages;
|
|||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.gui.GradientConfirmGUI;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
|
@ -80,7 +81,9 @@ public class PrefixSetHandler implements PrefixSubCommandHandler {
|
|||
}
|
||||
|
||||
private int calculatePrice(Player player, GradientConfig cfg, GradientPlayerData data) {
|
||||
if (player.hasPermission("gradient.bypass.cost")) return 0;
|
||||
if (player.hasPermission("gradient.bypass.cost")) {
|
||||
return 0;
|
||||
}
|
||||
return (cfg.isPrefixOneTimePurchase() && data.isPrefixPurchased()) ? 0 : cfg.getPrefixPrice();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package com.loki.lochat.gradient.config;
|
||||
|
||||
import com.loki.lochat.utils.format.ChatFormatter;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.gradient.data;
|
||||
|
||||
import com.loki.lochat.gradient.config.GradientConfig;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
|
@ -64,7 +65,9 @@ public class GradientDataManager {
|
|||
|
||||
private void loadYamlData() {
|
||||
File dataFile = new File(plugin.getDataFolder(), "gradient-data.yml");
|
||||
if (!dataFile.exists()) return;
|
||||
if (!dataFile.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
FileConfiguration data = YamlConfiguration.loadConfiguration(dataFile);
|
||||
for (String uuidStr : data.getKeys(false)) {
|
||||
|
|
@ -118,7 +121,9 @@ public class GradientDataManager {
|
|||
|
||||
public void savePlayerData(UUID uuid) {
|
||||
GradientPlayerData data = cache.get(uuid);
|
||||
if (data == null) return;
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (useSqlite && sqliteConnection != null) {
|
||||
try (PreparedStatement stmt = sqliteConnection.prepareStatement(
|
||||
|
|
|
|||
|
|
@ -3,10 +3,12 @@ package com.loki.lochat.gradient.gui;
|
|||
import com.loki.lochat.config.RatConfig;
|
||||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.gradient.util.GradientUtil;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -49,7 +51,9 @@ public final class GradientConfirmGUI implements InventoryHolder {
|
|||
}
|
||||
|
||||
private void initInventory() {
|
||||
if (inventory != null) return;
|
||||
if (inventory != null) {
|
||||
return;
|
||||
}
|
||||
this.inventory = Bukkit.createInventory(this, 27,
|
||||
Component.text("Подтверждение", NamedTextColor.DARK_GRAY));
|
||||
setupItems();
|
||||
|
|
@ -128,7 +132,7 @@ public final class GradientConfirmGUI implements InventoryHolder {
|
|||
boolean useLegacyForPreview = true;
|
||||
|
||||
// Если нет кастомного префикса - используем LuckPerms префикс
|
||||
if ((prefixToUse == null || prefixToUse.isEmpty())) {
|
||||
if (prefixToUse == null || prefixToUse.isEmpty()) {
|
||||
String lpPrefix = module.getPrefixService().getLuckPermsPrefix(player, data);
|
||||
if (lpPrefix != null && !lpPrefix.isEmpty()) {
|
||||
// Конвертируем LP префикс в legacy формат
|
||||
|
|
@ -163,7 +167,9 @@ public final class GradientConfirmGUI implements InventoryHolder {
|
|||
* Конвертирует MiniMessage теги в legacy формат
|
||||
*/
|
||||
private String convertToLegacy(String text) {
|
||||
if (text == null) return "";
|
||||
if (text == null) {
|
||||
return "";
|
||||
}
|
||||
// Конвертируем <#RRGGBB> в &#RRGGBB
|
||||
return text.replaceAll("<#([A-Fa-f0-9]{6})>", "&#$1");
|
||||
}
|
||||
|
|
@ -172,7 +178,9 @@ public final class GradientConfirmGUI implements InventoryHolder {
|
|||
* Убирает цветовые коды из строки
|
||||
*/
|
||||
private String stripColors(String text) {
|
||||
if (text == null) return "";
|
||||
if (text == null) {
|
||||
return "";
|
||||
}
|
||||
return text.replaceAll("(?i)(§x(§[0-9a-f]){6}|§[0-9a-fk-or]|&[0-9a-fk-or]|&#[0-9a-f]{6}|<[^>]+>)", "");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.loki.lochat.gradient.data.GradientPlayerData;
|
|||
import com.loki.lochat.gradient.gui.GradientConfirmGUI;
|
||||
import com.loki.lochat.gradient.util.DisplayNameUtil;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
|
@ -31,15 +32,21 @@ public class GradientGUIListener implements Listener {
|
|||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
if (!(event.getInventory().getHolder() instanceof GradientConfirmGUI gui)) return;
|
||||
if (!(event.getInventory().getHolder() instanceof GradientConfirmGUI gui)) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
if (!(event.getWhoClicked() instanceof Player player) || !player.equals(gui.getPlayer())) return;
|
||||
if (!(event.getWhoClicked() instanceof Player player) || !player.equals(gui.getPlayer())) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (event.getRawSlot()) {
|
||||
case RatConfig.GUI_CONFIRM_SLOT -> handleConfirm(player, gui);
|
||||
case RatConfig.GUI_CANCEL_SLOT -> handleCancel(player);
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +83,6 @@ public class GradientGUIListener implements Listener {
|
|||
data.setPrefixEnabled(true);
|
||||
data.setPrefixPurchased(true);
|
||||
data.setLastPrefixChange(System.currentTimeMillis());
|
||||
// Сохраняем существующие цвета если они есть
|
||||
if (gui.getColors() != null && !gui.getColors().isEmpty()) {
|
||||
data.setColors(gui.getColors());
|
||||
data.setColorEnabled(true);
|
||||
|
|
@ -84,6 +90,8 @@ public class GradientGUIListener implements Listener {
|
|||
msg.send(player, price > 0 ? "prefix-success" : "prefix-success-free",
|
||||
"price", String.valueOf(price));
|
||||
}
|
||||
default -> {
|
||||
}
|
||||
}
|
||||
|
||||
FoliaUtil.runEntityTask(module.getPlugin(), player,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.gradient.listeners;
|
|||
|
||||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.utils.platform.FoliaUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.gradient.service;
|
|||
|
||||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
import com.loki.lochat.gradient.util.GradientUtil;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -11,6 +12,9 @@ import java.util.List;
|
|||
*/
|
||||
public class GradientService {
|
||||
|
||||
private GradientService() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Применяет градиент к тексту если у игрока есть цвета
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@ package com.loki.lochat.gradient.service;
|
|||
|
||||
import com.loki.lochat.gradient.config.GradientConfig;
|
||||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
import net.luckperms.api.cacheddata.CachedMetaData;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
@ -128,9 +130,13 @@ public class PrefixService {
|
|||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
if (!prefix.isEmpty()) result.append(prefix).append(" ");
|
||||
if (!prefix.isEmpty()) {
|
||||
result.append(prefix).append(" ");
|
||||
}
|
||||
result.append(nick);
|
||||
if (!suffix.isEmpty()) result.append(" ").append(suffix);
|
||||
if (!suffix.isEmpty()) {
|
||||
result.append(" ").append(suffix);
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
|
@ -149,9 +155,13 @@ public class PrefixService {
|
|||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
if (!prefix.isEmpty()) result.append(prefix).append(" ");
|
||||
if (!prefix.isEmpty()) {
|
||||
result.append(prefix).append(" ");
|
||||
}
|
||||
result.append(nick);
|
||||
if (!suffix.isEmpty()) result.append(" ").append(suffix);
|
||||
if (!suffix.isEmpty()) {
|
||||
result.append(" ").append(suffix);
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ package com.loki.lochat.gradient.util;
|
|||
import com.loki.lochat.gradient.GradientModule;
|
||||
import com.loki.lochat.gradient.config.GradientConfig;
|
||||
import com.loki.lochat.gradient.data.GradientPlayerData;
|
||||
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -38,7 +40,9 @@ public final class DisplayNameUtil {
|
|||
* Конвертирует MiniMessage <#RRGGBB> формат в §x§R§R§G§G§B§B для display name
|
||||
*/
|
||||
private static String convertMiniMessageToLegacy(String text) {
|
||||
if (text == null) return "";
|
||||
if (text == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Конвертируем <#RRGGBB> в §x§R§R§G§G§B§B
|
||||
Pattern pattern = Pattern.compile("<#([0-9a-fA-F]{6})>");
|
||||
|
|
@ -59,7 +63,9 @@ public final class DisplayNameUtil {
|
|||
}
|
||||
|
||||
public static String buildColoredPrefix(GradientModule module, GradientPlayerData data) {
|
||||
if (!data.hasPrefix() || !data.isPrefixEnabled()) return null;
|
||||
if (!data.hasPrefix() || !data.isPrefixEnabled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
GradientConfig cfg = module.getConfig();
|
||||
// ✅ FIX: Убрал stripTrailing() чтобы сохранить пробел из prefix-format
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ public final class GradientUtil {
|
|||
|
||||
char[] chars = text.toCharArray();
|
||||
int length = chars.length;
|
||||
if (length == 0) return text;
|
||||
if (length == 0) {
|
||||
return text;
|
||||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
|
|
@ -61,9 +63,15 @@ public final class GradientUtil {
|
|||
}
|
||||
|
||||
private static Color interpolateMultiColor(Color[] colors, double ratio) {
|
||||
if (colors.length == 1) return colors[0];
|
||||
if (ratio <= 0) return colors[0];
|
||||
if (ratio >= 1) return colors[colors.length - 1];
|
||||
if (colors.length == 1) {
|
||||
return colors[0];
|
||||
}
|
||||
if (ratio <= 0) {
|
||||
return colors[0];
|
||||
}
|
||||
if (ratio >= 1) {
|
||||
return colors[colors.length - 1];
|
||||
}
|
||||
|
||||
double scaledRatio = ratio * (colors.length - 1);
|
||||
int index = (int) scaledRatio;
|
||||
|
|
@ -128,7 +136,9 @@ public final class GradientUtil {
|
|||
|
||||
char[] chars = text.toCharArray();
|
||||
int length = chars.length;
|
||||
if (length == 0) return text;
|
||||
if (length == 0) {
|
||||
return text;
|
||||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.integrations;
|
|||
|
||||
import com.loki.lochat.integrations.discord.DiscordConfig;
|
||||
import com.loki.lochat.integrations.discord.DiscordMessageService;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
|
@ -40,7 +41,9 @@ public class DiscordIntegration {
|
|||
}
|
||||
|
||||
public void sendChatMessage(Player player, String message, boolean isGlobal) {
|
||||
if (!enabled || !config.isChatEnabled()) return;
|
||||
if (!enabled || !config.isChatEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.isGlobalOnly() && !isGlobal) {
|
||||
return;
|
||||
|
|
@ -50,22 +53,30 @@ public class DiscordIntegration {
|
|||
}
|
||||
|
||||
public void sendPlayerJoin(Player player) {
|
||||
if (!enabled || !config.isEventEnabled("join")) return;
|
||||
if (!enabled || !config.isEventEnabled("join")) {
|
||||
return;
|
||||
}
|
||||
messageService.sendPlayerJoin(player);
|
||||
}
|
||||
|
||||
public void sendPlayerQuit(Player player) {
|
||||
if (!enabled || !config.isEventEnabled("quit")) return;
|
||||
if (!enabled || !config.isEventEnabled("quit")) {
|
||||
return;
|
||||
}
|
||||
messageService.sendPlayerQuit(player);
|
||||
}
|
||||
|
||||
public void sendPlayerDeath(Player player, String deathMessage) {
|
||||
if (!enabled || !config.isEventEnabled("death")) return;
|
||||
if (!enabled || !config.isEventEnabled("death")) {
|
||||
return;
|
||||
}
|
||||
messageService.sendPlayerDeath(player, deathMessage);
|
||||
}
|
||||
|
||||
public void sendTestMessage(String message, String senderName) {
|
||||
if (!enabled) return;
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
messageService.sendTestMessage(message, senderName);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.integrations;
|
|||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
@ -78,10 +79,18 @@ public class DiscordWebhook {
|
|||
private JsonObject buildEmbed(String title, String description, String color,
|
||||
String thumbnailUrl, JsonArray fields) {
|
||||
JsonObject embed = new JsonObject();
|
||||
if (title != null) embed.addProperty("title", title);
|
||||
if (description != null) embed.addProperty("description", description);
|
||||
if (color != null) embed.addProperty("color", Integer.parseInt(color, 16));
|
||||
if (fields != null) embed.add("fields", fields);
|
||||
if (title != null) {
|
||||
embed.addProperty("title", title);
|
||||
}
|
||||
if (description != null) {
|
||||
embed.addProperty("description", description);
|
||||
}
|
||||
if (color != null) {
|
||||
embed.addProperty("color", Integer.parseInt(color, 16));
|
||||
}
|
||||
if (fields != null) {
|
||||
embed.add("fields", fields);
|
||||
}
|
||||
if (thumbnailUrl != null) {
|
||||
JsonObject thumb = new JsonObject();
|
||||
thumb.addProperty("url", thumbnailUrl);
|
||||
|
|
@ -106,13 +115,19 @@ public class DiscordWebhook {
|
|||
return CompletableFuture.supplyAsync(() -> {
|
||||
for (int attempt = 1; attempt <= retryAttempts; attempt++) {
|
||||
try {
|
||||
if (sendWebhookSync(json.toString())) return true;
|
||||
if (sendWebhookSync(json.toString())) {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().warning("Discord webhook attempt " + attempt + " failed: " + e.getMessage());
|
||||
}
|
||||
if (attempt < retryAttempts) {
|
||||
try { Thread.sleep(retryDelay); }
|
||||
catch (InterruptedException e) { Thread.currentThread().interrupt(); break; }
|
||||
try {
|
||||
Thread.sleep(retryDelay);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
plugin.getLogger().severe("Failed to send Discord webhook after " + retryAttempts + " attempts");
|
||||
|
|
@ -134,8 +149,13 @@ public class DiscordWebhook {
|
|||
os.write(jsonPayload.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
int code = conn.getResponseCode();
|
||||
if (code == 204) return true;
|
||||
if (code == 429) { plugin.getLogger().warning("Discord webhook rate limited (429)"); return false; }
|
||||
if (code == 204) {
|
||||
return true;
|
||||
}
|
||||
if (code == 429) {
|
||||
plugin.getLogger().warning("Discord webhook rate limited (429)");
|
||||
return false;
|
||||
}
|
||||
plugin.getLogger().warning("Discord webhook returned code: " + code);
|
||||
return false;
|
||||
} finally {
|
||||
|
|
@ -144,12 +164,22 @@ public class DiscordWebhook {
|
|||
}
|
||||
|
||||
public boolean isValid() {
|
||||
if (webhookUrl == null || webhookUrl.trim().isEmpty()) return false;
|
||||
if (webhookUrl == null || webhookUrl.trim().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
String url = webhookUrl.trim();
|
||||
if (!url.startsWith("https://discord.com/api/webhooks/") &&
|
||||
!url.startsWith("https://discordapp.com/api/webhooks/")) return false;
|
||||
if (url.length() < 50) return false;
|
||||
try { URI.create(url); } catch (IllegalArgumentException e) { return false; }
|
||||
!url.startsWith("https://discordapp.com/api/webhooks/")) {
|
||||
return false;
|
||||
}
|
||||
if (url.length() < 50) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
URI.create(url);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.loki.lochat.integrations;
|
|||
|
||||
import com.loki.lochat.LoChat;
|
||||
import com.loki.lochat.api.service.MuteService;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ 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 me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -14,6 +14,8 @@ 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;
|
||||
|
|
@ -48,7 +50,9 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|||
|
||||
@Override
|
||||
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
|
||||
if (player == null) return "";
|
||||
if (player == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
UUID uuid = player.getUniqueId();
|
||||
GradientModule gradient = plugin.getGradientModule();
|
||||
|
|
@ -58,7 +62,9 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|||
case "global_enabled" -> String.valueOf(!chatService.isGlobalChatDisabled(uuid));
|
||||
case "last_pm" -> {
|
||||
Optional<UUID> lastOpt = messagingService.getLastConversation(uuid);
|
||||
if (lastOpt.isEmpty()) yield "";
|
||||
if (lastOpt.isEmpty()) {
|
||||
yield "";
|
||||
}
|
||||
var lastPlayer = Bukkit.getOfflinePlayer(lastOpt.get());
|
||||
yield lastPlayer.getName() != null ? lastPlayer.getName() : "";
|
||||
}
|
||||
|
|
@ -68,7 +74,9 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|||
// Используем TAB формат §x§R§R§G§G§B§B для совместимости с TAB плагином
|
||||
case "gradient_full", "full" -> {
|
||||
Player onlinePlayer = player.getPlayer();
|
||||
if (onlinePlayer == null) yield player.getName() != null ? player.getName() : "";
|
||||
if (onlinePlayer == null) {
|
||||
yield player.getName() != null ? player.getName() : "";
|
||||
}
|
||||
|
||||
// Если gradient модуль выключен — берём только LuckPerms префикс + ник
|
||||
if (gradient == null || !gradient.isEnabled()) {
|
||||
|
|
@ -80,7 +88,9 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|||
}
|
||||
case "gradient_name", "name" -> {
|
||||
Player onlinePlayer = player.getPlayer();
|
||||
if (onlinePlayer == null) yield player.getName() != null ? player.getName() : "";
|
||||
if (onlinePlayer == null) {
|
||||
yield player.getName() != null ? player.getName() : "";
|
||||
}
|
||||
|
||||
if (gradient == null || !gradient.isEnabled()) {
|
||||
yield player.getName();
|
||||
|
|
@ -89,16 +99,24 @@ public class PlaceholderAPIHook extends PlaceholderExpansion {
|
|||
}
|
||||
case "gradient_prefix", "prefix" -> {
|
||||
Player onlinePlayer = player.getPlayer();
|
||||
if (onlinePlayer == null) yield "";
|
||||
if (onlinePlayer == null) {
|
||||
yield "";
|
||||
}
|
||||
|
||||
if (gradient == null || !gradient.isEnabled()) yield "";
|
||||
if (gradient == null || !gradient.isEnabled()) {
|
||||
yield "";
|
||||
}
|
||||
yield gradient.getPrefix(onlinePlayer);
|
||||
}
|
||||
case "lp_prefix" -> {
|
||||
Player onlinePlayer = player.getPlayer();
|
||||
if (onlinePlayer == null) yield "";
|
||||
if (onlinePlayer == null) {
|
||||
yield "";
|
||||
}
|
||||
|
||||
if (gradient == null || !gradient.isEnabled()) yield "";
|
||||
if (gradient == null || !gradient.isEnabled()) {
|
||||
yield "";
|
||||
}
|
||||
yield gradient.getLuckPermsPrefix(onlinePlayer);
|
||||
}
|
||||
default -> null;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.loki.lochat.integrations;
|
||||
|
||||
import com.loki.lochat.LoChat;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
|
@ -57,7 +58,9 @@ public class SkinsRestorerHook {
|
|||
* @return URL текстуры или null
|
||||
*/
|
||||
public String getPlayerSkinTexture(Player player) {
|
||||
if (!enabled) return null;
|
||||
if (!enabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
Object property = getSkinDataMethod.invoke(skinsAPI, player.getName());
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue