#development
1 messages · Page 11 of 1
2026-03-27 11:04:31
Full thread dump OpenJDK 64-Bit Server VM (11.0.27+6 mixed mode):
Threads class SMR info:
_java_thread_list=0x0000013da9e96440, length=44, elements={
0x0000013dff57f800, 0x0000013dff580000, 0x0000013dff577000, 0x0000013dff578000,
0x0000013dff579000, 0x0000013dff5d8000, 0x0000013dff607000, 0x0000013dff60f800,
0x0000013dff770800, 0x0000013da0f1f800, 0x0000013da0f9b000, 0x0000013da0f9e000,
0x0000013da10fd800, 0x0000013da2fc9000, 0x0000013da2fcb000, 0x0000013da2fcd000,
0x0000...
You could use the chat message too
Just throwing it out here, if anyone wants to takeover the supplies tracker plugin be my guest. Having a miserable time with maintaining it, kinda spaghetti and constantly breaking.
am I able to somehow find out what settings people are using with my plugin by the way
I assume not
Not unless you're syncing their config with an external server as part of the plugin itself
👍
if (message.contains("Eye of Ayak has been charged with runes"))
{
configManager.setConfiguration(SuppliesTrackerConfig.GROUP_NAME, SuppliesTrackerConfig.AYAK_USES_TEARS, false);
}```
will this config setting in the plugin itself refresh the config panel?
I'm expecting it to turn the check box off but it isn't
the config panel does not listen to updates, no
if you close and open the config panel it will be updated
there is a message when they are added or the staff is checked
ah
it is just visual?
it doesnt seem to be updating at all
yeah, just visual, the panel itself just doesn't listen to updates
you can always add a breakpoint to see if it fires
k maybe it is working something else somewhere broke
typical for this plugin lol. Edit fixed
what's wrong with RadiusMarkers plugin? couldn't search, and when I disabled it I couldn't reenable it
Look in your logs
They call a method which should be on client thread, without being on the client thread
net.runelite.client.plugins.PluginInstantiationException: java.lang.AssertionError: must be called on client thread
at net.runelite.client.plugins.PluginManager.startPlugin(PluginManager.java:460)
at net.runelite.client.plugins.config.PluginListPanel.startPlugin(PluginListPanel.java:304)
at net.runelite.client.plugins.config.PluginListItem.lambda$new$4(PluginListItem.java:171)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:401)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
Caused by: java.lang.AssertionError: must be called on client thread
at dj.bp(dj.java:40548)
at dj.getWorldLocation(dj.java:23508)
at com.radiusmarkers.RadiusMarkerPluginPanel.filterMarkersAndDo(RadiusMarkerPluginPanel.java:300)
at com.radiusmarkers.RadiusMarkerPluginPanel.rebuild(RadiusMarkerPluginPanel.java:273)
at com.radiusmarkers.RadiusMarkerPlugin.startUp(RadiusMarkerPlugin.java:127)
at net.runelite.client.plugins.PluginManager.startPlugin(PluginManager.java:429)
2026-03-27 13:12:16 CET [AWT-EventQueue-0] ERROR net.runelite.client.RuneLite - Uncaught exception:
java.lang.NullPointerException: null
at net.runelite.client.ui.ClientUI.removeNavigation(ClientUI.java:259)
at net.runelite.client.ui.ClientToolbar.lambda$removeNavigation$1(ClientToolbar.java:52)
at java.desktop/java.awt.event.InvocationEvent.dispatch$$$capture(InvocationEvent.java:313)
I had actually just disabled that plugin, in case that was one of the plugins that caused my client to freeze. if there's an issue like that, there's a chance that might actually be the culprit
Plugin performance monitor eta wen
Whoops didn't mean to keep the @ notification. Hate that it's default enabled.
@ded-shvn I also encountered this issue quite a few times now. I was wondering, are you using the RadiusMarkers plugin by any chance..? Noticed it's broken at the moment. And if not, might be useful to list the names of external plugins you're using. Maybe we can at least pinpoint it to a specific plugin that way. If you do, might be an option to disable it for now and see if it still happens.
Just tossing ideas out there!
uhhhh, what?
what changed in the latest update that you don't have a localplayer after the gamestate changes?
I believe it was always possible for that to happen but because of something in the last game update it happens a lot more frequently now
That's a good question, bunch of plugins broke with that issue after the last update. Lots of nullpointer exceptions
so, do I just put in a null check loop in game tick? like what
this seems highly irregular
That would be a solve for it yeah.
It’s a free check with not much overhead
that means I have to do a callback for all the other init methods as well
Absolutely awful lol hahaha
I wonder if it would work to do a clientThread.invokeLater(() -> {}), whether that will delay the call by like just enough for the localPlayer to get initialized consistently or whatever
I assume that the onGameStateChanged is on the clientThread, so I don't know if it'll immediately fire, in that case it ofc wouldn't work.
Hmmmmmm
The answer is maybe
Looking at the code, it adds it to a list, doens't check if it's on the clientThread when calling invokeLater, so.... Worth a try?
how much does that delay it by
InvokeLater is client tick which is 20ms
You are better off using the invoke later return check
Before it mattered how many players where around you
let me try it again though, maybe it's the moment you click play
No yeah, it's just 12 ticks where you don't exist
stuck in the void
Return true or false in invoke later and it will run again later
^ That could be an option..? Keep invoking later until it returns a localPlayer?
Yes
Hmm. what changed about runelite actors, they aren't despawning like before
or well, it removed their controller, but the model still renders?
hi, can someone have a look at this https://github.com/runelite/plugin-hub/pull/11240 hopefully should fix vasa in chambers
Hopefully should fix healing
Clean up dead code
Hmm, yeah, I can't seem to despawn RuneliteObjects anymore
this update is funky
yeaaaaaah, this ain't my fault
i love it
How are you despawning your RLObjects? I do not appear to be having issues myself
Also you may want more actor-like lighting on your Brassican mages - ambient 64, contrast 850
i think this is probably causing the problems weve been seeing
(this is a joke) radius markers is gone 
wait how does that freeze the client?
calling getLocalPlayer() off thread went from being not ok but in practice probably ok to just straight up not ok
ah
we can add more protection around it
I've tried every method, they don't despawn like before
if that was true, wouldnt lootbeams be totally broken?
i would maybe think theres a ton of plugins calling getLocalPlayer off thread?
idt there's a reasonable way to check that though
at worst i can make it just throw
it already asserts now, just the assets arent on on release
which is how he found it
oh god
[ https://github.com/Skretzo ] [ @deft hatch 341651963139588098 ] skretzo#0
Can you link your gh? I need to see what you're doing. I'm not having trouble on my end, and I suspect lootbeams aren't either
oh cool
Oh like the plugin you're working on, where the code is
oh wait, that's the wrong one
I just typed vitality in the bar and that's the first that came up lol
I just setActive(false) before, and no problem
I don't use an animation controller, but that wasn't a problem before
Isn't there a way to reduce the flashing when resizing the client in stretched mode? I probably get bothered disproportionately by it, but it's always bugged me
It looks like you can see 3 distinct sizes being shown while dragging
It appears that you only despawn them once you run outside a certain range. Are you intending to despawn them any other way (ie. after being around for X seconds)? Because this appears to be working as intended
Hmm. I'm calling the despawn at two different spots. I'm removing it from my lists the same as I'm despawning them
What is the intended behaviour? As in, when are you trying to despawn these objects?
if you run out of range, and if they haven't had line of sight
I'm not sure why they're getting removed from the list and not despawning at the same time
Ohhhh, I think I know why...
I'm trying to PR my plugin and I get:
- Use of javax.sound.sampled.LineUnavailableException is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
- Use of javax.sound.sampled.UnsupportedAudioFileException is not allowed: Use of javax.sound, use net.runelite.client.audio.AudioPlayer instead
Even though
- The plugin I forked off of has it...?
- I don't understand how else I'm going to deal with those exceptions with just AudioPlayer when even the documentation points to javax.sound?
which pr?
use of AudioPlayer isnt strictly required, based on what youre doing it wont satisfy all cases so exceptions can be made. However distributing sounds from GTA is likely not something we can do, i expect them to be copyrighted
Damn. Too true.
it looks like youre just having them download at runtime though so maybe that skirts the copyright distribution thing
It's... custom
Hopefully you figured it out. Btw, you should make your own hitsplat overlay class. Whatever I just tried to run did not want to run without excising every hitsplat reference.
You can see how I do my own hitsplats here: https://github.com/ScreteMonge/creators-kit/blob/master/src/main/java/com/creatorskit/programming/HitsplatOverlay.java
that's what I'm currently working on
I had to update gradle to see the changed classes, then found the features didn't work
if a pull request is merged, can I just edit and have it re-evaluated, or do I do a new pull request
new pull request
ddf12d7 Update chanceman-tracker-runelite-sync (#11095) - chanceman-tracker
93645a4 Update wintertodt-scouter to v1.2.2 (#11231) - Nouser
Hello, what's the general waiting time for a maintainer review on a new plugin PR? In no rush to have mine reviewed but would love to know whether I should expect days/weeks/months 😅
Right now usually at least a couple weeks at a minimum
Thanks!
@deft hatch just making sure you saw this
so im going to fix getLocalPlayer() to be ok to call off thread
how, just cache the result every game tick / client tick?
no i just made the client code threadsafe
or well
i can fix it to not corrupt the client, ever
Would that resolve the issue of it being null in the onGameStateChanged event when it changes to logged_in?
Or just make it so that it doesn't need to be called on the client thread?
no
I think that it still isnt necessarily safe to call since it might throw sometimes
but i can fix it to not corrupt the client data structures so that it wont send the client in an infinite loop like it is doing now
Ohhhh I just realized there's 2 different problems there! 1 is the one you're fixing right now, the other is the localPlayer being null. That one we still gotta figure out how to handle cleanly
localplayer being null isnt really a problem, its a behaviour change from an engine update
@thorn grotto is tool required broken atm? seeing some stuff on reddit about it
It's come up a couple times in support too
oh is it very broken
No, I dont use radius markers, and @aHooder I will make a complete dump and get back to you in a bit 😄
not that i know of
over the last year or something ive gotten three reports of "occasional" errors in logs
if you can link the reddit thread that would be nice
Its been preventing people from interacting with resources afaik
Depends on how breaking that is to you
Can you run with asserts (add -ea to jvm args) and see if any of your plugins throw?
ill make a fix for something i noticed that might cause the errors at least
sure if you dont want to wait an hour or whatever
you can just undisable it when patched right
Type
Incorrect behavior
Operating System
None
OS Version
No response
Bug description
The Tracking of hp to reset is bugging and not registering some hits
Screenshots or videos
No response
RuneLite version
runelite version 1.12.22
launcher version 2,7,6
Logs
No response
Support for hub plugins should be directed to the author of the plugin.
You can find the support link by searching for the plugin in the Plugin Hub panel and clicking the ? button on the plugin, or by right-clicking the plugin in the plugin panel and clicking the Support menu option.
oops i opened itemid in intellij and it froze
anybody know if there's a way to detect when the game forces you to overhead chat something? for example chop chop, for camelot
as opposed to someone just typing that out manually
does someone know off top of their head what needs fixing, assuming its the hitsplat update
Hidden hitsplats dont have events anymore afaik
is it core fix that was mentioned earlier that will be required
That's for getLocalPlayer not the hitsplat api
No, it just changed
kk ill have a look i suppose
uh can anyone reproduce tool required issue on their client? i cant
I can check, I think I turned it off actually cause it kept clogging my logs with errors 😬
yeah if anyone can reproduce it on release and confirm https://github.com/runelite/plugin-hub/pull/11245 fixes it that would be goated
i saw in support someone had it consistently happen in mlm but i dont have members rn
This is probably going to be fixed by a hitsplat patch I’m doing
Atm it is dropping some events which is breaking some things
lovely, thanks bossman
Thank you. Can maybe fix it tomorrow
Update: Also happens when I launch in safe mode :-(
Checking out the older commit it's throwing errors about the null item which is definitely fixed by your changes. I'm not seeing the issue where it seems to hide menu entries when it shouldn't though. Tested a bit in mlm
ok ill take that, thanks a lot
The issue occurs when you login (maybe only your first login?) by a resource
immediately fixes on tool equip or plugin off->on
logic error not an actual printed one
ItemContainerChanged doesn't post on login/logout, idk if it used to but thats what causes it
bruh, great ty
np
are you going to fix it
Yea
great, thanks. though i guess the plugin is gonna be slightly broken til then
It's an interface now I think. You need a class implementing it
I had to do the same to fix mine. Speaking of which, I only need it approved before April
Ooof my Barrows door plugin broke. It's been a few years since I've worked on Runelite at all. Ill spend tonight reviewing the submission process.
i am curious why it broke, its possible it is a client bug maybe
Not sure at all, all of a sudden I'm seeing activity for it. https://github.com/hansjm10/Barrows-Door-Highlighter/issues/2
yeah ive seen a number of complaints
Haven't spent more than 2 minutes lol like I said I just found out.
theres some AI crap someone commented on this
Yeah I scrolled past that
its possible that getActions() is returning a 0 length array now maybe. check and see if it spits any errors when running
Ill poke around tonight after work on it, but that is what it sounds like.
https://github.com/hansjm10/Barrows-Door-Highlighter/pull/3/changes oh yea theres a pr
It's intentional as we cannot guarantee that the NPC you tagged, will be the same one after a game update.
Two problems with that argument:
- You could still at least have the tag persist until the next system update, instead of until closing RuneLite.
- How often do these NPC ID changes actually happen? What if, upon tagging a specific instance of an NPC, the plugin also took note of the NPC's name, and only voided the tag when the ID is held by an NPC with a different name? Sure, the ...
index?
yes thank u
- It's not NPC id it's the NPC index, which can change on every game update as I said
This change isn't released yet right? It will come with 1.12.23?
it might be 22.1 or 2 or whatever but yeah
Ok good. Then that explains my issue with the wom plugin.
Yes, it can change on updates, but as I said, how often does it actually change on updates? And regardless, comparing names would allow for only some index-based tags to be "forgotten" every game update, instead of all index-based tags.
Users would love to periodically have some of their tags just get forgotten at random 🙃
yhup
I think it changes sometimes very often
Maybe rev update?
Security Report: Dylib Injection via DYLD_INSERT_LIBRARIES
Severity: High (CVSS 9.3)
Platform: macOS
Affected: RuneLite Launcher 2.7.6 (macOS build)
Summary
The macOS RuneLite launcher binary is signed with the com.apple.security.cs.allow-dyld-environment-variables entitlement, which allows arbitrary dylib injection via the DYLD_INSERT_LIBRARIES environment variable. An attacker with local access can inject malicious code that runs in the context of RuneLite.
Additi...
Reported by Hunter CVE Scanner
This plugin mutes things like that, if you want to take a look at how they check for that: https://github.com/LeeT96/public-chat-and-npc-overhead-remover/tree/master/src/main/java/com/PublicChatAndNPCOverheadRemover
Manual strings isn't really a detection method of forced chat
Probably anytime they change a spawn on server, so could be any update
Yes, it can change on updates, but as I said, how often does it actually change on updates? And regardless, comparing names would allow for only some index-based tags to be "forgotten" every game update, instead of all index-based tags.
They can change very often, whenever they add or remove a spawn on a preceding map square
I've helped refactor a different plugin that was tanking my fps from 120fps down to 50fps due to the plugin running about 5 different 3-5 layers-deep for-loops on every frame. It would be cool to see a plugin performance monitor. My main questions would be what types of metrics should it track to evaluate the performance of a plugin? And if we can capture data like number of calls to X and Y internal services, how can we quantify the performance impact of that. Hmm...
there is a profiler in the debug plugin
intellij ultimate's profiler is pretty cool
but also, just don't do stupid stuff per frame basically
and you will performance
@random narwhal can you see if /Applications/RuneLite.app/Contents/MacOS/RuneLite is notarized? I think it should be right, or do we only notarize the dmg?
It is not notarized correctly
spctl -a -vvv /Applications/RuneLite.app
/Applications/RuneLite.app: a sealed resource is missing or invalid
codesign --verify --deep --strict --verbose=2 /Applications/RuneLite.app
/Applications/RuneLite.app: a sealed resource is missing or invalid
file added: /Applications/RuneLite.app/Contents/Resources/null-ignored.json
file added: /Applications/RuneLite.app/Contents/Resources/settings.json
file modified: /Applications/RuneLite.app/Contents/Resources/config.json
mm can you check some of the older launcher builds?
is it not notarized correctly or is it just not notarized at all?
It seems like it was signed but then because data is written to those three files in Resources the signing is broken. I can try a fresh install
codesign --verify --deep --strict --verbose=2 /Applications/RuneLite.app
/Applications/RuneLite.app: valid on disk
/Applications/RuneLite.app: satisfies its Designated Requirement
what is null-ignored lol
After launching a fresh install it does break the signing
open /Applications/RuneLite.app
~
❯ codesign --verify --deep --strict --verbose=2 /Applications/RuneLite.app
/Applications/RuneLite.app: a sealed resource is missing or invalid
file modified: /Applications/RuneLite.app/Contents/Resources/config.json
is there a recommended way to have config.json be updated but also not break signing? put it somewhere else?
Yea just write it outside /Applications/RuneLite.app
cant do that really
I learned of that tool and promptly used it to profile issues I found in wasted bank space plugin, which was my first foray into contributing to a plugin: https://github.com/mcgeer/WastedBankSpace/issues/84
i havent looked at the sidebar thing in a couple days, have you worked on it any
other than that one message you sent before, i did see that
Something like Chrome/Windows Task Manager. CPU %, GPU %, and Memory Usage.
Yea but annoying to read 😔 Or perhaps I'm not skilled enough at doing so cause I always have to dig to find what I'm looking for.
2a5f04b API docs for 1.12.22.1 - RuneLite updater
ff380e4 Release 1.12.22.1 - RuneLite updater
You changed something, Adam?
i changed a lot
is the itemcontainerchanged event fixed 
Thanks for the quick merge. It is a popular one lol
yeaaaaaaah
i just saw you are missing overlayManager.remove(barrowsDoorHighlighterOverlay) on shutdown
awesome, tyvm 
i like the thought that nobody ever felt it necessary to turn the plugin off while doing barrows
so nobody noticed it
It clears the doors on shutdown so I don't think you'd really notice
mmmmmmm
Well thanks! Hopefully it goes another 4 years without being touched lol
what are the odds I can stop procrastinating a mostly-swing rework on my plugin and submit it in time to be reviewed before leagues? 😰
Why procrastinate fun?
unironically i've been too busy playing the game lately
Okay, so we're left with this:
comparing names would allow for only some index-based tags to be "forgotten" every game update, instead of all index-based tags.
You're both heavily downplaying this partial solution, and also ignoring my first point.
they gotta add twitch emotes to github
i gotta reply to that with the go gopher dancing
yeah
You could still at least have the tag persist until the next system update, instead of until closing RuneLite.
We just don't have a way to do that.
comparing names would allow for only some index-based tags to be "forgotten" every game update, instead of all index-based tags.
This might work
no, I haven't. I wanted to hear your thoughts on the reported behaviors before I integrated your changes into my branch, just in case you still wanted to tweak things. I'll work on getting your changes integrated in tonight/tomorrow
This was reverted an hour ago but for some reason it's still disabled on the PH?
no
I just restarted my client too 🤔
use the release
I didn't refresh gradle 🤦♂️
you should really just stop trying to provide feedback when your using custom builds
If only dev tools weren't disabled on stable 😔
local man hasnt learned you can build a shaded jar yet
I'm not that smart, I thought that was obvious by now
Ever since working on my plugin for Random Event plugin I've been running directly from IntelliJ lmao. Mainly cause I've needed to test changes, and it being a random event doesn't help.
You don't even need to build https://repo.runelite.net/net/runelite/client/1.12.22.1/client-1.12.22.1-shaded.jar
that wont have a snapshot version though
cant have issues if you just dont play the game /s
the only thing i miss about playing the game is sending thousands of "wrong area" slayer chat messages when barraging jellies, straight to cook's inbox
but then the plugin started crashing me cuz of an assert and i was sad
You could still at least have the tag persist until the next system update, instead of until closing RuneLite.
We just don't have a way to do that.
You don't have a way to make it persist across RuneLite restarts, or you don't have a way to differentiate between "until the next game update" and "forever"? The former I find completely impossible to believe, and the latter would mean you "should" (using the existing logic) void the tag upon logging out instead of closing RuneLite.
Ke...
You could still at least have the tag persist until the next system update, instead of until closing RuneLite.
We just don't have a way to do that.
You don't have a way to make it persist across RuneLite restarts, or you don't have a way to differentiate between "until the next game update" and "forever"? The former I find completely impossible to believe, and the latter would mean you "should" (using the existing logic) void the tag upon logging out instead of closin...
i was just gonna say we dont want to add features that sometimes dont work
just persisting the tag forever would still be better than the current system: tags getting messed up every game update is less bad than tags disappearing when RuneLite closes.
I feel like exactly the opposite is true imo
I think the storing the name with the id would do some weird stuff with dynamic npc spawns
idk
yeah one is very predictable and well defined, the other is not
yeah, like if you marked a specific npc that didn't have a lot of duplicates next to it, it would essentially rng get deleted by game updates
which seems odd
Just the inconsistency of the behavior would drive me insane
put it on the hub
oh yeah round 2 here we go
the readme/issues link is not working for this plugin https://runelite.net/plugin-hub/show/inferno-tracker
oh there is a space here commit= fdf72a918c728d2c425ca8acfc6b65d59ede1737 hm
Wouldn't this just occasionally result in a different copy of the same monster being highlighted due to a very small index change
yes
What would dictate the left click interaction with a bank placeholder? A script?
yes. the bank scripts
Type
Incorrect behavior
Operating System
Windows
OS Version
Windows 10 Pro 64-Bit Version 22H2 OS Build 19045.6282
Bug description
Pre-submission edit: *As I spent time putting together all the information for this issue, and logged out of the game to obtain the client.log and launcher.log files, the XP Updater plugin properly updated my XP. So, whilst this issue appears to now be resolved ... it was not working prior, and I do feel a need to submit this just in...
As you realized, it was previously broken. It was fixed in c88a0d1f5cb8c59e04364a876856496d86010e9f
Oh, I see, thank you for that, @ldavid432. I guess I should have taken a look at the commit history before posting this, lol.
So, an update for those who are interested. unfortunately not a fun update.
From a primitive functionality perspective, this is fully complete while having bugs. This feature needs to either be entirely a core runelite addition, or have a combination of a plugin plus a few core encapsulation changes. I used Claude code (AI) to assist and do the majority of the development work while rigorously testing functionality throughout. The runlite dev team is very hostile against AI, especially for ...
Hey, asked a few days ago but didnt really get any advice. was really hoping someone can point me in the right direction at least
trying to hide a menu entry when a regex of string appears (hiding menu at 10/50 slayer task streaks). I can get choosing the 10 or 50 to hide it, but it always hides the menu option when choosing 10/50, Off by default doesnt hide it.
been messing around for a few days but still cant seem to figure it out myself .
id post code but dont wanna spam the chat, is there a spoiler tag i can use? - if any helpers are there at least lol
You can link the code on github
think i did it right, just took the troublesum part from the classes into one, not sure if you would need the entire code or not, if so ill update
https://github.com/DamnLol-GIT/TempCodeMazchna
Just by the way to share temporary stuff on github you can use gists https://gist.github.com/
this seems like it should work
other that i guess it will remove all of the menus
yeah it completely removes the mazchna menu if i have 10/50 chosen in my off/10/50 config, just cant seem to get it only for 10 or 50 lol
in my config, i have an option to choose between off/10 or 50, so if you get a task streak of 29/39/49 etc and have it set to 10, it will hide the menu. if i set to 50, it hides at 49/99s. but right now if i have it on 10 or 50, it always hides the menu, regardless of the task streak
thats because there is no code to check the task streak
yeah thats my issue haha, badly worded i guess, i cant figure out how to add that part
i think there are varbits for the task streak? maybe?
oh maybe, i was using a pattern regex since i did that for checking tasks npc names
ill try looking into varbits, i was just trying to use:
private static final Pattern SLAYER_TASK_STREAK_10 = Pattern.compile("You've completed (\\d+2) tasks in a row and currently have a total of (\\d+) points.");
private static final Pattern SLAYER_TASK_STREAK_50 = Pattern.compile("You've completed (\\d+(49|99)) tasks in a row and currently have a total of (\\d+) points.");
VarbitID.SLAYER_WILDERNESS_TASKS_COMPLETED and VarbitID.SLAYER_TASKS_COMPLETED
ive tried using && Pattern.matches but it expects a string
i think your problem is you just dont know java at all
correct i dont lol, i just started with my last plugin and have been learning by looking
used to dabble in python and c++ but that was a while back
Hello, I'm not sure where to ask this, but I've been wanting to build a standalone js app to try out bank layouts. Anyway, I'm not sure how I would get the assets of item icons in osrs, I've been researching a bit but haven't found any good solutions, any ideas?
Yeah kind of, I wanted to build it mostly for fun anyway and to learn, but I also want it to look exactly like an osrs bank. Anyway, the problem is getting the images of the items (even if I would build something else), any idea how they did it?
Will check it out later, thanks
Create, save and share banktag layouts. Import/export, choose thumbnails and edit rows.
Or rather a lot of prompting did. 🫣
The websites I found worked for the hub layouts but not core’s.
And I got the images from the wiki.
https://github.com/weirdgloop/osrs-dps-calc/blob/main/scripts/generateEquipment.py the wiki dps calc repo shows how they got the images for it
Nice, thanks 🙏
I believe I'm having a similar issue, but I can't be certain. Whilst I also see 12fps, mine seems to shift between 8fps and 10fps more often. Also, rather than being random or sudden, mine seems to happen exclusively when the 'Skills' tab is open, and exclusively after reaching five hours in a single session. This started occurring recently (the past week-ish), and it doesn't always happen; sometimes I go a day or two without it happening.
However, when it does happen, I notice that a sin...
UPDATE: I haven't had the freezing issue since I made the post, I will make a dump once it takes place again, because now I HAVE to know what the cause is. It's makin me paranoid
It was most likely patched in 1.12.22.1 where I fixed some thread safety issues
Type
Incorrect behavior
Operating System
Windows
OS Version
Windows 11
Bug description
The built-in XP Updater plugin no longer seems to automatically refresh stats on https://wiseoldman.net since the latest game update. I have not checked the other two services.
I actively keep an eye on my Wise Old Man status, and noticed it wasn't refreshing on logout like it used to. At first I thought it was just a one-off glitch or something, but it has now consistently failed to...
This should have been fixed in 1.12.22.1, please check that version.
Ah, apologies, I must've missed that. Will try in the morning.
._.
2be1c4e update random-event-helper to v3.4.0 (#11268) - Infinitay
a1e6ed1 Update white-knight-rank to v1.0.5 (#11255) - gtjamesa
Thanks
Security Vulnerability Report
Severity: Critical (CVSS 9.3)
Type: CWE-269 — Improper Privilege Management
Platform: macOS
Summary
The RuneLite macOS application includes the com.apple.security.cs.allow-dyld-environment-variables entitlement, which allows attackers to inject arbitrary dynamic libraries via the DYLD_INSERT_LIBRARIES environment variable.
Impact
A local attacker can inject malicious code into the RuneLite process by setting DYLD_INSERT_LIBRARIES...
I just tried, and verified that my RuneLite was on 1.12.22.1 and it was still not working as well.
Hey all; I've done some runelite dev in the past, but I haven't worked on the website before. I was trying to add the missing coral patches to the website, but I got stuck immediately -- it builds fine, but if I try to login, I get an api error (attached pic) and I can't work out any way to progress from here with my much more limited knowledge of web dev. help would be very appreciated 🙇♀️
its kind of a pain to update the farming patches
I have a script for it, I guess I forgot to do that after sailing
Ah! That would be super nice
The coral patch already has varbits and everything set up in runelite so I just assumed it would be fairly easy to plug it in
though I guess I don't have membership right now so testing would have been annoying
there is a special version of some tool you have to run on a modified version of the farming tracker sources and it will spit out js for the website
scary......
oh no, if you preload arbitrary code it can run arbitrary code
yeah I'm trying to decide if that is a real thing, macos has a slightly more sophisticated security model
also he opened the same issue twice
this requires someone downloading a malicious dylib and then also running a custom terminal command that clearly includes the malicious dylib
yes
dumb
yes
also
> we follow a coordinated disclosure policy
> opens public issue as first contact
opens a second public issue as second contact
so i managed to get my code to work to finally hide a menu like i wanted, i got it working with 2/4 regexs, but the other 2 wont pick up. i swapped the pattern name of the non-working ones to the working ones, same results, 2/4 (the same ones) are working. That indicates an issue with the pattern .. right? because ive triple checked the pattern even input it in some regex checkers on google and it all says it should be right
whats the pattern
You've completed ([\d,])7 tasks and received . Slayer master.
oh that didnt look right on the paste
that text contains color tags, are you stripping them correctly?
surround with backticks `
color tags? i wasnt aware, i was just using the same pattern as my other working ones
You've completed ([\d,]*)7 tasks and received .* Slayer master\.
the actual text is usually i.e. You've completed <col=ff0000>7</col> tasks...
which tells the widget renderer to show the number in red
you need to sanitize the text with Text#removeTags first, or include the colour tags in your regex
you can dump the message text to console with log.debug and it'll include the tags
im kind of confused though, cause it works in the first two of my patterns, they come from the same source, same color etc, this is one of the 2 that work
private static final Pattern SLAYER_TASK_STREAK_010 = Pattern.compile("You've completed ([\\d,]*)7 tasks in a row and currently have a total of ([\\d,]+) points\\.");
your regex makes the number have to end with a 7
thats right, this is the current text im getting in the chat:
You've completed 1,947 tasks and received 6 points, giving you a total of 19; return to a Slayer master.
just have it set to 7 for testing atm
what's an example of text it won't match
it's the same text, two different patterns
is this also a typo? should be \\d not \d
oh good eye
i dont know how i missed that considering i was looking at this (https://regexper.com/ is awesome)
this is why i always copy from the Code Generator part of regex101 lol, it fixes the escapes for me
checking my code it seems it didnt copy it into disc properly it is still \d
weird cant type double \
double \ escapes the character so it just puts one
discord is using the first \ to escape the second ^
\\d is \\\\d
gotcha, but it is \\d in my code
hmmst
maybe the .* is being too greedy or something, what if you .*?
if it works on regex101 it should work though
thats where i was checking it out yeah, said it should work
with all the miscopying can you just screenshot your ij lol
maybe this will be easier for ya https://gist.github.com/DamnLol-GIT/472edde4c255fd9115b9632288555df0
what if you did (?:<.*?>)?([\d,]*(49|99))(?:<.*?>)?
to just skip any html coloring tags in case they exist; ideally you'd strip them in a better way but worth a test
removeTags is at the top of the method
So It Is.... but I can't think of any other reason this would be failing
so im not crazy thinking that it should be working? lol
you're setting lastStreakMessage on from 4 patterns but only checking 2 of them in onMenuOpened?
(not clear to me what is or isnt working)
you have two onMenuOpeneds?
oh true i did not scroll down
it has 'Off', 'Ten', 'Fifty' , off turns it off properly, the ones thats work is the first two patterns
private static final Pattern SLAYER_TASK_STREAK_010 = Pattern.compile("You've completed ([\\d,]*)7 tasks in a row and currently have a total of ([\\d,]+) points\\.");
private static final Pattern SLAYER_TASK_STREAK_050 = Pattern.compile("You've completed ([\\d,]*(49|99)) tasks in a row and currently have a total of ([\\d,]+) points\\."); (those are when right click checking the slayer helm)
oops didnt realize i double pasted that onMenuOpened
you are not making this easy for us to help you
sorry guy 🙁
i have no idea what code is actually running in your plugin, nor the message content you're running into
are they double pasted? The contents are different
i think one was an old one i had on before i pasted the new set, one sec
what is the problem you are trying to solve if the first patterns work but the second set doesnt?
fixed https://gist.github.com/DamnLol-GIT/fb22bc8a66b37916408eba561a3f317d
So right-click checking the slayer helm to get the pattern for SLAYER_TASK_STREAK_010 and SLAYER_TASK_STREAK_050 (with SlayerTaskStreak.Ten/SlayerTaskStreak.Fifty repsectively) hide the Mazchna menu open. but the patter for SLAYER_TASK_STREAK_10/50 dont seem to work for a different line of text you get when completing a task, pic for reference
your tasks count doesnt end with a 7 anymore so the 10's would be failing
i had it to 6 at the time, im justing adjusting as i continue my task streak going up when testing
i don't see why you need to match the full string in your regex just use like You've completed ([\\d,]*)7 tasks?
i'd put some logs down
or, ideally, breakpoints in intellij, but logs would work fine in a pinch
output the state of all the matchesXXX bools in onChatMessage, and output the state of the matchers in onMenuOpened
ideally your goal is to trace exactly Which line of code isn't working how you expect it to, then you can focus on solving it in isolation. if you see one of the matchers fails, you can take the exact input text and then pass it in directly to a single line of code to debug it, instead of having to think about the entire chain of logic all at once
hmm alright, ill try that out and see if i can figure it out myself, thanks a bunch for the help and leading me in the proper direction 🙂
couldnt you use varbits instead of parsing chat?
someone mentioned that earlier too, i was just using patterns since i already used it for the rest of the plugin, i havnt worked with varbits instead (yeah yeah still new here, learning on the fly), i believe it was this one VarbitID.SLAYER_TASKS_COMPLETED, but id have no idea where to start to implement that instead of the regex - didnt wanna bother anyone in here more than i need to haha
@Subscribe
public void onVarbitChanged(VarbitChanged varbitChanged)
{
if (varbitChanged.getVarbitId() == VarbitID.SLAYER_TASKS_COMPLETED)
{
// do something with the event.getValue()
}
}
ill try working with that, thanks 🙂
was debugging like @worthy zealot suggested, then ended up going with what @grizzled aspen suggested a bit further, (deleted the other references 050/010 completely), problem is fixed!, seems having both regexes as a condition seemed to be messing it up? idk but it works now, will try learning more with varbits too @late hare
just wanted to say huge thanks to you guys for getting this sorted ❤️
I should really go and fix the site so I can build it locally
The way they've handled this situation, @Car-Role is incredibly disrespectful and distasteful.
I do understand that there is plenty of bad uses of AI and a lot of slop that gets made. But this is clearly not one of those cases.
They should feel shame for how they treated you.
@Car-Role I have read your message yesterday and thought about it.
In reference to your statement, I agree that the feature would be incredible and a great addition to runelite.
I personally am not a coder, but I can assist with my knowledge of requirements- and process engineering if so required or desired.
Even if not, I will still be available for testing.
What would be your next steps going forward?
In my (limited and biased) understanding, we could sit together and outline the require...
Why can't people just write their own code
the other bug that they opened also mentioned that the app signature is wrong which i looked into breifly - when the launcher updates its config on disk it breaks the entire apple notarization signature thing
I'm looking for the spriteId of the green circle icon there. Does anyone know what it's called / how I can find it / if there's a debug tool that allows me to see..? I've been looking at the developer tools to see if any would display more information, but couldn't find anything.. 🤔
which appears to not really have any negative affects afaict. everything on google said to store your app config in ~ or something instead which seems dumb
yeah, idk
both temirun and minecraft's java have the same entitlements, though the latter isn't in the app itself so idk
3472be7 Deploying to gh-pages from @ runelite/runelite.... - abextm
Type
Crash or hang
Operating System
Linux
OS Version
Fedora 43 (6.19.9-200.fc43.x86_64)
Bug description
Client crashes at random intervals. Client freezes and exits to desktop within a few seconds.
Screenshots or videos
No response
RuneLite version
Runelite version: 1.12.22.1
Launcher version: 2.7.7
Logs
client.log
[launcher.log](https://github.com/user-attachments/files/26331209/launch...
intellij's java has it, but the intellij launcher does not
i dont think we would really need allow-dyld-environment-variables for any reason, but the others i think we do need probably just googling what they do - but i did not really test it
the guy reporting the issue is not a real person i think so its sort of w\e
I'm not sure, yeah
"if you have local code execution you can get local code execution" is sort of lol
every other java I have seen has it, which makes me think its there for a reason
mm
the music plugin adds those, using minimap orb background sprites https://github.com/runelite/runelite/blob/master/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java#L406
Ohhhh perfect! Thank you! I'll try it out!
easy way to tell if a player is in the bank interface?
is it as simple as checking getItemContainer(InventoryID.BANK) is null?
Check if the bank widget is visible?
I'm new to the widgets, how do you do that?
this works, but I'm just wondering if there's a more intended solution
also, I tried rendering underneath widgets, but it still draws over the bank screen. So are the widgets just runelite widgets, or game
Don't use widgetinfo
ok... so what do I use instead? the docs are kinda just running me in a circle
WidgetID?
Look at gameval/InterfaceID
is that in the dev tools? I can't seem to find what you mean
There's a class called InterfaceID
And if you're looking at the widget inspector it'll even tell you the variable name you need from that class
I still can't figure out how to use the widget inspector
oh nvm, I just clicked buttons
There's also a little button that appears by the minimap that you can click and then right click a widget to select it so you don't have to manually traverse the tree
This folder is basically your best friend
https://github.com/runelite/runelite/tree/master/runelite-api/src/main/java/net/runelite/api/gameval
aaaaa, that doesn't help, I'm now more confused than before
I'm just trying to do a simple check to see if the bank interface is open or not, I don't need anything from it
The InterfaceID file in that directory is what replaces WidgetInfo etc
I would just Ctrl+F "bank"
client.getWidget(InterfaceID.Bankmain.UNIVERSE)
I think, I'm on my phone and it's been a minute since I've touched the client
bankmain is an int
I get the widget fine with widgetinfo, but you're telling me that's deprecated
This is basically the exact same thing except it's still updated
That's the non deprecated version
you mean this?
no, I'm aware, both are pointing to the same thing. But the field BANKMAIN is misleading
ok, so that works as intended. Why even have the redundant fields?
The naming is based on Jagex's names
Why is client.getLocalPlayer().getWorldLocation().getRegionID() returning 50875 when I am in the rewards chamber of Tombs of Amascut?
When I use 'Tile Location' highlighter, Region ID is 14672. Same for when I use the following resource - https://explv.github.io/?centreX=3684¢reY=5147¢reZ=0&zoom=8
I'd imagine it's cause it's an instanced location.
WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()).getRegionID() try that and see if it's also 14672
Legend, that returns the correct value.
Ye just be sure to null check where appropriate like the local player and the location. AFAIK they changed something where it might throw NPE when the client loads/you are in the middle of logging in. Don't quote me though 😅
Ok tyvm
Anyone have any experience using preferences.setSoundEffectVolume()? It seems that the volume doesn't actually change. I'm assuming that I'm not using this correctly. The metronome plugin is the only usage I can find of this function and that also doesn't actually change the SFX volume.
Look at the music plugin
I am having the same issue since switching to Linux. Please somebody tell me there is a fix for this.
Unfortunately it doesn't seem like it. Just gonna have to make due with Duke Nukem 3D's sound bitrate.
It seems the music plugin filters out unwanted sounds using consume() and config booleans. It does not change the client's volume. I'm looking to do the opposite; I want to unmute certain sounds and allow them to play naturally instead of using client.playSoundEffect().
Oh I forgot the granular volume sliders are a vanilla thing now, might need to reference an older version
Ah i see. It looks like the old logic was removed about a month ago. Thanks for the tip!
aha
@hollow stratus have you experiemtned any with hidnig navbuttons? that is requested sometimes too
Late response, but I'm no longer having this issue on 1.12.22.1. Or at the very least, if there is still a problem it has yet to manifest for me.
I suppose I should look at closed issues in the future and not just open ones when looking for existing issue reports...
can someone with some crazy sidebars (like multiple columns) test the reordering stuff in this?
it seems quite broken, at no point in this clip do I ever let go of ctrl click, yet it switches which icon I'm dragging randomly
it also seems quite laggy
and then sometimes the one it decides to drag will just be offset from my cursor
huh, Zulrah Helper specifically always gets picked up if I'm dragging past it, but can not be dragged downwards
yeah if I disable Zulrah Helper I see literally 0 bugs
That makes no sense lol
I agree
does it have something to do with its auto-hiding feature outside of zulandra
could see if there's issues with the other conditionally enabled icons? kourend library?
i have that config disabled so afaik only the regular startup addNavigation should be running
okay something else is just broken lmao
okay enabling other plugins also dont show their navbutton until I re-order
but none appear when disabled like zulrah
oh, not 100% of the time though. da fuck
Brainstorming to crowdsource stuff like mining/fishing/woodcutting success rates. It sounds like if you override an animation, then whenever a skilling roll happens it goes back to the correct one. But if you're already on the correct one, there's no animation change event, so no data.
Couple ideas:
- Create custom animations that are just copies of the correct ones, so that they get overridden but nothing seems off to the player. I don't think this is possible
- Swap iron pickaxe mining animation with the bronze pickaxe, and so on.
- Every tick right before animations would change, null it out, then set it back to whatever it was just after animation would change (if server doesn't tell it to change). Not sure if this is possible
I think all of these are bad and lame and would probably cause some stuttering. But there seems like some potential here somewhere. Any ideas?
I guess the ideal solution would be subscribing to an event that fires when an animation would've changed but didn't because it was already playing
But I don't think that exists either
having a normal time
For #1 is there a way to clone an existing animation but have it be like a different id or something so that AnimationChanged still happens?
(this plugin errors on shutdown already but on release does not duplicate)
my last clip for now because my brain is melting
Oh dear
Finally got back to my computer after a week away - do you have an indication of where it should live if not FlatTextField? There's a few places that use a JTextField directly - but there's also a lot of places that use IconTextField (uses FlatTextField as it's underlying text field). Happy to migrate other field uses to a single API or mark this one as deprecated/whatever helps
probably either in ClientUI::setupDefaults or in a new RuneLiteTextFieldUI depending on what it needs
Okay I'll take a look at setupDefault first and see if I can fit there - while I could make a new textfield - I'm not sure what I'd change that doesn't already exist in FlatTextField tbh - do you have context on why it's basically deprecated or in need or replacing? Is it more that there's a push to consolidate custom UI in java/net/runelite/client/ui/laf?
basically all of our custom components could just be normal swing components and exist from a time where we didn't really understand how to operate the swing laf system
if we ever wanted to do changable themes they would be a pretty signifciant amount of debt we would have to fix
Got it - in that case I'll take a couple days to look into that instead and see if I can replicate the two main text fields as swing components and then replace the existing implementations with these instead (it'll take a while as I'm not a Java dev)
Thanks for the input - very helpful 😄
I think there was a snippet in the flatlaf issue that let you do it with a global action which should be pretty trivial and not require any new *UIs
Ah didn't realise that would be a global change, I'll test that first.
Do you think as a future PR it's worth trying to migrate those old components?
maybe, idk
I don't like changing swing code because we have a hard time telling if something is correct or not and it tends to break in weird and unexpected ways if you get it wrong
Hesus
Hey @upper valve , last week we fixed the fixed-mode-hide-chat plugin. The most important chatbox popup's work again, but I added 2 more which were still not working. Since you have write permissions on the repository of deathbeam (which is inactive on that repo), could you take a look at this? Ty
Perfect! Thnx again!
done thanks
I was investigating a bug for the party defence tracker plugin, but the issue tracked back to runelite client. Should I create a new issue on this or would it be acceptable to use the one that already exists?
so youve found a bug in runelite and also there is already an issue open on runelite for the bug?
No, the issue is currently on a plugin hub plugin, and when debugging I traced it back to the runelite client. Should I create a new issue?
yes
Was writing up my own issue on this when I noticed one already existed. Adding my video clip for additional information.
https://github.com/user-attachments/assets/19fbd679-fa7c-4306-9ae6-d7a951c27061
this plugin doesnt remove its button on shutdown afaict
idk why it would work on the release really
i dont think it probably does
idk, this is definitely the plugin being poorly written
@spiral badge is this the issue
id be surprised if its fixable
kind of annoying thralls return the same hitsplat type as players
Well this is what I have in mind, let me know what you think. When making the call the special attack if there are two hitsplats on that same tick, take the one with a higher amount (assuming neither splashed)
i had an idea to use predicted hits to transmit but that was too much work to try and isnt fully robust
ya this isnt fully robust either
Ignore the hitsplat if it’s <=3 (this works like 90% of the time)
but i still think it would be generally more accurate
That is also an idea I had
I am fine with either really, if anyone has an opinion and if Adam even htinks this would pass pr
Cause man it is really really annoying bug to me lol
oh i see, zulrah plugin is adding its nav button twice
is it
yeah
oh i see that
its fine i can just fix addNavigation back to handle that
@rugged pivot are you able to build and test the branch? https://github.com/Adam-/runelite/commits/sidebar-reorder/
Is there a buffer provider for audio, e.g. similar to this for graphics?
https://github.com/runelite/runelite/blob/master/runelite-api/src/main/java/net/runelite/api/BufferProvider.java
no
is there any way to grab the audio at all? I would like to save it to an audio file
i dont think so. i dont know much about audio
Fixes #19722
Add condition for eye of ayak so that if a player thrall hit and ayak hit on the same game tick the larger value will be used, as a thrall has a max hit of 3.
Hey guys, looking for some tips on simulating events? Eg if I wanted to test my CC’s bingo feature, is there a more “accurate” way to test getting a drop or a pet for example?
I could easily be missing something but I’ve read the RL plugin dev docs on git 😂
move as much of the code as you can out of the event handler into a separate method -> call that method from the event handler -> add a onCommandExecuted or some other debug way to call that same method -> hope that your event handler works
for testing drops you can also just replace the drop its looking for for one that is more common
Great advice, thanks @rancid marten !!
Obviously we have ways to persist things across restarts - the entire configuration of the client is persisted across restarts. We don't have a good way to tell when the servers get updated. You could check for when there are client side content changes but that would have false positive and false negatives and seems brittle. And we don't have an API for it.
That's all exactly what I expected.
buh?
they expected that we really did have a good reason for not implementing it that way?
is that a sliding motion that you added? nice! I had first gone with that behavior to follow the behavior of but realized my implementation had serious performance issues when dragging pages with large amounts of elements, e.g. HD Minimap, World Switcher, Configuration, etc. You can see my post with a side by side comparison: https://github.com/runelite/runelite/discussions/15020#discussioncomment-15878926
mm, can you test sidebar-reorder and see if you have the same issues on it?
yeah, I've been seeing a few main features asked: grouping/folders, hiding icons, and accessibility for reordering icons for those who can't drag and drop. I think the first can be somewhat managed by using https://runelite.net/plugin-hub/show/plugin-presets. But other than that, I had only tried adding a JTab overflow menu, much like Wynadorn's implementation here: https://github.com/runelite/runelite/discussions/15020#discussioncomment-15233894
I can drag the world hopper at least ok without lag, but i also have a like $4k pc so idk
yeah, I can use the shadow jar you posted above. For me, the performance happens on my m3 macbook pro, could possibly be related to mac things
can you try and run the branch I have from source and see what it does?
yeah, I'll try that
TIL ctrl click on mac runelite performs right click. Kept getting the "reset menu" popup, so i just switched the mask to alt for now.
Findings: bit of lag when dragging (regardless of panel contents), also note the freezing of the fires on some of the lag, double row of columns works as expected.
included system resource graph to correlate incase it was due to background processes
when I did the slide implementation, I had to add a bit of logic to allow visual reordering of the tabs while holding off on truly reordering until click released to make sure the dragging is performant. I'll see if I can find it in one of my branches when I was working on that
Here's the commit where I added that delay: https://github.com/swirle13/runelite/commit/5d8cf3bd14ce4d3f4bd5ea229b9fc65f5298520f
forgive the super ugly WIP code
I think there is some room for improvement still with the drag reorder stuff since it is rebuilding the whole panel but it doesn’t have to
i'm still seeing duplicate navbuttons from that broken raid plugin
That’s because the plugin doesn’t remove the button on shutdown
Just don’t use it
Can you test the rest?
yeah fair, just acts differently to release is all
yeah i'm trying to break it now
everything else seems to work fine now
I have another busted plugin that caused me to tear my hair out and realized it was just poorly written 😄
oh I broke something, how do I explain this
In their defense it does say wacky in the description 😂
Couldn't even get the GitHub link on the mobile version of the PH o7 Only saw it after I requested as Desktop page
Removing and re-adding the overlay every gametick
making new profile made things explode
EDIT: nvm, just having the config panel on the Profiles tab makes it do this
yeah.... it plagued me, messed with the icons when I dragged it, somehow persisted when I switched profiles. Made me think my code was somehow not cleaning up plugin tabs
are you able to get your plugins to change when you change to a different profile with different plugins installed? I had added my block from my version of sidebar reordering to run an onProfileChanged() override, but it's complaining and the plugins don't change.
I added
@Subscribe
private void onProfileChanged(ProfileChanged event)
{
startupComplete = false;
SwingUtilities.invokeLater(() ->
{
rebuildSidebar();
startupComplete = true;
});
}
with private boolean startupComplete; in the declarations and startupComplete = true; at the bottom of show()
i'll have a look, do you see the same issue I got when dragging with the Profiles tab selected btw?
lemme test that
well my profiles straight up disappeared, but I didn't get the same exceptions you did
is that just on adam's branch or with changes?
both, adam's branch with that profile subscriber added
i always get a bunch of errors switching to profiles with some plugins but the ones that work seem to be populating the sidebar normally for me
passing in --profile=Macbook (name of one of my profiles) to the program args in the build config has the profiles showing up again 🤷🏼♂️
turns out Emote Clue Items plugin calls client.getItemContainer() in a background thread when it should be in theh client thread causes it to throw an exception, preventing plugins from being switched. uninstalling the plugin allows me to switch profiles just fine, but the profile UI doesn't update until switching away and back, and the plugins don't properly load to the other profile's plugins
I was finally able to recreate your sidebar freakout behavior Hannah
and yeah, it only happens when the profiles page is open
adding the profile change block (and removing the offending plugin) allows loading between profiles to load the saved config values properly
Not everything uses FlatTextField and its more or less deprecated, so this should live in the LAF/somewhere else. Ideally FlatLAF gets support for it and we just use that
I've reverted the previous commits and implemented the workaround suggested in the FlatLAF issue. Tested this across a couple of text fields in the client (including multi-line fields like the Notes plugin).
as I explained before I dont think that this is correct
Type
Incorrect behavior
Operating System
Windows
OS Version
11
Bug description
when trying to show minigame teleport on a spellbook, only one can be shown at a time. For instance, in the standard spellbook i have it shown but on any other i try to show it and it auto hides itself and cannot be shown
Screenshots or videos
No response
RuneLite version
1.12.22.1
2.7.6
Logs
No response
the author hasn't fixed it yet, so we just wait for that really
also github is giving me 500s when im trying to look at it
If you can fix it and submit it to the author once it is back, that might help
@deft hatch are you aware of these radius markers issues?
add "generic account progress tracking" to the flipping bingo bucket i guess
Anyone bored? Make a word cloud of all Plugin Hub plugin names 👀
now do every line of code
@rugged pivot@hollow stratus can you try this? https://github.com/Adam-/runelite/commits/sidebar-reorder2/ new branch
hannah too busy choking the lizard to test the code
well it doesnt freak out on the Profiles panel any more, so thats good
yeah
is it meant to still be logging rebuild every step between start and end?
yeah ill remove the logging later
i dont have that plugin
you hurt me
yeah idk
swing moment
i think its good enough
like it fully redraws with truncated text but yeah I don't think it matters
lol
is it wise to allow moving the config button?
yes
then I say ship it
okay good the Reset Order menu does not mess with the screenshot menu when custom chrome is disabled
Type
Crash or hang
Operating System
Windows
OS Version
Windows 11
Bug description
- Runelite boots up fine (via the Jagex Launcher).
- I click the big 'Play Now' button
- The client hangs (for at least 5 minutes) on 'Connecting to server...' with the 'Loading - please wait.' box in the top-left (see the resized screenshot below)
- Disabling Radius Markers did not fix it (since I know this is one has a recurring problem today).
Screenshots or videos
RuneLite...
Does this behavior happen while running in safe mode?
For info on launching in safe mode, see: https://github.com/runelite/runelite/wiki/FAQ#how-do-i-run-runelite-in-safe-mode
@Nightfirecat Stuck on a black screen when running in safe mode after clicking 'Play now':
<img width="1183" height="534" alt="Image" src="https://github.com/user-attachments/assets/62eca76a-bb61-4b2d-8ca2-68f20520a62d" />
hmm
To find the logs, you can do one of the following:
- If your client failed to open, click the
Open logs folderbutton. - Open the screenshot directory by right-clicking 📷
Camerabutton, navigate 1 directory up, then open logs folder. - Navigate to
%userprofile%\.runelite\logson Windows or$HOME/.runelite/logson Linux and macOS.
Upload the log files named client and launcher by dragging them to Discord. If there are files prefixed with jvm_crash dated from today, upload them too.
o it's in the issue, nvm
It's a weird one
Can you upload your client log again, after trying to launch in safe mode now?
Seems to be an issue with the event bus?
as far as I see those are all plugin errors
Yeah, but all the errors are from consuming events from the event bus. Clearly, the issue can't originate from any one of those.
Anytime i disable a plugin that is in the stack trace, another plugin pops up with a nearly identical stack trace.
you just have a lot of plugins that are throwing exceptions from subscribers
hmm, I don't see anything in their log after the safe mode run that points to a clear issue. There's an NPE in the agility plugin relating to localplayer being null, but that's not important
take a thread dump
Got a tutorial for me on that one, chief?
there is a button in the debug plugin
Gotcha, lemme see
Thanks. Can you install the Debug Helper plugin from the plugin hub (turn safe mode back off to use it), then take a thread dump when the client appears frozen?
brain is slightly fried, I didn't realize you're the person who opened the issue lol
I assume I need to turn off safe mode for this?
yes
alternatively you can jcmd RuneLite Thread.print on non-release clients
Which means taking out the ol' IntelliJ for a spin, doesn't it?
yes
@amber rampart
oh its this
I didn't know this just froze the client
install wmic and it will fix it
Huh
Can you explain what that is and why I need it (since like this morning)?
I'm curious 🙂
the client uses it to get a machine id
you probably updated windows and it uninstalled it
based on this its not a default feature anymore
yeah
Interesting 😮
Weirdly, my W11 hasn't been updated recently
Mind the dutch
The march security update from march 18th?
if you open a command prompt and run wmic csproduct get UUID does it just hang?
odd
Brb, need to reboot twice ⏸️
Showerthought: If i just keep WMIC turned off, it won't hang on the command LOL
Ye I can log back in LOL
Is something going to go horribly wrong down the line by just keeping wmic turned off?
I don't think so
Aight, Ill update my issue with the steps to reproduce + fix and close it
Thanks a bunch fellas ❤️
SOLUTION: Turn off WMIC
After some back and forth with the peeps in the #development-channel on discord, we figured out that WMIC was the culprit here. This is a windows feature that the runelite client uses to get a machine ID using the command wmic csproduct get UUID. Try out this command in CMD. If it hangs for you, you are dealing with the same issue I was having.
To fix it: In W11, go to Settings > System > Optional features > View Features > Search for 'WMIC' > Delete it > Reboot
What is the threshold for size xl?
4k lines of diff
and that's all filetypes, not just Java, right?
afaik yes
yes it is all filetypes.
and these are all the size labels
{label: 'size-0', maxSize: 0},
{label: 'size-xs', maxSize: 25},
{label: 'size-s', maxSize: 250},
{label: 'size-m', maxSize: 1000},
{label: 'size-l', maxSize: 4000},
{label: 'size-xl', maxSize: 1e9},
lmao so just go larger than 1e9 and no tag?
the count also includes deleted lines which are pretty much irrelevant as far as hub reviews go so sometimes it gets bumped up for even small changes
so it's sum of added+deleted?
Part of the problem is that the sidebar is being rebuilt twice:
reorderNavButton(dragCurIndex, dragEndIndex);
saveSidebarOrder(); -> rebuilds sidebar
rebuildSidebar(); -> rebuilds sidebar```
The other issue is the sidebar being rebuilt at all seems to be messing with HMTL formatted stuff (I think). Thus, we can definitely conclude that Swing is not guilty.
oh yeah i can drop the rebuildSidebar() i guess
Makes it slightly better. But as mentioned, overall it's not much of an issue
if swing isnt to blame then what controls the html rendering in swing?
hmm?
please do not remove the whole contents of the sidebar for ~any reason
ok, why
because swing hates removing stuff and it can take a long time and make html jank
I dont think i can reorder it without removing
You'd probably have to remove only the component being reordered then tabbedPane#Insert to the new index
ive tried that but it was slower
you can re-insertTab in a new position
i tried that too
but also there are eg profile changes where the entire sidebar might change order, not just a single component
I would probably not change the order in the tabbed pane at all and just layout it in the new order
idk this seems to effectively work ok from my testing
admin vs admin
who will win
have you tried while not at the login screen?
not at all
I know it used to lag when we did this to a single tab at a time tho
so doing it to everything will be worse
i have a surface laptop that doesn't like to even attempt to open the plugin hub search because it lags too much, im gonna try it there
notably i am dropping the ChangeEvent when dragging which is where a lot of the time is at
can you try it?
I tried to make it so it only swapped the two things when dragging and it was probably 1000x slower
earlier
and i couldnt figure out why
probably i was doing something wrong
but i figured what i have atm is acceptable
I've spent a lot of time to explicitly avoid doing this
see if you can improve it?
+ Icon icon = new ImageIcon(ImageUtil.resizeImage(navButton.getIcon(), ICON_SIZE, ICON_SIZE));
+ int insertIndex = dragEndIndex;
+ if (insertIndex > sidebar.indexOfComponent(navButton.getPanel().getWrappedPanel())) insertIndex++; // insertTab munges index
+ sidebar.insertTab(null, icon, navButton.getPanel().getWrappedPanel(), navButton.getTooltip(), insertIndex);
+
+ if (selectedTab == dragCurIndex) {
+ System.out.println("set selectedTab to " + selectedTab);
+ sidebar.setSelectedIndex(dragEndIndex);
+ }
+ else if (dragEndIndex < selectedTab && dragCurIndex >= selectedTab) {
+ sidebar.setSelectedIndex(dragEndIndex);
+ }
I had this earlier which was working but was way slower inexplicably. and then move the config save etc to drag end
final var defaultMouseListener = sidebar.getMouseListeners()[0];
sidebar.removeMouseListener(defaultMouseListener);
what is this trying to do?
block the default behaviour in mousePressed()
from the mouselistener in RuneLiteTabbedPaneUI
very eww way of doing that
yes
I think there is a getter for it
for what?
for the Handler so you don't have to index into stuff
i dont see one, its stored in FlatTabbedPaneUI in a private Handler class?
we can teach RuneLiteTabbedPaneUI how to do drag and store a callback in a client prop or something on the JTabbedPane
Closes #19994
TLDR: Use tempoross loot chat messages with type SPAM to increment a counter when multiple tempoross loot events are received at once when collecting with the Big-search option. Implemented with a new collectInvItems function. Can be rewritten to use regex if desired.
Selecting Big-Search on the tempoross reward pool awards the player with 5 rolls of the Tempoross drop table. This can be confirmed by checking ...
I can remove these logs and associated variables. Leaving them in for now as the logs posted in the PR description make use of them.
this might be silly but i built from your branch i see right click menu to reset order but i can't seem to drag the icons around, i see mouse button3 in ClientToolbar but my middle mouse button doesnt seem to do anything
ok
ty
my laptop was still trying to build gradle stuff so i build the .jar on my desktop, put it to the nas and loaded it onto my laptop. it performs ok on a default size sidebar
the surface laptop that can't really even open the pluginhub search
try with a bunch of crap in loot tracker
when i switch from single loots to collected loot it does an animation of things collapsing
it will be interesting
moving it is easy
Bit laggy behind but it works, yes the laptop is that loud and I won’t try to use obs on it
it is more laggy/delay when i tell it to include hub and the additional 12 or so sidebar icons and do the same dragging up and down, but it does work
idk if it can be more performant but now i can test a non 4000 dollar computer
😄
idk how idiomatic this is but this works https://github.com/Adam-/runelite/commit/e531fea8b87495f98e00634add998869506d4aec
are you looking at improving the dragging?
yeah
wed have to get the RL hotkey into the RLTabbedPaneUI if we did this though
do you think this is preferable to what i had before?
this is just to prevent it from collapsing when you try to drag right?
mmm, right, it opens too
I think if I wanted to be smart I could make it so you can choose which column stuff goes in and have them be non-balanced
Are you trying the layout thing?
yeah
Search for https://github.com/TicTac7x returned no results.
[ https://github.com/TicTac7x ] [ @dapper sapphire 269156920319803393 ] tictac7x#0
Add a source search box and load matching persisted loot records so NPCs and events outside the recent cap can still be found without a new kill.
why are there so many NPEs with this latest update? I noticed this when I started getting NPEs on login/logout
something changing with thread stuff?
check that line of code, I'd guess it's probably a localplayer NPE
(fwiw we can and will fix those, they're just not very high priority)
Hmmmmmmmmmmmmmmmmmmmmmmmmm
it ain't working like it used to, cheif
I keep running into issues like this where the expected isn't firing properly
without this animation check, I can't filter whether a player ate food or just dropped it
the eating animation is now -1 instead of the previous 829 (consuming consumables)
the eating animation is definitely not -1
only half the time
and I can't figure out the cause
because of delay on client thread for localplayer (you're just null for 12 frames) that has to be deferred, but I'm 90% sure it's at least the current actor
I didn't anticipate for the localplayer to change, didn't think it even could, but maybe I should just start putting in redundant checks, just in case
Today was a fuster cluck at work, apologies I didn't see this till now
Apologies, I forgot you had said something before. Still learning how this stuff works with all the behind the scenes actions going on. That block is shamelessly stolen from Tyler's PR, so I can only take partial blame lol
alright, did a pull request for the recent fixes for vitality, I didn't expect so much of a mess from the client thread changes. turns out yeah, it just desyncs if you can't set the client anymore
From my research there isn't, but I figured I would ask. Is there any way to get anything other than Own: Other on a mixed ownership ground loot tile? Ie: I drop 5 logs on a stack of 10, Ownership of the pile is Other until they despawn and then switches back to Self. I am trying to restrict ground loot for group bronzeman and my only solution right now is looking like a very fragile transaction system where I just give a quota of items dropped per pile no matter the ownership.
there isn't, no
anyone happen to know the POH ids for the fairy ring, spirit tree and the tree/ring combo for the 3 variants? normally id assume its the first one, but i made that mistake on some boss pet names 🥲
1084296 Update Widget IDs to 2026-4-1 - RuneLite Cache-Code Autoupdater
9ddde02 Update Item variations to 2026-4-1 - RuneLite Cache-Code Autoupdater
7c9a197 Update Legacy ID classes to 2026-4-1 - RuneLite Cache-Code Autoupdater
28f5a9a Update GameVals to 2026-4-1 - RuneLite Cache-Code Autoupdater
062ee6b api: export EntityOps - abextm
came here after experiencing this myself. the actual problem is that zalcano plugin was activated prior to tile indicators being turned on. solution is to turn zalcano off and on again and it'll override the markers staying yellow and act normal again
023cd02 API docs for 1.12.23 - RuneLite updater
fbfb051 Release 1.12.23 - RuneLite updater
@sinful lava quest helper failed
taking a look
am I good to merge the fix, or should i wait for system update?
you can merge now
3fb2688 update quest-helper to v4.13.0.2 (#11312) - pajlada
big login background pog
how do i disable a plugin? is it in runelite.properties or where i put the commit hash and repository?
guessing
disabled=true ?
yeah, put a reason there, its not a boolean
you can also put unavailable=reason and it will show the reason in the client
ah cool ill do unavailable, my plugin is basically done in the main Sailing nowadays so disabling it for in favour of people using that
Are those not all in the poh?
they probably were, they are all new ids now
ye no longer a bunch of multilocs
Oh neat
too big infact, one pixel wider than official client
i wonder if that is an official client bug
it was like that with java
its more noticeable with titlewide cause of the line in the middle cause i think the borders of it are transparent for some reason
mm yeah i see
yeah the it also makes the flame on the right off by a pixel but its aligned in relation to the image correctly
I wasn't using stretched mode when I tested it for adam before so it's very immersive now
@ 1080p
That looks so much better
official client cant do that but it does have an opening anim
well it can resize on mobile, but you cant control it
can change the filtering option with the chat command tho
it is 1px
the background is correct if it has a 1px line in the middle cause its mirrored over that pixel
ok
the centre stone seems to be a pixel off tho
it cant be off because i didnt move it
in comparison to the background
i shifted the left side of the background 1px to the left if the canvas width is divisible by 2
hmmmmm
and then i drew the right side of the background at left + 544
which i think is right
try this
idk how to run this im just seeing if this is a java - official difference
im also going to bed but to illustrate when the backgrounds are alligned and i flip the layers
i think the shifting to the left is shifting the "middle" of the screen to the left which is whats making it move in relation
is there a way you can run that jar build above?
o7
i figured it out now
jar is def skinnier
yeah the right side is 1 pixel to the left in the jar vs current release, checking jagex client now
the size is correct, it just shifts the background to the left by 1 pixel
box being the centre, line on the sides due to being shifted
yeah jar vs jagex, I don't think this matters though lol
or the otherway, both clients at 765x503 ontop eachother
oh
its bedtime for me. gl