timestamp: use less callbacks in script overlays

all of these separate callbacks are error prone to update and hard to
test
This commit is contained in:
Max Weber
2021-05-25 17:08:29 -06:00
committed by Adam
parent adabb68ff1
commit 58e351dca6
5 changed files with 107 additions and 107 deletions

View File

@@ -196,12 +196,14 @@ public class ChatMessageManager
{
final String eventName = scriptCallbackEvent.getEventName();
boolean wrap;
switch (eventName)
{
case "privateChatFrom":
case "privateChatTo":
case "privateChatSplitFrom":
case "privateChatSplitTo":
case "splitPrivChatUsernameColor":
wrap = false;
break;
case "privChatUsername":
wrap = true;
break;
default:
return;
@@ -216,10 +218,17 @@ public class ChatMessageManager
final String[] stringStack = client.getStringStack();
final int stringStackSize = client.getStringStackSize();
// Stack is: To/From playername :
String toFrom = stringStack[stringStackSize - 3];
stringStack[stringStackSize - 3] = ColorUtil.prependColorTag(toFrom, usernameColor);
String fromToUsername = stringStack[stringStackSize - 1];
if (wrap)
{
fromToUsername = ColorUtil.wrapWithColorTag(fromToUsername, usernameColor);
}
else
{
fromToUsername = ColorUtil.colorTag(usernameColor);
}
stringStack[stringStackSize - 1] = fromToUsername;
}
private static Color getDefaultColor(ChatMessageType type, boolean transparent)

View File

@@ -36,7 +36,9 @@ import javax.inject.Inject;
import lombok.Getter;
import net.runelite.api.Client;
import net.runelite.api.MessageNode;
import net.runelite.api.ScriptID;
import net.runelite.api.Varbits;
import net.runelite.api.events.ScriptPreFired;
import net.runelite.client.events.ConfigChanged;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.client.config.ConfigManager;
@@ -62,6 +64,8 @@ public class TimestampPlugin extends Plugin
@Getter
private SimpleDateFormat formatter;
private MessageNode currentlyBuildingMessage = null;
@Provides
public TimestampConfig provideConfig(final ConfigManager configManager)
{
@@ -90,32 +94,59 @@ public class TimestampPlugin extends Plugin
}
@Subscribe
public void onScriptCallbackEvent(ScriptCallbackEvent event)
private void onScriptCallbackEvent(ScriptCallbackEvent event)
{
if (!event.getEventName().equals("addTimestamp"))
if (!"chatMessageBuilding".equals(event.getEventName()))
{
return;
}
int[] intStack = client.getIntStack();
int intStackSize = client.getIntStackSize();
int uid = client.getIntStack()[client.getIntStackSize() - 1];
currentlyBuildingMessage = client.getMessages().get(uid);
}
@Subscribe
private void onScriptPreFired(ScriptPreFired ev)
{
int numStringArgs;
int messagePrefixArg = 0;
switch (ev.getScriptId())
{
case ScriptID.CHATBOX_BUILD_LINE_WITHOUT_USER:
numStringArgs = 1;
break;
case ScriptID.CHATBOX_BUILD_LINE_WITH_USER:
numStringArgs = 2;
break;
case ScriptID.CHATBOX_BUILD_LINE_WITH_CLAN:
numStringArgs = 3;
break;
default:
return;
}
if (currentlyBuildingMessage == null)
{
return;
}
MessageNode messageNode = currentlyBuildingMessage;
currentlyBuildingMessage = null;
String[] stringStack = client.getStringStack();
int stringStackSize = client.getStringStackSize();
int messageId = intStack[intStackSize - 1];
MessageNode messageNode = client.getMessages().get(messageId);
int stringArgStart = client.getStringStackSize() - numStringArgs;
String timestamp = generateTimestamp(messageNode.getTimestamp(), ZoneId.systemDefault()) + " ";
Color timestampColour = getTimestampColour();
if (timestampColour != null)
{
timestamp = ColorUtil.wrapWithColorTag(timestamp, timestampColour);
}
stringStack[stringStackSize - 1] = timestamp;
String segment = stringStack[stringArgStart + messagePrefixArg];
segment = timestamp + segment;
stringStack[stringArgStart + messagePrefixArg] = segment;
}
private Color getTimestampColour()