#development

1 messages · Page 9 of 1

stuck shale
#

The second one returns the gameval inventory id

trail marten
#

different classes with the same name (inventoryid)

stuck shale
#

Says in the comment.

snow needle
#

You guys are confusing me. There are two getItemContainer methods. The first's parameter is a deprecated class. It's deprecated, so presumably I shouldn't use it, meaning that I should be using the second getItemContainer. So why is the first getItemContainer not also marked deprecated? It's not a big deal but it feels a little strange.

amber rampart
#

because nobody bothered to mark it deprecated

snow needle
#

ok that's what I figured ty

amber rampart
#

and you can only use it with another deprecated symbol so its w\e

snow needle
#

for some reason my IDE is auto importing the deprecated class instead of showing me the gameval import which was really confusing.

ember flareBOT
ember flareBOT
late hare
#

^ The real name of that script is dom_end_level_ui_draw_loot

ember flareBOT
ember flareBOT
ember flareBOT
grave marsh
#

I feel so stupid asking this but how do I get the launcher to run runelite with --insecure-write-credentials?

trail marten
#

don't the instructions already say this?

trail marten
#

it's ok. with ai you too can still write plugins

#

that doesn't sound like how it's supposed to go, but with ai more challenging and complex ways to accomplish the same things as before will become possible.

rare crescent
#

So I'm using the script inspector to know what is the "Skill Tab" menu. I see that they are indexed as "STONE" tab. However, I'm trying to dig deeper to know what are these numbers are when I open the tree. Anybody knows what they are being used/called for?

#

For instance: what does 914 means? Is it the enum for this particular tab? what's 71, 916 etc

#

seems for 914 is being used as an argument for [914, MIN_INT, 1130, 1]

amber rampart
#

914, 71, etc are script ids

trail marten
#

-2147 is a widget id right?

#

Or am I misremembering

amber rampart
#

its the menu op placeholder

#

-2147483645 is the widget

trail marten
#

Oh so it gets replaced

amber rampart
#

yes

rare crescent
#

wth is 40 and 992 😁 ? lmao

amber rampart
#

script ids

rare crescent
#

nono i mean like why there is 2 different ones for almost similar

#

just found it funny lol

amber rampart
#

?

rare crescent
#

so 992 triggers when mouse is in the skill STRENGTH

#

but when you hover outside of STRENGTH tab, i pressume it has an exit value from what skill it was, hence the script ID 40

amber rampart
#

one to add the tooltip and one to remove it

rare crescent
#

Ah, I wasn't looking good enough. I was looking the numbers in the API document, but not in the code lol

#

tyvm 😄

ember flareBOT
rare crescent
#

is Action Diagnostic not visible in the wiki? It says "You do not have permission to update this wiki" but I just want to see it

oak rock
#

its not a wiki page

amber rampart
#

you only have that button because you are sideloading it

rare crescent
#

wdym sideloading it? like loading it from the side panel?

oak rock
#

in the IDE

rugged pivot
#

what even is action diagnostic

#

oh it is part of the actions progress dev path I guess

rare crescent
amber rampart
#

everything that has javadoc is in runelite/runelite

rare crescent
#

mb yeah, wasn't in the right directory lol

#

what are swing defaults? and what are they used for?

amber rampart
#

theming for swing uis

ruby flicker
#

Hi, I'm just wondering if this is a issue I have created or if anyone else is experiencing this in the github plugin sidebar during development.
When hovering over certain parts of the plugin hub the graphic seem to be bugging out where I hover the mouse.

stuck shale
#

That’s the same !hw command to send through I think

topaz pierBOT
ruby flicker
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Win11

Bug description

Example: Put "Burnt*" on highlighted items list, and "Burnt bones" on hidden items. Burnt bones should then NOT be highlighted but EVERY OTHER "burnt*" item should, since they weren't specifically excluded.

Screenshots or videos

No need - read description carefully.

RuneLite version

newest. any of them will behave like this. 1.12.20

Logs

No response

rare crescent
#

I'm trying to understand the args segment when the mouse is hovered on the skill. I was wondering where I can find more info of these args

#

These are pulled from the script inspector

#

A bit challenging than I expected

amber rampart
#

index 0 is always the script id, so skip that

twin rover
#

hey guys got a question if anyone knows, so i got a few test scripts ive been trying togethere to see if anything conflicts, - just wondering if theres a way to run the test script with a few working scripts, even if i have a broken one thats not finished - i tried obviously not putting the not finished plugin into the ExternalPluginManager.loadBuiltin, but wont launch unless i fix the errors or just pop it out of my files

stuck shale
#

Idk what you mean by scripts but follow the build guide for pluginhub

heavy bobcat
#

Are you trying to run RuneLite but with some things mocked in a test?

#

I don't think that's possible

stuck shale
#

idk what they’re asking for if they call stuff scripts.

twin rover
#

my bad hard to explain, picture might help lol, -- so launching from here works ofc as long as all the plugins i have added are working. say i have plugin 1, 2 and 3 working and launching, but if im working on plugin 4 and its not finished yet, i cant launch even just putting 1/2/3 in my test launch - is there a way to completely disclude plugin 4 without having to move that plugin file out of that project folder

#

that was hard to word lol

stuck shale
#

You can continuously add more plugins to that folder and add a new entry to the test

heavy bobcat
#

I think they've got that working, they have a plugin that doesn't compile though and they don't want to have to remove the code

#

That's not how Java works

stuck shale
#

ExternalPluginManager.loadBuiltin(AnnoyanceMutePlugin.class, AnnoyanceMutePluginDebug.class); like this

rugged pivot
#

that isnt the problem zom

stuck shale
#

O

twin rover
#

yeah right now i got

public static void main(String[] args) throws Exception
{
ExternalPluginManager.loadBuiltin(MazchnaSkipPlugin.class,
DamnLolQoLTools.class,
Test1Plugin.class,
VisualSoundsPlugin.class,
Test2Plugin.class,
RuneLite.main(args);
}

stuck shale
#

They just have to fix the code

twin rover
#

have a testplug3 class but that one isnt on there, but still wont launch with the other ones

heavy bobcat
#

Yeah either fix the code or remove the code

stuck shale
#

Why are you side loading so many plugins

#

lol

twin rover
#

testing for conflicts on a few

rugged pivot
#

ctrl+a, ctrl+/

twin rover
#

plus i cant use my mazchna skip until its reviewed O.o

heavy bobcat
#

Why not?

#

Are you submitting plugins without even running them?

twin rover
#

i mean on the base runelite with normal plugins

stuck shale
#

You can test conflicts without having to clone their code

sharp knot
twin rover
#

@rugged pivot 10/10 that works

#

didnt think to put it all in /

stuck shale
#

Just seems like you’re pulling in local code to adjust them for local use only

#

Like visual sounds idk

#

What conflict does skipping have with that

sharp knot
#

You're sort of overcomplicating things for yourself with the way you're doing things

twin rover
#

sry im testing conflicts betwen my scripts, not the visual sounds one

sharp knot
#

And the being vague about things is also not helpful

stuck shale
#

Again with scripts, I’m not sure if you’re doing things the right way if you’re calling plugins scripts

#

That’s what cheaters call them

twin rover
#

its a script of code tho?

sharp knot
#

Not everything is a script

rugged pivot
#

java is not a scripting language

twin rover
#

my bad, just always called any coding that, most of the guys i know do here too. thought it was normal lol

sharp knot
#

But really running a bunch of stuff together isn't a great way to find conflicts. You're much better off actually just looking at your code for the two plugins

#

Like what are these things doing that you think may conflict?

twin rover
#

the one with all of the plugins that i run is because im usually doing slayer and using my submitted plugin, so i tend to add most of my plugins to that one, thought it would be easier for me tbh

#

im only checking my mazchna skip and one plugin for conflicts since they both highlight similar mobs

sharp knot
#

No that's just going to make a mess of things

rugged pivot
twin rover
#

so its just best to test in a separate project to avoid any potential issues with multi plugins when testing

sharp knot
sharp knot
rugged pivot
#

if you're in dev mode anyway you could sideload the jar for your other stuff that isnt on the hub yet

twin rover
#

pretty new to intellij/git , got a link on where i can learn about the sideloading?

sharp knot
#

You really don't need to be side loading stuff for what you're trying to do

heavy bobcat
#

I just use gradle included builds to pull all of my local plugins (and RuneLite fork as well) into a separate project

#

That's more just for personal use though than testing

sharp knot
#

Like I said the "conflicts" you're concerned about aren't really an issue in the first place

twin rover
#

true, if it doesnt glitch out or anything then no need for me to worry haha

#

thanks alot for all your guys' help 🙂

rare crescent
#

idk how does that line works exactly either 😂 like where is that clientscript even calling the component0 int1 component2 string0 string1 fontmetrics3 int4 from?

amber rampart
#

component means widget id

upper valve
#

the client will download the entire cache/indices on startup today, right?

#

versus, like, the server just giving you whatever sectors you need for where you are in game

amber rampart
#

depends on the index

#

iirc maps and models are on demand

upper valve
#

specifically map data (i think index 5?) and configs

amber rampart
#

configs are all aot

upper valve
#

ok makes sense

#

that makes sense for maps, would explain why a lot of the really old caches on osrs.world just don't have a lot of map data, because it's whatever bobby pulled off his mom's 2004 optiplex at the time

#

is there any way to brute force that loading or do you have to crowdsource a full dump basically

amber rampart
#

from the client I don't think so

#

but the cache updater has stuff for it

#

this is what updates abextm/osrs-cache

upper valve
#

ah ok

ember flareBOT
topaz pierBOT
#

Search for mathiaslj returned no results.

ember flareBOT
rancid marten
#

Is there a way to get copilot on prs in a way that I can leave a comment on the pr and have it just make changes for me?

#

that seems like that would be useful

ember flareBOT
tall hornet
rancid marten
#

i absolutely dont want that

#

i want it so if someone submits a pr i can instruct the ai to make changes to it

tall hornet
#

i dont think copilot has the ability to commit iirc, you'd need some other tool to do that, like devin

rancid marten
#

Hmmmm

grizzled aspen
#

it seems it might be possible. you can give copilot custom instructions in an md file too

tall hornet
#

thats neat, didnt know about that. makes a child pr against the original pr

#

if you mean the runelite plugin update commits i would think that would be very difficult to setup this way since its a whole separate repo

rancid marten
#

Oh no, i dont want this either

#

i dont want it to make a child pr

grizzled aspen
#

you could also have it make suggestions and then accept them i think so it doesn't make a separate pr

rancid marten
#

why cant it just commit to the pr im leaving the comment on

grizzled aspen
#
tall hornet
#

it cant commit directly on someone else's fork without their permission

thorn grotto
#

child pr sounds better than seeing it fuckup and manually reverting things

rancid marten
#

if you open a pr it by default allows me to commit to your branch

#

so I dont see why this is any different

tall hornet
#

i think github right now deliberately avoids allowing AI to commit code directly for security/whatever concerns

#

you can use github actions and such to bridge the gap, or external tools

rancid marten
#

eg i want to be able to say like "delete this test" and have it just delete it

#

so i dont have to go switch branches, make the change, and push it

tall hornet
#

a suggestion is probably the easiest way to do that

thorn grotto
#

you can just press merge on the pr?

rancid marten
#

ive never tried mutliline suggestions before, is that a thing

tall hornet
#

yes

rancid marten
#

mm

tall hornet
#

you can inline github comment kill an entire code block, hit apply suggestion, done

rancid marten
#

ill try that next time

tall hornet
#

Question, i opened a PR to someone's plugin and it's been there for a month with no activity - what's my next step in trying to get my fork merged?

They don't have their discord linked here. Not sure what other things I can do.

topaz pierBOT
tall hornet
#

I guess I was wondering if there was any other steps beyond complete takeover, I suppose that really just means other ways of trying to get in contact with them, like their github email? Was curious if anyone had other experience like that- not trying to stalk someone, but would be nice to see if they want to continue dev on it.

restive garnet
#

Other than raising PRs and issues on their plugin, not really

#

It's not like the RL maintainers can force plugin developers to act

restive garnet
#

I did that already 😄

tall hornet
#

thanks, i took the open issue for collaborator route, will see how that goes

ember flareBOT
ember flareBOT
ember flareBOT
shadow stirrup
#

I'd like to make a small change to the RuneLite text boxes (i.e. not in-game ones, but the panel/swing views) to allow for Cmd+Backspace on macOS (to match system behaviour of removing all content in the text box).

I think it's probably best to set this up in FlatTextField.java since that seems to mostly be the extension point for other types of text boxes and thus this behaviour is auto-inherited. Does this seem like a good idea? This component hasn't been touched in years, so I assume there's been some discussion around maybe not adding this kind of feature here?

I see some discussions around keymapping in GitHub issues, these seem mostly to be around in-game text fields rather than the runelite ones.

Have an initial patch on my fork here: https://github.com/runelite/runelite/compare/master...NinjaLikesCheez:runelite:macos-cmd-backspace-keybinding?expand=1 Any feedback is appreciated!

GitHub

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

tight quarry
#

Hi! I'm working on a plugin to log drop parties people host, and I wanted to add a icon similar to the FriendNotesPlugin to users in my friends list. However it seems to add more spacing than I would like and cannot figure out yet how to resolve this...

For in case my icon was the issue I decided to re-use the exact icon from the FriendNotesPlugin, where the first icon is the icon added by my plugin, and the second icon is the one from the FriendNotesPlugin.
This is the code I currently use.

I've tried changing the xpos += ICON_WIDTH + 1; to for example xpos += ICON_WIDTH/2 + 1; but that also doesn't reduce the spacing and seems to just offset the name change icon if there's one.

Can this be caused by some default spacing by the client when for example 2 icons are added in the text e.g. <img=409><img=409>?
And if so, any way to resolve my issue..?

#

This is the code I use:

@Subscribe
public void onScriptCallbackEvent(ScriptCallbackEvent event) {
    if (friendHasHostedIconId == -1) {
        return;
    }

    switch (event.getEventName())
    {
        case "friendsChatSetText":
            Object[] objectStack = client.getObjectStack();
            int objectStackSize = client.getObjectStackSize();
            final String rsn = (String) objectStack[objectStackSize - 1];
            final String sanitized = Text.toJagexName(Text.removeTags(rsn));
            currentlyLayouting = sanitized;
            if (getFriendNote(sanitized) != null)
            {
                objectStack[objectStackSize - 1] = rsn + "<img=" + chatIconManager.chatIconIndex(friendHasHostedIconId) + ">";
            }
            break;
        case "friendsChatSetPosition":
            if (currentlyLayouting == null || getFriendNote(currentlyLayouting) == null)
            {
                return;
            }

            int[] intStack = client.getIntStack();
            int intStackSize = client.getIntStackSize();
            int xpos = intStack[intStackSize - 4];
            xpos += ICON_WIDTH + 1;
            intStack[intStackSize - 4] = xpos;
            break;
    }
}
#

This is the issue I meant

#

It might be a combination of the code in the plugin + default spacing I just realized...

low hatch
#

Am I the only one who gets their Var Inspector spammed with date/time/clock related Varbits/VarPlayers?

late hare
#

doesn't it allow you to exclude some ids

rugged pivot
#

the var inspector does not

#

the script inspector does

low hatch
#

Just the script inspect

late hare
#

o

#

time for someone to open a PR 😉

topaz pierBOT
heavy bobcat
# tight quarry This is the issue I meant

Yeah <img> tags are 11px and all characters in text have a 2px spacing. Afaik there's not a way to get around that aside from maybe creating a separate widget for the icon manually

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

No response

Bug description

When having multiple bird nests with seeds in your inventory and searching only one, the game automatically continues to search the remaining bird nests in your inventory. The problem is that RuneLite's Loot Tracker plugin only seems to track the first bird nest, and not the auto-opened subsequent ones. Manually clicking to open them has no problem (disregarding the issue when open...

#

Briefly looking at the code, I saw that the bird nest loot tracking was being handled within the MenuOptionClicked event handler:

https://github.com/runelite/runelite/blob/636a5dc99f529c28576c892bfb90e6534b7604b4/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java#L1248-L1257

However, MenuOptionClicked isn't called whenever the game automatically searches the next items for you. Looking back now, I suppose any lootable item which the game auto-lo...

low hatch
#

I'm scared to try and add support to a core plugin o7

deft hatch
#

don't be scared

#

it never gets merged

low hatch
#

LMFAO

#

||True||

deft hatch
#

I like to keep track of the birthday of my core PRs to celebrate their anniversaries

low hatch
#

Docs: https://static.runelite.net/runelite-api/apidocs/net/runelite/api/events/MenuOptionClicked.html

MenuOptionClicked#getId is said to return "The ID of the object, actor, or item that the interaction targets."
MenuOptionClicked#getItemId is said to return "If this menu entry is an item op, get the item id"

Shouldn't these be returning the same values in that case? The reason I'm asking is because when I was debugging why a plugin wasn't functioning properly when clicking Search on an item within the player's inventory, it turns out MenuOptionClicked#getId was returning something that wasn't the item's ID, but according to the method description, it should be. FWIW MenuOptionClicked#getId was returning 2 while MenuOptionClicked#getItemId was returning the proper item's ID.

amber rampart
#

in this case id holds the widget's child id

low hatch
#

Ohhhhhhhhhhh got it

ember flareBOT
low hatch
#

I realized my build is breaking post gradle migration and I don't know if I did it properly. I'm supposed to link to the build.gradle.kts file, yea? Been a while since I ran from the RuneLite repo itself. Just fetched and rebased to upstream, and I selected build.gradle.kts but I'm having symbol issues and also a task wrapper issue for runelite-jshell and runelite-client 😶

Fixed. Solution: Make sure you're loading it fromt settings.gradle.kts and not the build 🤔

ember flareBOT
quick path
bitter marten
#

whats the process for plugins getting approved, my codes been used in that new bank standing plugin and mines still waiting

worthy sparrow
#

You wait

topaz pierBOT
bitter marten
#

no

bitter marten
sharp knot
#

Your GitHub account is new enough that a maintainer has to manually run some of the checks

bitter marten
#

yeah i made a new account to keep the names all consistent was a stupid idea....

low hatch
sharp knot
#

One of those is from yesterday and the other had unaddressed feedback until yesterday

#

You just need to wait and be patient. The reviewers are all volunteers and there's a lot on their plates

restive garnet
#

Also I might be going insane, but why would you want to have a separate version of something you've already agreed to fold into another plugin

bitter marten
#

i didnt agree to fold it in i was trying to clarify he can have the same features

sharp knot
misty hornet
#

Two features can be implemented extremely differently and each plugin is reviewed independently anyway

restive garnet
bitter marten
#

anyway thanks for the feedback ill just be a bit more patient

sonic quest
#

You said "ok, go for it". So that's why i merged the bankstand tracker in my bankstanding plugin 🤔

bitter marten
#

yeah no thats my bad i misunderstood was happy for you to add the features to your plugin but i did mean to keep mine thats all, im completely new to this , and i dont work in tech so just didnt undestand

#

thats why i edited the message after to clarify

sonic quest
#

Ah, I did not see that 🫣

bitter marten
#

nah i dont blame you its all good

#

its my inexperience haha

sonic quest
#

If you'd like, I can add you as a contributor straight to my plugin so you can alter its code and push changes straight to the remote?

#

Plugin hub readme states;

We recommend contributing to existing plugins if the author(s) are accepting contributions, and the feature you want to add fits well into the plugin, to avoid fragmentation of plugin ecosystem. Reducing plugin fragmentation helps users discover features more easily, and helps us review changes in a more timely manner.

bitter marten
#

yeah sounds good probably easier and stops the clutter

sonic quest
#

Which account(s) would you like to see added? Seeing as i noticed you use multiple

bitter marten
hollow stratus
# shadow stirrup I'd like to make a small change to the RuneLite text boxes (i.e. not in-game one...

as someone who prefers to develop on a mac and subsequently means playing on a mac in some capacity, as well as someone who always uses Opt+Backspace for single words, Cmd+Backspace functionality would be nice. Though I believe the recent "Modern Chat" plugin might have this solved: https://runelite.net/plugin-hub/show/modern-chat and https://github.com/BenDol/Modern-Chat. Though I do think bringing QoL features to core is always good.

rare crescent
#

has anyone here ever made a plugin related to PvM content? Like for instance you run a Zulrah session and want to do a plugin about Zulrah, what recommended approaches would you do?

rugged pivot
hollow stratus
worthy sparrow
rare crescent
#

Mmm trying to think how to word it

oak rock
#

typically there is no "i want to make a plugin, what should it do?" question, and instead there is a "this is what i want to do, how do i do it?" question

rare crescent
#

Ok, think of all the current PvM plugins, but look at Sotestgeg from ToB for this example. How do you get the information you want while doing PvMing at the same time? Do you like record yourself with some sort of debugger running (e.g. knowing the sound ID when he throws the big bomb)

oak rock
#

ye

rare crescent
#

I can be more specific too if is not clear

heavy bobcat
#

Just add lots of logs, have the dev tools windows open etc

sharp knot
#

What exactly are you trying to do at zulrah? Because it's quite likely that anything beyond what's already available in a plugin isn't allowed

heavy bobcat
#

Also you probably should not be getting info like what is the sound of when he throws a big bomb cause I can only see that being used for rule breaking...

rare crescent
#

Well, not for Zulrah, but for Yama 😄

#

nothing to like improve, but to make it more fun!

#

like adding voice over, changing overhead text messages

#

nothing to be gamebreaking like the OG demonic gorillas, or OG zulrah plugins

shadow stirrup
quick path
#

I didn't look too closely at it, either way you can feel free to open a PR and we can look into it more closely there

rancid marten
#

our flatlaf version is also from Oct 2023 and idk how hard updating it is

#

weve never updated it before

shadow stirrup
shadow stirrup
quick path
#

That's fine; regardless, flatlaf doesn't seem to have that feature implemented anyway so even if we do update (whenever that might be), there's no telling if they'd have added it by then

ember flareBOT
rugged pivot
#

should it just be explicit > wildcard, in either direction?

rancid marten
#

yeah maybe

oak rock
#

dont we have an old issue already discussing this

rugged pivot
#

scary thing to change after 100 years though

rancid marten
#

I dont think there is any distinction currently is there?

#

between wildcard vs not

topaz pierBOT
#
AlexanderJW

Not sure if this is the intended result, but the ground items highlight list prioritizes over the block list. This isn't useful in any case but if the block list prioritized higher it would. Being able to highlight all grimy herbs using "grimy*" would be viable because you could then block the low-level herbs that you didn't want to see.

oak rock
#

ron made a pr for it 8 years ago taggO

rancid marten
#

"explicit" is not the right word i think

oak rock
#

exact

rancid marten
#

like I can see prioritizing non-wildcard > wildcard

rugged pivot
#

that is what I meant yeah

rancid marten
#

Yeah that is probably a good solution I guess

#

I dont see a compelling reason to swap hidden>highlight in general

oak rock
#

abex used "specific"

#

a specific hide makes sense over a generalised highlight

#

you want grimy herbs but not guams for example

rancid marten
#

Or you could just take the one that is longer maybe

#

hmm

#

I guess you would have to take the longest one, and if two match then take the one without wildcards

#

like if you have hidden bone and highlighted bones

#

you want the latter

rugged pivot
#

if I highlight *bones but hide bones I would want Bones to be hidden, even though that is a shorter rule

rancid marten
#

oh

#

right yeah

#

so I guess take the exact match, and if there are none, take the longest wildcard then

#

right

oak rock
#

distinguishing between wild and non wild entries seems enough

rugged pivot
#

just tell them to use Loot Filters instead

oak rock
#

rikten prayguste

ember flareBOT
#

fix(loottracker): Track automated bird nest searching (#19975)

  • Added support for tracking the loot received from the next searched bird nest that's automated by the game itself
    • Modified LootTrackerPlugin#onItemContainerChanged to see if a bird nest was searched by the game and whether or not to keep processing inventory changes while there are searchable bird nests remaining
  • Added new test case LootTrackerPluginTest#testBirdNests

The following changes were made after notici...

ember flareBOT
#

This change adds the 'system' behavior of cmd+backspace in text fields for macOS (remove all text in text field) to the core/swing panels. I chose to add this feature to FlatTextField so it's inherited by (what seems to be) most of the core ui text fields.

This was discussed in [discord here](#development message).

Disclaimer: I am not a Java developer and AI tooling was used in this PR. However, the code was authored b...

shadow stirrup
#

^ I noticed while submitted this that there was a discussion on AI-authoring (https://github.com/runelite/runelite/pull/19836#issuecomment-3821302387) - this PR was assisted by, but not authored by, AI (mostly in helping me searching for appropriate spots to implement this and helping me find the appropriate APIs as I'm not a Java dev) - it was authored by me. I don't want to add to the mountain of slop, so if AI-assistance is also out of bounds for PRs I'll happy close this out, apologise profusely, and do what I used to before these tools: take a day or three to investigate what I want to do before I do it.

worthy sparrow
#

i would imagine this would go in our vendored flatlaf

rancid marten
#

I think this change is probably fine

#

#19836 was closed because it doesn't do anything and the author doesn't know that because they didn't write it

#

.. or test it

shadow stirrup
shadow stirrup
rancid marten
#

no I dont want to update that it sucks

shadow stirrup
rancid marten
#

you could submit it to upstream flatlaf if you want

#

that would probably be good in general

#

but idm also having it here

#

i would just not use fully qualified class names places that is an llmisim and is annoying to read

shadow stirrup
#

Let’s see how much time I have next week 😂

shadow stirrup
rancid marten
#

yes

#

normally IDEs just do that

shadow stirrup
#

Ah yeah I wrote it in VSCode initially and then read the setup guide for IntelliJ

#

And I have 0 setup for Java in VSCode

ember flareBOT
#

revert(loottracker): Reverted ItemContainerChanged changes

Reverted the changes made within #ItemContainerChanged

fix(loottracker): Track automated bird nest searching onChatMessage (#19975)

  • Added support for tracking the loot received from the next searched bird nest that's automated by the game itself
    • Modified LootTrackerPlugin#onChatMessage to see if loot from a searched bird nest was received and call #onInvChange
      • The message is also fired for the automated pro...
rancid marten
#

wow this is obnoxious

low hatch
#

😶

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

W11

Bug description

The March 11th 2026 update seems to have changed something to where multiple POH themes now use the cave skybox.
The update notes contain the line "Wilderness-themed POH Exit Portal should now appear more orange for all players." which may have something to do with it.

Asking others in my clan at least the "Basic stone", "Basic wood", and desert themes are affected.

Many are wondering why...

reef badger
#

yippee

#

i hated the way it worked

quick path
ember flareBOT
reef badger
#

oh the falo pr was merged 6 months ago

#

darn i wish i played the game

quick path
#

yeah I removed it from my local copy of the script but forgot to commit it for a while

rancid marten
#

Can’t you just use menu.getPlayer?

quick path
#

you mean menuEntry.getPlayer?

topaz pierBOT
quick path
#

@lapis finch fyi I took a look at your slayer name predicates PR and left some feedback. I think it'd be good to go after it's addressed.

lapis finch
#

Thanks I’ll take a look as soon as I can

ember flareBOT
quick path
#

I've been scrolling through them all but haven't found anything yet

amber rampart
quick path
#

hmm maybe

sharp knot
#

maybe one of the cc rank icons or something

quick path
#

the problem with those is they're very small

amber rampart
#

could use a chathead

quick path
#

as an aside, it's crazy how many sprites exist for each league lol

amber rampart
#

yeah

quick path
#

I said sprite, not item

lavish ice
#

hey, it can be made into a sprite

quick path
#

I guess an item might be fine since you'd necessarily need to be logged in and have item cache loaded to view the world map

oak rock
#

what about the sidebar though

quick path
#

tru

oak rock
#

fallback icon for the fallback icon?

worthy sparrow
#

Do what every llm does

amber rampart
#

you don't need to be logged in to render an item

worthy sparrow
#

Draw it with swing

sharp knot
ember flareBOT
rancid marten
#

i am attempting to edit grounditems to do this exact-match-over-wildcard thing and now I am editing ground items which is unfortunate

#

im always like maybe 60% sure edits to this are right

quick path
#

eventually we'll need a test suite to validate the behavior lol

#

honestly I'm surprised we haven't added one yet given how much we try to avoid changing the behavior as-is

rancid marten
#

it has a single test!

red rapids
#

Is there a game or client setting that would be preventing colors from getting parsed?

I'm just getting <col=22b222>thisisastring</col> in my game chat, rather than having it change the text color

late hare
#

sounds like it's being escaped

#

Are you using ChatMessageBuilder?

red rapids
#

Yup!

late hare
#

There's an alternative append that you pass a color with it, the normal append escapes the string

red rapids
#

Yeah, I just saw that. I had been using the ColorUtil function directly. I'll swap over, but I don't think that'll change things?

late hare
#

it would stem from you calling this public ChatMessageBuilder append(final String message) I believe

red rapids
#

ah. in regular append:

builder.append(Text.escapeJagex(message))
that'll do it.

#

Good stuff, thanks Polar

rancid marten
#

man i even broke the one single test

#

i replaced the wildcard matcher with equals() sometimes but i needed to use equalsIgnoreCase it seems okay

#

so the single test is actually useful

#

fun fact these were initialized to cowlists despite only ever being reassigned to

neon haven
#

stuck around for the best part of a decade still

amber rampart
#

at least its extra threadsafe and not unsafe

rancid marten
#

theres this semi elaborate LoadingCache stuff from back when this used to get hit per frame

#

but now it does not so I just deleted it

rancid marten
quick path
#

It's been a while since anyone's been able to say that

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
tight quarry
#

I was wondering if there any guidelines regarding storing /loading a lot of data. Think loot tracker plugin but then with 10x as much items and 10x as much monsters. (Drop party plugin where i store the hosts, session/drop party and the dropped items)

Not sure how big of an impact it has on like memory and performance and all that / if it's even worth spending time getting that handled properly.

Right now i store a list of owners, sessions and items as separate keys, but of course the items will grow very big.

Not sure if it matters whether i store the items categorized under different keys and then only do a config.get for for those items when i need it. Or whether runelite loads the entire config file in memory no matter what.

sinful lava
tight quarry
#

I was thinking maybe it's possible to specify that my plugin uses different files. So that by default only basic data is loaded in.

tight quarry
valid wave
#

it's been a hot minute, but working on the plugin again, I can't seem to get it to launch, I just get 'Failed to login'. Do I need to do the key thing?

oak rock
#

regen your creds

ember flareBOT
ember flareBOT
#

Highlighted items overriding hidden items is intentionally how it works currently. Consider the inverse of your bug description:

I've hidden *bones* but added Hydra bones to highlight because I want to see those

So I think either way is valid and it's not clear that the way you are proposing is really better.

the point would be specificity > generality/wildcards in either scenario.. problem solved then.

ember flareBOT
valid wave
#

anyone know how status bars gets the healed amount from food? is that something available game, or do they just have a map of pretty much every food available

valid wave
#

where is the instance of this? It's a singleton, but I can't find where it's located

#

or do I need to impliment my own

heavy bobcat
#

I think you can just inject it

oak rock
#

look how other stuff uses it

#

theres a service

valid wave
#

not used to injecting, that's new to me. And I've been digging around, but the plugins I know that use this are private

amber rampart
#

you @PluginDependency(ItemStatPlugin.class) then @Inject ItemStatChangesService

valid wave
#

you need to plugin dependency a core runelite plugin?

amber rampart
#

yes

#

you can only PluginDependency core plugins

ember flareBOT
valid wave
#

Hmm, then I should also be able to inject into the hitsplats system, right?

#

in vitality, I had to fake hitsplats a sprite, but if I could interact directly with hitsplats, I could replace them

amber rampart
#

I don't think we have an api for creating hitsplats

ember flareBOT
valid wave
#

I think the extended hitsplats plugin also just fakes it

amber rampart
#

they are just fakes

#

that class is only for the api

#

and going to become an interface soon

tight quarry
#

I have a few questions just to try and understand like what is and isn't allowed and why.

One big issue with the friends-chat is that the number of bans is limited to the owner's ignore list. I saw an autokick plugin rejected, which is really sad cause for this use-case, jagex should have simply implemented a better way of handling bans. But... I understand that it's automation that sends requests to their server and that it would need to specifically be allowed only for that use case, so.. I get that.

However I was wondering if it's possible to show a list of players "marked as banned" that joined in a ui where you can simply click those names to kick.
That would be the same as kicking a player manually from the friends-chat panel. Or... Is that immediately not allowed due to "Any feature which... Adds additional menu entries which cause actions to be sent to the server" under the menu category?
It's not a right click option, but I can imagine that's also not allowed...?

As an alternative, I'm wondering..
Can we look at the friendschat, press a key, and hide everyone who's not in the "ban list". So you only have to spam click at 1 spot to kick all of the users out?

#

And just trying to understand the whole entity hider situation for offline friends. As you can still show specific people by adding them to the ignore list. You would still "not respect their privacy settings". But if the hiding of ignored players were also not allowed, it would probably create a gray area in terms of... If even that is not allowed... Then what is..? Hence the reason to allow it..?

And in terms of why that is allowed, and the showing offline friends isn't, is the reasoning behind it something like: "The option to be able to show nearby ignores (ragger, stalkers), outweighs the situation of your privacy settings not being respected by the same functionality being used in reverse"?

oak rock
#

i want to say the ability to only see ignored people is an oversight and actually a bug

#

as for the kicking thing, your "alternative" sounds viable to me

tight quarry
oak rock
#

yea i know, we had a discussion not too long ago about it and it caused some friction

valid wave
#

alright, so I've ran into a bit of a snag. The system for extra effects works perfect for the heals/prayer etc. Even bluefin triggers both. however, antelope is triggering a false double heal because the consumable reports both heals at once

oak rock
#

time to write some code

tight quarry
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
bitter mulch
#

I think I know the answer to this but I’ll just double check. There’s no way to get a NPCs HP that doesn’t have a visible health bar, correct?

quick path
#

correct

ember flareBOT
covert marlin
#

In our bronzeman unleashed plugin, we are developing a potential fresh start mode. It snapshots the bank and changes the quantity displayed to '0' for every item. When they deposit unlocked items on a stack already in their bank, we clamp the withdraw-x chat field. So if they type 600 and only have 300 deposited, it clamps the text to 300. Is this allowed? Otherwise they could just withdraw their whole stack and the game mode is impossible. The use case is for clan bingo/from scratch youtube videos/a player not wanting to sell everything in their bank to start bronzeman. https://github.com/joffewilliam/bronzeman-unleashed/blob/feat/freshstart-squash/src/main/java/com.elertan/policies/FromScratchPolicy.java

GitHub

Ironman without the chores. Unlock items, then trade freely. - joffewilliam/bronzeman-unleashed

#

Would of asked sooner, but I thought there might of been as easier way, we still can't figure out withdraw-all, so we just disable it right now

ember flareBOT
stuck shale
#

no logs but i think they just recolored it

ember flareBOT
quick path
ember flareBOT
ember flareBOT
sonic quest
#

Hey, quick question... is there an Etceteria item ban plugin that shows which items are disallowed? And if not, would it be OK if I create one or is it against any rules?

quick path
#

a what

#

idk what that would be, but you can look at the rules here

topaz pierBOT
sonic quest
#

Ooh never mind, im actually stupid... wrong island name in my head...

#

Thanks though

quick path
#

Oh entrana

sonic quest
#

yep

quick path
#

I don't see why that would be an issue

sonic quest
twin rover
#

is this normal when updating the version number in the build.grade? first time doing it, or am i doing something wrong

sharp knot
#

That looks like it's probably coming from an intelliJ plugin you have installed

twin rover
#

hmm only have what was on intellij by default, but if i commit and push it wont effect the plugin will it?

2 vulnerabilities found in dependency:
CVE-2023-6378
7.1
Transitive Deserialization of Untrusted Data
CVE-2024-12798
6.6
Transitive JaninoEventEvaluator vulnerability

from this part

    testImplementation 'junit:junit:4.12'
    testImplementation group: 'net.runelite', name:'client', version: runeLiteVersion

it does give me an option to report it as false/positive

upper valve
#

just ignore that

twin rover
#

ty ty

tight quarry
#

I was wondering, is there a reason that the HiScore plugin doesn't have a config option to optionally require a key to be pressed to add the menu right click player menu option..? (it's extra code, takes time to write, so if it's just that, that's also a very valid reason lol)
I just realized how annoyed i was by the number of options when right clicking

ember flareBOT
#
[runelite/static.runelite.net] New branch created: cache-code-2026-03-18-rev236
twin rover
#

so im still kinda new to git, i just used the update method from the pluginhub page

# Only necessary if you have not set it before
git remote add upstream https://github.com/runelite/plugin-hub.git

git fetch upstream
git checkout -B <your-plugin-name> upstream/master
# update commit= in plugins/<your-plugin-name>
git add plugins/<your-plugin-name>
git commit -m "update <your-plugin-name>"
git push -f -u origin <your-plugin-name>

but instead of updating my update post it made a new one and updated that one instead, how should i keep submitting to the same one?

glass sandal
#

After an update is merged you’ll always make a new PR. If that’s what you’re asking

twin rover
#

it did the first time, but then i submitted a quick update and now i got 2 open pages

sinful lava
#

you can close the invalid one (#11118), the new one (#11120) looks good

twin rover
#

will do thanks 🙂

#

for the branch conflict i had, im assuming thats just updating the plugin branch before pushing my update right?

tight quarry
#

I'm trying to render the friendsChatIcon in a menuEntry using the following code

clientThread.invokeLater(() ->
        {
            final BufferedImage image = spriteManager.getSprite(SpriteID.SideIcons.FRIENDS_CHAT, 0);
            friendsChatIconId = chatIconManager.registerChatIcon(image);
        });

<img=" + friendsChatIconId + ">"

But it doesn't seem to work.. It's a different sprite every time this invokeLater is called. As if the sprite does get added, but the wrong id is returned. Any idea what might be wrong here? 😄

reef badger
#

the conflict is because you opened the first PR from the master branch

#

which was missing all commits since the last PR, including the PR from yourself for that plugin

twin rover
#

ahh got it, didnt even notice i did it, and no idea how i changed it after 😂

tight quarry
ember flareBOT
stuck shale
#

Crash or hang too

ember flareBOT
deep adder
#

should i go ahead and make a PR to point the plugin at the same commit in my github?

sinful lava
#

It's fine to continue to step 2 of the Plugin takeover policy, yes

steel flame
#

Anyone here know how the TOA unique notifications work in Dink? Got a couple of questions.

ember flareBOT
heavy bobcat
ember flareBOT
tribal root
#

Dink doesn't really have a dedicated discord server, we would usually hang out in pajlada's twitch offline chat and if needed, set reminders to each other via a local chatbot

low hatch
tribal root
#

hey, after adopting a plugin I forgot to edit author metadata; previous owner has had all their plugins bundled in one repo and I switched to just having 1 repo dedicated for the plugin
for this, is editing rootProject.name in settings.gradle file safe to do so? along with author field in runelite-plugin.properties, do I need to acompany this with another change somewhere?

timber cairn
#

What kind of things would cause a config sync error? Are there size limits? I got a user with an issue. Log file shows {"rev":1,"failures":["watchdog.alerts"]}. He said that after deleting some of his bigger alerts, it started working (for now) so that's why I was thinking some kind of size thing.

rancid marten
#

yeah, there is a size limit of around 100k iirc

heady pond
timber cairn
#

Wait I'm dumb, characters are bytes...lol

ember flareBOT
ember flareBOT
native notch
restive garnet
#

People absolutely do see comments on PRs

worthy sparrow
#

reviewers get notifications on changes generally

#

we also see your comments in #github

#

you are kind of just in a long line

sharp knot
#

Your build was also failing until two weeks ago and you aren't really in line until the build is passing

ember flareBOT
grizzled aspen
#

in the future just let your pr sit if it is ready, otherwise you are sending your plugin to the back of line for most reviewers

frank sapphire
twin rover
#

anyone know what this falls under? didnt manage to find anything with dev tools 🙁

rancid marten
#

It’s doing a bunch of automated clicks on some stuff

frank sapphire
rancid marten
#

Almost any use of menuAction isn’t allowed

frank sapphire
#

understand, is there any other way to switch it without menuactions?

rancid marten
#

No but you could hide the private chat instead

frank sapphire
#

i thought about doing that before, but i could only make it work if private split chat was being used sadly. I will make the changes back to that then

#

thanks

snow needle
#

I got a warning on my PR https://github.com/runelite/plugin-hub/pull/11116
Use of java.lang.Exception.printStackTrace is not allowed: system i/o, use a logger instead.

I assume it's for this (which is not new):

StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
JTextArea textArea = new JTextArea(sw.toString());

I'm writing to a string; this is not system i/o. Is this a new check? Will my PR be ignored until I change it or can I ignore the feedback?

rancid marten
#

Maybe @tulip wagon can fix it to only warn for the ones which go to stderr

ember flareBOT
frank sapphire
#

that was fast, thanks, does it take some time to reappear in the hub?

rancid marten
#

No

frank sapphire
#

was removing disable=true enough? or do i need to set it to false instead?

reef badger
#

removing it is enough, it did not have it before and worked as expected

#

the reason why its not showing up is gh actions just timed out

#

they got some blog i didn't read about why actions have been shit the past month

frank sapphire
#

gotcha, thanks for letting me know

reef badger
frank sapphire
#

yup perfect, many thanks guys

rose void
#

Actions was already on life support when I still worked there and that was over a year ago

reef badger
#

that was what i figured but i didn't read the blog since i assumed it wouldn't say "everything is AI now so nothing works"

upper valve
#

yeah 2 people, claude sonnet and his cousin claude haiku

#

(and the latter was clearly a nepotism hire)

rose void
#

Leadership has been a rotating door there since like 2023, or earlier depending who you ask. The company has lost it's goal and way in the shuffle

#

That's the real answer the blog won't say, imo

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

None

OS Version

No response

Bug description

The Minigame Teleport spell cannot be hidden/unhidden on Standard, Ancient, or Lunar spellbooks. It only works correctly on Arceuus spellbook.

Root cause:
The Minigame Teleport spell is unique - it appears on all spellbooks but uses different spell IDs (33138-33141) while sharing the same widget (14286856). During initialization, each spellbook's OpListener overwrites the previou...

#

Problem

The Minigame Teleport spell is unique - it appears on all spellbooks but uses different spell IDs (33138-33141) while sharing the same widget (14286856). When each spellbook initialized, the OpListener was overwritten, with Arceuus initializing last and capturing spell ID 33140. This caused hiding/unhiding to only work on Arceuus spellbook.

Solution

Build a lookup map (spellIdsByWidgetAndSpellbook) during initialization to store spell IDs per widget per spellbook. The OpL...

blazing panther
#

anyone who has used the projectileMoved event know why the projectile's source actor is always null?

#

target actor seems to be working tho

low hatch
# ember flare

feat: CyberWorld MMORPG rebranding & technical overhaul 😂

>Checks repo and Personfu/copilot/
Classic

woeful star
#

Could anyone help me with if this would be within the rules -- Sorry if this isn't the right place and for such a long message.

Functionality:

  • User can press a key, causing a countdown to start for a configurable number of ticks.
  • User's attack speed is checked, along with the tick they attack on.
  • A "tick fix" is suggested, allowing the user to hit on the last possible tick in the countdown (e.g. claw, ayak or bp once to hit on the final tick).

Possible uses:

  • User presses key at the start of each zulrah phase. They get an extra hit in sometimes with a different weapon by tick fixing.
  • User presses a key at the start of bloat's down. They can now fix to make sure they hit on the last possible tick before bloat starts moving again (reduced damage).

Lots of others time based mechanics, those are just 2 that are very easy to explain and come to mind.

Rules/Concerns:

  • Indicates the time where a boss mechanic may start or end -> The plugin isn't indicating this directly, it's simply a timer that the user configures, and sets. It does however achieve this end goal. So does every timer plugin though.
  • Adds additional visual or audio indicators of a boss mechanic except in cases where this is a manually triggered external helper. -> This is the very next rule after the above, and seems to carve out an exception for our case?
sharp knot
#

This feels iffy at best imo and because it's checking the player's attack speed I think it does a little too much to fall under the manually triggered helper bit

woeful star
#

Checking attack speed could be moved to settings, the integration that's crucial to this is checking the tick they're attacking on. I'm guessing thats the same from what you're saying though.

glass sandal
#

You can use a keybind to reset visual metronome so step 1 feels the same to me

woeful star
#

Effectively

  • Timer Plugin
  • Attack timer metronome
  • Do basic math

This would just be automating #3

sharp knot
#

The "tick fix" feels not ok

ember flareBOT
ember flareBOT
snow needle
#

What is the best way to test a feature that uses the party system? I need to quickly be able to launch 2 clients using the same plugin jar with different characters.

worthy sparrow
#

why does that matter for the party system

#

oh you editted

#

use --profile

snow needle
#

--profile can't change character though can it?

oak rock
#

login to a different character?

snow needle
#

As I understand if I use --insecure-write-credentials and make credentials for each character there's no command line flag to specify which credentials to use

oak rock
#

i just save the file and swap it out

snow needle
#

so I'd have to rename them each time I want to restart

worthy sparrow
#

Change your home dir for each one

snow needle
#

If that's the best that can be done it's OK, just curious if there's better

#

how do I change home dir?

oak rock
#

-Duser.home iirc

snow needle
#

that's the path to .runelite?

oak rock
#

no its the path to your user.home

snow needle
#

Do credentials ever expire?

oak rock
#

yes but ive found its not often

#

i think ive had to regen them 2 maybe 3 times total

snow needle
#

Home dir is working well. Thanks @oak rock ❤️

oak rock
#

Stolen valor

snow needle
#

and Ron ❤️

snow needle
#

Is there a way to detect if the party plugin is installed & enabled? So I can disable party-related UI if party plugin is not enabled.

ember flareBOT
ember flareBOT
ember flareBOT
#

I bought my own ornament kit and filled in some other missing animation ids where there were already the respective dragon tool (or) animations in AnimationID:

Mining a crashed star:
<img width="224" height="191" alt="Screenshot 2026-03-19 164113" src="https://github.com/user-attachments/assets/d00190e9-28f3-48d4-90df-7976d0308873" />

Chopping a tree:
<img width="209" height="240" alt="Screenshot 2026-03-19 164233" src="https://github.com/user-attachments/assets/be9d365b-c36e-4582-9fc...

sour jewel
#

Is there a way to programmatically set whether the player will run or walk when they move?

ember flareBOT
#

These IDs are already defined in the gamevals package at net.runelite.api.gameval.AnimationID, specifically:

public static final int HUMAN_MINING_TRAILBLAZER_RELOADED_PICKAXE_NO_INFERNAL_WALL = 11827;
public static final int HUMAN_MINING_TRAILBLAZER_RELOADED_PICKAXE_NO_INFERNAL_NOREACHFORWARD = 11839;
public static final int HUMAN_WOODCUTTING_TRAILBLAZER_RELOADED_AXE_NO_INFERNAL = 11940;

Moreover, we usually do not add API constants for hub plugins; they can define the...

sour jewel
#

is it against rules/guidelines to have a plugin virtually press and hold ctrl?

quick path
#

I'd think so, yes

sour jewel
#

In my research I have not seen anything that specifies this but it might just be because I want to believe. Does anyone know of any documentation that might tell me whether or not having a plugin press and hold ctrl is allowed?

topaz pierBOT
sour jewel
#

unfortunately I have already read through both of those links and maybe I am reading it wrong but I don't see anything that addresses my concern

reef badger
#

having a plugin press a keybind for you is basically the definition of botting no?

rancid marten
#

anything providing automatic keypresses is against the rules... yes

sour jewel
#

thats what I figured. I was just wondering why documentation didn't seem to say those words but I guess botting does cover it.

reef badger
#

probably because of the "this is not exhaustive" section

sour jewel
#

with a game over 2 decades old, I was just hoping that maybe an exhaustive list would exist by now.

reef badger
#

oh my goodness no

muted bone
#

Wasn't there some talk recently about updating the third party client guidelines?

ember flareBOT
reef badger
#

i think goblin said something like that b/c of the hallowed sep plugin loophole but idk if it happened

ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 11

Bug description

The plugin is highlighting the wrong object/npcs/item when clicking 2 different things, for example clicking to pick up a drop right after clicking on an npc will highlight both the npc and the item on the ground

The best way to reproduce this I found is trying to pick up an item will a full inventory while attacking an npc

Screenshots or videos

https://github.com/user-attachme...

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 11

Bug description

Attempted to use the ProjectileMoved event to find whether or not the player has created it. (projectile.getProjectile().getSourceActor() )

Tested with various magic projectiles from both the player casting it and from an NPC.
Tested will all plugins disabled except fresh example plugin (to output projectile information)

Screenshots or videos

No response

RuneLite version...

ember flareBOT
reef badger
#

2884 nor 2885 are the coords in this file so i'm just going to close my eyes and assume rhysdog is crazy

amber rampart
reef badger
#

mayb

#

the coords seem to be ever so slightly off from what's shown in his video

amber rampart
#

the coords are for the world map iirc

#

so it will be the coord sof that

reef badger
#

oo ok

#

that's fine then

#

objects maybe just changed cuz i feel like these haven't been wrong for 7 years

#

but who knows~

true tusk
#

I have a question. I got the example plugin compiling and running through Intellij. Is it possible to run the plugin in the official client without launching it through Intellij? I want to ideally launch it through the Jagex launcher and have it be like any other plugin.

sinful lava
#

If the plugin is useful for others, consider publishing the plugin to the plugin hub. That'd be the path-of-least-resistance imo

true tusk
#

I agree. But I would like to do long term testing of the plugin before considering polluting the hub

sinful lava
#

You could built a shadow jar

topaz pierBOT
#

Run gradle shadowJar to generate a runnable jar in build/libs/*-all.jar. You can run the jar with java -jar -ea jarName.jar. If you run into problems, update build.gradle to the latest plugin template version.

true tusk
#

I did that but placing it in the plugin folder didn't show any results

sinful lava
#

Read the second portion of that message above

#

It's not as simple as just running the jagex launcher, but it's maybe nicer than having intellij running at the same time

true tusk
#

Dang well alright thanks. I was hoping that wasn't the only option but I guess it is.

native notch
#

Hey all, I'd like to contribute to the chat notifications plugin (but that falls under the build-in Runelite plugin it seems). I started using this plugin like a week ago when starting slayer and I'd love more customization. Currently all my highlights are 1 dark screen colour with Notify on highlight, but I would love 1 colour for my highlighted drops, 1 colour when my goading potion stops working, 1 colour when my antifire stops etc. I made a concept drawing and I'd like to hear what you think and if I can try to built that in. 2 images attached (current plugin interface and concept for new one)

rancid marten
#

hmm yeah there really isnt a great way to achieve something like that I think

#

you could do that (have like 3 separate highlight lists + notif settings) but then someone will want a 4th lol

worthy sparrow
#

i think the force recolor hub plugin can do this?

oak rock
#

it doesnt notify but it does recolor

low hatch
rancid marten
#

if im going to do any new work its going to be that sidebar reorder thing probably

jolly hearth
#

Is it against ToS to consume a click on an object conditionally?

misty hornet
#

I would think so, but that’s a super vague question

ember flareBOT
jolly hearth
#

For more info, clicking on the mastering mixology deposit without the requested potions

rancid marten
misty hornet
#

Basically the same thing here

#

(?)

#

Not sure, maybe there’s more nuance

rancid marten
#

even though conditional menu swapping is on the list, i thinik there are some plugins that do it like that ess pouch plugin

#

lol

jolly hearth
#

cg plugin "no raw fish" option too apparently

stuck shale
#

construction qol just got contextual swapping for log basket last week 😄

misty hornet
#

Interesting

stuck shale
#

maybe the context of contextual swapping matters

jolly hearth
#

it doesn't work on text inputs in the plugin settings though, it would be nice if it did, but theyré presumably not FlatTextField

low hatch
hollow stratus
# sinful lava You could built a shadow jar

is the /shadowjar help message out of date? I don't see any generated jars with *-all.jar in any of the build folders. These are the ones I've found (intellij search excludes build folders 😥 ) but I'm not a java dev, so I'm not sure if there are more build/libs/ dirs that I couldn't find
cache/build/libs/cache-1.12.18-SNAPSHOT.jar
runelite-api/build/libs/runelite-api-1.12.18-SNAPSHOT.jar
runelite-client/build/libs/client-1.12.18-SNAPSHOT-shaded.jar
runelite-gradle-plugin/build/libs/runelite-gradle-plugin-1.12.18-SNAPSHOT.jar
runelite-jshell/build/libs/jshell-1.12.18-SNAPSHOT.jar

topaz pierBOT
#

Run gradle shadowJar to generate a runnable jar in build/libs/*-all.jar. You can run the jar with java -jar -ea jarName.jar. If you run into problems, update build.gradle to the latest plugin template version.

sinful lava
#

oh, the command is for plugin hub plugins

#

i thought that was the context

worthy sparrow
#

the client shaded jar should be what you want

hollow stratus
#

ah, you're right. I realized they were talking about a plugin. I was seeing if it was possible to create the same shadowjar to use my sidebar changes but it's not a plugin. Thanks for the tip ron

hollow stratus
#

running the shadow jar works great. It didn't bring in my plugins, but adding the VM option -Drunelite.pluginhub.version=1.12.18 from the run configuration to the command has it working great.

Full command for anyone wondering or searching in the future: java -jar -Drunelite.pluginhub.version=1.12.18 -ea /path/to/client/shaded.jar

worthy sparrow
#

yes

hollow stratus
#

Thank you for your infinite wisdom Ron 🙏🏼

native notch
native notch
rancid marten
#

I’m not sure I want something that convolutedly complex in a core plugin or not lol

native notch
#

with core plugin you refer to the build-in runelite plugin of which this is part? Maybe then I could make it simpler with just numbers 1 to 5 or something and otherwise try to make my own plugin for it?

rancid marten
#

If you wanted something super extensible the best thing to do is make your own plugin panel for it I think

jolly hearth
#

my WIP plugin's plugin panel has a list selector that lets you add/remove things, something like this could work for making n different notifications

jolly hearth
#

my not currently released Nameplates & Hitsplats plugin

native notch
rancid marten
#

Ai tools are as good as anyone at generating kind of working swing code lol

jolly hearth
#

it took me hours to figure out what was wrong with my (extremely) simple plugin panel, swing sucks

native notch
#

Opening and updating the general Runelite repo in VS Code, 5k + problems

sharp knot
rancid marten
#

Oh yeah gnome is really good lol

sharp knot
#

Good, nuts, potato potato

native notch
indigo river
#

Same bro i tried installing the extensions in VS Code and it made my git clone button not work, it instead just reopens my existing local branch

#

Stick with IntelliJ if you can; it's awkward af to get used to coming from VS Code but you'll have a much easier time getting it to work at all lol.

worthy sparrow
#

what would the world be without ide's

ember flareBOT
#
[runelite/static.runelite.net] New branch created: wiki-data-2026-03-20
valid wave
#

does anyone with the actual client code have the exact hitsplat rendering code? I want to anchor to the existing hitsplats so that they work in any orientation

rancid marten
#

what is a hitsplat orientation?

#

or you want to overlay over a hitsplat and want to know where they draw it?

final crater
#

Hey just noticed that the camphor crates are misplaced as they are definitily crafting req/xp and were misplaced into construction. Am I free to make a pr for that? first time contributing and wanted to make sure it was a oversight.

stuck shale
#

if you think it is an oversite a pr with the fix and that as evidence is enough

reef badger
#

it was added in a PR adding all sailing stuff so it was probably just a misplace yeah

ember flareBOT
#

I noticed making my first batch of crates, and then going to calc some construction stuff that this was misplaced.

I've moved it into the crafting section, this meant I had to change the args as it changed from named to item. I also marked it as a members action, the surrounding items dont seem to respect that arg (fire battle staff action is def members) so im unsure if I made a mistake there.

I haven't actually built it yet and looked, as it seemed like a small enough change, let ...

quick path
#

I probably overlooked that when I reviewed the big sailing calc PR, I'll look that over tonight

reef badger
#

1/106 aint bad

quick path
#

@final crater your PR is failing tests; specifically, the added line needs to appear in level and exp order, so it needs to be moved up above green d'hide shield

final crater
valid wave
ember flareBOT
polar lake
ember flareBOT
#

I've moved it into the crafting section, this meant I had to change the args as it changed from named to item. I also marked it as a members action, the surrounding items dont seem to respect that arg (fire battle staff action is def members) so im unsure if I made a mistake there.

No mistake on your end, the member/non-member thing is very spotty in terms of accuracy, few contributors to the skill calc have been respecting it, so overall it needs one big revision to fix them all up. Has...

quick path
#

No worries

sonic quest
#

Hey! I have some additional breaking changes planned for my plugin that has yet to be reviewed. Shall i put the initial PR in draft or close it an reopen when im done?

sinful lava
desert fulcrum
#

i will probably fix it during leagues

#

too much effort to check why its broken on main game

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 11

Bug description

During Friendly Ent forestry events, you clip the branches of entlings.

When correctly clipping the branches, a game chat message appears in red that says "You've killed an Entling for 0 loot." at the end of the event, another similar message appears in red stating the actual amount of loot you collected for the event.

The bug appears for the first of the two above.

When this messa...

ember flareBOT
dusk steppe
#

I made a change to a plugin I want to test out, but when launching it in test it launches with this. These accounts aren't supported anymore, you can only use jagex accounts right?do I need to update it somehow?

reef badger
#

...no?

#

you'd definitely know if they banned legacy accounts from playing, people would be very very mad

dusk steppe
#

it's not officially banned but when you download runelite you can't login to one and are forced to migrate, and I can't create new ones, so they're effectively EOL for me after my drive got wiped and I had to re-download runelite despair

dusk steppe
#

Great, thanks adam

reef badger
#

you can definitely log into a legacy account with RuneLite

#

what adam linked is not what you're saying

#

it might be the answer, but it's not what ur saying

ember flareBOT
reef badger
#

do we want console messages collapsed

ember flareBOT
ember flareBOT
#

I'm not sure the methods currently used but you can at least see how many different items were received and if it is more than 1 type in a single netting then you know to increment the counter by 5 instead of 1 or if you get more drops of a single item than is normally possible.

Only edge case would be the pages. You would have to have logic that if you got exactly 25 it could be a single drop of getting a dupe tackle box or fish barrel or just 5 drops of the lowest possible amount of pages...

rugged pivot
ember flareBOT
true tusk
#

How long does it take for an addon to be reviewed usually?

restive garnet
#

Depends on scale and place in the queue

#

Your number will come up eventually

ember flareBOT
jolly hearth
#

is there any way to check if the player swaps 2 items with the same ID and quantity in their inventory?

rancid marten
#

Not super easily, i think you could use a script hook for it though

#
// 6013
[clientscript,inventory_reorder](component $drop0, component $drop1, int $comsubid2, int $dropsubid3, int $comsubid4, int $int5)

this

jolly hearth
#

the args don't seem to be very useful, or is this a limitation of script inspector?

rancid marten
#

might just be the inspector

#

hook to script pre fixed and read the args off the stack

#

should be [2] and [3]

jolly hearth
#

nothing useful in intStack (all values same when swapping different slots around)

#

getIntStackSize and getObjectStackSize both 0 🙁

valid wave
rancid marten
#

oh, try .getScriptEvent().getSource()/getTarget()

valid wave
#

Vitality

rancid marten
#

0, 0,
0, -20
-15, -10,
15, -10

#

they are offset from the screen position of the actor at half its height

valid wave
#

Gotcha, thanks

#

That's actually exactly what I needed

jolly hearth
valid wave
#

Old photo, but I've been playing with the prayer splats, what would be a cleaner icon for prayer restored? I tried to remove the black border on this icon, but it makes it feel washed out. But anything larger feels disproportional

hollow parrot
#

looks like the prayer icon in the orb next to the minimap is slightly different. maybe that would look better?

valid wave
#

Hmm, on mobile, can you send a screenshot?

#

I have my text for healing black on white, I tried white on black and it didn't look good

#

Original for reference

valid wave
#

Oh yeah, that is different lol. I guess I used the skill icon

ember flareBOT
jolly hearth
# ember flare

I thought someone just stole my (unreleased) plugin for a minute lol

jolly hearth
valid wave
#

Making an April fools feature, what class do I look in to find the currently worn equipment, and by extension the textures for said equipment?

And related, the textures for stuff like hitsplat icons etc

jolly hearth
#

client.getItemContainer(InventoryID.WORN), inventory icons can be obtained with itemManager.getImage

#

for hitsplats etc you want spriteManager

granite quest
#

Hi @tulip wagon I do not mean to disturb but are you open to collaborators for the sailing plugin? There are several bugs that can be fixed from the reported issues on the github repo to improve the plugin. There also seems to be others who are eager to contribute to improve the plugin; it is quite popular after all.

valid wave
tulip wagon
ember flareBOT
#

Allows disabling rock overlays independent of other plugin features.

Allows changing the angle, in degrees, where the pie fill starts. 90 is the default starting in the up direction.

Allows changing the fill direction. Defaults to counterclockwise which is how it worked before. Clockwise is how the official client has implemented this feature. Both fills in both directions at the same time like pacman's mouth.

granite quest
muted bone
#

Random question, anyone know which gameval ID is the Battlefront Teleport?

low hatch
#

The spirit tree interface or the spell?

muted bone
#

the spell

low hatch
#

The Sprite ModelID is 2060 if that's what you're looking for

muted bone
#

Sorry I should specify, the SpriteID

#

yea

#

ty @low hatch

low hatch
#
    public static final class _2XNecroSpellsOn
    {
        public static final int _0 = 2052;
        public static final int _1 = 2053;
        public static final int _2 = 2054;
        public static final int _3 = 2055;
        public static final int _4 = 2056;
#

What the hell 😂

amber rampart
#

yeah jagex doesn't really name sprites so they do that

low hatch
#

Time to revive RL Sprite ID :^)

amber rampart
#

we can tack better names on to the end of those

#

we do that with the hiscores sprites

#

like in cs2 they will write something like cc_setgraphic("2x_necro_spells_on,2") and that gets compiled to cc_setgraphic(2054)

muted bone
#
    DRAYNOR_MANOR("Draynor Manor Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.DRAYNOR_MANOR_TELEPORT),
    BATTLEFRONT("Battlefront Teleport", Spellbook.ARCEUUS, 2060),
    MIND_ALTAR("Mind Altar Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.MIND_ALTAR_TELEPORT),
    RESPAWN("Respawn Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.RESPAWN_TELEPORT),
    SALVE_GRAVEYARD("Salve Graveyard Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.SALVE_GRAVEYARD_TELEPORT),
    FENKENSTRAINS_CASTLE("Fenkenstrain's Castle Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.FENKENSTRAINS_CASTLE_TELEPORT),
    WEST_ARDOUGNE("West Ardougne Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.WEST_ARDOUGNE_TELEPORT),
    HARMONY_ISLAND("Harmony Island Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.HARMONY_ISLAND_TELEPORT),
    CEMETERY("Cemetery Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.CEMETERY_TELEPORT),
    BARROWS("Barrows Teleport", Spellbook.ARCEUUS, SpriteID.MagicNecroOn.BARROWS_TELEPORT);```

should be correct then?? lol
low hatch
#

Oh shit you're doing that yourself?

amber rampart
#

I think they are params on the spell items

#

yeah, params 597-600

#

and there are some enums to enumerate all the spellbooks and their spells

low hatch
#

Seems to be

    public static final int SPELLBOOKS = 1981;
    public static final int SPELLBOOKS_SUB = 5280;

https://abextm.github.io/cache2/#/viewer/enum/1981
Spellbook list -> Spellbook -> Spell
Key 599 for the Spell Enums seems to be the Sprite ID when it's castable

amber rampart
#

there are 2 on and 2 off sprites for every spell because there are 2x variants

#

for icon resizing

low hatch
#

Ohhhhhh right when you're in Wildy

#

Abex do you know if they changed any IDs after the minigame teleport addition? Just realized my shift clicks weren't working on the (normal) spellbook. I assume that's the reason?

amber rampart
#

I think they all shifted +1 except home tele

low hatch
#

Ah I suppose that's the reason

#

Thanks

muted bone
#

so I need to add the "off" and "on" variants?

amber rampart
#

you can look at the gameval diffs to se

low hatch
#

Oh right

amber rampart
late hare
#

yeah they put it at child 8 lol

amber rampart
late hare
#

yeah im not sure why they did that lol

amber rampart
#

we complained and they are fixing it

late hare
#

fixing it by making new component for each spellbook? 😛

amber rampart
#

no clue

low hatch
#

Unironically they should open source their code and just let people fix it :^)

muted bone
# amber rampart depends on what you are doing

Essentially, working with a youtuber to make a "random teleport" plugin where he needs to teleport within a random time (5 min to 3 hours) the teleport he needs to use pops up in an overlay, and everything except walk and the teleport allowed is blocked

amber rampart
#

if you just need to draw it in the overlay you can choose whichever one fits best and use that

muted bone
#

Thanks Abex

ember flareBOT
#

Selecting Big-Search on the tempoross reward pool awards the player with 5 rolls if the Tempoross drop table. This can be confirmed by checking Reward permits claimed in the collection log under Tempoross.

Investigating into this a bit further it seems that the following occurs to combine each of these separate loot rolls into a single LootRecord object:

  1. Each chat message overwrites inventorySnapshotCb to a single pending callback...
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
#

I've read through the ClientUI changes (will ignore the rest for later) and these are my comments:

  • I don't see any reason to have both sidebarEntries/sidebarTabOrder. Maybe I'm missing something. But this just introduces a lot of extra state keeping for no reason that I can tell.
  • "customOrder" is a pretty bad name because it isn't descriptive enough. Something like private static final String CONFIG_CLIENT_SIDEBAR_ORDER = "clientSidebarOrder"; is better. This naming is littered over...
lyric wasp
#

are world entity ids fixed such that 3 is always sloop and 12 is always pirate ship and so on?

amber rampart
#

the config id is static, its just like a npc id or item id

lyric wasp
#

awesome, ty

rancid marten
#

@hollow stratus have you look at 18720 at all?

ember flareBOT
granite quest
#

Is it still not possible to detect the SoundEffectPlayed event if the client is muted?

stuck shale
#

It’s not a “still” it’s that they don’t send them if it’s muted I don’t think

#

But I’m not so sure because visual sounds shows stuff when it’s all muted, doesn’t it?

granite quest
#

Visual sounds? Im not familar

late hare
#

Server does send, but the event will not post if you have sound off

stuck shale
granite quest
late hare
#

nope, it basically hooks where client adds to the sound queue, which is wrapped in if (volumn != 0) p much

granite quest
#

I guess a workaround could be to use setSoundEffectVolume to enable the event to post when I'm anticipating a certain sound effect

late hare
#

lol, idk how viable it'd be but you might be able to override the volume to set it to 1 but just consume all of the sounds so they don't play

granite quest
#

The metronome plugin does this but it plays the sound instead of consuming it. good call

late hare
#

lol nice

granite quest
#

Seems strange to gate these soundFX events to volume if the server sends the information regardless.

late hare
#

for RL it's just a side effect of how it detects a sound event

valid wave
#

having a bit of a puzzle here. I have a list of items, and a snapshot. I want to remove all the items from one list to the other, to get the difference

#

but stream.removeall will just remove every x item if it exists, and not individuals. Is there a method that will individually filter out existing without using a convoluted for loop

quick path
#

I recommend looking at how we do item container diffs in core, mostly in the loot tracker plugin

#

I believe we do multiset diffs

valid wave
#

is there an easier way to find the actual github pages of the plugins?

#

I have such a hard time searching up code because google always brings me to the runelite page

rancid marten
#

use an IDE like intellij

valid wave
#

for the plugin hub project, and get the github address from that?

#

wait, I can just use the plugin hub, duh

#

hmm, those are just plugin hub plugins though

rancid marten
#

the loot tracker is a core plugin

valid wave
#

nevermind, I was overcomplicating it

valid wave
#

what is MenuAction.ExamineItem depricated for?

#

is there an event now?

#

or am I safe to use MenuOptionClicked event and filter out Item examine?

late hare
#

it would be CC_OP_LOW_PRIORITY now i think, it isn't a special thing anymore like it was a couple years ago

#

assuming you're examining from an interface

valid wave
#

ah, perfect. I would have never guessed, ty

late hare
#

EXAMINE_ITEM probably should be removed at this point since it is never used anymore lol

rancid marten
#

they never really removed any of the if1 inv stuff from the client so I kept it all still idk

late hare
#

they did, sorta

rancid marten
#

they might have removed the rendering

late hare
#

the item id and count arrays still exist

rancid marten
#

oh yeah

late hare
#

but they can never assign to them

rancid marten
#

lol

late hare
#

and the whole building of the menu ops from those is gone now too

valid wave
#

what even does CC_OP_LOW_PRIORITY stand for

late hare
#

cc is just because the widget is made with cs2, which they do with cc_create

reef badger
#

dont think about jagex naming you'll die

late hare
#

though i think this is used for more than just those

rancid marten
#

oh EXAMINE_ITEM_GROUND is actually gone now

#

meh.

late hare
#

is it?

rancid marten
#

CC_OP_LOW_PRIORITY is our name also

late hare
#

it's still in 236

rancid marten
#

isnt it? i dont see it

#

oh wait

#

im greping runescape-client from master so i guess it wont find it

#

very well

late hare
#

ah lol

#

yeah only one should be EXAMINE_ITEM i think

rancid marten
#

i got pine's sidebar reorder pr to sort of work

late hare
#

that'll be nice if it ever lands

#

fwiw they call those 2 IF_BUTTONX1 and IF_BUTTONX2, which idk if that's much better lol

valid wave
#

so I'm just trying to find the itemm id being examined, sure that's event.getItemId, but what is OP?

rancid marten
valid wave
#

what do you mean

#

I'm just adding examine text to foods, to display how much they'd heal

rancid marten
#

ths is the examine plugin

valid wave
rancid marten
#

except it isnt because the comment is missing and the code is reformatted

valid wave
#

I'm digging around, can't figure out what op is, or if it matters

#

uhh, this is just what the ide shows

rancid marten
#

oh it might be decompiling it or something

valid wave
#

I don't have the actual runelite dev kit, just the plugin dev stuff

quick path
#

You can find the original source in the runelite/runelite repo

valid wave
#

Hmm, I can't seem to find this in the runelite files. I can find the hitmarks for stuff like healing, but I can't find the ui elements, namely the prayer icon on the hud

quick path
reef badger
#

god i love how intrusive sprite 4 is so early in the sprite list

valid wave
#

I was hoping to use the builtin images. I guess the small prayer icon will work

#

ok, that is somehow really adorable

quick path
#

You could always size the sprite up so it's not quite so tiny

ember flareBOT
valid wave
#

I'm trying to tidy up my codebase, and I'm running in to strange behavior

#

in a SubscribeEvent, the relevant code runs as expected, but if I try to move it into another class, not even debug messages trigger

#

and that leads to this being null and erroring

amber rampart
#

you have to register your other class with the event bus

#

and unregister when you are done

valid wave
#

so wait, methods inside a subscribe event won't even run?

#

I'm not sure I understand

amber rampart
#

idk what you are asking really

#

if you @Subscribe outside of your plugin class, you are responsible with registering it to the event bus

valid wave
#

setTile works inside the subscribe event. But the moment I move it into a method of another class, it's not executed

#

when all I'm doing is calling the method from the instance of the object

#

this works just fine when I do subscribe events on Forge, for example

amber rampart
#

minecraft forge?

valid wave
#

sure

amber rampart
#

we have nothing to do with minecraft forge

#

and our event subscribers probably don't work the same

valid wave
#

up until now they've been identical. The point is, why doesn't method calls from other classes work inside of a subscribe event?

ember flareBOT
#

Closes #11935

Adds display options for the farming contract infobox, allowing users to choose when it appears:

  • Always - Show the infobox everywhere (addresses the request for a "persistent farming contract indicator")
  • In Guild - Only show when inside the Farming Guild (default, maintains current behavior)
  • Never - Never show the infobox

This is a fresh implementation of #12055 with all review feedback addressed.

quick path
#

they do

valid wave
#

what am I doing wrong here then?

quick path
#

I'd need to see your code to tell you

#

but my guess is the same as abex: it sounds like you're trying to subscribe to an event from a class which isn't registered with the event bus

valid wave
# valid wave

the main file is subscribed, it executes just fine here

#

but the moment I move it to a call to the instance created in the event, doesn't run

amber rampart
#

is it throwing an exception?

valid wave
#

Hmm. Gimme a sec. Because it was only throwing a null exception due to one of those fields not being initialized, but now that doesn't make sense because it's skipping the debug text