#development

1 messages · Page 11 of 1

prisma hornet
#

exactly

ember flareBOT
#

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...

jolly hearth
#

You could use the chat message too

prisma hornet
#

good shot

#

I'll do that if the latter fails

ember flareBOT
tranquil trellis
#

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.

fathom prism
#

am I able to somehow find out what settings people are using with my plugin by the way

#

I assume not

restive garnet
#

Not unless you're syncing their config with an external server as part of the plugin itself

fathom prism
#

👍

tranquil trellis
#
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

sinful lava
#

the config panel does not listen to updates, no

tranquil trellis
#

hmmm

#

how should i do this, I need to know whether ayak is using runes or tears

sinful lava
#

if you close and open the config panel it will be updated

tranquil trellis
#

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

sinful lava
#

yeah, just visual, the panel itself just doesn't listen to updates

#

you can always add a breakpoint to see if it fires

tranquil trellis
#

k maybe it is working something else somewhere broke

#

typical for this plugin lol. Edit fixed

valid wave
#

what's wrong with RadiusMarkers plugin? couldn't search, and when I disabled it I couldn't reenable it

worthy sparrow
#

Look in your logs

tight quarry
#

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

low hatch
#

Plugin performance monitor eta wen

#

Whoops didn't mean to keep the @ notification. Hate that it's default enabled.

ember flareBOT
#

@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!

valid wave
#

uhhhh, what?

#

what changed in the latest update that you don't have a localplayer after the gamestate changes?

sharp knot
#

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

tight quarry
#

That's a good question, bunch of plugins broke with that issue after the last update. Lots of nullpointer exceptions

valid wave
#

so, do I just put in a null check loop in game tick? like what

#

this seems highly irregular

stuck shale
#

That would be a solve for it yeah.

valid wave
#

that's a terrible solve, and highly inefficient. But I guess

#

smh

#

shaking my smh

stuck shale
#

It’s a free check with not much overhead

valid wave
#

that means I have to do a callback for all the other init methods as well

tight quarry
#

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.

valid wave
#

Hmmmmmm

worthy sparrow
#

The answer is maybe

tight quarry
#

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?

valid wave
#

how much does that delay it by

stuck shale
#

InvokeLater is client tick which is 20ms

worthy sparrow
#

You are better off using the invoke later return check

valid wave
#

twelve ticks. For twelve ticks after logging it, it seems you just.... don't exist

worthy sparrow
#

Before it mattered how many players where around you

valid wave
#

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

worthy sparrow
#

Return true or false in invoke later and it will run again later

tight quarry
#

^ That could be an option..? Keep invoking later until it returns a localPlayer?

worthy sparrow
#

Yes

valid wave
#

Hmm. what changed about runelite actors, they aren't despawning like before

#

or well, it removed their controller, but the model still renders?

fathom prism
valid wave
#

Hmm, yeah, I can't seem to despawn RuneliteObjects anymore

#

this update is funky

#

yeaaaaaah, this ain't my fault

oak rock
#

i love it

shy pine
#

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

rancid marten
ember flareBOT
thorn grotto
#

(this is a joke) radius markers is gone LFG

upper valve
#

wait how does that freeze the client?

thorn grotto
#

an undocumented engine change does a little trolling

#

i’m guessing

rancid marten
#

calling getLocalPlayer() off thread went from being not ok but in practice probably ok to just straight up not ok

upper valve
#

ah

rancid marten
#

we can add more protection around it

valid wave
#

I've tried every method, they don't despawn like before

rancid marten
#

if that was true, wouldnt lootbeams be totally broken?

upper valve
#

i would maybe think theres a ton of plugins calling getLocalPlayer off thread?

rancid marten
#

maybe

#

I can fix it I think

upper valve
#

idt there's a reasonable way to check that though

rancid marten
#

at worst i can make it just throw

#

it already asserts now, just the assets arent on on release

valid wave
#

oh god

topaz pierBOT
shy pine
upper valve
#

oh cool

shy pine
#

Oh like the plugin you're working on, where the code is

valid wave
#

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

glad ermine
#

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

shy pine
valid wave
#

Hmm. I'm calling the despawn at two different spots. I'm removing it from my lists the same as I'm despawning them

shy pine
#

What is the intended behaviour? As in, when are you trying to despawn these objects?

valid wave
#

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...

prisma hornet
#

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

  1. The plugin I forked off of has it...?
  2. 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?
rancid marten
#

which pr?

oak rock
#

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

prisma hornet
#

Damn. Too true.

oak rock
#

it looks like youre just having them download at runtime though so maybe that skirts the copyright distribution thing

prisma hornet
#

It's... customnullstare

shy pine
valid wave
#

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

ember flareBOT
valid wave
#

if a pull request is merged, can I just edit and have it re-evaluated, or do I do a new pull request

heavy bobcat
#

new pull request

ember flareBOT
sturdy patio
#

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 😅

sharp knot
#

Right now usually at least a couple weeks at a minimum

sturdy patio
#

Thanks!

glass sandal
rancid marten
#

so im going to fix getLocalPlayer() to be ok to call off thread

upper valve
#

how, just cache the result every game tick / client tick?

rancid marten
#

no i just made the client code threadsafe

#

or well

#

i can fix it to not corrupt the client, ever

tight quarry
rancid marten
#

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

tight quarry
#

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

rancid marten
#

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

heavy bobcat
#

It's come up a couple times in support too

oak rock
#

Hes aware afaik

thorn grotto
#

oh is it very broken

ember flareBOT
rancid marten
#

should i kill it?

thorn grotto
#

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

oak rock
#

Its been preventing people from interacting with resources afaik

oak rock
#

Depends on how breaking that is to you

ember flareBOT
thorn grotto
#

ill make a fix for something i noticed that might cause the errors at least

rancid marten
#

it seems like its something new

#

we should just kill it if is broken

thorn grotto
#

sure if you dont want to wait an hour or whatever

rancid marten
#

you can just undisable it when patched right

ember flareBOT
ember flareBOT
thorn grotto
#

oops i opened itemid in intellij and it froze

lyric wasp
#

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

desert fulcrum
# ember flare

does someone know off top of their head what needs fixing, assuming its the hitsplat update

oak rock
#

Hidden hitsplats dont have events anymore afaik

desert fulcrum
#

is it core fix that was mentioned earlier that will be required

glass sandal
#

That's for getLocalPlayer not the hitsplat api

desert fulcrum
#

oh

#

is hitsplat api just dead?

glass sandal
#

No, it just changed

desert fulcrum
#

kk ill have a look i suppose

thorn grotto
#

uh can anyone reproduce tool required issue on their client? i cant

heavy bobcat
#

I can check, I think I turned it off actually cause it kept clogging my logs with errors 😬

thorn grotto
#

i saw in support someone had it consistently happen in mlm but i dont have members rn

rancid marten
#

Atm it is dropping some events which is breaking some things

desert fulcrum
#

lovely, thanks bossman

deft hatch
ember flareBOT
heavy bobcat
thorn grotto
#

ok ill take that, thanks a lot

ember flareBOT
low jacinth
#

ItemContainerChanged doesn't post on login/logout, idk if it used to but thats what causes it

thorn grotto
#

bruh, great ty

low jacinth
#

np

rancid marten
#

That’s a bug

#

It should post but doesn’t

thorn grotto
#

are you going to fix it

rancid marten
#

Yea

thorn grotto
#

great, thanks. though i guess the plugin is gonna be slightly broken til then

valid wave
#

I had to do the same to fix mine. Speaking of which, I only need it approved before April

echo rampart
#

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.

rancid marten
#

i am curious why it broke, its possible it is a client bug maybe

echo rampart
rancid marten
#

yeah ive seen a number of complaints

echo rampart
#

Haven't spent more than 2 minutes lol like I said I just found out.

rancid marten
#

theres some AI crap someone commented on this

echo rampart
#

Yeah I scrolled past that

rancid marten
#

its possible that getActions() is returning a 0 length array now maybe. check and see if it spits any errors when running

echo rampart
#

Ill poke around tonight after work on it, but that is what it sounds like.

rancid marten
ember flareBOT
#

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:

  1. You could still at least have the tag persist until the next system update, instead of until closing RuneLite.
  2. 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 ...
reef badger
#

what's the correct word for 2

#

it's not npc id it's something list

glass sandal
#

index?

reef badger
#

yes thank u

ember flareBOT
shy ridge
#

This change isn't released yet right? It will come with 1.12.23?

reef badger
#

it might be 22.1 or 2 or whatever but yeah

shy ridge
#

Ok good. Then that explains my issue with the wom plugin.

ember flareBOT
sharp knot
#

Users would love to periodically have some of their tags just get forgotten at random 🙃

reef badger
#

yhup

rancid marten
#

I think it changes sometimes very often

deft hatch
#

Maybe rev update?

ember flareBOT
#

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...

reef badger
#

Reported by Hunter CVE Scanner

hollow stratus
glass sandal
#

Manual strings isn't really a detection method of forced chat

late hare
ember flareBOT
hollow stratus
# low hatch Plugin performance monitor eta wen

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...

amber rampart
#

there is a profiler in the debug plugin

upper valve
#

intellij ultimate's profiler is pretty cool

#

but also, just don't do stupid stuff per frame basically

#

and you will performance

rancid marten
#

@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?

glass sandal
#

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
rancid marten
#

mm can you check some of the older launcher builds?

#

is it not notarized correctly or is it just not notarized at all?

glass sandal
#

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
rancid marten
#

what is null-ignored lol

glass sandal
#

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
rancid marten
#

is there a recommended way to have config.json be updated but also not break signing? put it somewhere else?

glass sandal
#

Yea just write it outside /Applications/RuneLite.app

rancid marten
#

cant do that really

ember flareBOT
#
[runelite/runelite] New branch created: 1.12.22
hollow stratus
# upper valve intellij ultimate's profiler is pretty cool

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

GitHub

Hey @mcgeer, I love your plugin, thanks again for making it. I've run into some large performance issues when using the plugin. I'm a software dev, with some experience in java, so I'm ...

rancid marten
#

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

low hatch
low hatch
ember flareBOT
#
[runelite/runelite] New tag created: runelite-parent-1.12.22.1
#
[runelite/static.runelite.net] New branch created: 1.12.22.1-23672314530
deft hatch
rancid marten
#

i changed a lot

thorn grotto
#

is the itemcontainerchanged event fixed PauseManSit

rancid marten
#

i think so

#

also i fixed the hitsplat stuff

ember flareBOT
echo rampart
#

Thanks for the quick merge. It is a popular one lol

reef badger
#

yeaaaaaaah

rancid marten
echo rampart
#

Ope

#

brb

thorn grotto
ember flareBOT
reef badger
#

i like the thought that nobody ever felt it necessary to turn the plugin off while doing barrows

#

so nobody noticed it

glass sandal
#

It clears the doors on shutdown so I don't think you'd really notice

reef badger
#

mmmmmmm

rancid marten
#

it would keep the plugin from being gcd i think

#

or at least, its classloader

echo rampart
#

Well thanks! Hopefully it goes another 4 years without being touched lol

rugged pivot
#

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? 😰

shy pine
#

Why procrastinate fun?

rugged pivot
#

unironically i've been too busy playing the game lately

ember flareBOT
reef badger
#

they gotta add twitch emotes to github

#

i gotta reply to that with the go gopher dancing

reef badger
#

yeah

ember flareBOT
hollow stratus
low hatch
# ember flare

This was reverted an hour ago but for some reason it's still disabled on the PH?

rancid marten
#

no

low hatch
#

I just restarted my client too 🤔

oak rock
#

use the release

rancid marten
#

are you not using the release?

low hatch
#

I didn't refresh gradle 🤦‍♂️

rancid marten
#

you should really just stop trying to provide feedback when your using custom builds

low hatch
#

If only dev tools weren't disabled on stable 😔

oak rock
#

local man hasnt learned you can build a shaded jar yet

low hatch
#

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.

glass sandal
oak rock
#

that wont have a snapshot version though

upper valve
#

cant have issues if you just dont play the game /s

reef badger
#

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

ember flareBOT
#

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...

reef badger
#

i was just gonna say we dont want to add features that sometimes dont work

sharp knot
#

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

rancid marten
#

I think the storing the name with the id would do some weird stuff with dynamic npc spawns

#

idk

rugged pivot
rancid marten
#

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

sharp knot
#

Just the inconsistency of the behavior would drive me insane

rugged pivot
#

put it on the hub

ember flareBOT
reef badger
#

oh yeah round 2 here we go

rancid marten
#

oh there is a space here commit= fdf72a918c728d2c425ca8acfc6b65d59ede1737 hm

karmic linden
# ember flare

Wouldn't this just occasionally result in a different copy of the same monster being highlighted due to a very small index change

rancid marten
#

yes

hoary spindle
#

What would dictate the left click interaction with a bank placeholder? A script?

rancid marten
#

yes. the bank scripts

ember flareBOT
ember flareBOT
ember flareBOT
#

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...

ember flareBOT
#

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 ...

twin rover
#

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

glass sandal
#

You can link the code on github

ember flareBOT
twin rover
glass sandal
rancid marten
#

this seems like it should work

twin rover
#

oh sweet, ill bookmark it

#

thats what i kept thinking for 2 days lol

rancid marten
#

other that i guess it will remove all of the menus

twin rover
#

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

rancid marten
#

or no nvm this is fine i think

#

what do you mean only 10 or 50

twin rover
#

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

rancid marten
#

thats because there is no code to check the task streak

twin rover
#

yeah thats my issue haha, badly worded i guess, i cant figure out how to add that part

rancid marten
#

i think there are varbits for the task streak? maybe?

twin rover
#

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.");
rancid marten
#

that would also work

#

well other than the regex being wrong maybe

glass sandal
#

VarbitID.SLAYER_WILDERNESS_TASKS_COMPLETED and VarbitID.SLAYER_TASKS_COMPLETED

twin rover
#

ive tried using && Pattern.matches but it expects a string

rancid marten
#

i think your problem is you just dont know java at all

twin rover
#

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

frozen portal
#

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?

upper valve
frozen portal
# upper valve https://banklayouts.com/ ?

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?

upper valve
#

you can probably find their repo on github and read their code

frozen portal
#

Will check it out later, thanks

stuck shale
#

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.

ember flareBOT
#

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...

ember flareBOT
#

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...

reef badger
#

._.

ember flareBOT
low hatch
#

Thanks

ember flareBOT
ember flareBOT
#

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...

ember flareBOT
worthy zealot
#

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 🙇‍♀️

amber rampart
#

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

worthy zealot
#

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

amber rampart
#

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

worthy zealot
#

scary......

tulip wagon
# ember flare

oh no, if you preload arbitrary code it can run arbitrary code

amber rampart
#

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

tulip wagon
#

this requires someone downloading a malicious dylib and then also running a custom terminal command that clearly includes the malicious dylib

amber rampart
#

yes

tulip wagon
#

dumb

amber rampart
#

yes

tulip wagon
#

also
> we follow a coordinated disclosure policy
> opens public issue as first contact

amber rampart
#

opens a second public issue as second contact

twin rover
#

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

tulip wagon
#

whats the pattern

twin rover
#

You've completed ([\d,])7 tasks and received . Slayer master.

#

oh that didnt look right on the paste

tulip wagon
#

that text contains color tags, are you stripping them correctly?

rugged pivot
twin rover
#

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\.

tulip wagon
#

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

twin rover
#

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\\.");

worthy zealot
#

your regex makes the number have to end with a 7

tulip wagon
#

^

#

i figured that was a typo in the malformed one lol

twin rover
#

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

worthy zealot
#

what's an example of text it won't match

tulip wagon
#

it's the same text, two different patterns

tulip wagon
worthy zealot
#

oh good eye

twin rover
#

facepalm

#

oh wait

rugged pivot
#

this is why i always copy from the Code Generator part of regex101 lol, it fixes the escapes for me

twin rover
#

checking my code it seems it didnt copy it into disc properly it is still \d

#

weird cant type double \

worthy zealot
#

double \ escapes the character so it just puts one

rugged pivot
#

discord is using the first \ to escape the second ^

worthy zealot
#

\\d is \\\\d

twin rover
#

gotcha, but it is \\d in my code

worthy zealot
#

hmmst

#

maybe the .* is being too greedy or something, what if you .*?

#

if it works on regex101 it should work though

twin rover
#

thats where i was checking it out yeah, said it should work

tulip wagon
#

with all the miscopying can you just screenshot your ij lol

twin rover
worthy zealot
#

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

tulip wagon
#

removeTags is at the top of the method

worthy zealot
#

So It Is.... but I can't think of any other reason this would be failing

twin rover
#

so im not crazy thinking that it should be working? lol

rugged pivot
#

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)

tulip wagon
#

you have two onMenuOpeneds?

rugged pivot
#

oh true i did not scroll down

twin rover
#

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

tulip wagon
#

you are not making this easy for us to help you

twin rover
#

sorry guy 🙁

tulip wagon
#

i have no idea what code is actually running in your plugin, nor the message content you're running into

rugged pivot
twin rover
#

i think one was an old one i had on before i pasted the new set, one sec

grizzled aspen
#

what is the problem you are trying to solve if the first patterns work but the second set doesnt?

twin rover
#

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

Gist

GitHub Gist: instantly share code, notes, and snippets.

worthy zealot
#

your tasks count doesnt end with a 7 anymore so the 10's would be failing

twin rover
#

i had it to 6 at the time, im justing adjusting as i continue my task streak going up when testing

grizzled aspen
#

i don't see why you need to match the full string in your regex just use like You've completed ([\\d,]*)7 tasks?

twin rover
#

hadnt tried that, but ill test it out now

#

no dice 🙁

worthy zealot
#

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

twin rover
#

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 🙂

autumn star
#

couldnt you use varbits instead of parsing chat?

twin rover
#

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

late hare
#
@Subscribe
public void onVarbitChanged(VarbitChanged varbitChanged) 
{
    if (varbitChanged.getVarbitId() == VarbitID.SLAYER_TASKS_COMPLETED)
    {
        // do something with the event.getValue()
    }
}
twin rover
#

ill try working with that, thanks 🙂

twin rover
#

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 ❤️

ember flareBOT
amber rampart
#

I should really go and fix the site so I can build it locally

ember flareBOT
#

@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...

rancid marten
tight quarry
#

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.. 🤔

rancid marten
amber rampart
#

yeah, idk

#

both temirun and minecraft's java have the same entitlements, though the latter isn't in the app itself so idk

ember flareBOT
amber rampart
rancid marten
#

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

amber rampart
#

I'm not sure, yeah

rancid marten
#

"if you have local code execution you can get local code execution" is sort of lol

amber rampart
#

every other java I have seen has it, which makes me think its there for a reason

rancid marten
#

mm

ember flareBOT
tight quarry
valid wave
#

easy way to tell if a player is in the bank interface?

#

is it as simple as checking getItemContainer(InventoryID.BANK) is null?

sharp knot
#

Check if the bank widget is visible?

valid wave
#

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

sharp knot
#

You can't really draw overlays under widgets afaik

valid wave
#

Hmm. I'm not sure if this is right

#

what is the overall widget structure?

sharp knot
#

Don't use widgetinfo

valid wave
#

ok... so what do I use instead? the docs are kinda just running me in a circle

#

WidgetID?

sharp knot
#

Look at gameval/InterfaceID

valid wave
#

is that in the dev tools? I can't seem to find what you mean

heavy bobcat
#

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

valid wave
#

I still can't figure out how to use the widget inspector

#

oh nvm, I just clicked buttons

heavy bobcat
#

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

valid wave
#

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

sharp knot
#

The InterfaceID file in that directory is what replaces WidgetInfo etc

#

I would just Ctrl+F "bank"

valid wave
#

so you're saying this id is what I check for?

#

Bankmain (12) isn't doing it

sharp knot
#

client.getWidget(InterfaceID.Bankmain.UNIVERSE)

#

I think, I'm on my phone and it's been a minute since I've touched the client

valid wave
#

bankmain is an int

sharp knot
#

Yes

#

It's an id value

valid wave
#

I get the widget fine with widgetinfo, but you're telling me that's deprecated

sharp knot
#

That's the non deprecated version

valid wave
#

you mean this?

sharp knot
#

Write it how I wrote it

#

Don't just copy the value

valid wave
#

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?

sharp knot
#

The naming is based on Jagex's names

steel flame
low hatch
#

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

steel flame
low hatch
#

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 😅

steel flame
#

Ok tyvm

granite quest
#

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.

sharp knot
#

Look at the music plugin

ember flareBOT
granite quest
# sharp knot Look at the music plugin

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().

ember flareBOT
sharp knot
#

Oh I forgot the granular volume sliders are a vanilla thing now, might need to reference an older version

ember flareBOT
granite quest
ember flareBOT
rancid marten
rancid marten
#

@hollow stratus have you experiemtned any with hidnig navbuttons? that is requested sometimes too

ember flareBOT
rancid marten
ember flareBOT
rugged pivot
#

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

rancid marten
#

That makes no sense lol

rugged pivot
#

I agree

orchid laurel
#

does it have something to do with its auto-hiding feature outside of zulandra

grizzled aspen
#

could see if there's issues with the other conditionally enabled icons? kourend library?

rugged pivot
#

okay enabling other plugins also dont show their navbutton until I re-order

#

but none appear when disabled like zulrah

rugged pivot
lyric wasp
#

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:

  1. 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
  2. Swap iron pickaxe mining animation with the bronze pickaxe, and so on.
  3. 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

rugged pivot
lyric wasp
rugged pivot
acoustic ember
shadow stirrup
#

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

amber rampart
#

probably either in ClientUI::setupDefaults or in a new RuneLiteTextFieldUI depending on what it needs

shadow stirrup
amber rampart
#

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

shadow stirrup
#

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 😄

amber rampart
#

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

shadow stirrup
#

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?

amber rampart
#

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

sick vessel
native notch
ember flareBOT
spiral badge
#

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?

rancid marten
#

so youve found a bug in runelite and also there is already an issue open on runelite for the bug?

spiral badge
#

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?

rancid marten
#

yes

ember flareBOT
rancid marten
#

idk why it would work on the release really

#

i dont think it probably does

#

idk, this is definitely the plugin being poorly written

desert fulcrum
spiral badge
#

ya i have a somewhat fix but

#

it is not great tbh

rancid marten
#

id be surprised if its fixable

spiral badge
#

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)

desert fulcrum
spiral badge
#

ya this isnt fully robust either

glass sandal
#

Ignore the hitsplat if it’s <=3 (this works like 90% of the time)

spiral badge
#

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

rancid marten
#

oh i see, zulrah plugin is adding its nav button twice

worthy sparrow
#

is it

rancid marten
#

yeah

worthy sparrow
#

oh i see that

rancid marten
#

its fine i can just fix addNavigation back to handle that

deft hatch
rancid marten
#

no

deft hatch
#

is there any way to grab the audio at all? I would like to save it to an audio file

rancid marten
#

i dont think so. i dont know much about audio

ember flareBOT
wispy panther
#

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 😂

rancid marten
#

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

wispy panther
#

Great advice, thanks @rancid marten !!

ember flareBOT
#

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.

reef badger
#

buh?

#

they expected that we really did have a good reason for not implementing it that way?

hollow stratus
# rancid marten aha

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

GitHub

I feel like the logout tab should be at the bottom, other people might want another order. Being able to reorder it would be nice.

rancid marten
#

mm, can you test sidebar-reorder and see if you have the same issues on it?

ember flareBOT
hollow stratus
# rancid marten <@195672782053310466> have you experiemtned any with hidnig navbuttons? that is ...

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

GitHub

I feel like the logout tab should be at the bottom, other people might want another order. Being able to reorder it would be nice.

rancid marten
#

I can drag the world hopper at least ok without lag, but i also have a like $4k pc so idk

hollow stratus
rancid marten
#

can you try and run the branch I have from source and see what it does?

hollow stratus
#

yeah, I'll try that

ember flareBOT
hollow stratus
#

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

#

forgive the super ugly WIP code

rancid marten
#

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

rugged pivot
#

i'm still seeing duplicate navbuttons from that broken raid plugin

rancid marten
#

That’s because the plugin doesn’t remove the button on shutdown

#

Just don’t use it

#

Can you test the rest?

rugged pivot
#

yeah fair, just acts differently to release is all

#

yeah i'm trying to break it now

#

everything else seems to work fine now

hollow stratus
#

I have another busted plugin that caused me to tear my hair out and realized it was just poorly written 😄

rugged pivot
#

oh I broke something, how do I explain this

low hatch
#

Couldn't even get the GitHub link on the mobile version of the PH o7 Only saw it after I requested as Desktop page

#

cookwhat Removing and re-adding the overlay every gametick

rugged pivot
hollow stratus
hollow stratus
# rugged pivot making new profile made things explode EDIT: nvm, just having the config panel o...

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()

rugged pivot
#

i'll have a look, do you see the same issue I got when dragging with the Profiles tab selected btw?

hollow stratus
#

lemme test that

#

well my profiles straight up disappeared, but I didn't get the same exceptions you did

rugged pivot
#

is that just on adam's branch or with changes?

hollow stratus
rugged pivot
#

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

hollow stratus
#

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

#

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

ember flareBOT
#

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).

ember flareBOT
rancid marten
ember flareBOT
hearty fjord
#

Is radius markers still broken?

#

Oh, I see it's being asked almost daily

rancid marten
#

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?

upper valve
#

add "generic account progress tracking" to the flipping bingo bucket i guess

low hatch
#

Anyone bored? Make a word cloud of all Plugin Hub plugin names 👀

stuck shale
#

that is the wordcloud of the displaynames found on the current pluginhub manifest

low hatch
#

Not as bad as I imagined

#

Though "Plugin" seems redundant

stuck shale
#

the tags are a bit nicer as a cloud

#

the things you do in a DSU

worthy sparrow
#

now do every line of code

rancid marten
rugged pivot
#

in 1 minute yes

#

tbh the thrall is doing most of the work

quick path
#

hannah too busy choking the lizard to test the code

rugged pivot
#

well it doesnt freak out on the Profiles panel any more, so thats good

rancid marten
#

yeah

rugged pivot
#

is it meant to still be logging rebuild every step between start and end?

rancid marten
#

yeah ill remove the logging later

rugged pivot
#

it does feel snappier

rancid marten
#

i dont know, i noticed that too

#

i only see it there and nowhere else

rugged pivot
#

i've seen it on a few

rancid marten
#

i dont have that plugin

rugged pivot
#

you hurt me

rancid marten
#

yeah idk

rugged pivot
#

swing moment

rancid marten
#

i think its good enough

rugged pivot
rancid marten
#

lol

rugged pivot
#

is it wise to allow moving the config button?

rancid marten
#

yes

rugged pivot
#

then I say ship it

#

okay good the Reset Order menu does not mess with the screenshot menu when custom chrome is disabled

ember flareBOT
#

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...

quick path
#

hmm

topaz pierBOT
#

To find the logs, you can do one of the following:

  • If your client failed to open, click the Open logs folder button.
  • Open the screenshot directory by right-clicking 📷 Camera button, navigate 1 directory up, then open logs folder.
  • Navigate to %userprofile%\.runelite\logs on Windows or $HOME/.runelite/logs on 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.

quick path
#

o it's in the issue, nvm

hearty wraith
#

It's a weird one

ember flareBOT
hearty wraith
#

Seems to be an issue with the event bus?

quick path
hearty wraith
#

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.

amber rampart
#

you just have a lot of plugins that are throwing exceptions from subscribers

quick path
#

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

amber rampart
#

take a thread dump

hearty wraith
#

Got a tutorial for me on that one, chief?

amber rampart
#

there is a button in the debug plugin

hearty wraith
#

Gotcha, lemme see

ember flareBOT
quick path
#

brain is slightly fried, I didn't realize you're the person who opened the issue lol

hearty wraith
#

I assume I need to turn off safe mode for this?

quick path
#

yes

hearty wraith
#

Welp

#

Now my plugin hub won't respond

amber rampart
#

alternatively you can jcmd RuneLite Thread.print on non-release clients

hearty wraith
#

Which means taking out the ol' IntelliJ for a spin, doesn't it?

amber rampart
#

yes

hearty wraith
amber rampart
#

oh its this

#

I didn't know this just froze the client

#

install wmic and it will fix it

hearty wraith
#

Huh

#

Can you explain what that is and why I need it (since like this morning)?

#

I'm curious 🙂

amber rampart
#

the client uses it to get a machine id

#

you probably updated windows and it uninstalled it

oak rock
#

based on this its not a default feature anymore

amber rampart
#

yeah

hearty wraith
#

Interesting 😮

#

Weirdly, my W11 hasn't been updated recently

#

Mind the dutch

#

The march security update from march 18th?

amber rampart
#

if you open a command prompt and run wmic csproduct get UUID does it just hang?

hearty wraith
#

Ii does, yeah

#

it*

#

WMIC is installed tho

#

guess i'll try reinstalling

amber rampart
#

odd

hearty wraith
#

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?

amber rampart
#

I don't think so

hearty wraith
#

Aight, Ill update my issue with the steps to reproduce + fix and close it

#

Thanks a bunch fellas ❤️

ember flareBOT
#

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

snow needle
#

What is the threshold for size xl?

amber rampart
#

4k lines of diff

snow needle
#

and that's all filetypes, not just Java, right?

amber rampart
#

afaik yes

grizzled aspen
#

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},
snow needle
#

lmao so just go larger than 1e9 and no tag?

grizzled aspen
#

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

snow needle
#

so it's sum of added+deleted?

shy pine
rancid marten
#

oh yeah i can drop the rebuildSidebar() i guess

shy pine
#

Makes it slightly better. But as mentioned, overall it's not much of an issue

rancid marten
#

if swing isnt to blame then what controls the html rendering in swing?

rancid marten
#

hmm?

amber rampart
#

please do not remove the whole contents of the sidebar for ~any reason

rancid marten
#

ok, why

amber rampart
#

because swing hates removing stuff and it can take a long time and make html jank

rancid marten
#

I dont think i can reorder it without removing

shy pine
#

You'd probably have to remove only the component being reordered then tabbedPane#Insert to the new index

rancid marten
#

ive tried that but it was slower

amber rampart
#

you can re-insertTab in a new position

rancid marten
#

i tried that too

#

but also there are eg profile changes where the entire sidebar might change order, not just a single component

amber rampart
#

I would probably not change the order in the tabbed pane at all and just layout it in the new order

rancid marten
#

idk this seems to effectively work ok from my testing

wooden stump
#

admin vs admin
who will win

amber rampart
#

have you tried while not at the login screen?

rancid marten
#

no

#

have you tried it?

amber rampart
#

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

rancid marten
#

i have a very expensive pc

#

but it seems ok

stuck shale
#

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

rancid marten
#

notably i am dropping the ChangeEvent when dragging which is where a lot of the time is at

#

can you try it?

amber rampart
#

its definitely slow, but not horrible

#

on my desktop

rancid marten
#

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

amber rampart
#

I've spent a lot of time to explicitly avoid doing this

rancid marten
#

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

amber rampart
#
        final var defaultMouseListener = sidebar.getMouseListeners()[0];
        sidebar.removeMouseListener(defaultMouseListener);

what is this trying to do?

rancid marten
#

block the default behaviour in mousePressed()

#

from the mouselistener in RuneLiteTabbedPaneUI

amber rampart
#

very eww way of doing that

rancid marten
#

yes

amber rampart
#

I think there is a getter for it

rancid marten
#

for what?

amber rampart
#

for the Handler so you don't have to index into stuff

rancid marten
#

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

ember flareBOT
#

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 ...

stuck shale
#

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

amber rampart
#

hold control

#

mouse 3 is right mouse in swing land

stuck shale
#

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

amber rampart
#

try with a bunch of crap in loot tracker

stuck shale
#

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

#

😄

rancid marten
#

are you looking at improving the dragging?

amber rampart
#

yeah

rancid marten
#

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?

amber rampart
#

this is just to prevent it from collapsing when you try to drag right?

rancid marten
#

or opening yes

#

or, changing tabs i think

amber rampart
#

mmm, right, it opens too

amber rampart
#

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

rancid marten
#

Are you trying the layout thing?

amber rampart
#

yeah

topaz pierBOT
#

Search for https://github.com/TicTac7x returned no results.

ember flareBOT
ember flareBOT
valid wave
#

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?

quick path
#

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)

valid wave
#

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)

quick path
#

the eating animation is definitely not -1

valid wave
#

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

hollow stratus
hollow stratus
valid wave
#

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

covert marlin
#

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.

quick path
#

there isn't, no

twin rover
#

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 🥲

ember flareBOT
#

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

#
[runelite/runelite] New tag created: runelite-parent-1.12.23
#
[runelite/static.runelite.net] New branch created: 1.12.23-23843121516
amber rampart
#

@sinful lava quest helper failed

sinful lava
#

taking a look

sinful lava
amber rampart
#

you can merge now

ember flareBOT
#
[runelite/static.runelite.net] New branch created: cache-code-2026-04-01-rev237
rugged pivot
#

big login background pog

ember flareBOT
trim pumice
#

how do i disable a plugin? is it in runelite.properties or where i put the commit hash and repository?
guessing
disabled=true ?

reef badger
#

it's the file on the runelite/plugin-hub repo yeah

#

disabled=reason is best

amber rampart
#

yeah, put a reason there, its not a boolean

#

you can also put unavailable=reason and it will show the reason in the client

trim pumice
#

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

amber rampart
#

they probably were, they are all new ids now

late hare
#

ye no longer a bunch of multilocs

sharp knot
#

Oh neat

onyx patio
rancid marten
#

i wonder if that is an official client bug

onyx patio
#

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

rancid marten
#

mm yeah i see

onyx patio
#

yeah the it also makes the flame on the right off by a pixel but its aligned in relation to the image correctly

rugged pivot
#

I wasn't using stretched mode when I tested it for adam before so it's very immersive now

#

@ 1080p

ember flareBOT
heavy bobcat
#

That looks so much better

onyx patio
#

well it can resize on mobile, but you cant control it

#

can change the filtering option with the chat command tho

rancid marten
#

better?

#

hmm i still see the 1px line

onyx patio
#

it is 1px

ember flareBOT
rancid marten
#

im confused this should be correct

#

oh is it supposed to be 1px wide?

onyx patio
#

the background is correct if it has a 1px line in the middle cause its mirrored over that pixel

rancid marten
#

ok

onyx patio
#

the centre stone seems to be a pixel off tho

rancid marten
#

it cant be off because i didnt move it

onyx patio
#

in comparison to the background

rancid marten
#

i shifted the left side of the background 1px to the left if the canvas width is divisible by 2

onyx patio
#

hmmmmm

rancid marten
#

and then i drew the right side of the background at left + 544

#

which i think is right

#

try this

onyx patio
#

idk how to run this im just seeing if this is a java - official difference

ember flareBOT
onyx patio
#

im also going to bed but to illustrate when the backgrounds are alligned and i flip the layers

ember flareBOT
onyx patio
rancid marten
#

is there a way you can run that jar build above?

rugged pivot
#

o7

onyx patio
rugged pivot
#

jar is def skinnier

ember flareBOT
rugged pivot
#

yeah the right side is 1 pixel to the left in the jar vs current release, checking jagex client now

onyx patio
#

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

rugged pivot
onyx patio
#

or the otherway, both clients at 765x503 ontop eachother

rancid marten
#

oh

onyx patio
#

its bedtime for me. gl

ember flareBOT