screenshot plugin: move level up and quest screenshots to after widget load
Move screenshot to the next game tick after loading the interface. This is needed to fix Hunter as it applies the widget text after it has unhidden the widgets. Co-authored-by: Magic fTail <runecnielsen3132@gmail.com>
This commit is contained in:
@@ -43,6 +43,7 @@ import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
@@ -57,18 +58,16 @@ import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.WidgetHiddenChanged;
|
||||
import net.runelite.api.events.WidgetLoaded;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetID;
|
||||
import static net.runelite.api.widgets.WidgetID.BARROWS_REWARD_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.RAIDS_REWARD_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.CLUE_SCROLL_REWARD_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.LEVEL_UP_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.QUEST_COMPLETED_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.RAIDS_REWARD_GROUP_ID;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
|
||||
import net.runelite.client.Notifier;
|
||||
import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
@@ -134,6 +133,8 @@ public class ScreenshotPlugin extends Plugin
|
||||
|
||||
private Integer raidsNumber;
|
||||
|
||||
private boolean shouldTakeScreenshot;
|
||||
|
||||
@Inject
|
||||
private ScreenshotConfig config;
|
||||
|
||||
@@ -233,6 +234,38 @@ public class ScreenshotPlugin extends Plugin
|
||||
keyManager.unregisterKeyListener(hotkeyListener);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameTick(GameTick event)
|
||||
{
|
||||
if (!shouldTakeScreenshot)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
shouldTakeScreenshot = false;
|
||||
|
||||
String fileName = null;
|
||||
if (client.getWidget(WidgetInfo.LEVEL_UP_LEVEL) != null)
|
||||
{
|
||||
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL);
|
||||
}
|
||||
else if (client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT) != null)
|
||||
{
|
||||
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT);
|
||||
}
|
||||
else if (client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT) != null)
|
||||
{
|
||||
// "You have completed The Corsair Curse!"
|
||||
String text = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT).getText();
|
||||
fileName = text.substring(19, text.length() - 1);
|
||||
}
|
||||
|
||||
if (fileName != null)
|
||||
{
|
||||
takeScreenshot(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChatMessage(ChatMessage event)
|
||||
{
|
||||
@@ -290,29 +323,20 @@ public class ScreenshotPlugin extends Plugin
|
||||
@Subscribe
|
||||
public void loadWidgets(WidgetLoaded event)
|
||||
{
|
||||
if (!config.screenshotKingdom())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (event.getGroupId() == WidgetID.KINGDOM_GROUP_ID)
|
||||
{
|
||||
String fileName = "Kingdom " + LocalDate.now();
|
||||
takeScreenshot(fileName);
|
||||
}
|
||||
}
|
||||
String fileName;
|
||||
int groupId = event.getGroupId();
|
||||
|
||||
@Subscribe
|
||||
public void hideWidgets(WidgetHiddenChanged event)
|
||||
{
|
||||
Widget widget = event.getWidget();
|
||||
|
||||
if (widget.isHidden())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (TO_GROUP(widget.getId()))
|
||||
switch (groupId)
|
||||
{
|
||||
case QUEST_COMPLETED_GROUP_ID:
|
||||
case CLUE_SCROLL_REWARD_GROUP_ID:
|
||||
case RAIDS_REWARD_GROUP_ID:
|
||||
case BARROWS_REWARD_GROUP_ID:
|
||||
if (!config.screenshotRewards())
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case LEVEL_UP_GROUP_ID:
|
||||
case DIALOG_SPRITE_GROUP_ID:
|
||||
if (!config.screenshotLevels())
|
||||
@@ -320,56 +344,31 @@ public class ScreenshotPlugin extends Plugin
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case QUEST_COMPLETED_GROUP_ID:
|
||||
case CLUE_SCROLL_REWARD_GROUP_ID:
|
||||
case BARROWS_REWARD_GROUP_ID:
|
||||
case RAIDS_REWARD_GROUP_ID:
|
||||
if (!config.screenshotRewards())
|
||||
case KINGDOM_GROUP_ID:
|
||||
if (!config.screenshotKingdom())
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
String fileName;
|
||||
|
||||
switch (TO_GROUP(widget.getId()))
|
||||
switch (groupId)
|
||||
{
|
||||
case LEVEL_UP_GROUP_ID:
|
||||
case KINGDOM_GROUP_ID:
|
||||
{
|
||||
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL);
|
||||
fileName = "Kingdom " + LocalDate.now();
|
||||
takeScreenshot(fileName);
|
||||
break;
|
||||
}
|
||||
case DIALOG_SPRITE_GROUP_ID:
|
||||
case RAIDS_REWARD_GROUP_ID:
|
||||
{
|
||||
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT);
|
||||
break;
|
||||
}
|
||||
case QUEST_COMPLETED_GROUP_ID:
|
||||
{
|
||||
Widget textChild = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT);
|
||||
|
||||
if (textChild == null)
|
||||
if (raidsNumber == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// "You have completed The Corsair Curse!"
|
||||
String text = textChild.getText();
|
||||
|
||||
fileName = text.substring(19, text.length() - 1);
|
||||
break;
|
||||
}
|
||||
case CLUE_SCROLL_REWARD_GROUP_ID:
|
||||
{
|
||||
if (clueType == null || clueNumber == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fileName = Character.toUpperCase(clueType.charAt(0)) + clueType.substring(1) + "(" + clueNumber + ")";
|
||||
clueType = null;
|
||||
clueNumber = null;
|
||||
fileName = "Chambers of Xeric(" + raidsNumber + ")";
|
||||
raidsNumber = null;
|
||||
break;
|
||||
}
|
||||
case BARROWS_REWARD_GROUP_ID:
|
||||
@@ -383,26 +382,30 @@ public class ScreenshotPlugin extends Plugin
|
||||
barrowsNumber = null;
|
||||
break;
|
||||
}
|
||||
case RAIDS_REWARD_GROUP_ID:
|
||||
case LEVEL_UP_GROUP_ID:
|
||||
case DIALOG_SPRITE_GROUP_ID:
|
||||
case QUEST_COMPLETED_GROUP_ID:
|
||||
{
|
||||
if (raidsNumber == null)
|
||||
// level up widget gets loaded prior to the text being set, so wait until the next tick
|
||||
shouldTakeScreenshot = true;
|
||||
return;
|
||||
}
|
||||
case CLUE_SCROLL_REWARD_GROUP_ID:
|
||||
{
|
||||
if (clueType == null || clueNumber == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fileName = "Raids(" + raidsNumber + ")";
|
||||
raidsNumber = null;
|
||||
fileName = Character.toUpperCase(clueType.charAt(0)) + clueType.substring(1) + "(" + clueNumber + ")";
|
||||
clueType = null;
|
||||
clueNumber = null;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
if (fileName == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
takeScreenshot(fileName);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,8 @@ import javax.inject.Inject;
|
||||
import static net.runelite.api.ChatMessageType.SERVER;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.WidgetHiddenChanged;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.WidgetLoaded;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID;
|
||||
import static net.runelite.api.widgets.WidgetID.LEVEL_UP_GROUP_ID;
|
||||
@@ -60,7 +61,7 @@ public class ScreenshotPluginTest
|
||||
{
|
||||
private static final String CLUE_SCROLL = "<col=3300ff>You have completed 28 medium Treasure Trails</col>";
|
||||
private static final String BARROWS_CHEST = "Your Barrows chest count is <col=ff0000>310</col>";
|
||||
private static final String RAIDS_CHEST = "Your completed Chambers of Xeric count is: <col=ff0000>489.</col>";
|
||||
private static final String RAIDS_CHEST = "Your completed Chambers of Xeric count is: <col=ff0000>489</col>.";
|
||||
|
||||
@Mock
|
||||
@Bind
|
||||
@@ -121,7 +122,7 @@ public class ScreenshotPluginTest
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRaidsChest()
|
||||
public void testChambersOfXericChest()
|
||||
{
|
||||
ChatMessage chatMessageEvent = new ChatMessage(SERVER, "Seth", RAIDS_CHEST, null);
|
||||
screenshotPlugin.onChatMessage(chatMessageEvent);
|
||||
@@ -142,9 +143,12 @@ public class ScreenshotPluginTest
|
||||
|
||||
assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
|
||||
|
||||
WidgetHiddenChanged event = new WidgetHiddenChanged();
|
||||
event.setWidget(widget);
|
||||
screenshotPlugin.hideWidgets(event);
|
||||
WidgetLoaded event = new WidgetLoaded();
|
||||
event.setGroupId(LEVEL_UP_GROUP_ID);
|
||||
screenshotPlugin.loadWidgets(event);
|
||||
|
||||
GameTick tick = new GameTick();
|
||||
screenshotPlugin.onGameTick(tick);
|
||||
|
||||
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
|
||||
}
|
||||
@@ -162,9 +166,12 @@ public class ScreenshotPluginTest
|
||||
|
||||
assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
|
||||
|
||||
WidgetHiddenChanged event = new WidgetHiddenChanged();
|
||||
event.setWidget(widget);
|
||||
screenshotPlugin.hideWidgets(event);
|
||||
WidgetLoaded event = new WidgetLoaded();
|
||||
event.setGroupId(LEVEL_UP_GROUP_ID);
|
||||
screenshotPlugin.loadWidgets(event);
|
||||
|
||||
GameTick tick = new GameTick();
|
||||
screenshotPlugin.onGameTick(tick);
|
||||
|
||||
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
|
||||
}
|
||||
@@ -182,9 +189,12 @@ public class ScreenshotPluginTest
|
||||
|
||||
assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
|
||||
|
||||
WidgetHiddenChanged event = new WidgetHiddenChanged();
|
||||
event.setWidget(widget);
|
||||
screenshotPlugin.hideWidgets(event);
|
||||
WidgetLoaded event = new WidgetLoaded();
|
||||
event.setGroupId(LEVEL_UP_GROUP_ID);
|
||||
screenshotPlugin.loadWidgets(event);
|
||||
|
||||
GameTick tick = new GameTick();
|
||||
screenshotPlugin.onGameTick(tick);
|
||||
|
||||
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
|
||||
}
|
||||
@@ -202,9 +212,12 @@ public class ScreenshotPluginTest
|
||||
|
||||
assertEquals("Hunter(2)", screenshotPlugin.parseLevelUpWidget(DIALOG_SPRITE_TEXT));
|
||||
|
||||
WidgetHiddenChanged event = new WidgetHiddenChanged();
|
||||
event.setWidget(widget);
|
||||
screenshotPlugin.hideWidgets(event);
|
||||
WidgetLoaded event = new WidgetLoaded();
|
||||
event.setGroupId(DIALOG_SPRITE_GROUP_ID);
|
||||
screenshotPlugin.loadWidgets(event);
|
||||
|
||||
GameTick tick = new GameTick();
|
||||
screenshotPlugin.onGameTick(tick);
|
||||
|
||||
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user