From 3888298827163b3cafb60c4587919802659b2d90 Mon Sep 17 00:00:00 2001 From: Len <40720638+destro174@users.noreply.github.com> Date: Mon, 26 Sep 2022 23:46:50 +0200 Subject: [PATCH] Add Emote to FilterType.java Add EmoteList command. --- .../com/alttd/chat/managers/RegexManager.java | 21 ++++++ .../com/alttd/chat/objects/EmoteList.java | 64 +++++++++++++++++++ .../com/alttd/chat/objects/FilterType.java | 1 + .../java/com/alttd/chat/commands/Emotes.java | 33 ++++++++++ 4 files changed, 119 insertions(+) create mode 100644 api/src/main/java/com/alttd/chat/objects/EmoteList.java create mode 100644 galaxy/src/main/java/com/alttd/chat/commands/Emotes.java diff --git a/api/src/main/java/com/alttd/chat/managers/RegexManager.java b/api/src/main/java/com/alttd/chat/managers/RegexManager.java index 4a85e93..629be05 100755 --- a/api/src/main/java/com/alttd/chat/managers/RegexManager.java +++ b/api/src/main/java/com/alttd/chat/managers/RegexManager.java @@ -3,6 +3,7 @@ package com.alttd.chat.managers; import com.alttd.chat.ChatAPI; import com.alttd.chat.config.RegexConfig; import com.alttd.chat.objects.ChatFilter; +import com.alttd.chat.objects.FilterType; import com.alttd.chat.objects.ModifiableString; import com.alttd.chat.util.ALogger; import net.luckperms.api.cacheddata.CachedPermissionData; @@ -17,11 +18,24 @@ public class RegexManager { private static List chatFilters; private static final Pattern pattern = Pattern.compile("(.)\\1{4,}"); + private static final List emotes = new ArrayList<>(); + public static final List emotesList = new ArrayList<>(); public static void initialize() { chatFilters = new ArrayList<>(); RegexConfig.init(); + loadEmotes(); + } + + private static void loadEmotes() { + emotes.clear(); + for(ChatFilter chatFilter : chatFilters) { + if (chatFilter.getType() != FilterType.EMOTE) return; + + emotes.add(chatFilter); + emotesList.add(chatFilter.getRegex()); + } } public static void addFilter(ChatFilter filter) { @@ -65,4 +79,11 @@ public class RegexManager { return true; } + public static List getChatFilters() { + return chatFilters; + } + + public static List getEmoteFilters() { + return emotes; + } } diff --git a/api/src/main/java/com/alttd/chat/objects/EmoteList.java b/api/src/main/java/com/alttd/chat/objects/EmoteList.java new file mode 100644 index 0000000..aa13531 --- /dev/null +++ b/api/src/main/java/com/alttd/chat/objects/EmoteList.java @@ -0,0 +1,64 @@ +package com.alttd.chat.objects; + +import com.alttd.chat.config.Config; +import com.alttd.chat.managers.RegexManager; +import com.alttd.chat.util.Utility; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.bukkit.Bukkit; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class EmoteList { + + public static final Map emoteLists = new HashMap<>(); + public static final int pageSize = 7; +// public static int pages = RegexManager.getEmoteFilters().size() / pageSize;// TODO reload this when config is reloaded. + + public static EmoteList getEmoteList(UUID uuid) { + synchronized (emoteLists) { + return emoteLists.computeIfAbsent(uuid, k -> new EmoteList()); + } + } + + private int page; + public Component showEmotePage() { + int startIndex = page * pageSize; + int pages = RegexManager.getEmoteFilters().size() / pageSize; + int endIndex = Math.min(startIndex + pageSize, RegexManager.getEmoteFilters().size()); + TagResolver placeholders = TagResolver.resolver( + Placeholder.unparsed("page", String.valueOf(page)), + Placeholder.unparsed("pages", String.valueOf(pages)) + ); + Component list = Utility.parseMiniMessage(Config.EMOTELIST_HEADER, placeholders); + + for (int i = startIndex; i < endIndex; i++) { + ChatFilter emote = RegexManager.getEmoteFilters().get(i); + TagResolver emotes = TagResolver.resolver( + Placeholder.parsed("regex", emote.getRegex()), + Placeholder.parsed("emote", emote.getReplacement()) + ); + list = list.append(Utility.parseMiniMessage(Config.EMOTELIST_ITEM, emotes)); + } + list = list.append(Utility.parseMiniMessage(Config.EMOTELIST_FOOTER, placeholders)); + return list; + } + + public void setPage(int page) { + this.page = Math.min(page, RegexManager.getEmoteFilters().size() / pageSize); + } + + public void nextPage() { + this.page = Math.min(page + 1, RegexManager.getEmoteFilters().size() / pageSize); + } + + public void prevPage() { + this.page -= 1; + this.page = Math.max(page - 1, 0); + } + + +} diff --git a/api/src/main/java/com/alttd/chat/objects/FilterType.java b/api/src/main/java/com/alttd/chat/objects/FilterType.java index 9eaaa6b..b8e299e 100755 --- a/api/src/main/java/com/alttd/chat/objects/FilterType.java +++ b/api/src/main/java/com/alttd/chat/objects/FilterType.java @@ -2,6 +2,7 @@ package com.alttd.chat.objects; public enum FilterType { REPLACE("replace"), + EMOTE("emote"), CHAT("chat"), REPLACEMATCHER("replacematcher"), BLOCK("block"); diff --git a/galaxy/src/main/java/com/alttd/chat/commands/Emotes.java b/galaxy/src/main/java/com/alttd/chat/commands/Emotes.java new file mode 100644 index 0000000..711f26a --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/commands/Emotes.java @@ -0,0 +1,33 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.objects.EmoteList; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class Emotes implements CommandExecutor { + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if(!(sender instanceof Player player)) { // must be a player + return true; + } + EmoteList emoteList = EmoteList.getEmoteList(player.getUniqueId()); + if(args.length > 0) { + try { + int page = Integer.parseInt(args[0]); + emoteList.setPage(page); + } catch (NumberFormatException ignored) { + switch (args[0].toLowerCase()) { + case "next" -> emoteList.nextPage(); + case "prev", "previous" -> emoteList.prevPage(); + default -> {} + } + } + } + player.sendMessage(emoteList.showEmotePage()); + return false; + } +}