chat message manager: support game chat color settings
This will use the configured in-game setting for default chat colors, if configured.
This commit is contained in:
@@ -173,9 +173,9 @@ public enum ChatMessageType
|
|||||||
*/
|
*/
|
||||||
CLAN_CREATION_INVITATION(109),
|
CLAN_CREATION_INVITATION(109),
|
||||||
/**
|
/**
|
||||||
* Clan wars challenge for clans rather than FCs
|
* Challenge offer for the clan tab
|
||||||
*/
|
*/
|
||||||
CLAN_CLAN_WARS_CHALLENGE(110),
|
CHALREQ_CLANCHAT(110),
|
||||||
|
|
||||||
CLAN_GIM_FORM_GROUP(111),
|
CLAN_GIM_FORM_GROUP(111),
|
||||||
CLAN_GIM_GROUP_WITH(112),
|
CLAN_GIM_GROUP_WITH(112),
|
||||||
|
|||||||
@@ -190,7 +190,38 @@ public enum VarPlayer
|
|||||||
/**
|
/**
|
||||||
* {@link NpcID} for the HP HUD
|
* {@link NpcID} for the HP HUD
|
||||||
*/
|
*/
|
||||||
HP_HUD_NPC_ID(1683);
|
HP_HUD_NPC_ID(1683),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Colors for chat messages
|
||||||
|
*/
|
||||||
|
SETTINGS_OPAQUE_CHAT_PUBLIC(2992),
|
||||||
|
SETTINGS_OPAQUE_CHAT_PRIVATE(2993),
|
||||||
|
SETTINGS_OPAQUE_CHAT_AUTO(2994),
|
||||||
|
SETTINGS_OPAQUE_CHAT_BROADCAST(2995),
|
||||||
|
SETTINGS_OPAQUE_CHAT_FRIEND(2996),
|
||||||
|
SETTINGS_OPAQUE_CHAT_CLAN(2997),
|
||||||
|
SETTINGS_OPAQUE_CHAT_GUEST_CLAN(3060),
|
||||||
|
SETTINGS_OPAQUE_CHAT_CLAN_BROADCAST(3192),
|
||||||
|
SETTINGS_OPAQUE_CHAT_IRON_GROUP_CHAT(3191),
|
||||||
|
SETTINGS_OPAQUE_CHAT_IRON_GROUP_BROADCAST(3193),
|
||||||
|
SETTINGS_OPAQUE_CHAT_TRADE_REQUEST(2998),
|
||||||
|
SETTINGS_OPAQUE_CHAT_CHALLENGE_REQUEST(2999),
|
||||||
|
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_PUBLIC(3000),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_PRIVATE(3001),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_AUTO(3002),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_BROADCAST(3003),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_FRIEND(3004),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_CLAN(3005),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_GUEST_CLAN(3061),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_CLAN_BROADCAST(3195),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_CHAT(3194),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_BROADCAST(3196),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_TRADE_REQUEST(3006),
|
||||||
|
SETTINGS_TRANSPARENT_CHAT_CHALLENGE_REQUEST(3007),
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,28 +25,26 @@
|
|||||||
package net.runelite.client.chat;
|
package net.runelite.client.chat;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import net.runelite.api.VarPlayer;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(exclude = {"color", "isDefault"})
|
@EqualsAndHashCode(exclude = {"color", "isDefault", "setting"})
|
||||||
public class ChatColor
|
@AllArgsConstructor
|
||||||
|
class ChatColor
|
||||||
{
|
{
|
||||||
private ChatColorType type;
|
private ChatColorType type;
|
||||||
private Color color;
|
private Color color;
|
||||||
private boolean transparent;
|
private boolean transparent;
|
||||||
private boolean isDefault;
|
private boolean isDefault;
|
||||||
|
@Nullable
|
||||||
|
private VarPlayer setting; // varp for the in-game chat color setting
|
||||||
|
|
||||||
public ChatColor(ChatColorType type, Color color, boolean transparent)
|
public ChatColor(ChatColorType type, Color color, boolean transparent)
|
||||||
{
|
{
|
||||||
this(type, color, transparent, false);
|
this(type, color, transparent, false, null);
|
||||||
}
|
|
||||||
|
|
||||||
public ChatColor(ChatColorType type, Color color, boolean transparent, boolean isDefault)
|
|
||||||
{
|
|
||||||
this.type = type;
|
|
||||||
this.color = color;
|
|
||||||
this.transparent = transparent;
|
|
||||||
this.isDefault = isDefault;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,13 +37,13 @@ import java.util.Objects;
|
|||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.MessageNode;
|
import net.runelite.api.MessageNode;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
|
import net.runelite.api.VarPlayer;
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.events.ResizeableChanged;
|
import net.runelite.api.events.ResizeableChanged;
|
||||||
import net.runelite.api.events.ScriptCallbackEvent;
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
@@ -311,6 +311,86 @@ public class ChatMessageManager
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get the variable holding the chat color from the settings, from script4484
|
||||||
|
private static VarPlayer getSettingsColor(ChatMessageType type, boolean transparent)
|
||||||
|
{
|
||||||
|
if (transparent)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case PUBLICCHAT:
|
||||||
|
case MODCHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_PUBLIC;
|
||||||
|
case PRIVATECHATOUT:
|
||||||
|
case MODPRIVATECHAT:
|
||||||
|
case PRIVATECHAT:
|
||||||
|
case LOGINLOGOUTNOTIFICATION:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_PRIVATE;
|
||||||
|
case AUTOTYPER:
|
||||||
|
case MODAUTOTYPER:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_AUTO;
|
||||||
|
case BROADCAST:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_BROADCAST;
|
||||||
|
case FRIENDSCHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_FRIEND;
|
||||||
|
case CLAN_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CLAN;
|
||||||
|
case TRADEREQ:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_TRADE_REQUEST;
|
||||||
|
case CHALREQ_TRADE:
|
||||||
|
case CHALREQ_FRIENDSCHAT:
|
||||||
|
case CHALREQ_CLANCHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CHALLENGE_REQUEST;
|
||||||
|
case CLAN_GUEST_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_GUEST_CLAN;
|
||||||
|
case CLAN_GIM_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_CHAT;
|
||||||
|
case CLAN_MESSAGE:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_CLAN_BROADCAST;
|
||||||
|
case CLAN_GIM_MESSAGE:
|
||||||
|
return VarPlayer.SETTINGS_TRANSPARENT_CHAT_IRON_GROUP_BROADCAST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case PUBLICCHAT:
|
||||||
|
case MODCHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_PUBLIC;
|
||||||
|
case PRIVATECHATOUT:
|
||||||
|
case MODPRIVATECHAT:
|
||||||
|
case PRIVATECHAT:
|
||||||
|
case LOGINLOGOUTNOTIFICATION:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_PRIVATE;
|
||||||
|
case AUTOTYPER:
|
||||||
|
case MODAUTOTYPER:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_AUTO;
|
||||||
|
case BROADCAST:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_BROADCAST;
|
||||||
|
case FRIENDSCHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_FRIEND;
|
||||||
|
case CLAN_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_CLAN;
|
||||||
|
case TRADEREQ:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_TRADE_REQUEST;
|
||||||
|
case CHALREQ_TRADE:
|
||||||
|
case CHALREQ_FRIENDSCHAT:
|
||||||
|
case CHALREQ_CLANCHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_CHALLENGE_REQUEST;
|
||||||
|
case CLAN_GUEST_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_GUEST_CLAN;
|
||||||
|
case CLAN_GIM_CHAT:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_IRON_GROUP_CHAT;
|
||||||
|
case CLAN_MESSAGE:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_CLAN_BROADCAST;
|
||||||
|
case CLAN_GIM_MESSAGE:
|
||||||
|
return VarPlayer.SETTINGS_OPAQUE_CHAT_IRON_GROUP_BROADCAST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load all configured colors
|
* Load all configured colors
|
||||||
*/
|
*/
|
||||||
@@ -324,13 +404,13 @@ public class ChatMessageManager
|
|||||||
Color defaultTransparent = getDefaultColor(chatMessageType, true);
|
Color defaultTransparent = getDefaultColor(chatMessageType, true);
|
||||||
if (defaultTransparent != null)
|
if (defaultTransparent != null)
|
||||||
{
|
{
|
||||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultTransparent, true, true), chatMessageType);
|
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultTransparent, true, true, getSettingsColor(chatMessageType, true)), chatMessageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color defaultOpaque = getDefaultColor(chatMessageType, false);
|
Color defaultOpaque = getDefaultColor(chatMessageType, false);
|
||||||
if (defaultOpaque != null)
|
if (defaultOpaque != null)
|
||||||
{
|
{
|
||||||
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultOpaque, false, true), chatMessageType);
|
cacheColor(new ChatColor(ChatColorType.NORMAL, defaultOpaque, false, true, getSettingsColor(chatMessageType, false)), chatMessageType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -785,23 +865,32 @@ public class ChatMessageManager
|
|||||||
|
|
||||||
final boolean transparent = client.isResized() && transparencyVarbit != 0;
|
final boolean transparent = client.isResized() && transparencyVarbit != 0;
|
||||||
final Collection<ChatColor> chatColors = colorCache.get(type);
|
final Collection<ChatColor> chatColors = colorCache.get(type);
|
||||||
|
for (ChatColor chatColor : chatColors)
|
||||||
if (chatColors == null || chatColors.isEmpty())
|
|
||||||
{
|
{
|
||||||
return runeLiteFormatMessage;
|
if (chatColor.isTransparent() == transparent)
|
||||||
|
{
|
||||||
|
Color color = chatColor.getColor();
|
||||||
|
|
||||||
|
VarPlayer varp = chatColor.getSetting();
|
||||||
|
if (varp != null)
|
||||||
|
{
|
||||||
|
// Apply configured color from game settings, if set
|
||||||
|
assert chatColor.isDefault();
|
||||||
|
int v = client.getVar(varp);
|
||||||
|
if (v != 0)
|
||||||
|
{
|
||||||
|
color = new Color(v - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace custom formatting with actual colors
|
||||||
|
runeLiteFormatMessage = runeLiteFormatMessage.replaceAll(
|
||||||
|
"<col" + chatColor.getType().name() + ">",
|
||||||
|
ColorUtil.colorTag(color));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final AtomicReference<String> resultMessage = new AtomicReference<>(runeLiteFormatMessage);
|
return runeLiteFormatMessage;
|
||||||
|
|
||||||
// Replace custom formatting with actual colors
|
|
||||||
chatColors.stream()
|
|
||||||
.filter(chatColor -> chatColor.isTransparent() == transparent)
|
|
||||||
.forEach(chatColor ->
|
|
||||||
resultMessage.getAndUpdate(oldMessage -> oldMessage.replaceAll(
|
|
||||||
"<col" + chatColor.getType().name() + ">",
|
|
||||||
ColorUtil.colorTag(chatColor.getColor()))));
|
|
||||||
|
|
||||||
return resultMessage.get();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshAll()
|
private void refreshAll()
|
||||||
|
|||||||
Reference in New Issue
Block a user