#development

1 messages · Page 3 of 1

thin notch
#

(again, cant speak for the devs, just my interpretation of the convo weve had so far)

upper valve
#

custom anchors hub plugin api when @worthy sparrow

tulip wagon
#

What geheur is getting at is that our bar for quality for hub plugins is miles below the quality bar for core, but I think this is too integral to the client to let hub plugins even try to solve it tbh

#

It would be up to Adam, but I'd be very surprised

thin notch
#

ahh ok, yep it was my new-ness LOL

#

didnt know about that difference in where the bar was

#

makes a lot more sense

trail marten
#

offloading it to the hub might be the only way to do this.

#

(practically speaking)

dusty rain
#

Yeah I had submitted a hub plugin with a functional way to reorder (and resize) the sidebar icons, which was kinda janky and not optimal, but it worked haha. I'm sure actual devs could make pretty good plugins for it.

trail marten
#

oh interesting how did you accomplish that? code-wise?

trim pumice
#

at least you tried 🤣

ember flareBOT
thin notch
#

ive moved back to working on my own plugin

ember flareBOT
dusty rain
#

It's been a while but iirc I searched the Jtabbedpane for icons based on the tooltip, and then gave the user a field to enter something like "info:1" to give the Info config priority 1. It's been so long and I never knew what I was doing to begin with.

ember flareBOT
trail marten
upper valve
#

IIRC we are not really a fan of hub plugins diddling the swing tree is the thing

dusty rain
#

Yeah it was a pretty rough attempt haha 😄

ember flareBOT
shy pine
#

Any updates on this by chance? (API for choosing how to render RLObjects)

ember flareBOT
ember flareBOT
glad ermine
#

Any suggestions to help me differentiate between items dropped by another player that become visible to me, and items that are genuinely immediately dropped for me by the game, such as when opening chests or getting event (or quest?) rewards with a full inventory?

upper valve
#

the best prior art you would have is the loot tracker plugin

cunning hare
worthy sparrow
#

party leader isn't a concept

cunning hare
#

How would I then possibly be able to grab the leader of a created Party?
I assume, that I wouldn't be able to do that, right?

trail marten
#

yes you can't do that

rancid marten
#

specifically, parties don't have leaders

cunning hare
#

I thought the user creating a party would be flagged as leader in the backend.
Checked the docs and thought, there might be a workaround or that someone else asked a similar question, but thank you guys for the clear answer.

ember flareBOT
ember flareBOT
#

Type

Other

Operating System

Windows

OS Version

No response

Bug description

Runelite causing the following message in event viewer:

VBScript is scheduled for deprecation. Our telemetry indicates that your system is currently utilizing VBScript. We strongly recommend identifying and migrating away from any VBScript dependencies at the earliest. The following process has been detected as using VBScript. The associated process tree and call stack are provided below to ...

ember flareBOT
ember flareBOT
#

sorry not a security issue. after reading the documentation from microsoft it seems like everything will be fine until at least 2027 after which they will no longer support VBscript (and any potential security issue will no longer be fixed) but for now it seems like there is no problem. starting somewhere in 2027 VBScript FODs will no longer be enabled by default which could potentially cause issues with the client

rose void
#

Is there a way to grab the value of a config before the config manager loads? I am trying to change the type of a config from enum to set<enum> and I want to translate the old selected value into the new set. However it seems like once the config manager loads it sees the type of the saved config doesnt match and overwrites it with the default for the new type

rugged pivot
#

probably just want to use a new keyname and migrate the data instead (with some check/flag so you only migrate once)

teal cairn
#

Really grateful to see this plugin approved and on the hub! I was wondering what could be causing these images to not preview on the page of the plugin. Is it perhaps because the images are within a collapsible <details> section?
https://runelite.net/plugin-hub/show/streamerbot

restive garnet
#

pretty sure it needs a direct link to the image - the one embedded in the readme is a link that comes with all the Github framework around it, which is no good for Markdown rendering

#

basically if you go to the link you're currently using in readme and hit the 'raw' button you'll get a link you can use in Markdown without issue 🙂

teal cairn
#

I see! Thanks for the clarification 😄

amber rampart
#

if its a gif, we strip gifs

#

otherwise it should work

restive garnet
#

nah they're all PNGs

amber rampart
#

are you using git lfs?

teal cairn
#

Yes I am, I initially set it up for one specific large .mov file, guess I shouldn't have done that for .png too

amber rampart
#

using lfs on github is a bit of a trap since they bill you on bandwidth

teal cairn
#

oh yikes

#

good to know

#

So would removing .png from lfs fix the image previews? When I made the readme file I simply dragged and dropped the images into the code in intelliJ and it automatically grabs the path form the repository root as follows.

amber rampart
#

yeah

teal cairn
#

Alright, thanks!

glacial mulch
#

can someone give me some sort of sense of directions so i know what to expect after submitting a plugin. Like to what extend does code quality matter? How long does the submitall process take ( i did see there was a recent uptick in the amount of new plugins, so i assume it might take a bit longer then normal)?

heavy bobcat
#

Code quality is not checked at all. As long as you aren't breaking the rules, majorly breaking the client and your code is readable you should be good

#

And there is no set timeline for how long a plugin may take to get merged

worthy sparrow
#

well there are some basic code stuff also checked but you will be notified if you do it

trim pumice
#

smaller prs usually get reviewed quicker though, so worth keeping that in mind

glacial mulch
#

Right yea, that seems normal, altough i am not quite sure what is big small or medium

upper valve
#

what is your pr

glacial mulch
#

all or most of the newly added plugins get tagged as size-0

glacial mulch
#

its like 7k lines

upper valve
#

yeah this one is pushing it

glacial mulch
#

i get that

#

i can clean it up and cut it into smaller peaces

upper valve
#

my personal limit is like 5k for a new plugin but i think the line counter showed 6k so it's whatever. i'll get to it at some point

glacial mulch
#

what ill do is convert it into draft, clean up some console logs and other WIP stuff, then update the pr to that version

upper valve
#

you don't have to but ok

#

you're not at a threshold where i would straight up ignore this

glacial mulch
reef hound
#

noob question: are IDs defined for rune types anywhere (like air rune = 1, mind rune = 2 etc)? i didn't see any in the api docs but don't wanna redefine them if i don't have to
followup question: is there a proper way to search for such definitions rather than just peeking through the api docs and asking here if i'm uncertain?

stuck shale
#

items have ids yes

trail marten
#

for rune pouch there is something from client.getEnum

reef hound
# stuck shale items have ids yes

in this case i'm not dealing with actual runes, just enumerating types. i could use the item ids for that since they're unique anyway but i feel like that would be poor style

teal cairn
#

Anyone here who is experienced with git lfs? It seems that removing files from lfs can be a huge pain. The process apparently rewrites your commit history, causing existing commit hashes to change, which I assume will cause my plugin that's on the hub to not load anymore.

trail marten
#

what if you created a new repository?

#

(shot in the dark really)

amber rampart
#

that would just be rewriting it with extra steps

trail marten
#

but without the hash change.

amber rampart
#

the hash would still change

teal cairn
#

I was wondering if slightly renaming the .png files would let met store them normally again

trail marten
#

git remote add new-repo new-repo-url && git push new-repo head would create a new hash?

teal cairn
amber rampart
#

no, rewriting history would change the hash

teal cairn
#

oh wait, so it's possible to remove files from lfs without rewriting history?

amber rampart
#

if you want to fully scrub lfs from the history, you have to rewrite history

#

if you just want the file to not be in lfs in the future you can probably just remove it from lfs and create a new commit

#

which is probably better since we won't have to re-review your whole plugin

teal cairn
#

yeah exactly, I just want the .png files to be pre-viewable on the page, I'd still like to keep lfs for some large files that are just for downloading

rancid marten
#

cant you just git rm them and then readd them as non-lfs files? how big are the pngs?

teal cairn
#

what I tried was deleting the files in the project, which I assume also removes the git, commit, re-add them in the project, commit again and then pushed

#

the pngs are definitely small enough to be stored normally, in hindsight I should have just done that

amber rampart
teal cairn
#

Thanks 😄 I'll give it a go

rancid marten
#

do you have the plugin downloading things from lfs directly? github bills per gb so that can get pricey sort of fast depending on how big the files are

amber rampart
#

its just for his readme

#

which happens to break the viewer on site since it tries to load the lfs pointer as an image

teal cairn
#

The plugin doesn't use the files directly at all. The png files are meant for the readme. There is one .mov file though that's meant for the user to build an alert in OBS.

stuck shale
#

Does github's readme viewer work? You could have a specific branch that you redirect to

teal cairn
#

It does work on github yes, just not on the pluginhub page.

#

Also, will github also charge for people downloading that .mov file from te repo eventually?

#

In that case, I'll find another way to host that file too.

amber rampart
#

you get 10gb free per month, any views of it will count toward that

dusky crane
#

I hate lfs

teal cairn
#

Yeah I will avoid it like the plague in the future.

ember flareBOT
odd oasis
#

Is this still the stance of the RuneLite team?(see image below) I know that the discord style triggers (colons on each side of the trigger word i.e. :lol:) were added to the internal emoji plugin sometime in the last year, so I thought I'd ask before thinking about it too hard.

For context, I'm mulling over the idea of implementing discord style triggers in the custom emoji plugin. Since Jagex automatically formats messages on their end ("tHiS iS a tEsT mEsSaGe" gets formatted to "This is a test message"), we're limited in the choice of triggers we could use for the emojis. If an emoji is added that uses a commonly used word or phrase, it's probably be triggered inadvertently. Discord style triggers would solve this problem.

rancid marten
#

correct we added them to the core emoji plugin since

trail marten
#

is there an equivalent to client.getitemcount but for animations? I found that I crash if I put an animation id that doesn't exist.

#

it's not a huge thing for what I'm working on, just a minor annoyance.

rancid marten
#

no

amber rampart
trail marten
#

lmao what kind of black magic is that XD. Thanks abex!

#

thanks, this also explains why other ids also crash me

#

there's a few empty slots

amber rampart
#

yeah

#

or actually you probably want the last value in that array + 1

trail marten
#

+0 I would assume

amber rampart
#

the last value is the highest id, getItemCount is the highest id + 1

trail marten
#

ah yeah I see

#

I mean I think I need to iterate the array to find whether an id is valid because of the gaps

#

anyways this is the tool I need, thanks again.

amber rampart
#

where is a bad anim causing you to crash?

trail marten
#

12509

amber rampart
#

like what are you doing with it?

trail marten
#

I am setting it on the player

#

:anim 12509 also crashes

amber rampart
#

hmm, I wouldn't expect that to crash

trail marten
#
2026-01-20 15:05:31 PST [Client] ERROR injected-client - Client error
java.lang.NullPointerException: null
    at qb.av(qq.java:44)
    at fl.ih(fl.java:2859)
    at dt.iy(br.java:2591)
    at client.qg(client.java:12984)
    at client.bf(client.java:11642)
    at bm.bs(bm.java:463)
    at bm.gc(bm.java)
    at bm.run(bm.java:16938)
    at java.base/java.lang.Thread.run(Thread.java:829)
error_game_crash
amber rampart
#

ah, they rewrote this recently

trail marten
#

I feel like I didn't use to crash so that makes sense.

ember flareBOT
flat furnace
#

For my plugin, pvp leaderboard, could I have it so that people with the plugin have their rank displayed to those around them in the world? This would act as an opt-in system rather than putting it up for everyone that has been ranked outside the plugin.

I wanted to check to see if scouting is the main issue here, or if it's displaying someone's rating above their head in game while moving around in any fashion or a specific one.

rancid marten
#

seems fine I guess

flat furnace
#

Thanks Adam

#

Is there a way to see who has installed your plugin? If not I will have to go off who has submitted matches, which is also ok, just a little more janky

sharp knot
#

No

grizzled aspen
#

what you've describe sounds like you would still end up showing people who have uninstalled your plugin if they previously used it

flat furnace
#

Not sure if this is an acceptable compromise or not, but people that install -> never submit a match, they would never be on that list of auto-populate

#

I have it so that if people do that they only have a certain number of people they can lookup before it stops allowing them to lookup people without submitting a match, and I can tune that more aggresively too. Maybe something like if they've submitted a match in the last X timeframe?

#

But I'll figure it out and submit a pr and go from there unless someone has a good idea

upper valve
#

just make a toggle for "show my rank to other players" and then the plugin sends a heartbeat or something that invalidates after some minutes

ember flareBOT
feral marsh
#

Il get it eventually...

worthy sparrow
#

use enqueue not execute

feral marsh
#

oh?

#

fixed, I remember seeing something like that in the clan rank helper plugin earlier

rancid marten
#

anyone have an easy way to run a windows vm with emulated packet loss in order to test something?

feral marsh
rancid marten
#

oh that looks helpful

snow needle
#

What happens if multiple plugins subscribe to onPostItemComposition and modify the ItemComposition in the event? Do all the plugin subscriber methods get called sequentially in any specific order?

glass sandal
#

You can set the priority

#

Otherwise it's the registration order

odd oasis
#

Is it possible to render on multiple layers from a single overlay?

quick path
#

no

trim pumice
#

there was me thinking "New star added" was for the star mining plugin and was thinking "geez theres a lot of new stars" - just realised its the repo stars 🙈

ember flareBOT
#

802ca10 Update Quests to 2026-1-21 - RuneLite Cache-Code Autoupdater
9e32204 Update Scripts to 2026-1-21 - RuneLite Cache-Code Autoupdater
a734929 Update Item variations to 2026-1-21 - RuneLite Cache-Code Autoupdater
54693a2 Update Legacy ID classes to 2026-1-21 - RuneLite Cache-Code Autoupdater
362e38d Update GameVals to 2026-1-21 - RuneLite Cache-Code Autoupdater

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

@grim oar goal-tracker failed to build

ember flareBOT
#
[runelite/static.runelite.net] New branch created: cache-code-2026-01-21-rev235
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Win10

Bug description

Drops from the unique and tertiary tables at Hueycoatl drop in addition to other drops you get from the boss. I have 25kc in game but the tracker is showing 28 as I've received two drops from the unique table (two leather drops) and one drop from the tertiary (tooth half of key). Small bug I suppose but I believe the plugin is tracking each item dropped as one kill, so if you get two drops...

ember flareBOT
reef hound
#

When looking at existing plugins with a sidebar icon it seems most create it with a line like

final BufferedImage icon = ImageUtil.loadImageResource(getClass(), "icon.png");
When I tried to do this with the example plugin I got null argument exceptions on icon.png until I created a resources directory in src/main and then changed "icon.png" to "/icon.png" to lookup from the classpath root instead.
Is icon.png supposed to go somewhere else? I originally only had it in the root of the repository as the new plugin guide mentions but the null argument exception happened then too.

glass sandal
#

It shouldn’t be in src but in resources

#

For any plugin that uses that line look at where the file is located

worthy sparrow
#

icon.png in the repo root is for the plugin hub icon

reef hound
rancid marten
#

they are in runelite-client/src/main/resources though, under net/runelite/client etc

reef hound
#

oh, thank you. i didn't go looking deep enough.
so if i want to add a sidebar icon for an example plugin, do I just add a directory matching the name of that example plugin to the net/runelite/client/plugins directory and stick it in there?

ember flareBOT
#
[runelite/static.runelite.net] New branch created: cache-code-2026-01-21-c1-rev235
ember flareBOT
robust star
#

Hey guys, I am trying to update my plugin and have not run it since the gradle changes. seems it does not run anymore. I tried to copy the build.gradle from example plugin and I dont ever get the green triangle for run. Same if I make a new copy of ExamplePlugin template, when I get to step 5 - Run the plugin, I dont ever see a green triangle in the gradle file.

edit: will leave incase anyone has same problem. fixed by hitting "execute gradle task" and typing run in there

quick path
#

the client build changes shouldn't impact running hub plugins afaik

trail marten
#

on its right-click menu

#

oh nvm it says something else now mb

heavy bobcat
#

Probably just needed to gradle sync and then the button would pop up

rugged pivot
#

Well the new build.gradle has its own run task now

heavy bobcat
#

Yeah but I would bet after copy/pasting the contents it won't show the button til you sync

ember flareBOT
cunning hare
#

While testing a current wip plugin, I can configure the IDE to allow multiple instances (second gradle config), but how would I also make it use a different login?

Should I start the first instance, log in via jagex launcher into another account to generate the credential file once again new and then run the second gradle instance?

trim pumice
#

someone will tell me im way off as i usually am 😅 but would it work if you run the instance, swap out the credentials file and then run another instance?

#

(which is basically what you just said now i re-read it)

worthy sparrow
cunning hare
worthy sparrow
#

No I mean setting the home dir

cunning hare
cunning hare
worthy sparrow
#

Passing -Duser.home=directory/some/where in the run configuration

cunning hare
#

Ah and that would allow me to create two different credential files instead of overwriting one file.

And I guess I only have then to configure VM-Options within the second debugger instance, right?

worthy sparrow
#

only one of them, yea

cunning hare
worthy sparrow
#

it's a environment variable not vm options, sorry

#

if you click the little icon on the right side, you can edit it there

cunning hare
heavy bobcat
#

I think without the D

worthy sparrow
#

without the d

#

if you scroll down in the list, you will see it and you can edit it there and it will populate

ember flareBOT
snow needle
#

Is there a way to reset models that are equipped? I am calling client.getItemModelCache().reset(); but this only seems to affect ground items. In the vid you can see what I mean, once the item is equipped the model is snapshotted and doesn't get refreshed until the item is removed and re-equipped.

cunning hare
trail marten
#

player.getPlayerComposition().setHash();

#

Maybe that works?

#

Might have to modifyplayer.getPlayerComposition().getEquipmentIds() first

stuck shale
glad ermine
#

Hypothetically, if you would rewrite Runelite from scratch, what are the very first things you'd start with to get something that works?

#

Like the most barebones runnable client that's not just pulling the client and running that

hollow parrot
#

Mapping obfuscated functions/vars to known functions/vars and exposing them for use

ember flareBOT
rose void
#

I'm interested in metrics on each of my features in my plugin and how many people use each one. Is there any native way to do that? If not I'm guessing there isn't a way to put that in without getting the warning about sending data to a third party which isn't worth it for metrics

worthy sparrow
#

no and correct

rose void
#

Thanks for confirming

pastel tree
#

Hello guys. Using the cache tools, is it possible to know if the latest cache index metadata has finished downloading? I imagine that meta data is downloaded in the background, in the same way that the main cache data is.

#

Basically, my aim to is know what the latest online revisions are for the cache indexes.

#

But I know if I check those revisions too early after the client starts, I could be getting outdated revision numbers.

pastel tree
#

Then again, I could be wrong in my assumption. maybe the revision metadata is downloaded before you reach the login screen🤔

ember flareBOT
cunning hare
cunning hare
ember flareBOT
#

I have had this issue EXCEPTION_ACCESS_VIOLATION and thought it was a CPU issue. Installing Eclipse Temurin JDK 25 seems to have fixed it with the Java 25 compiler fixes in that version compared to the outdated one I was on.

Prior to this I tried almost all steps here including DDU reinstalling card drivers, setting "CPU Core ratio"
manually set it to desired speed 3.9ghz & "Sync all cores". Applied a "Positive Voltage Offset", Increase Load Line Calibration, ASUS MultiCore Enhancement is s...

trim pumice
#

8400+ translations in that danish translation plugin, thats some dedicated (well unless ai and not proof read) lol

ember flareBOT
#

Type

Crash or hang

Operating System

Windows

OS Version

Windows 11

Bug description

I apologize, I'm not the most computer savvy person in the world and have had friends try to help me through this.

Attempting to play Guardians of the rift on world 445, the game will cause my entire computer to freeze each time (I can play Pest Control without issue).

Runelite also cannot be running OSRS while watching Youtube videos or the computer will freeze. This hasn't always bee...

trail marten
#

"Staff": "Personale",

worthy sparrow
#

da runescapeo

trim pumice
#

tempted to make ghost translation plugin, "wooo", "woo woo woo", how infuriating that would be

worthy sparrow
#

sounds awesome

#

original idea too

trim pumice
#

only tob spectators can understand anything

worthy sparrow
#

and amulet of ghost speak

trim pumice
#

inneffective, just like in sailing

#

(did they ever fix that? lol)

trail marten
#

replace censored ******** in chat with "woo woo"

trim pumice
#

"you absolute woo woo"

#

lmao that would actually work
"go woo woo yourself"
"im so woo wooing tired"

trim pumice
trail marten
#

I don't believe you

trim pumice
#

deepl i normally trust

trail marten
#

did you include context like "I used my staff to beat the pker over the head"?

trim pumice
#

lmaoo im thick

worthy sparrow
#

you are now responsible for reviewing this pr

trim pumice
#

dont ever let me review this thing

#

^

#

i wonder how it deals with those ambigiouties though. like is there any staff workers in the game

upper valve
#

i like how someone made a really good exhaustive translation plugin that can do anything but apparently nobody cares, knows it exists, or can figure out how to use it to the point that making their own whole ass translation plugin is easier

worthy sparrow
#

is it the api one

#

no one wants to pay money for a plugin though

#

a smart translation plugin would crawl the wiki and download every conversation and item and option thru whatever chisel is

upper valve
#

oh i didn't realize you had to like pay for it

#

ok that's stupid then

#

thought they had some deepl-based backend

worthy sparrow
#

I mean api's have usage tokens usually

trim pumice
#

is the wiki all input through crowdsourcing and manual input?

trim pumice
# upper valve thought they had some deepl-based backend

i dont even think that tbh, like it would translate the same phrases multiple times then, seems a waste. Like ron said, having some source that is kept updated that you can scrape every so often (like updates time or something) would be a) much faster and b) more efficent

upper valve
#

i'm referring to runelingual

#

i don't know that much about how it works other than the original reviewer had high praise for it

trail marten
#

it seems to work for japanese. not for german/french though

trim pumice
#

theres so many plugins for translations 🙈

trim pumice
surreal lance
#

Hey guys, is there a way to detect which tab I’m currently on when checking for example scoreboards of ToB? How can I tell if I’m in Entry/Normal/Hard mode? I looked at the widget inspector but couldn’t find anything that indicates which tab is active

rancid marten
#

use the var inspector and see if a var changes when you change tab

surreal lance
#

Thanks Adam 🙏🏻

sharp knot
surreal lance
#

I got the name of the variable TOB_SCOREBOARD_TAB, but how do I find its integer ID so I can access its value? I don’t see IDs in the inspector

rancid marten
#

getVarbitValue(VarbitID.TOB_SCOREBOARD_TAB)

surreal lance
#

I looked at all the defined variables here (did a search on all files): https://github.com/runelite/runelite/blob/02e33cb1e69c9c0de18ed686f22ed8de9582671c/runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java#L226 but the variable I mentioned doesn't exist although I see it in the Vars Inspector

GitHub

Open source Old School RuneScape client. Contribute to runelite/runelite development by creating an account on GitHub.

amber rampart
#

varclient != varbit

surreal lance
#

Gave the link as an example, I did a search over all files including Varbits.java

surreal lance
#

Thanks now it worked for me !

glad ermine
#

Can we make M4 and M5 bindable as hotkeys

amber rampart
#

they aren't key events so not really

glad ermine
#

Can we use them at all? I'd love to be able to check a checkbox to use m4 as ping button

amber rampart
#

yeah

#

there is a pull that makes the keybind stuff support it but it breaks stuff iirc

glad ermine
amber rampart
#

yeah, I think its still wrong tho

ember flareBOT
ember flareBOT
#
[runelite/static.runelite.net] New branch created: wiki-data-2026-01-23
ember flareBOT
upper valve
#

new plugin time

ember flareBOT
topaz pierBOT
#

Use /ghauth command to get github roles and be allowed to post in #development

willow plinth
#

Hey all, I'm working on a plugin to add an extra close button to the bottom right of the bank for easier bank standing but I'm running into an issue where my button is only closing the interface client side. Does anyone know how I could actually replicate the close button OR make the press of this button press escape (or rebound key) to close interfaces? You can view the plugin's repo here https://github.com/JohnMichaelRouth/close-bank if anyone wants to clone or take a look. Anyone have any ideas?

ember flareBOT
quick path
topaz pierBOT
ember flareBOT
willow plinth
#

D: is there a way that pressing this could press the escape key? I'm trying to single hand game without having to move my mouse super high up to the normal close button :(

quick path
#

you could try to reposition the actual close button

#

but chances are, no

willow plinth
#

I will need to figure that out, thank you for the guidance

#

Are there any plugins that you know off of the top of your head that do something similar? I know of ones that move entire windows but not parts of interfaces

thorn grotto
#

you could also have a gamer mouse and bind esc to one of the side buttons

willow plinth
visual notch
#

I am setting up an env to make a plugin and running into this problem. I searched this channel in case it has been already discussed, but the mentioned solve did not work for me.
Error: Main method not found in class com.gauntletlocker.GauntletLockerPlugin, please define the main method as:

sinful lava
visual notch
willow plinth
#

LMAO

#

i love the name

glass sandal
#

Can you just add *,the gauntlet to Custom Hides in Custom Menu Swaps?

visual notch
glass sandal
#

Well it's also achievable without creating a new plugin

willow plinth
#

Hello, I opened a PR and the github workflow found out that my build.gradle was stinky, i reverted all changes that i made to it so its just the example build.gradle
https://github.com/runelite/plugin-hub/pull/10304
How can I restart this check on my PR?

glass sandal
#

Push a new commit to your pr

sinful lava
#

your plugin does run fine for me

visual notch
sinful lava
#

where is it you're running into the issue?

visual notch
#

I'm trying to run this.

    classpath = sourceSets.test.runtimeClasspath
    mainClass = pluginMainClass

    jvmArgs "-ea"
    args "--developer-mode", "--debug"
}```
#

Never worked with gradle before, so I just followed the how to contribute to plugins section form the plugin hub repo

ember flareBOT
sinful lava
#

template shows that pluginMainClass should point at your test class
https://github.com/runelite/plugin-hub/blob/master/templateplugin/build.gradle#L17
you're pointing it at your plugin class

diff --git a/build.gradle b/build.gradle
index 87c21f2..1716889 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,7 +14,7 @@ repositories {
 }
 
 def runeLiteVersion = 'latest.release'
-def pluginMainClass = 'com.gauntletlocker.GauntletLockerPlugin'
+def pluginMainClass = 'com.gauntletlocker.GauntletLockerPluginTest'
 
 dependencies {
     compileOnly group: 'net.runelite', name:'client', version: runeLiteVersion
visual notch
#

It's working now, thank you for your time mate

#

cheers

sinful lava
#

np, gl

trim pumice
#

code blind not stupid, happens - brain reads what it wants to read

willow plinth
#

@ cooper, thank you for babysitting my pr and helping me

visual notch
#

Is there a resource for animation ids? I couldn't see an option in dev tools (i might be blind tho)

pastel tree
#

dev tools do show anim ids

#

there is no "anim id" viewer mode, but if you show players, it will show the anim id aloongside the highlighted player

#

On another note, I have a question for you guys. What kind of object is this sailing arrow?

#

I want to detect it in a plugin, but I dont know how.

ionic shore
#

Hi, does anyone know if there's a resource on all possible clan broadcast message formats?

late hare
olive pilot
#

Submitted my first plugin last night. I'm excited to see if it get accepted

pastel tree
late hare
#

57378
57379

#

one of those two

#

one is used on minimap i think

glass sandal
#

You could also use a ScheduledExecutorService that runs every UPDATE_DELAY_MS rather than using the gametick

visual notch
#

I'm trying to play the stun animation, are the little yellow birds not part of the animations? And if they aren't what are they? I couldn't find anything with dev tools

pastel tree
late hare
#

in the dev tools it's the number after G:

olive pilot
pastel tree
late hare
#

they're in a special place in the cache, not really a common one

pastel tree
#

oh ok, I guess they do not have a standard definition. unless you count "defaults" as a definition

late hare
#

yeah, they're not a config in the same way items, npcs, etc are

pastel tree
trim pumice
#

do PR's go to the back of the queue again once reviewed and feedback is given?

pastel tree
#

This field in actor.java is not always accurate to it's description.

`/**
 * Gets the current animation the actor is performing.
 *
 * @return the animation ID
 * @see net.runelite.api.gameval.AnimationID
 */
int getAnimation();`

There are times when the actor is infact not performing the animation returned here. They are not common, but they do happen on some bosses. I believe this is because the client does some additional checks before actually applying the animation set on this field.

#

Would any devs with source access be interested in doing something about this?

#

I think I know where the checks are, im happy to show them if that helps.

sinful lava
upper valve
trim pumice
#

ahh i didnt know if others would then review the additional changes, yeah no worries 🙂 just wondered how it worked

ember flareBOT
ember flareBOT
#

Simulates boss kills, drops, and pet drops with realistic messages.

Features:

  • Boss drop simulation with kill count and fight duration
  • Pet drop simulation (52 pets: 9 skilling, 43 boss pets)
  • Collection log integration with popup notifications
  • Clan chat announcements with ironman icons
  • Auto-increment kill count option
  • Value randomization (5%) for drops
  • Quick mode switching hotkey
  • Comprehensive test suite with 16 unit tests

Configuration includes boss settings, drop...

rugged pivot
#

what a fascinating plugin layout

heavy bobcat
#

why does AI always insist on using reflection for publicly available properties

trim pumice
#

i guess thats what its seen from where its learnt

upper valve
#

comprehensive test suite with 16 unit tests

autumn star
#

has tests, lgtm

upper valve
#

this also sends chat messages which is obviously not allowed

trim pumice
#

does java not have template strings?

upper valve
#

no

#

but there's printf style format with String.format

trim pumice
#

yeah, that would be much nicer than 12 lines of append haha

neon haven
#

gotta squeeze out every last drop of performance and use the stringbuilder :^)

snow needle
#

About 20% of the time when I start my client and my plugin loads I get a null pointer at this stack trace:

ERROR n.r.client.callback.ClientThread - Exception in invoke
yg: 
    at ab.at(ab.java:58172)
    at fj.av(fj.java:151)
    at client.xz(client.java:17629)
    at client.getItemDefinition(client.java:1512)
    at net.runelite.client.game.ItemManager.getItemComposition(ItemManager.java:427)
    at my code running on startup in client thread invokeLater

It seems like the item definitions are not fully loaded when my plugin is started. What's the best way to handle this? Just try catch and retry?

rancid marten
#

wait until the game state is >= LOGIN_SCREEN

ember flareBOT
oak rock
#

Wtf

heavy bobcat
#

Ah, my favorite RL version : Vjvjhgh Vjvjgj

reef badger
#

inshallah the runelite team will be cursed

upper valve
#

mhm mhm

olive pilot
quick path
#

Where can I install Zainali,2585? Is that like a new linux distro?

olive pilot
#

I heard it is the new Distro replacing Red Star OS 👀

quick path
#

I thought hannah montana linux was the replacement for that

olive pilot
#

Nooo! that replaced the Justin Bieber Linux

ember flareBOT
ember flareBOT
#

Considering you're using on a 14th gen Intel CPU with a really old microcode version (0x11f), your crashes are probably a result of the Intel vmin shift issue. [Reference] Your JVM crash logs look fairly consistent with what we've seen in the past related to that issue.

The crash logs aren't related to the freezes you're experiencing though, as JVM ...

ember flareBOT
lofty blade
#

Hello! Is there a resource where I can learn more about how to create viewable children on a widget? I'm trying to create a "widget interface" where a user can click on something. I hope that makes sense

ember flareBOT
trim pumice
#

youre busy tonight haha

upper valve
#

my router broke

ember flareBOT
lofty blade
worthy sparrow
#

the answer is we don't really have a resource for it

#

you can look for createChild in the source code

glass sandal
#

You could look at how the View DPS button is added by the core wiki plugin

lofty blade
#

Thank you! I’ll check that out

willow plinth
#

would anyone know about this?

sharp knot
#

Read like two messages after that

#

Oh wait that was your message, someone said no when you asked a few hours ago, not sure why you asked again

willow plinth
#

I was asking again to reclarify that this would keep the inventory background it clickthroughable, just a smaller area

#

as opposed to something like this

sharp knot
#

Still a no almost certainly

topaz pierBOT
willow plinth
#

darn

#

well thank y'all and i hope you have a nice day

willow plinth
solid shadow
#

Any movement or resizing of click zones for any interface or component under combat options, inventory, worn equipment, or spell book

This as well most likely from the jagex guidelines

sharp knot
#

You're essentially trying to skirt around something that was removed for ~the same reason it was removed as well

willow plinth
#

red clicking through an item in your inventory with modern clickthrough was certainly way to far, was hoping that this would be less abusable and more just qol
but gamma is right and i'll drop this idea

ember flareBOT
ember flareBOT
ember flareBOT
cursive sail
#

is the party server getting fried right now? seeing pings show up very late and in clumps of several at a time

rancid marten
#

yes

#

well its getting pretty high traffic, but not an abnormal amount

oak grotto
#

Does HitsplatApplied event get triggered on every hit, even if it doesn't show up on your client (since I think you can only see a max of 4 on one enemy)? I think the answer is yes but wanted to confirm

rancid marten
#

yeah

oak grotto
#

Thanks!

ember flareBOT
#

Also having a similar issue, however for me the legacy GPU plugin does not resolve and I have similar issues with the 117 HD plugin. Only way I've been able to keep the RuneLite client running for longer than ~30 minutes without crashing is by disabling all GPU related plugins. I'll attach some of the error stacks below for both GPU and 117 HD.

`2026-01-24 13:55:28 CST [Client] ERROR injected-client - Client error
java.lang.RuntimeException: unable to map GL buffer 798 size 4194304
at net...

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
#

I am also having this issue. Massive memory leaks, client spiking to well over 4GB ram usage. I have argument added to allow 4GB allocation but even that isn’t enough to prevent it sometimes. It’s the GPU plugin causing the issue, when disabled it’s fine. It seems to spike when teleporting or loading in new areas IE after using charter ship. I would be willing to bet the other open issue RE GOTR is the same as above

#

I’d be willing to bet this is the same issue reported here:

https://github.com/runelite/runelite/issues/19804

Almost certainly an issue with GPU plugin. When disabled it doesn’t happen. Some have suggested rolling nvidia driver back to most recent stable version, however I was experiencing these issues even before I updated my drivers

shy pine
#

Things have gone too far, even Jagex has their own bingo plugin now

oak rock
#

Wasn't that teased last league

shy pine
#

Yeah I think they might've mentioned it, maybe around the community event?

glass sandal
#

Well yea, that was the whole premise of gridmaster

#

Showing/testing their bingo UI

olive pilot
#

I did enjoy Gridmaster, just didn't last very long - As in it was all quite easy

quick path
#

I enjoyed it for the 2 days it took to finish it

reef badger
#

xd

quick path
#

it gave me a second chance to enjoy the khopesh, my beloved

trail marten
#

it was too fast imo, skipped too much of the game to be fully satisfying

#

but not bad for the short timeframe

olive pilot
#

That is where leagues is superior

#

Love me a leagues

quick path
#

sure, but it was a nice short event for a change

#

I had thought it'd take longer to complete, until I snowballed big-time halfway through

trim pumice
#

I wish i did it :(, i was burned out from rs at the time though

ember flareBOT
ember flareBOT
ember flareBOT
rose void
#

I like the part where they joined github ~today~ less than 30 minutes ago and already are getting their comments marked as spam

rancid marten
#

I think thats probably someone here marking it as spam

reef badger
#

ye

ember flareBOT
rancid marten
#

@granite quest you might be interested in that^

#

sort of related to tcp rtt but not

granite quest
#

Thanks for the heads up. I'm looking to get a PR out for that sometime this week

#

looks like that commit has most of what is needed for rtt using SIO_TCP_INFO. though i didnt have the same experience with the error code

rancid marten
#

oh really

#

you mean WSAGetLastError()?

#

hm

#

i thought it didnt work but maybe im wrong

granite quest
#

yeah it was working for me

quick path
# ember flare

I actually had a thought on how we might fix that: by not writing default configs to file

#

I'll admit I haven't looked into changing that behavior yet though

rancid marten
#

I think there is some (or used to be) issue with how the config syncing stuff works

#

that makes it unobviously hard

quick path
#

That's part of what I want to do before I touch the code since I figure there is, or was, some reason it works how it does now

rancid marten
#

I think the config sync stuff has changed a lot since then so im not sure if it still is that way or not but yeah

quick path
#

But it'd be a big win if we could only sync changed configs instead of everything

rancid marten
#

I think it does only sync changed configs doesnt it?

quick path
#

Relative to last saved yes, but I'm pretty sure syncing a fresh profile sends default configs for every installed plugin

rancid marten
#

oh yeah

#

not sure that would be a "big win" since that happens almost never but yeah

quick path
#

It'd be nice to be able to slim down configs over time even if it doesn't happen right away

#

Given that config is (still?) the majority of our API usage

amber rampart
#

there is also a thing where null and unset are handled differently on the client vs the server

quick path
#

yeah

ember flareBOT
ember flareBOT
#

As alex stated, this is very similar to the issue I reported earlier. Seems like it's related to ARM-based computers.

Nyx, open task manager and monitor the RAM usage while playing runescape. In my friend's case, we would see the ram usage starting at around 1GB and steadily increasing to 19GB before crashing.

In that case, the temporary solution was to use GPU (Legacy) to avoid the memory leak issues

ember flareBOT
ember flareBOT
ember flareBOT
tulip wagon
#

that was a shockingly large, yet unbloated, diff for a small-scope plugin

ember flareBOT
trail marten
#

What would be the hard part of allowing game world overlays to draw at full resolution in stretched mode? I've seen a few people asking about this recently.
It seems like it would be simple to do but I don't know the stretched mode code.

#

(I mean simple in a technical sense. not in a sense of having to busywork rewrite every existing overlay to use it and scale itself on its own for people who want larger text).

rancid marten
#

a lot of them draw at specific layers (like eg under widgets or under/after specific interfaces, or under actor 2d), so they draw at various points in the middle of a client frame

#

and in stretched mode the client draws at a small resolution and gets scaled up as the last step

#

probably the best way to fix it would be to make stretched mode make the client actually just draw at a larger resolution and do no post-stretching, but that would involve basically replacing all of the ui rendering code I think

#

idk really of another way to fix it easily

#

you would have to have intermediate stretching steps I think where it drew layer -> stretch that -> render overlays -> repaet

#

or something

trail marten
#

what if you only allowed this for ABOVE_SCENE? That covers a lot of overlays that draw lines that look blurry in stretched mode.

rancid marten
#

you could do it for ALWAYS_ON_TOP just by drawing over top of the final stretched image

#

but that isnt so great since it would draw eg tile markers above the inventory etc

trail marten
#

can't you draw directly on the buffer that the game world renders into? that one isn't stretched.

rancid marten
#

you might be able to do it for ABOVE_SCENE with gpu

ember flareBOT
trail marten
#

would be a neat feature but I understand if it's a huge amount of work/user complaints.

rancid marten
#

idk really how hard that would be to do offhand

trail marten
#

Well anyways thanks for the insight. This topic feels a lot more challenging than I initially though (largely due to me realizing you'd have to rewrite so many plugins, lol).

#

Shame it can't be easily done.

ember flareBOT
#

Reviving this thread, maybe my most frustrating experience with runelite atm -- I'd be happy to try and help out.

@Adam- when you say:

Not easily. The overlays are drawn to the same buffer that the game UI is drawn to. It could be possible to split them apart for some of the overlays, but it is not anything I've looked at.

Can you expand a little more technically about what you mean? What relevant directories could you point us in for the code involved?

rancid marten
#

is that a coincidence

upper valve
#

please point my llm me to the directories with the code involved

trail marten
#

dunno if that comment is by the same guy though.

granite quest
# rancid marten sort of related to tcp rtt but not

Is the goal here to estimate packet loss? I'm curious on how the data looked for RetransmitCalculator. Also would you consider defaulting to displaying TCP rtt "ping" over ICMP ping in the ping display? I see we're already logging that information.

ember flareBOT
rancid marten
#

so Ive sort of not worked on it

#

but I could do that yeah

#

I would not make it show rtt if icmp isnt blocked though

granite quest
rancid marten
#

Also would you consider defaulting to displaying TCP rtt "ping" over ICMP ping in the ping display?
Oh, that isn't what you had said here so I clarified

granite quest
#

I was curious on if your thoughts had changed since I saw the rtt in the trace logs

rancid marten
#

also i talked with one of the infra engineers and they were open to the idea of a per-region endpoint specifically to icmp ping to (so not pinging the world, but just an endpoint in the region the world is in). But I dont know how realistically theyll be able to deliver that or not is

#

so we should probably just go with the rtt thing for now until shown otherwise

granite quest
rancid marten
#

yeah

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
#

System crashes are not going to appear in your client logs, and they aren't directly a RuneLite problem. They are, in nearly every case, either related to GPU drivers or more likely in your case, your CPU. Especially since you're on a very out of date microcode that doesn't resolve the well-documented issues with your CPU, I am very inclined to say it's related to that.

Your best bet is probably to check Event Viewer around the time of the system crash, although I'm not sure if vmin-shift re...

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

No response

Bug description

I was trying to find out which plugin was generating chat notifications every time I recovered special attack energy, so I searched for both "special" and "spec" in the plugins list but no relevant results came up. Eventually I found out it's the "Idle notifier" plugin, but even though it literally has an option called "Spec notification", it doesn't show up when I search for "spec...

#

The crashes I’m experiencing, are the result of a memory leak. The issues I’m having sound very similar to the issues experienced by this user and those in the cross post (as well as various others on Reddit and in discords). One single RL client will use upwards of 4GB before eventually crashing. It typically spikes whenever I change area, for instance after a teleport. The crashes started happening after RL 1.12.12.1 was pushed. It’s not my GPU driver, as i’ve checked that. I wouldn’t imagi...

#

The crashes I’m experiencing, are the result of a memory leak. The issues I’m having sound very similar to the issues experienced by this user and those in the cross post (as well as various others on Reddit and in discords). One single RL client will use upwards of 4GB before eventually crashing. It typically spikes whenever I change area, for instance after a teleport. The crashes started happening after RL 1.12.12.1 was pushed. It’s not my GPU driver, as i’ve checked that. I wouldn’t ima...

ember flareBOT
rose void
#

Is there a way to see plug-in utilization by CPU or memory

#

A list of all of them or individual

rancid marten
#

the debug plugin will show retained memory size

#

it also has a profiler for cpu usage but thats a bit harder to use

rose void
#

I'm on my laptop, can you get debug tools without building?

glass sandal
#

Its on the plugin hub

rose void
#

Ty

rancid marten
#

you might have to increase the memory limit on rl for it to work depending on how clolse you are

flat furnace
ember flareBOT
flat furnace
#

Thank you

dawn heath
#

I've been tinkering with a cosmetic plugin that would let you RP as an amputee who has lost a hand/arm. I've found that I can make both hands/arms disappear from the player model by zeroing out the equipmentId e.g. for KitType.HANDS.

My question: is it at all possible to mess with just ONE side of the character model? My initial testing shows me everything is symmetrical left + right with my current approach.

rancid marten
#

Both arms and hands are the same kit and model I think

sharp knot
#

Yeah that sounds right

dawn heath
#

Got it thanks, seems like it's not going to work then

ember flareBOT
ember flareBOT
rugged pivot
#

gross

upper valve
#

200% AI, they made it with AI and the plugin is AI

rugged pivot
#

truly I would have left that in queue forever

upper valve
#

i would never find inner peace if i had to like maintain a list of PRs that i thought were stupid and ignored them so I've just become indifferent

#

it was like 900 lines of code, size is the only thing I really care about

reef badger
#

also i sniped the only needed change

rugged pivot
#

maybe redditors are right about the plugin hub

upper valve
#

what do redditors say about the plugin hub

reef badger
#

sucks

#

but jokes on them we say that too

upper valve
#

the plugin hub is all they got now that jagex fucked off their API lol

rugged pivot
#

I don't actually care that much and it'll get like 3 downloads but that shit is actively bad for people's brains and the environment and I'd happily see it rejected

ember flareBOT
sharp knot
stuck shale
rugged pivot
#

i wouldn't go as far as your take personally :L

ember flareBOT
rancid marten
rose void
#

taking a look

rose void
#

fix is up

#

I refactored that entire plugin and its better now but it still needs a ton of work

ember flareBOT
granite abyss
#

Does anyone know of an existing (and approximate) mapping of Hiscore bosses to NpcID's? It seems like something someone would have done, but I can't find anything.

stuck shale
#

no i don't think there is one either

ember flareBOT
oak grotto
#

Might be a dumb question, but how come the Developer Tools plugin only loads when I run via the gradle run task, but not when I run via IntelliJ test method, even with same jvm args?

ember flareBOT
worthy sparrow
oak grotto
#

I have those 🤔

#

-ea --debug --developer-mode

amber rampart
#

debug and dev mode are not vm args

oak grotto
#

derp.

#

thanks

#

idk how i misread that ... lol thanks ... also in hindsight its obvious they're not jvm args lol

ember flareBOT
ember flareBOT
#

8449e33 Update Widget IDs to 2026-1-28 - RuneLite Cache-Code Autoupdater
cdac542 Update Item variations to 2026-1-28 - RuneLite Cache-Code Autoupdater
e9bbbf5 Update Script arguments to 2026-1-28 - RuneLite Cache-Code Autoupdater
ea5c0c7 Update Legacy ID classes to 2026-1-28 - RuneLite Cache-Code Autoupdater
8b4cdd0 Update Scripts to 2026-1-28 - RuneLite Cache-Code Autoupdater

#
[runelite/runelite] New tag created: runelite-parent-1.12.14
#
[runelite/static.runelite.net] New branch created: 1.12.14-21435619987
low hatch
#

Am I wrong in saying that NPCComposition, more specifically, NPCComposition#getActions is retrieved from the game cache?

amber rampart
#

that is basically correct

ember flareBOT
low hatch
#

Basically? What if I clarify with my use case 🤔 My use case is checking to see if a NPC has the dismiss option (unless RandomEventPlugin is hiding dismiss option on other people's random event), and if it does have dismiss, then that's the one I want to track since it would be the player's

low hatch
# amber rampart that is basically correct

or maybe to lessen the confusion, when you say basically correct, do you mean that when calling #getActions** it won't** return currently active/available menu options?

amber rampart
#

getActions is from the cache, so it will have every option the npc can have, even if its not visible

low hatch
#

Damnit

#

Alright I guess I'll find another way

amber rampart
#

idk exactly which mechanism is used for random event ops

low hatch
#

For the RandomEventPlugin y'all use MenuEntryAdded

#

If that's what you're referring to

amber rampart
#

tbh I forgot that was an us feature and not a jagex feature

low hatch
#

Lmfao same. I didn't realize y'all did it until I saw the code.

#

I'm trying to come up with a reliable way to highlight the right frog to talk to during the frog random event while also considering an edge case where someone close to you also gets the event

amber rampart
#

I think that is somewhat hard

low hatch
#

Was hoping I could just do it onNpcSpawned but if I can't get the current menu options then doesn't seem like it

amber rampart
#

you might be able to do something smart with npc indicies

ember flareBOT
#
[runelite/static.runelite.net] New branch created: cache-code-2026-01-28-rev235
low hatch
#

I suppose you mean for cases where there are two events, to track when it spawns and fetch the index that corresponds?

ember flareBOT
low hatch
#

But then what if they spawn at the same time 🙃

#

maybe I'm reading into the edge cases too much

#

At the end of the day I guess the player will click the one closest to them lmao

amber rampart
#

I assume they spawn with mostly sequential indexes

low hatch
#

I wouldn't know anything about that so I'll talk your word for it. The only thing I know about indexes in the game are that PID used to be determined by that until they changed it

#

Thanks for the advice

trail marten
#

Good morning

#

Did btl survive?

amber rampart
#

it complied at least

#

something is generating a lot of bank errors in the telemetry though, idk what

autumn star
#

mes bank swaps have apparently reset/isnt working and the tag tab tab isnt scrollable, thats what ive heard/observed so far

#

cms/btl seems ok

ember flareBOT
#

@MrFastDie - I am not sure if you solved this or not, but the difference is where Bolt stores the runelite.jar

The below should fix it for you:

mkdir -p ~/.local/bin
cat << 'EOF' > ~/.local/bin/runelite-wayland
#!/bin/sh
export _JAVA_AWT_WM_NONREPARENTING=1
exec java -jar /home/<YOUR-USER>/.local/share/bolt-launcher/runelite.jar
EOF
chmod +x ~/.local/bin/runelite-wayland

Everything stated by @charlie-yarbrough is correct, except the PATH to the runelite.jar

Hope it helps.

ember flareBOT
ember flareBOT
trail marten
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 10

Bug description

Some items in my bank had menu entries swapped, for example to always withdraw 1/5/10 of specific item without holding Shift or changing withdraw amount at the bottom of bank interface. After todays update I noticed that overrides mentioned earlier got reset as they now match withdraw amount at the bottom.

While reapplying overrides works I'm wondering if it would be possible to rest...

ember flareBOT
ember flareBOT
ember flareBOT
stuck shale
#

There's a powershell script that we can provide that would help migrate, so people can take the wipe as a fresh look or migrate if they want to? Sorta like how we used to have that gpu=false before we had !safemode.

(Get-Content "$env:USERPROFILE\.runelite\profiles2\ironman-438104738974000 - Copy.properties" -Raw) -replace 'menuentryswapper.ui_786445', 'menuentryswapper.ui_786444' | Set-Content "$env:USERPROFILE\.runelite\profiles2\new_ironman-438104738974000 - Copy.properties"

Then people would import this and use it as their new normal profile

stuck shale
# ember flare

sorta this but not telling people to edit their real file

rancid marten
#

that wouldnt work with synced profiles which is why we dont really tell people to do that

#

we could write a thing to migrate it not very hard I think

stuck shale
#

Probably not.

rancid marten
#

idk how much of a problem it is, can people just reset their swaps

#

you cant have that many can you

#

lol

stuck shale
#

that fight caves gif but bank swaps

#

migrate() would swap 445 -> 444 -> next one -> and again

each time they do this

stuck shale
rancid marten
#

oh

stuck shale
#

it is still not ideal because people will mess up unless i edit the the command so that people dont have to edit both sides lol

#

¯_(ツ)_/¯

rancid marten
#

i was not aware this would break or i would have written something probably

odd oasis
#

Is this lil guy new?

trail marten
#

that is years old

#

you just never saw it probably

odd oasis
#

Hahaha yep I guess so

#

Paying extra close attention to the UI today

ember flareBOT
snow needle
#

Is there any way to access runelite-client/src/main/resources/item_variations.json from my plugin?

sharp knot
#

What are you trying to do?

snow needle
#

I'm trying to get a list of all object ids that have the same name and appear visually similar. Currently I'm deduping based on model ID, name, colors, etc, but it seems like this file already does the same thing

trail marten
#

you can use that

#

that is for items though not objects

#

and it does not use model id afaik, just name

#

it's mostly just removing things in parentheses and then grouping the results together

#

e.g. prayer potion 1 2 3 and 4 together

snow needle
#

Oh that probably isn't what I want then. Thanks for clarifying

gaunt jewel
#

Hi all, is this code checking the 'quest stage' of the fairy tale 2 quest? Or completion? And where is FAIRY2_QUEENCURE_QUEST defined anyway? I couldn't find any mentions in the API or Client apidocs, nor in the runelite repo. (Totally new to runelite, but I did read the wiki)
((client.getVarbitValue(VarbitID.FAIRY2_QUEENCURE_QUEST) > 39)

stuck shale
#

The other spot shortest-path checks for varbit on that quest is during it's testFairyRings()

https://github.com/Skretzo/shortest-path/blob/31bee6fef5966b367c2c2bab43144aef564af9ea/src/test/java/shortestpath/pathfinder/PathfinderTest.java#L117 which wants the status to be 100, i think 100 means it's fully done.

GitHub

Pathfinding for Old School RuneScape. Contribute to Skretzo/shortest-path development by creating an account on GitHub.

#

39 might be the varbit value of the quest that is the point where you can use the fairy rings

#

or rather it was? not sure.

gaunt jewel
#

haha, yeah, I'm looking into why shortest path isn't offering me ring paths, when I have unlocked them (but not finished the quest)

stuck shale
gaunt jewel
#

guess I have to set up devtools

stuck shale
#

that channel was the correct one to ask unless you want to try the varbit value yourself

gaunt jewel
stuck shale
#

well yes thats what i said

#

its a test

gaunt jewel
#

oh sorry, you said "check"

#

test as in program unit test

stuck shale
#

yeah

gaunt jewel
#

is it possible to enable devtools on a .jar of RL?

stuck shale
#

no

gaunt jewel
#

ok thanks

glass sandal
stuck shale
#

i suppose that would work

ember flareBOT
reef badger
#

yippee the scrollbar issue has found its way into the tag tab tab*

gaunt jewel
#

I'm a dumbass, I didn't have the staff equipped... all I had to do was read one more line of code

hoary spindle
#

what is the action text on the top of the screen called? is it a widget?

late hare
#

no, is just drawn in engine

hoary spindle
#

trying the inspector, but no luck

#

hmmm

heavy bobcat
#

What exactly are you looking for? All the information displayed in it is available

hoary spindle
#

I want to hide it.

upper grove
#

i htink you can disable it with a chat command

late hare
#

yeah, ::mouseovertext iirc

glass sandal
#

There's also a hub plugin

stuck shale
#

or a hub plugin that types it

glass sandal
hoary spindle
#

so thats what is called

#

was searching for action/command text

#

thanks folks

late hare
#

guessing that plugin just invokes the command on startup lol

glass sandal
#

Yep

solid shadow
#
@Override
    protected void startUp() throws Exception
    {
        clientThread.invokeLater(() -> {
            if (client.getGameState() == GameState.LOGGED_IN && !mouseoverTextDisabled)
            {
                mouseoverTextDisabled = true;
                client.runScript(49, "::mouseovertext");
            }
        });
    }

yep

snow needle
#

When I log this message, the text is cut off part way through: You rub the Amulet of Nature, which says... <col=003300>'I am bound to your hardwood patch near the Fossil <col=003300>Island camp. Your patch is growing nicely, free from <col=003300>disease and is a.

Is it hitting some sort of max message size or am I doing something wrong?

late hare
#

yeah, 200 is a hard limit that chat messages have

snow needle
#

Does that mean the rest should come in a second message or something? How can I handle this?

late hare
#

or well i'm confused, they send that as a chat message and a dialog?

snow needle
#

IDK what I'm doing to be honest. Maybe I should be checking a dialog instead?

late hare
#

probably yeah, they have to manually split up messages the engine doesn't do it

#

so you just found a case where they didn't do it 😛

snow needle
#

OK I'll try that. Thanks 🙂

ember flareBOT
rancid marten
#

The dialog now comes through as chat messages too for a reason I never figured out, but that is limited in length yeah

snow needle
#

What's the best way to determine what widget a given dialog is? Or maybe a better question, what's the easiest way to read the text out of that box?

rancid marten
#

Use the widget inspector

ember flareBOT
snow needle
#

Ok so I found the widget and I'm listening for it in an event like so:

    @Subscribe
    public void onWidgetLoaded(WidgetLoaded event) {
        if (event.getGroupId() == InterfaceID.OBJECTBOX) {
            Widget dialog = client.getWidget(InterfaceID.OBJECTBOX, 2);
            log.warn("object box just opened with text: " + dialog.getText());
        }
    }

But the text is empty: object box just opened with text:

Am I doing something wrong or do I need to wait for the next tick or something?

quick path
#

defer it a client tick; the widget text is not set at the same time the widget loads

#

clientThread.invokeLater() is how that's usually done

snow needle
#

cool ty

#

works perfectly 🙂

snow needle
#

I want to add Amulet of Nature updates to the timetracker plugin. Recently I've been running Kronos nonstop which has caused my tracker to get out of sync constantly. I'd like to be able to detect when a step is skipped and update the tracker by rubbing the amulet. I think I know how to do this now, but I don't know how to handle the 3 hardwood patches on fossil island because they all show the same location name on the amulet's text. I can probably make a best effort to update them or just skip the update for these patches. How does this sound?

reef badger
#

honestly that bankground typo seems correctly funnier

clear light
#

Curious if anyone here knows under what HiScores category the Deadman Annihilation game mode that starts on Friday is under? Always unclear if it’ll be seasonal or tournament

rancid marten
#

i think its tournament, at least thats what i set it up for

clear light
#

That’s what I figured

#

Ty

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

No response

Bug description

Using Item Charges Improved, the overlay number for the plank sack reports a consistent number 2 less than the actual contents. All other functionality seems to be working fine, but it is 2 too low at all times. When full (28) the overlay reports 26, and so on for lower values. Checking the contents with right click does not adjust this number to the correct one.

Screenshots o...

ember flareBOT
safe valley
#

I'm working on a DMM/Leagues tracker and the achievement diary tasks completed Varbits are not known according to my research.

Curious what you guys think: Could it make sense to "crowdsource" from plugin users to send changed varbits on completion of a tas? I'm thinking users would need to turn it on/off when completing a diary task.

sharp knot
#

Doesn't wikisync track diary completion?

#

I doubt that we don't know what they are tbh

safe valley
#

Yeah but not specific tasks according to my knowledge

restive garnet
#

Quest Helper can detect whether parts of diaries are done, so it's definitely available

#

by the look of it, the Varplayer is a bitfield and each bit that is set is a specific diary step that's done

#

Since they cap out at 32 bits long, there's usually 2 Varplayer entries per diary

safe valley
#

@restive garnet Thanks so much! I was confused because some regions (e.g. Desert) use a VarPlayer bitfield like DESERT_ACHIEVEMENT_DIARY, where each bit = a task. But Karamja uses separate Varbits (VarbitID.ATJUN_*) for each task, sometimes as counters (e.g. ‘<= 4’ bananas).

restive garnet
#

Yea, Karamja is the oddball one because it was the first

#

Perils of a 20+ year old pile of spaghetti 😄

tame sonnet
#

Hey folks. Is there any solid guide on plugin development?
Was giving this one a look but cannot reproduce on my mac.

https://www.youtube.com/watch?v=mB5Wxfx0Ork

Music by: https://www.youtube.com/c/OSRSBeatz
Support the runelite project here: https://www.patreon.com/runelite

I want to say a big thank you to the runelite team.
The documentation that they make is awesome! I used their documentation to make this video!
Here is a link to that: https://github.com/runelite/plugin-hub/blob/master/README.md

C...

▶ Play video
#

It's all fun and games until java gets thrown into the mix, I'm a python person.

topaz pierBOT
tame sonnet
#

❤️

tame sonnet
#

I'm running into the dreaded

Caused by: java.lang.IllegalAccessError: superclass access check failed: class net.runelite.client.ui.OSXFullScreenAdapter (in unnamed module @0x53251a66) cannot access class com.apple.eawt.FullScreenAdapter (in module java.desktop) because module java.desktop does not export com.apple.eawt to unnamed module @0x53251a66
oak rock
#

Thats the add-opens thing

#

Iirc

tame sonnet
#

Makes it so I can't even run the example repo. Is there a workaround for mac or do I have to build and test another way?

oak rock
#

we have an entry on it in the core build guide at least

#

dunno about if its referenced anywhere in the hub

#

tbh though you should just use java 11

tame sonnet
#

Hah, setting it to java 11 did solve it.
Thank you!

ember flareBOT
#
[runelite/runelite] New branch created: 1.12.14
ember flareBOT
#
[runelite/runelite] New tag created: runelite-parent-1.12.14.1
#
[runelite/static.runelite.net] New branch created: 1.12.14.1-21484190162
glad ermine
#

I have a script that pulls the newest runelite tag automatically and it broke my plugin hub plugins lol. How do I find the latest tag that the plugin hub has plugins for?

stuck shale
#

or just use current.release

rancid marten
#

There is a window in between when we push a tag and when the pluginhub finishes deploying that you probably hit

#

Probably you shouldnt be using tags to determine what the live version of runelite is since it often times wont really match

upper valve
#

how long does the full phub rebuild take

rancid marten
ember flareBOT
odd oasis
#

Which java profiler (win11) do you guys like to use? My JProfiler trial is over 😢

worthy sparrow
#

visualvm

tame sonnet
rancid marten
#

you added new dependencies on jsoup but they aren't trusted

#

can you use jsoup-1.13.1 or is it too old?

upper valve
#

alternatively are you familiar with "not enough runes" plugin

tame sonnet
tame sonnet
#

Want to take this one to a place where it is aware of the account's restrictions and allows you to filter for viable methods and locations

#

But that's for tomorrow 🥲

upper valve
#

ok

tame sonnet
#

Thank you for the help, this is quite exciting ❤️

upper valve
#

also are you aware that you can append ?action=raw to a wiki page to get it as text

#

which would remove the need for jsoup entirely and would make it easier/quicker to review (and easier for you to maintain)

worthy sparrow
#

you also don't need an executor if you use enqueue

tame sonnet
tame sonnet
upper valve
#

not a requirement but if you refactor out jsoup and ping me i'll review it for you rn because it really will make everyone's lives easier

#

otherwise i'll just get to it in whatever state it's in next time i hit the new plugin queue, probably a week or so

safe valley
#

Thanks again @restive garnet for helping me create my first (DMM) plugin! Just finished it (for now at least)

#

Just did my first PR (#github message) If anyone has any tips on improving the review process that would be appreciated, I already split the project into 16 clean commits and added docs like mermaid diagrams etc

restive garnet
#

I hate to be the bearer of potentially bad news, but your plugin is a huge amount of code, so I wouldn't expect reviews coming in quickly for it

stuck shale
#

i think you need warning=this plugin sends your ip to a third party site disclaimer too

worthy sparrow
#

your ai code guidelines are also mildly wrong and providing an ai generated review process isn't going to be looked at probably

safe valley
#

Thanks for the feedback

upper valve
safe valley
#

Understandable, I tried to split it up already. And wasn't expecting it befor this DMM release haha, maybe the next one

restive garnet
#

You'd be surprised how often people expect immediate reviews

upper valve
#

at 20k lines of java i am effectively never going to review this. I don't really review new plugins much more than 5k LoC

worthy sparrow
upper valve
#

the average plugin submitted is maybe 2k. so you are 10 times that. that's kind of a big ask for volunteers

rancid marten
#

.... is this true?

upper valve
#

it is not (at least i don't think it was a few months ago)

safe valley
#

Yeah I tried to split it up like this

upper valve
reef badger
upper valve
#

and you have too much code for me to look at

safe valley
rancid marten
#

this looks like you found a botting guide and fed it to an llm

#

not a great look really

restive garnet
#

Also am I blind or is it missing the test fixture

safe valley
#

Well I appreciate all the feedback, hoping to contribute to the opensource community and people could also use my code. (that's why the website I linked this plugin to is also open source, not sure if I can mention it here)

worthy sparrow
#

...

upper valve
#

i mostly just want to you to acknowledge what i'm saying about the size, like, you understand this could just rot in the plugin queue for years, right

#

like the chance this gets looked at is 0% effectively

safe valley
#

Hmm Alright, would you recommend downsizing to core functions first and then iterating on that?

#

Or maybe just sending data to the webapp instead of all the plugin ui?

restive garnet
#

Honestly, your first step would be to start again using the proper plugin template, so you're not missing key parts that are required for it to function correctly

safe valley
#

Good one!

restive garnet
#

The template also gives you a proper way to test the plugin during development that doesn't rely on sideloading

upper valve
#

you can do whatever you want, i'm just trying to be upfront about setting expectations here because we have had a few "mega" plugins in the past like this where the author basically doesn't understand that it's too big to be looked at and they get upset and feel like they're being ignored

#

and you are in fact the record holder for largest plugin submitted with this

safe valley
#

haha I do find that funny

#

But good points, I will take your feedback serious and improve/work on this to minimize the size and use the proper template

tame sonnet
#

I'd have to fire a couple of secondary requests for those sections

upper valve
#

if you're going back to the drawing board on this then honestly just close it for now please

#

and resubmit when you have something that's well-formed and manageable

upper valve
reef badger
#

we honestly should have always

upper valve
#

people that do it themselves try to put stuff like "but we don't log it trust us bro"

#

which we obviously can't verify

safe valley
#

In case anyone was curious where the 20k lines came from

#

So yeah a lot of data I could also store on the backend, but I will likely completely remove UI and focus only on sending data. Or maybe contribute to other data tracking plugins

restive garnet
#

like, the UI could probably be added in a separate update later

dusty anvil
#

You already have a web UI. You're probably better off just leaving anything non-essential in your web page only. Thats what I do with mine (but then again no one uses my plugin so what do I know)

#

And you can save at least 25 lines of code not having two separate auth schemes for the API you control <.<

rugged pivot
unique tusk
#

if possible yeah try to cache what you're doing, it's really easy to have something inadvertently make an expensive-ish wiki API request for every time <some very common event> happens

rugged pivot
#

I think they’re just html parsing item pages on search so might not be a big deal

tame sonnet
#

Will definitely look into caching. Plugin shouldn't be spamming the wiki but it still makes sense. Now I've learned how to actually make a plugin and test it, the sky is the limit. That and my poor java skills.

odd oasis
#

If my plugin downloads stuff from github during its startup call when a user starts the client, is it possible for that to block the plugin from automatically updating?

upper valve
#

i am pretty sure it checks its hub manifest (ie it would grab any updates) before it tries to start any plugins

restive garnet
#

what he said

odd oasis
#

Hmm okay. I guess I have a surprising number of users who never restart their clients then lol

upper valve
#

that is overwhelmingly common for this playerbase yeah

#

many people don't close the client unless forced to

odd oasis
#

That makes a lot of sense actually

ember flareBOT
trim pumice
#

out of interest, why does sometimes the Runelite Plugin Hub Checks on github pass, and sometimes fail saying review required.
Not that its important as they all require review anyway, just curious

grizzled aspen
#

Different levels of review

stuck shale
#

Some things they do are bit more sus that others

#

So they need more review

#

Sus is more like file io or what ever

trim pumice
#

ah so theres trigger points that need double checking sort of thing

stuck shale
#

Not sus as in bad lol

trim pumice
#

naa i get it haha, makes sense

stuck shale
#

amogus sorta fried terminology

restive garnet
#

Well, sus has always been short for suspicious, so in a sense it's not really changed anything

upper valve
#

if you're using certain APIs then you will get into that state where it requires maintainer review. it'll always be in that state even if you push updates that don't add any new "flagged" APIs. file i/o and networking are the two main things that flag a plugin

#

in modern times it doesn't mean much because every active reviewer has maintainer/merge powers on phub

low hatch
#

Saw a video of someone using player outlines to cheat 😔 people have to ruin everything

ember flareBOT
#

Off the top of my head, I don't remember which exactly, and I don't think I have any intermediate files anymore, but I'll try my best.

For the buttons (1130, 1180 and 1181), I used 5767 and 5769, but had to resize them (40x40 down to 33x36).

For the little minimap orb (1438), I took 5794 and sized it down from 34x34 to 30x30.

For the hp/prayer/etc orbs, (1071 and 1072), I took 5791 and 5792, then I edited them best I could so that the label part on the left was lower down to match th...

trail edge
#

I'm rebuilding the client to check some stuff with my interface PR. You guys finally moved away from "need more maven"?

trail edge
#

Hmm having a hard time building the client

#

Ok got it, I was just being slightly dumb

ember flareBOT
#

Fixes #19722

When using special attacks with thralls active, the plugin was sometimes counting thrall damage as weapon damage when both hit on the same tick.

This occurred because thralls produce DAMAGE_OTHER hitsplats, which the previous isMine() check didn't filter out. The fix adds an isOthers() check to exclude hitsplats from thralls and other non-player sources.

Added test case to verify thrall hitsplats are correctly ignored.

#

I now remember why the padding is necessary, the actual widget size is 182 by 166, so giving it a 181x165 does this, duplicating some pixels. That's why I added the padding.
<img width="153" height="88" alt="image" src="https://github.com/user-attachments/assets/2bd58053-61a7-4acd-94d4-d530ac190b6d" />

Interestingly, I noticed the 2010 interface style avoids this duplicated pixel issue by just snipping off some pixels, which does look slightly off. For a different PR, it may be worth fixi...

rancid marten
# ember flare

see this is the absolute worst type of person that exists imo

#

like, why

#

why do people do this

#

what if we just turned off pull requests