fairyring: Always run scripts outside of chatbox input callbacks

ChatboxInputManager callbacks are always from a ScriptCallbackEvent so other scripts cannot be ran because runScript is not reentrant
This commit is contained in:
Max Weber
2018-07-29 15:42:55 -06:00
parent 6b045fbb96
commit af6d8b3bd3

View File

@@ -51,6 +51,7 @@ import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.game.ChatboxInputManager; import net.runelite.client.game.ChatboxInputManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
@@ -83,9 +84,11 @@ public class FairyRingPlugin extends Plugin
@Inject @Inject
private ChatboxInputManager chatboxInputManager; private ChatboxInputManager chatboxInputManager;
@Inject
private ClientThread clientThread;
private Widget searchBtn; private Widget searchBtn;
private boolean chatboxOpenLastTick = false; private boolean chatboxOpenLastTick = false;
private boolean clearFilter = false;
private Collection<CodeWidgets> codes = null; private Collection<CodeWidgets> codes = null;
@Data @Data
@@ -198,23 +201,18 @@ public class FairyRingPlugin extends Plugin
{ {
updateFilter(""); updateFilter("");
searchBtn.setAction(1, MENU_CLOSE); searchBtn.setAction(1, MENU_CLOSE);
chatboxInputManager.openInputWindow("Filter fairy rings", "", ChatboxInputManager.NO_LIMIT, this::updateFilter, s -> chatboxInputManager.openInputWindow("Filter fairy rings", "", ChatboxInputManager.NO_LIMIT,
{ s -> clientThread.invokeLater(() -> updateFilter(s)),
// We can't run it right now because scripts can't run other scripts in their callbacks s ->
clearFilter = true; {
searchBtn.setAction(1, MENU_OPEN); clientThread.invokeLater(() -> updateFilter(""));
}); searchBtn.setAction(1, MENU_OPEN);
});
} }
@Subscribe @Subscribe
public void onGameTick(GameTick t) public void onGameTick(GameTick t)
{ {
if (clearFilter)
{
updateFilter("");
clearFilter = false;
}
// This has to happen because the only widget that gets hidden is the tli one // This has to happen because the only widget that gets hidden is the tli one
Widget fairyRingTeleportButton = client.getWidget(WidgetInfo.FAIRY_RING_TELEPORT_BUTTON); Widget fairyRingTeleportButton = client.getWidget(WidgetInfo.FAIRY_RING_TELEPORT_BUTTON);
boolean fairyRingWidgetOpen = fairyRingTeleportButton != null && !fairyRingTeleportButton.isHidden(); boolean fairyRingWidgetOpen = fairyRingTeleportButton != null && !fairyRingTeleportButton.isHidden();