From 86ccd53ddb362ecf947cd947f5a6fbd8c348491f Mon Sep 17 00:00:00 2001 From: Stalitsa <kolokotronakos@gmail.com> Date: Tue, 16 Feb 2021 23:22:16 +0000 Subject: [PATCH] Update chat listener for linked items. --- .../custom/service/discord/DiscordBot.java | 2 +- .../discord/listeners/ChatListener.java | 33 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java b/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java index b2e45ab2c5..f2936e508e 100644 --- a/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java +++ b/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java @@ -18,7 +18,7 @@ */ package com.l2jserver.datapack.custom.service.discord; -import com.l2jserver.datapack.custom.service.discord.commands.*; +import com.l2jserver.datapack.custom.service.discord.commands.OnlineCommand; import com.l2jserver.datapack.custom.service.discord.commands.moderation.AbortCommand; import com.l2jserver.datapack.custom.service.discord.commands.moderation.AnnounceCommand; import com.l2jserver.datapack.custom.service.discord.commands.moderation.RestartCommand; diff --git a/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java b/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java index 9924e61978..c051b375fe 100644 --- a/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java +++ b/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java @@ -19,14 +19,20 @@ package com.l2jserver.datapack.custom.service.discord.listeners; import com.l2jserver.datapack.custom.service.discord.DiscordBot; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.events.Containers; import com.l2jserver.gameserver.model.events.EventType; import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChat; import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener; +import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; +import com.l2jserver.gameserver.model.items.type.CrystalType; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.hooks.ListenerAdapter; import java.awt.Color; +import java.text.DecimalFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static com.l2jserver.gameserver.config.Configuration.discord; @@ -36,7 +42,9 @@ import static com.l2jserver.gameserver.config.Configuration.discord; * @version 2.6.2.0 */ public class ChatListener extends ListenerAdapter { - + + private static final Pattern ITEM_LINK = Pattern.compile("[\b]\tType=[0-9]+[\\s]+\tID=([0-9]+)[\\s]+\tColor=[0-9]+[\\s]+\tUnderline=[0-9]+[\\s]+\tTitle=\u001B(.[^\u001B]*)[^\b]"); + public ChatListener() { Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_CHAT, (OnPlayerChat event) -> { EmbedBuilder eb = new EmbedBuilder(); @@ -47,11 +55,30 @@ public class ChatListener extends ListenerAdapter { default -> null; }; if (type != null) { + String replacedText = onShiftItems(event.getActiveChar(), event.getText()); eb.setColor(Color.CYAN); - eb.setTitle("***___" + event.getActiveChar().getName() + "___***"); - eb.setDescription("**" + type + ":** \n ``" + event.getText() + "``"); + eb.setTitle("***___" + type + "___***"); + eb.setDescription("**" + event.getActiveChar().getName() + ":** ``" + replacedText + "``"); DiscordBot.sendMessageTo(eb, discord().getGameChatChannelId()); } }, this)); } + + private static String onShiftItems(L2PcInstance activeChar, String message) { + Matcher matcher = ITEM_LINK.matcher(message); + while (matcher.find()) { + int objectId = Integer.parseInt(matcher.group(1)); + final L2ItemInstance item = activeChar.getInventory().getItemByObjectId(objectId); + DecimalFormat df = new DecimalFormat("#,###"); + long count = item.getCount(); + String enchant = item.getEnchantLevel() > 0 ? " +" + item.getEnchantLevel() : ""; + String name = item.getItem().getItemGrade() != CrystalType.NONE ? item.getItem().getItemGrade().name() + "-" + item.getName() : "" + item.getName(); + final String info = name + enchant + "\n" + (item.isStackable() ? df.format(count) : ""); + message = message.replace(matcher.group(0) + "\b", info); + } + if (message.contains("\b")) { + return message.substring(0, message.indexOf(8)); + } + return message; + } } -- GitLab