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:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user