#development

1 messages · Page 1 of 1 (latest)

rancid marten
#

the music plugin uses it to change the volume and it works

dusky loom
#

im gonna take a look at that plugin, thanks!

#

Ohh the Music plugin was the problem, it fights for volume control, so if I try to chagne the volume it overrides it.

rancid marten
#

thats kind of odd since i think it only calls this when you move the music handle

dusky loom
#

Yeah its specifically the granular volume slider. when you set the volume it does move the volume slider.

#

When we call client.setMusicVolume(), it fires a VolumeChanged event. The Music plugin catches it and calls updateMusicOptions() which resets the volume back to the plugin's stored value.

  @Subscribe
  public void onVolumeChanged(VolumeChanged volumeChanged)
  {
      if (musicConfig.granularSliders())
      {
          updateMusicOptions();
      }
  }
rancid marten
#

oh

dusky loom
#

The fix will be to pass the "volumeChanged" to the "updateMusicOptions" method I suppose, do you want me to cut a PR to fix it?

rancid marten
#

that doesnt sound correct to me really at all. this is probably a question more for abex though

amber rampart
#

it resetting the volume to what the config has is intentional

#

since otherwise it wouldn't get set on login

dusky loom
#

yeah, I noticed, and it works well.

#

it just fights for volume when another plugin is trying to change it.

dusky loom
#

I have some code that would fix this behavior and will retain its capability to set it on login

#

I hope it is okay for me to help fix it

potent spindle
#

Is anyone able to point me to where I might find NPC spawn tiles, and defined wander radius/max range?

heavy bobcat
#

Probably wiki if anything

stuck shale
#

The wiki has some but otherwise it’s you that has to be the source

#

I think cook gave up he wrote code to try in a live stream and gave up!

reef badger
#

based

potent spindle
#

Would me being the source look like manually observing? I was really hoping there would be some config file somewhere that would have it, but that would be too convenient I guess xD

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Win11

Bug description

After the update to frog randoms in 2024, the Random Event's plugin's option to "Remove others' menu options" seems to no longer apply to the supporting frogs of the event when they spawn for someone else (I believe it still applies to the monarch frog). Of course I have not been able to test this in safe mode due to the fickle nature of the scenario, but I believe the bug existed ever sin...

stuck shale
potent spindle
#

Ah, got it. Thank you for the help

stuck shale
#

Wrong picture

#

Sometimes wiki has good map data and other times it has data like this

ember flareBOT
#

Summary

  • Fixes an issue where the music plugin's granular sliders would override external volume changes
  • Separates slider UI updates from volume changes by introducing updateSliders() method
  • onVolumeChanged now only updates slider positions without changing the actual volume

Test plan

Unit Testing

  • Verified volume is not overridden when VolumeChanged event fires for music channel
  • Verified volume is not overridden when VolumeChanged event fires for sound effects cha...
dusky loom
#

tbh for the tests I didn't know if I should keep the same attestation so I just copied it from another.

#

Oh and I did run the tests before and after the changes just to make sure it actually fixed something.

rancid marten
#

how does this set the correct volume on login?

dusky loom
#

through updateMusicOptions from what I saw and tested

rancid marten
#

idk it looks like you removed the call to updateMusicOptions

dusky loom
#

from the onVolumeChange yes, but not from the startUp

rancid marten
#

im not actually sure how this works, but based on what abex says, this is wrong

dusky loom
#

hmm let me try to get a gif going, from what I tested, it sets it to the correct volume level.

dusky loom
#

I've amended the commit, added another test specifically for this logic, and added the gif to the PR.

rancid marten
#

i dont think this works either since it would just reset it whenever you hit a load line

#

also its extremely obvious to me that you are just using an llm to code this and communicate instead of doing it yourself

dusky loom
#

I am confused, Is it not okay to use llms to help me code? I understand exactly how the logic works and what it fixed, yes i'd admit I am not that proficient with Runelite in's and outs, and Java is a bit new to me as a syntax, but it adheres to all of your code standards, code is readable and maintainable, tests are pretty straight forward and theres good test coverage for the things that are important to us.
If I would bring in slop code and call it a day I would be probably with you, but I don't think this is slop.

reef badger
#

the LLM has objectively no idea how our codebase works

rancid marten
#

I dont think you understand exactly how the logic works because youve given me two different patches that are both wrong

#

if I wanted an llm generated patch to fix this I would just do that myself

dusky loom
#

Not of everything i'm sure, I don't know what a load line is.. but thats my issue as much as it is the llm...

rancid marten
#

(also i would categorize the tests as 100% slop)

#

the llm use is not what is wrong here as much as youre trying to pass it off as your own thing

#

"ive ammended the commit" and "ive added another test" etc

#

when you actually have 0 idea what you are doing

#

and are parroting an llm

ember flareBOT
dusky loom
#

You are entitled to that opinion.

reef badger
#

that reminds me i gotta tell some guy his png is a jpeg

ember flareBOT
rancid marten
ember flareBOT
ember flareBOT
spiral badge
#

Anyone have any idea why a overlay render might be shown vs not shown depending on camera angle?

quick path
#

probably it's trying to draw lines to or from tiles which might be culled at certain camera angles

ember flareBOT
spiral badge
#

Yeah that makes sense, will have to see if theres a way to fix it I guess cause not exactly the best experience.

ashen jasper
#

I got $20 for anyone that can make transparency mode for Blindfold plugin

ember flareBOT
#

My logs are getting spammed with NumberFormatException, this provides the following stack trace

[Client] WARN net.runelite.client.ui.overlay.OverlayRenderer - DEDUPLICATE Error during overlay rendering
java.lang.NumberFormatException: For input string: "0xffffff"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.valueOf(Integer.java:957)
at java.base/...

ember flareBOT
ember flareBOT
ashen jasper
rancid marten
#

please stop posting that

ashen jasper
rancid marten
#

it annoys me

ashen jasper
#

well that's dumb

thorn grotto
#

it’s his discord and client

reef badger
#

and you know, he said please

ashen jasper
#

then where do i go to commission a plugin

ember flareBOT
#

Type

Crash or hang

Operating System

Windows

OS Version

Windows 11 Home 25H2

Bug description

This is a fully repeatable bug and I am able to simulate it on demand. I am happy to screenshare/share logs or try and perform any realtime trouble-shooting to resolve this issue.

What is happening:
I am using Runelite with my normal list of plugins including the new GPU plugin (more or less maxed settings). I switch from using the Resizable Classic mode to Fixed Classic. If...

neat wyvern
# dusky loom You are entitled to that opinion.

In fairness, I think people who use LLMs are just doing what society told them to do for success (which seems to have been wrong ever since programming was mainstream, far before I got into it). Copilot is even pushed on college students. My biggest growth was in going against society. Unfortunate where society is headed..

low hatch
restive garnet
ashen jasper
rugged pivot
#

Santa

ashen jasper
#

im making a simple commission and everyone either getting annoyed or angry. yall need help

#

no jolly christmas spirit here

sharp knot
#

Please take this to #general or out of the server.

rancid marten
rancid marten
desert fulcrum
#

@rancid marten can you lmk when you fix the maploader thread thingymcbob? thanks

rancid marten
#

I think it was fixed awhile ago, is it still broken?

desert fulcrum
#

oh i just haven't tried

#

i'll add my fix that was dependent on that when i have time then

#

merry christmas

rancid marten
#

sounds good, lmk if its still not working

ember flareBOT
reef badger
#

All

ember flareBOT
#
[runelite/static.runelite.net] New branch created: wiki-data-2025-12-26
autumn zodiac
# ember flare

did this guy create a pull request with his main github account, upload code (maybe mistakenly) with the account 'osrsbots-com', then immediately close it? lmao

restive garnet
#

Yes, and he gets bonus brownie points for trying to fix the perceived problem with a try/catch, which isn't really a fix, it's just a hiding mechanism

ember flareBOT
ember flareBOT
low jacinth
#

Can lag/NPE flooding from plugin A, result in plugin B missing certain events it's subscribed to?

I presume anything that reaches the eventbus gets posted, but I'm more curious if its possible an event doesn't reach the eventbus sometimes.

rancid marten
#

no?

dusk ridge
#

what event and code is being seemingly missed for you?

ember flareBOT
low jacinth
# dusk ridge what event and code is being seemingly missed for you?

WidgetLoaded, I was doing something in an error prone way, WidgetLoaded always occurs twice for the Fade in glide/gotr etc. I was performing an action on the first occurrence basically flipping a boolean.

I've since changed it to just use script event 948 and read the opacity arg. However I was curious because it seemingly only failed for my friend who's log was flooded by 1000 NPEs from a nightmare plugin and I'm not seeing how else widgetloaded would only be called once.

ember flareBOT
dusk ridge
rancid marten
#

i think widgetloaded is always fired

rancid marten
dusk ridge
#

i could be miswording it. i just remember years ago when i was trying to depend on a widgetloaded event at MLM, the widget persisted even when it didnt need to be

rancid marten
#

they can stay loaded after they are no longer visible sometimes yeah

#

but the load event always fires

#

even if it is

dusk ridge
#

ah

rancid marten
#

the client is not just dropping events randomly

dusk ridge
#

maybe there was an additional check i had in the event's code that depended on a more specific instantiation then. its been a while

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
low hatch
#

Is it possible to reset a modified widget to the original state without tracking it?

quick path
#

Generally no

fierce drum
#

(Sorry for the essay, and not sure if this goes in support or dev)

I've been debugging an issue with https://runelite.net/plugin-hub/show/sote-wall-remover. This plugin is meant to remove the back wall at sotesteg, but has not worked correctly (does not make any visual change) since the gpu/legacy gpu plugin changes. I am unsure if this is an issue with the gpu plugin or incorrect api usage by the wall remover plugin.

    @Subscribe
    public void onGameObjectSpawned(GameObjectSpawned event)
    {
        GameObject gameObject = event.getGameObject();
        if (gameObject == null) {
            return;
        }
        int regionId = WorldPoint.fromLocalInstance(client, client.getLocalPlayer().getLocalLocation()).getRegionID();
        // Local code to match boss region / game objects to remove

        Bosses boss = Bosses.inRegion(regionId, config);
        if (boss == null)
        {
            return;
        }
        Scene scene = client.getTopLevelWorldView().getScene();
        if (boss.gameObj.contains(gameObject.getId()))
        {
            log.debug("removing spawned wall for boss: {}, gameobject id: {}", boss, gameObject.getId());    scene.removeGameObject(gameObject);
        }
    }

and get the expected log messages about 'removing spawned wall...' when logging into a raid at the sote instance.

  • If I login with the GPU plugin enabled, I can see the back wall, despite getting the log lines indicating scene.removeGameObject was called
  • If I login with the GPU legacy plugin enabled, I don't see the back wall, and also get the log lines (which is expected)
  • If I login with both GPU plugins disabled, I don't see the back wall, and also get the log lines (which is expected)
  • If I login with the GPU plugin enabled, and wrap the removeGameObject in clientThread.invokeLater, I don't see the back wall, but it's not clear to me that's intended usage to fix this
rancid marten
#

you want to use the new RenderCallback api

fierce drum
#

oh interesting, will take a look ty

ember flareBOT
low hatch
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
low jacinth
# dusk ridge IIRC some widgets arent always removed from memory and still exist even if theyr...

Interestingly it seems the event from server that handles teleporting the boat and starting the fade animation can occur twice before you've finished going through the portal under certain conditions. leading to the widget and script loading an uneven number of times (fade in,fade in,fade out). So this is likely just result of a jagex bug, It's quite hard to reproduce but I'm definitely getting 3 events instead of 2

dusk ridge
low jacinth
#

yeah I can probably ignore the fade-in script if it happens same tick or 1 tick after a previous. Just thought it was noteworthy to mention, its been quite hard to setup a consistent test case

low jacinth
#

found a reproducable method, this looks like a game bug not client right? you even hear the sound effect of the starting fade twice in a row

dusk ridge
#

which if its lag-related could explain the inconsistency/difficulty to repro

ember flareBOT
low jacinth
# ember flare

thank you, i hate spamming you guys with PR's like this especially when theres a lot in queue

low jacinth
chrome crest
#

@upper valve I saw your comment yesterday and feel bad about the size of my MR, if it makes your life easier I’d be happier to choose an older commit for review and then later submit a new MR that has incremental changes. Let me know what’s best and I’d be happy to adjust it

upper valve
#

you can do whatever you want but if you want to generally guarantee i look at it then yeah, keep it to 1kish

#

you can submit 5 1k patches in a row that's not a concern or anything

chrome crest
ember flareBOT
ember flareBOT
chrome crest
#

Reduced the size of the MR by going back a few commits and excluding the major refactor that caused a big diff

ember flareBOT
severe grail
ember flareBOT
quick path
stuck shale
#

claude is this safe for me to paste into my terminal

quick path
#

That's a great question, I'm glad you asked!

stuck shale
#

: - )

upper valve
#

There's actually quite a bit of nuance here...

ember flareBOT
ember flareBOT
ember flareBOT
low hatch
upper valve
#

kotlin is not allowed or anything we just didn't want that disclaimer in that spot

#

it's still listed on the /rejected page

low jacinth
#

is this a recent thing? cause i think one of the camera plugins is in kotlin

upper valve
#

no, it's never been allowed. the thing you're thinking of is probably the PR where the guy rewrote it to kotlin and we told him we couldn't

#

that was the reason we put it in /rejected in the first place

low jacinth
#

oh

reef badger
#

they made us get rid of our kotlin tests because of that 😿

low jacinth
#

sad

low jacinth
#

surprised that hasn't come up prior

worthy sparrow
#

People usually ask first

upper valve
#

there's an old github of someone asking yeah

worthy sparrow
#

Instead of seeing no kotlin in the code base and just sending it

reef badger
#

literally the only 2 people to ever try is us and that guy

rancid marten
#

i bet github reports kotlin now due to the gradle stuff

upper valve
worthy sparrow
#

You can compile to jvm too

upper valve
#

i'm still waiting for electron plugin panel

low jacinth
#

Is there ever going to be guidelines/rules on submitting AI stuff? I imagine it's not fun to review some of these larger ones that do very little

upper valve
#

don't see a point in doing that, it's only going to cause friction

#

i don't really have an issue reviewing LLM code if the submission is valid and the code isn't formatted as if claude violently ejaculated into notepad

low jacinth
#

LOL

#

fair point i suppose, I don't really know the review process

rugged pivot
#

its only really an issue for core where code style and sanity are enforced

upper valve
#

i mean people have submitted LLM code that was absolutely unreadable (like you physically could not read or make sense of it without your eyes bleeding) but in those cases we generally just tell them to press ctrl+alt+L in intellij and that fixes it

low jacinth
#

Actually didn't know there was a hotkey for reformatting all, neat.

upper valve
#

it's only on the open file

worthy sparrow
#

if you select a folder before you presss it, it does that

upper valve
#

in go you just bow down to gofmt and if you don't like the way it formats then everybody laughs at you

ember flareBOT
#

Type

Incorrect behavior

Operating System

MacOS

OS Version

macOS Tahoe 26.2 (25C56)

Bug description

The Slayer plugin highlights NPCs which are on your current slayer task. When assigned Elves, Prifddinas Guards should be recognized, but they are not.

In Task.java, the ELVES enum is defined as

`ELVES("Elves", ItemID.PICKPOCKET_GUIDE_WOODELF, "Elf", "Io...

dusk ridge
#

is there a specific Widget, Interface, or Overlay layer that item counts are drawn on, or does it not work like that

late hare
#

it's part of the item sprite

dusk ridge
#

darn. gonna have to redraw the count too then. ty

blissful dew
#

Hello, I tried to find the answer in a couple of places (Jagex 3rd party guidelines, searched this discord, and google ofc), but haven't been able to find an answer. Are there any guidelines/rules for communicating with a 3rd party API? For example something similar to the star-miners plugin

stuck shale
#

You have to disclose when your plugin is going to interact with a 3rd party connection

#

If you install various hub plugins that’s the warning you see often about how it interacts with other sites not owned by jagex, runelite or the few that don’t need the call out

blissful dew
#

Okay, does the warning need to be added only if the plugin by default sends data to an API? or would have to be added even if the user had to enable sending data (at which point they'd get the warning)

#

Or just tell them the plugin does not send any data until they enable the feature in the warning?

upper valve
#

the latter, and also, your plugin cannot just start doing networking this way by default if it already exists, it would have to be made opt-in

blissful dew
#

oh yea, hadn't considered that. Thanks for the info guys!

ember flareBOT
heady rock
#

Hey, I noticed today that the slayer plugin is missing the sailing tasks (gryphon, wyrms, aquanites) and someone has already opened a PR to add these one month ago -> https://github.com/runelite/runelite/pull/19634

Just checking if it's a normal delay or if this fell through the cracks

GitHub

Adds new Gryphons and Shellbane Gryphon boss tasks Wiki Slayer_task/Gryphons
Adds Aquanite task Wiki Slayer_task/Aquanites
Adds Strykewyrms as an alternative to Wyrm tasks Wiki Slayer_task/Wyrms

S...

worthy sparrow
#

would guess because a reviewer hasn't done a related slayer task maybe

heady rock
#

Wouldn't have happened if the task weighting was higher 😤

ember flareBOT
upper valve
#

so when we hit PR 10000 do we just nuke the hub

muted bone
low jacinth
#

I'm down

ember flareBOT
autumn star
#

do tiles have different location info available during PreMapLoad? trying to figure out how to get their region ids from WorldPoints but all im getting is exceptions 🤔
tile.getWorldLocation():

java.lang.NullPointerException: null
    at net.runelite.api.coords.WorldPoint.fromScene(WorldPoint.java:481)
    at rl7.getWorldLocation(rl7.java:20981)

WorldPoint.fromLocalInstance(scene, tile.getLocalLocation(), plane) (scene is from the event):

java.lang.ArrayIndexOutOfBoundsException: Index -5 out of bounds for length 13
    at net.runelite.api.coords.WorldPoint.fromLocalInstance(WorldPoint.java:302)
    at net.runelite.api.coords.WorldPoint.fromLocalInstance(WorldPoint.java:283)
rancid marten
#

the roof removal pluigin calls fromLocalInstance() on tiles from the PreMapLoad event and it works

autumn star
#

ill take a look

#

hmm, roof removal uses scene.getTiles() and that works. the exceptions happen with scene.getExtendedTiles()

#

could that be a core bug? i guess i could use getTiles for now even if partial recoloring doesnt look the best

rancid marten
#

maybe, i dont really have enough information to tell

#

you are trying to fromLocalInstance() a point in the extended scene in an instance, which i dont think is ever valid, since there is no extended scene in instances

autumn star
#

yeah i was just thinking if i should first check if im in an instance and get the tiles accordingly

#

i guess even the larger instances like cox dont use extended scenes then

rancid marten
#

i dont think there is ever any extended scene in instances since the map data is unknown

#

normally extended scene works by loading more of the map, which works in the overworld since the map there doesnt ever move and has set coordinates

#

but in instances the map data is sent dynamically by the server

autumn star
#

ah yeah true. ill play around with this, tyvm

ember flareBOT
ember flareBOT
#

is there a way to get this to work on the Bolt launcher?

Based on the comments above I got it to work like this:

Working fix: use a wrapper script.

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

Then in Bolt → RuneLite → Custom Command, type manually (don’t paste, no newline):

`/home/youruser/.local/bin/runelite-way...

snow needle
#

Is there a way to pass args to my dev runelite to get it to launch faster? Ideally I could disable all plugins except the ones I'm testing and configure a default world.

heavy bobcat
#

You could maybe add the safe mode arg? I assume that'd disable the one you're testing too tho

solid shadow
#

make a profile that has just what you want, switch to that and then close the client, next launch should use that profile

#

or you can pass --profile=whatever

snow needle
#

That's perfect thanks!

ember flareBOT
ember flareBOT
ember flareBOT
shy pine
#

Alright these reviews are going suspiciously fast, I submitted it at 4:47 🧐 We need a full scale audit of this program; I have reasons to believe that there's corruption within from top to bottom, and I won't be satisfied until review times are back at 3-4 weeks

(Extra special thanks reviewers, absolute champs!)

sinful lava
#

i have to snipe the easy ones to reach my monthly quota

upper valve
rugged pivot
#

was it a good plugin though?

muted bone
upper valve
#

it was definitely one of the plugins of all time

ember flareBOT
ember flareBOT
ember flareBOT
#

I tried to figure out why this happens as it keeps driving me crazy and indeed as others have pointed out that having "Remember client position" on keeps increasing the size. This is somehow also related to whether the sidebar is visible (hidden using the arrow in top right) as then the behaviour is not as consistent.

I also stooped down as low as installing intellij and debugging to figure out why the values got changed, but it's just endless calls to the layout method where at some poin...

ember flareBOT
ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 11

Bug description

The party plugin is having some issues when interacting with boats. The main 2 issues I came across were:

  1. Party Members do not show up on the world map when they are on boats
  2. You cannot ping tiles while "Navigating" (controlling the helm). However if you get off the helm, you can ping tiles.

Screenshots or videos

No response

RuneLite version

RL Version: 1.12.10
L...

snow needle
#

Is there any way to categorize items beyond "equipment" and "not equipment"? I'm interested in a way to distinguish things like quest items / food / herbs / etc.

sharp knot
#

Grabbing the wiki's categories would probably be your best bet

fading iris
#

But wiki categories will be more useful probably lol

snow needle
#

I was dreading that response, but I figured that would be my best bet. Is there any prior art for plugins querying the wiki? I'd need to query every item in the game unfortunately.

quick path
#

Use the bucket API and scrape data offline. (That is, create your dataset and distribute it with your plugin instead of making requests at runtime)

ember flareBOT
tranquil trellis
#

A .dat file in the plugin resources with shorts (16 bits) for the item id of all equipable items. Then you can read it into a hashset on plugin start. Then just a set xontains to see if item id is equipable or not

#

Python script to regenerate the file

upper valve
#

i would recommend you just do your dataset in json but sure

rugged pivot
tranquil trellis
#

oh i missed the "beyond" lol

rugged pivot
#

but yeah a python script doing bucket calls on the item_id bucket with .where("Category:Quest items") or whatever and make a few lists of IDs (or one list with true/false for each category) would work

ember flareBOT
low hatch
reef badger
#

it didn't use the red x so it must be intended

upper valve
#

i am sure they are joking

ember flareBOT
ember flareBOT
fading iris
#

Is there a way to outline the infobox text for a single plugin?
I know that there's a global RuneLite option but it's disabled by default and it's difficult to read the text without it

worthy sparrow
#

override render

snow needle
#

I tried copying model and angles from one item to another to do a model swap. The model changes, but the zoom of the icon appears way too high. Is there possibly a hidden zoom field on the item composition that is not exposed by the API?

        dest.setInventoryModel(src.getInventoryModel());
        dest.setXan2d(src.getXan2d());
        dest.setYan2d(src.getYan2d());
        dest.setZan2d(src.getZan2d());
upper valve
worthy sparrow
#

oh yeah it's all on 1 overlay

snow needle
#

Is it possible to learn such power?

late hare
#

someone with access would have to expose it

snow needle
#

Should I open a github issue for something like that?

late hare
#

honestly im not sure the process for requesting something like that

heavy bobcat
#

I've asked before and never heard anything about it again, there's a couple properties that aren't exposed for some reason

#

Zoom being one of them

snow needle
#

It's hard for me to imagine a reason that zoom needs to be secret lol
If no one responds I'll go make a github issue

heavy bobcat
#

yeah zoom2d, xoffset2d, and yoffset2d are the 3 that aren't exposed. You can even see them in the cache module classes

snow needle
#

Ah now that I know what to search for I see this is a very old issue

ember flareBOT
ember flareBOT
ember flareBOT
topaz pierBOT
#

Search for NorbsCode returned no results.

ember flareBOT
ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

MacOS

OS Version

Sequoia 15.6

Bug description

It appeared that RuneLite stopped making CA screenshots in a /rsn/Combat Achievements/ folder. The last time I got CA screenshot log was in April 7, 2025 (8 months ago) and I've gotten plenty new CA since.

Can somebody check on this?

Screenshots or videos

RuneLite version

RuneLite version: 1.12.10
Launcher version: 2.7.6

Logs

[client.log](https://github.com/use...

ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
ember flareBOT
topaz pierBOT
#

Search for ca-grey returned no results.

stuck shale
# ember flare

This is very slick. I commented out debug personally because too many hub plugins generate spam.

Would it be possible for a runAlone() where it executes the client with only the being-worked-on hub plugin alone?

#

i should've tried before just asking

tasks.register('runAlone', JavaExec) {
    classpath = sourceSets.test.runtimeClasspath
    mainClass = pluginMainClass

    jvmArgs "-ea", "-Drunelite.pluginhub.version=0"
    args "--developer-mode", "--debug"
}
``` seems fine
ember flareBOT
rugged pivot
stuck shale
#

When updating what ever hub plugin I was looking at I only copied the main gradle file so maybe

#

I picked and choosed poorly perchance

chrome crest
#

Ohh shoot didn't see we hit PR #10000 hype af

upper valve
amber rampart
#

its cheap, just a few array lookups and some bit shifts

ember flareBOT
glad onyx
#

Any luck looking into it? I've been away and haven't tried yet

upper valve
reef badger
#

yuhp

ember flareBOT
pale ginkgo
#

hi all. what's the correct way to build the runelite client jar now that core has moved to gradle? is ./gradlew assembleAll supposed to be enough? i'm getting a failure in the runelite-client:javadoc task. i'm working with 1.12.10, i.e. 107ec11

rancid marten
#

use java 11

dense owl
topaz pierBOT
#

Run the Maven builder to output a shaded JAR in /runelite-client/target/

rancid marten
#

we should update this

dense owl
#

Output is to /runelite-client/build/libs/

topaz pierBOT
#

Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/

pale ginkgo
# rancid marten use java 11

building with java 11 works. back when maven was used i used to be able to build runelite with java 21+. i assume this is still possible somehow?

rancid marten
#

I think its because it defaults to building javadoc now

#

i dont think it ever really worked

pale ginkgo
#

you mean building the javadoc never worked with java >11?

rancid marten
#

yes

#

well i dont know about >11, i know it didnt work with 21

pale ginkgo
#

gotcha

pale ginkgo
rancid marten
#

i dont think even assemble builds javadoc does it

#

idk

#

i dont really know how gradle works

pale ginkgo
#

i was using assembleAll

pale ginkgo
#

out of curiosity, what was the motivation for the move?

dense owl
rancid marten
#

dependency verification and sped up build times

#

i can do hundreds of builds a day so it is pretty nice

pale ginkgo
#

that's true. still baffles me that maven can't do incremental builds but oh well

rancid marten
#

yeah idk

#

gradle has an actual paid dev/company behind it

#

which is both good and bad i guess

#

probably itl get sold to IBM or something one of these days

heavy bobcat
#

Kinda surprised Google hasn't bought them with how integrated it is with android

worthy sparrow
#

Google has bazel or something

ember flareBOT
reef badger
#

he edited it to say he knows about many unreported screenshot bugs on macaroni os

quick path
#

Well, case closed lol

stuck shale
#

i did @ them to tell em to check at least :^)

ember flareBOT
odd oasis
#

Hey guys/gals, I'm the current maintainer of the custom-emoji plugin. Currently, the plugin forces the user to maintain their own emojis within their filesystem. My clan, for example, uses a github repository of emoji. Each user has to either download the zip of the repository and manually update it every time we add an emoji, or they need to install git, learn a few baseline git commands, then run a git pull every time the emoji repository is updated or changed. Im hoping to simplify that part. Here's the process I have in mind:

  • User provides a GitHub repo URL in config (e.g. https://github.com/LouisGameDev/custom-emoji-repository)
  • Plugin uses GitHub's API to fetch the repo tree, then downloads image files to ~/.runelite/emojis/github-pack/
  • Uses hashes from Github API for change detection so it only downloads new/changed files on subsequent syncs (no need for git)
  • Stores metadata in a local JSON file to track what's been downloaded

I'm aware of some common pitfalls/mistakes plugin maintainers make when implementing stuff like this, such as:

  • Not using okhttp
  • Not adding a 3rd party connection disclosure
  • Making features enabled by default instead of opt-in (if its a feature addition to an existing plugin it must be disabled by default)

However, I still have a few questions:

  • Do I need to add a third party connection disclosure if only github urls are valid inputs? If so, what would I need to change to not require the disclosure?
  • Any concerns with downloading files from user-provided URLs? I plan on only allowing github.com domains and only downloading files with image extensions .png, .jpg, .gif. I also plan on sanitizing path inputs to prevent path traversal stuff.
  • Is there an existing plugin that handles this sort of thing really well? I'd love an example to study.
  • Anything else that might get flagged during review?

Thanks to anyone who takes the time to read this wall-o-text and reply. Much appreciated! ❤️

rancid marten
#

You dont have to add a discloure for github urls

upper valve
#

ideally you would just make the user input username/repo

#

eg riktenx/my-emojis

#

because otherwise we also have to verify that you're restricting it to github and that's going to be a pain

odd oasis
tribal basin
#

i figured out why the website is so slow to build, for the 160~ pages, its pretty much doing: for (page of pages) sleep(1000)

ember flareBOT
quick path
#

oh?

tribal basin
#

The pre-render plugin config here: https://github.com/runelite/runelite.net/blob/master/config-overrides.js#L116-L117

Looks like it was set to that because it was probably sometimes pre-rendering just <div id="root"></div>. There's 2 other bugs making builds not work: the sitemap plugin throws because of invalid dates (I have no idea why it doesnt error on github actions, maybe a linux vs windows thing), and a SSL error because of using node v16 and/or very outdated deps (fixed by switching to node v16 locally).

ember flareBOT
rancid marten
#

infact there are no failed builds

worthy sparrow
#

it doesn't build on windows by default if that's what they mean

neat wyvern
#

I should fix or get rid of camera smoothing; just annoyed to set up a java dev environment on my new computer and busy with full time work.

#

I'm guessing some subtlety was changed with the APIs I used.

wheat thunder
# glad onyx Any luck looking into it? I've been away and haven't tried yet

Not much too, but the code in hunter rumours is building the full widget and isnt updated to the new vanilla search, that came in October. I looked in the ClueScrollPlugin at the scrollToWidget (from music player clues). So some runScript could take the job, but I havent looked further now. But I dont know about the calculation of the scroll height, I havent tried anything yet.

upper valve
glass sandal
#

Yes, but not with that much control. Just mute all, mute other boats, and mute none.

rancid marten
#

#runelite message ive seen a few people ask about this, can someone who is familiar with the sailing content look at it?

quick path
#

I'll look it over tonight

ember flareBOT
rancid marten
reef badger
#

does it just read the current heap, meaning those with frozen games but working sidebars can go and click it

#

or does it need an oom heap to have been generated

rancid marten
#

it takes a heap dump and then reads that

reef badger
#

very good

sharp knot
#

That's pretty neat

ember flareBOT
tribal basin
ember flareBOT
tranquil trellis
#

What's the process of using the debug plugin's heap analyzer? I tried clicking analyze heap and client froze and client log dumped out of memory exception, two times i tried

reef badger
#

Right now its increase your heap first

#

After i doubled mine it worked as expected

frigid gyro
#

I was thinking maybe turn it into a client that controls OSRS (like set target position of player, queue actions) but that would probably get users banned for macroing. Unless I set up a server just for users of the mod, idk.

sharp knot
frigid gyro
#

Yeah 100%. Putting it on live game servers is not a good idea. I am tempted to reimplement the game from scratch but also not keen on finishing in 2046

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

is there a way to get this to work on the Bolt launcher?

Based on the comments above I got it to work like this:

Working fix: use a wrapper script.

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

Then in Bolt → RuneLite → Custom Command, type manually (don’t paste, no newline):

`/h...

ember flareBOT
cyan widget
#

Hey, basic question, but I found no direct answer to it: is it possible to add a custom plugin to runelite running on my machine without publishing it on plugin-hub? I know runelite can be built from source with developer and debug mode enabled, but I couldn't get it to work with Jagex launcher (guessed jagex allows only officially built runelite).

indigo warren
cyan widget
#

Damn, missed this piece of docs. Thank you very much, this is exactly what I was looking for!

ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

Windows 11 Pro 25H2

Bug description

This only started when I got my new pc, it is no longer logging information to the command prompt. It seems like it is disconnected from it. Currently when I close the cmd prompt, just the cmd prompt closes. When I close the client window both the client AND cmd prompt closes. Strange how its not bi-lateral. I checked the logs folder and this is the only difference from my ol...

oak rock
#

What

heavy bobcat
quick path
#

I meant to look at it last night, I was just falling asleep at my desk 😓

#

Nothing will help get you tired like chasing after children in the house all day

ember flareBOT
ember flareBOT
#

Unrelated to the code change itself, is jumbo squid still healing for 17 instead of 18? The wiki has it listed as 18 with no indicators of it being a bug, and I can't see anything in the update news posts indicating this is a known issue on Jagex's end.

Wiki has been updated to 17.

Separately it looks like the 3 just for fun sailing drinks seems to drain levels based on your current sailing level, so those are currently wrong. I don't ...

ember flareBOT
bitter chasm
worthy sparrow
#

sometimes github/cloudflare don't work

ember flareBOT
#

Type

Incorrect behavior

Operating System

None

OS Version

Windows 11

Bug description

Maybe a slight brag but i received Butch - Vardorvis pet on 1 KC during the DT2 quest however due to the fact i got it on the quest it doesnt work when doing the !pet command or !pb.

Screenshots or videos

No response

RuneLite version

01.12.10
2.7.5

Logs

No response

ember flareBOT
ember flareBOT
#

It shows in my collection log but not when I do the !pet command. Its very
strange

On Fri, 2 Jan 2026, 20:36 JZomDev, @.***> wrote:

JZomDev left a comment (runelite/runelite#19757)
https://github.com/runelite/runelite/issues/19757#issuecomment-3706186104

The !pets command will show your pets when you visit the all pets tab in
your collection log.
image.png (view on web)
https://github.com/user-attachments/assets/cddf5e3b-67f1-482a-9e09-ebaa21f1d00e

...

dusk ridge
#

is there a good way to not have IJ crash when i open a large gameval file such as ItemID.java? (aside from just not opening the file)

#

oh nice you can adjust allocated heap memory

dusk ridge
#

when multiple different plugins are rendering overlays on the same overlay layer, how does the pipeline determine z-order?

worthy sparrow
#

However it's stored by priority

upper valve
#

you can call setPriority to change it

dusk ridge
#

and what if plugins aren't doing setPriority? like how does their priority default

upper valve
#

defaults to something, .25f?

worthy sparrow
#

Registered order on default I think

dusk ridge
#

alright thanks

upper valve
#

if you want to setPriority fyi you need to do so before adding it to the overlay manager. you can call it once added but then there's some sort of reload or resort call you'd need iirc. typically just call it in your overlay constructor

dusk ridge
#

yeah i figured

#

does drawAfterLayer() ignore priorities and just use maximum ordering or something

#

just trying to get my plugin to draw over the vanilla sprite but under the item identification text:

amber rampart
#

it still does priorities, but you likely have nothing else in the same draw group

dusk ridge
#

hmm. ive tried both 0.2 and 1.2 and no luck

amber rampart
#

are you calling showOnInventory or something else?

#

and item ident's prio is 0, so you want to be < 0

dusk ridge
#

im calling drawAfterLayer(int component)

dusk ridge
#

where would one have found that priority in source? i tried checking there and didnt see a setter. or did u just do a getPriority on the plugin?

amber rampart
#

its in WidgetItemOverlay

dusk ridge
#

love u

deft hatch
#

Does it bother plugin hub reviewers if there is markdown documentation in a docs folder in the hub plugin repo? A) yes, B) no

restive garnet
#

can't see why it would

upper valve
#

no, but it will contribute to the LoC which will affect the size label it gets that reviewers use to prioritize. So if you upload 12k of markdown or something it's worth calling that out in the opening PR comment so we see it

#

functionally speaking we don't review anything that isn't in your main/ source set or is your gradle stuff

ember flareBOT
#

a couple issues at play here:

  • some intellij bug is failing to recognize the classpath of includeBuild modules when the directory name does not match the project name, so downgrading runelite-client from includeBuild to just include makes debugging work again
  • the build cache was recreating the entire build/classes dir when it detected a cacheable change, triggering intellij to do full hot reloads instead of only changed classes
dusk ridge
#

well that's interesting

#

why does every Bank Tag icon have a ItemQuantity=10000?

quick path
#

So that the icons look better

glass sandal
#

10000 coins much better than 1 coin

dusk ridge
#

10,000 ana in a barrel here we come

quick path
#

Ditto arrows, tokkul, etc

ember flareBOT
ember flareBOT
pastel wadi
#

Don't know if this is the right place to ask this but I'm new to Plugin Development and i've been poking around the Docs but not finding it. If possible how exactly would i go about doing nested menus on items like the max cape.

I want to use menus like that on other items.

stuck shale
#

they're called submenus, look for instances of submenu in core's code

quick path
#

Those ones are vanilla, you can look at how we add them for things like shift+right-click marking ground tiles or adding npc/object indicators

ember flareBOT
lavish geyser
#

Sorry if this spans into a more generic Java question, I've started writing a plugin (never written one before) that runs for the most part on its own thread to avoid blocking runelite as it's pretty constant, what is a simple way to utilize the addChatMessage function from within a separate class/thread to the client instance (or pass the information back to it)? I just want to display the output of the thread in the game chat but can't think of a way to get it back to the original thread without tons of headache (bad design probably i know). Hopefully this is the right place to ask.

tulip wagon
#

ChatMessageManager is a thread safe utility for this specifically

#

for other things you can use ClientThread#invokeLater

lavish geyser
#

Thanks I'll have a read into it

slow urchin
#

Apologies in advance for my arrogance, I am fairly newish beginner level to development. I created my first Runelight plugin test "Example". When I run the application task using gradle it opens runelite but the Example plugin does not exist. I have been trying to utilize ai a bit to figure it out but have hit a wall. I have no idea why it wont show up

topaz pierBOT
dusk ridge
reef badger
#

nobody makes real plugins anymore

#

but yes of course

dusk ridge
rugged pivot
#

you think the person that wants claude to advise all their runescape decisions made their plugin with AI? I suppose it's a possibility...

dusk ridge
#

big if true

topaz pierBOT
#

Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/

barren aurora
#

i am very stupid and i am getting an error when i do this

#

Cannot locate tasks that match ':runelite-client:shadowJar' as project 'runelite-client' not found in root project 'runelite'.

#

is the stupidity related to the error in this case?

#

oh the recent update renamed runelite-client to just client

heavy bobcat
#

For core PRs is it worth it for us to make the commits look pretty or are y'all going to have to redo them anyways?

quick path
#

We'll rewrite commits if they're not neat, but we'd prefer you have a clean history if possible

ember flareBOT
#

Separately it looks like the 3 "just for fun" sailing drinks seem to drain levels based on your current sailing level, so those are currently wrong. Wiki hasn't updated yet. I don't have an account with 99 sailing so not sure we'll be able to get the exact formula for that. Potentially these 3 can just be excluded for now though because I doubt anyone is really using them.

* Kraken Colada

* Barnacle Blaster

* Sailor's Mirage

Ended up being able to the for...

odd oasis
#

I've modified my plugin to use something new, allowing me to stop using several methods that have already been implemented in previous versions of the plugin. In my case, its about 800 lines of various methods being removed.

For reviewers, would it be easier if I just removed all calls to those methods in PR #1, then submit PR #2 which only includes those method removals? Would reduce the clutter a reviewer would have to sift through, but I'm not sure if it'd be worth splitting the PRs.

sinful lava
odd oasis
ember flareBOT
ember flareBOT
keen sorrel
#

hey so I recently updated and published my plugin called "Skill Lock", but for some reason when my friend installs the plugin the graphical overlay is not loading. But the menus and sounds are playing. Any idea why it isn't working for him but it works fine for me?

rancid marten
#

did you try looking at his client log for errors?

ember flareBOT
keen sorrel
#

I looked through with him and only say WARNs for my plugin, here is the log he had.

rancid marten
#

maybe thats why its not working then

reef badger
#

WARNING: i am having a problem

#

-skill lock plugin

keen sorrel
#

I guess I'm trying to figure out why his log has warnings and mine does not, we both have the same version installed

rancid marten
#

do you know how to read stacktraces?

keen sorrel
#

yeah I think so, I see his client for whatever reason is having issues with an index out of bounds exception in my onMenuOpened subscription line 255

ember flareBOT
upper valve
#

seems you have your answer

keen sorrel
#

my question is why do I not have that in my log if we are running the same code?

upper valve
#

but you aren't

#

he's running his own client with his own plugins that are doing their own things and he's doing his own things in the game

#

i would bet that you can reproduce this on your own setup though, you just don't know how yet

rancid marten
#

I think his menu just has less than 3 entries

odd oasis
#

You're doing menuEntries[3] == null . Check the count of the array instead

upper valve
#

lol

#

can you not just repro that by right clicking a blank tile? or do you have some plugin that's always adding more entries

keen sorrel
#

okay i was able to repro when clicking a blank tile on my client, but the overlay still works. The only thing that changed is the inclusion of the WARN in the log file

upper valve
#

my question is why do I not have that in my log if we are running the same code?
i think the takeaway here is this is kind of a fallacy

#

there are probably more layers to this issue than just the array index thing

keen sorrel
#

yeah I'm trying to figure that out, is there something besides the client log file to look at to debug this?

rancid marten
#

no

keen sorrel
#

so is my best bet to fix the menuEntries problem, then send him a jar file to see if it works?

upper valve
#

we didn't write your code, we can't really help you debug it holistically

#

but you are welcome to fix that on its own and submit a hub update for it and i'll review it for you

#

so you don't have to deal with the shadowjar

keen sorrel
#

okay I'll fix that issue and send an update to the hub. If I want to test it quickly on his system would sending him a jar file be a good way of testing it?

upper valve
#

shadowjar would work yeah

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.

keen sorrel
#

okay thanks

ember flareBOT
ember flareBOT
upper valve
#

looks like we have some examples where there is a disclaimer but it's just called by name

ember flareBOT
reef badger
rancid marten
#

mostly no because the core client already submits stuff to it

reef badger
#

o yeah thats fair

upper valve
#

ah cool

#

it's doing another server anyway though

ember flareBOT
ember flareBOT
stuck shale
#

How does an Ambient sound get muted but not be removed?

The tree's sound is gone when the tree is despawned

#

I see an issue with annoyance mute where the magic tree's sound that is removed only seems to be removed properly when more than 1 tree is around. When I remove the sound spot entirely and a solo tree respawns, it comes back as id -1 and the sound doesn't appear in client.getAmbientSoundEffects() nor does the sound go away when i disable ambient sounds and it also doesn't go away when i log out.

ember flareBOT
odd oasis
#

Is it okay if, when a user modifies a particular config setting for a plugin, the sidebar panel for the plugin is automatically opened?

trail marten
#

seems fine

#

is it like an "open settings" button in the plugin config?

#

cause that sounds neat.

odd oasis
#

Nah, I added a feature to download some stuff from github and am adding a progress bar for the download to the panel, so I want to open the panel when they change the repository they're pointing the plugin at so they can see it

#

Otherwise It'll just be a "hey look at the panel if you wanna see the progress" message in the chat

trail marten
#

imo if it happens due to them changing some settings themselves it's probably fine

#

opening a panel at random times though could grab focus off the client which could be super annoying, but it sounds like that isn't what you mean

odd oasis
#

Awesome, I much prefer the open panel approach to chat message spam

trail marten
#

I don't know if there's any precedent for this kind of thing but I can't find a reason why it would be objectionable

odd oasis
#

Here's what it'd look like in case anyone else wants to provide their perspective:

stuck shale
odd oasis
#

I definitely noticed this problem when I cleared out the config

stuck shale
#

On config change check if 200 on url response then swap to panel seems reasonable

trail marten
#

I wouldn't make a request on th einternet

#

if it takes longer than a fraction of a second it might be annoying to have a panel change

stuck shale
#

It’s going to GitHub eventually and repo has to exist

#

Idk better than just swapping no matter what

trail marten
#

i guess your internet would have to be really slow for it to be a pain in the ass

upper valve
#

programmatically opening the panel is fine as long as its from like user input

#

there was a guy that was force opening his panel every 5 seconds

#

i said do not do that

grizzled aspen
#

there are valid use cases that open a panel without explicit user input e.g. zulrah helper

rancid marten
odd oasis
reef badger
#

mayb, i swore someone said it happened to another app other than runelite* but i cannot find that message

#

so maybe that never happened

rancid marten
#

i can try unblocking the dlls maybe

snow needle
#

Is it possible for my PluginTest to query the client somehow?

    public static void main(String[] args) throws Exception
    {
        ExternalPluginManager.loadBuiltin(Plugin.class);
        RuneLite.main(args);
                // query item data from RuneLite client here
    }
trail marten
#

You can create a plugin in the test directory and load it, and use that.

#

Loadbuiltin takes vararg

snow needle
#

Brilliant thanks!

upper valve
#

be sure to put the separate plugin in the test source set so we don't have to review it

ember flareBOT
ember flareBOT
ember flareBOT
civic mortar
quick path
#

Potion timers work the same as other timers, so would you be looking to make only potion-related timers work that way or make it affect all timers?

#

(for the record I think that's why we haven't made that kind of change thus far since the timers are very generic and widely applied)

civic mortar
#

For my personal use I'm only bothered about timers from timers & buffs. I wasn't sure how widely the infobox:Timer class is used, and having one mega global setting for all of them sounded like affecting too much at once.

#

so my intention was to only do it for Timers & Buffs, and the config would live there, rather than being in the generic RuneLite section and affecting all of them

quick path
#

That's probably fine yeah

civic mortar
#

What's the best way for me to unit test the info box changing the text colour after time has passed? The existing tests trigger the infobox to appear and then immediately assert on its text/duration etc. But I need to allow at least some time to pass for the text to change colour so that I can assert that it changed.

I'm not really a java dev - in JS I'd use setTimeout for example.

quick path
#

I think you can mock some stuff to effectively let time pass for the infoboxes. I believe the fight caves/inferno timer tests do something like this

civic mortar
#

I'll take a look thanks

upper valve
#

phub dev tries to use or contribute to an existing translation plugin challenge (impossible)

neon haven
upper valve
#

fyi

neon haven
#

That bot really does have a command for everything lol

topaz pierBOT
#

Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/

rancid marten
#

i think we need to fix this one again

jolly hearth
#

Are there any plugins that use google analytics?

rancid marten
#

.. the SEO tools for websites?

jolly hearth
#

I was thinking for metrics

rancid marten
#

afaik its not a general purpose thing like that

jolly hearth
#

or rather than google analytics specifically, are there any plugins that have metrics of any kind? I'm looking to collect data on stuff like, how many deathpiles are created, if a not yet supported item shows up in an item container, etc for dude wheres my stuff

#

I'm guessing that if I do add metrics it would mean that anyone with my plugin would need to re-install it, to accept the 3rd party http disclaimer thing, right?

rancid marten
#

not that i am aware of

#

basically yes

jolly hearth
#

that's a bummer, I guess I'll give it a miss then, ty anyway

rancid marten
#

we dont have a good way to deal with that

ember flareBOT
#

Type

Incorrect behavior

Operating System

None

OS Version

N/A

Bug description

The Examine plugin which comes by default with RuneLite prints a line with the GE and HA value of items you examine, just after their examine text.

However, seemingly at random it will fail to do so.

In fact, the cause of the failure is when a chat message, even an invisible / filtered one such as spam in the "Game" tab e.g. "you chop some logs", is received on the same tick as the examine t...

reef badger
#

heh

rancid marten
#

ive noticed that before too

ember flareBOT
quick path
#

iirc the plugin is somewhat fragile, I've had it not bring anything up when examining stuff too

#

(though it'd work on a successive try)

rancid marten
#

afaik that is basically that bug

#

it really just needs a timeout and to not invalidate after it gets a message I think

rose void
#

has anyone tried to make the plugin panel icons draggable/reorderable before? I might tackle that at some point if not. I have too many and finding the one I want is hard

rancid marten
#

yes, probably 3 or 4 people have tried

#

realistically its probably something i or abex have to do, but i am busy with other things

ember flareBOT
ember flareBOT
#

Type

Incorrect behavior

Operating System

Windows

OS Version

No response

Bug description

I'm on Brittle Isle and the game tells me there should be a hideout unit, but there isn't one.

It is also clearly stated on the wiki that there are none.
https://oldschool.runescape.wiki/w/Rosewood_blowpipe#Charged

Thank you !

Screenshots or videos

No response

RuneLite version

RuneLite version: 1.12.10
Launcher version`: 2.7.1

Logs

No response

reef badger
#

you know that's the outcome i came up with too reading the cache

#

cuz there clearly is a stash called hh_master_sail but no coords for it

ember flareBOT
#

For what it's worth there is a stash unit for this clue in the game's cache, as they added exactly 1 easy/elite/master emote clue, in the sailing update, but I guess they never actually put it in the game.

https://github.com/runelite/runelite/blob/24f61f9101b337b921d6ff3f3e834d6d28cd3f17/runelite-api/src/main/java/net/runelite/api/gameval/ObjectID1.java#L70753-L70755

	public static final int HH_EASY_SAIL = 58130;
	public static final int HH_ELITE_SAIL = 58131;
	public static final int ...
ember flareBOT
#

From the wiki for Entity Hider:

  1. Hide Others
    (Default On) Hides other players who are not on your friends/ignore list, in your friends/clan chat, or in combat with you.

I believe this implies that "Hide Others" doesn't apply to players attacking you unless "Hide attackers" is enabled too.
On the current version, attackers are still hidden when only "Hide Others" is selected. This fix should unhide players whenever they're attacking the local player.

ember flareBOT
topaz pierBOT
#

Search for repsejnworb returned no results.

ember flareBOT
ember flareBOT
dusk ridge
# rancid marten realistically its probably something i or abex have to do, but i am busy with ot...

to bounce off this, i was wondering if it would be possible to expand the client toolbar API to inherently allow the toggling of any panels. Any plugins using the panels would still work as last configurated and the toggling is just for visibility/condensing purposes, but it seems like things have gotten to a point where a centralized approach could be very useful, rather than hoping plugin devs add a boolean config option to manually toggle their specific navButton.

#

maybe a mode can be manually set in code to opt out or "gray out" the toggle option if the plugin is solely a panel-only plugin, although this would be subjective and some devs might opt out just to annoyingly maintain visibility for their plugin lol

worthy sparrow
#

you shouldn't need that though

dusk ridge
#

i agree. it shouldn't be needed but here we are 🤷‍♂️ . for example, the popular crowdsourced tog plugin takes up a panel button space for something that is only referenced in one location once a week, but users have to wait on the maintainer to possibly add an option to make it less obstructive (not calling out that maintainer specifically just first example to come to mind). with enough plugins like these it gets cluttered.

worthy sparrow
#

you can contribute to the plugin

dusk ridge
#

right, but again it comes down to the maintainer still, and maintainers (i'm guilty of this as well) aren't always active with RL development. and that still only solves one plugin while plenty more with the same issue exist

sharp knot
#

Just turn off the plugin until you need it? It's not any more effort to do that than disabling it some other new way

dusk ridge
#

some plugins are used more general-purposely but still have a panel that isnt always needed

#

and id argue in scale it is still more effort to go to each individual plugin rather than one location for any

ember flareBOT
fathom prism
#

hi, does anyone have an idea why my plugin fails to build once I synced gradle, additionally it's for some reason looking for linux binaries? ```Execution failed for task ':compileJava'.

Could not resolve all files for configuration ':compileClasspath'.
Could not find lwjgl-opengl-3.3.2-natives-linux-arm64.jar (org.lwjgl:lwjgl-opengl:3.3.2).
Searched in the following locations:
file:/C:/Users/fisu/.m2/repository/org/lwjgl/lwjgl-opengl/3.3.2/lwjgl-opengl-3.3.2-natives-linux-arm64.jar
Could not find lwjgl-3.3.2-natives-linux-arm64.jar (org.lwjgl:lwjgl:3.3.2).
Searched in the following locations:
file:/C:/Users/fisu/.m2/repository/org/lwjgl/lwjgl/3.3.2/lwjgl-3.3.2-natives-linux-arm64.jar

Possible solution:

upper valve
#

close intellij, delete ~/.m2, reopen

fathom prism
#

ah perfect, thanks

ember flareBOT
ember flareBOT
#

I'd like to move forward with fixing this. My idea is to create an NpcMatcher class, which is used to declaratively build a predicate to match Npcs. The interface would look like:

  • byNames(String...)
  • byCombatLevels(int...)
  • byIds(int...)
  • and(NpcMatcher)
  • or(NpcMatcher)
  • not(NpcMatcher)

The Task constructor would then change from:

Task(String name, int itemSpriteId, Variant... variants)

to

Task(String name, int itemSpriteId, NpcMatcher matcher)

...

rancid marten
#

what?

ember flareBOT
fathom prism
# rancid marten what?

oh thought I deleted the message, I had typod like thrice into the repo looking for the file

fathom prism
worthy sparrow
#

whenever someone reviews it sure

ember flareBOT
upper valve
#

a configurable time seems reasonable maybe but definitely not hardcoded 5 seconds lol

ember flareBOT
#

I would expect that behavior due to the client not knowing if the person is still attacking you, or not. Because as is, they aren't attacking you if they step under you or are chugging food.

Here's an example of why this PR was made:

Current live version

https://github.com/user-attachments/assets/0cab71df-c651-4190-b21a-8bbeaf03c09f

This PR

https://github.com/user-attachments/assets/a7505e8e-2a16-46ff-b69a-10a303453636

You can see the attacker popping in and out on t...

silver flame
#

Has/does anyone had any luck developing on linux (debian13)?
Windows got on my nerves one too many times, but i want to continue maintaining my plugins.
I think my issues are standard java issues tbh, but im failing to setup gradle with the error java.lang.IllegalArgumentException: Unsupported class file major version 65 And a marathon of a callstack mostly in gradle.internal/initialization with the exception being thrown from groovy

#

Im saying all these words but im so out of my depth with java 😅
Any pointers would be lovely

upper valve
#

are you going through intellij or were you like trying to install your own jdk and run stuff from terminal

silver flame
#

Been trying to get by with vscode + extensions, but trying intellij now

upper valve
#

class file major version correlates to jdk version so off the cuff you installed some super new jdk that the rest of the environment doesnt like maybe

solid shadow
#

65 is 21

silver flame
solid shadow
#

we recommend java 11

#

intellij+java 11 specifically, changing/adding versions is pretty straight forward within intellij as well so thats nice

silver flame
#

Looks like thats old enough to have been deprecated from sources, jippee
But thanks a lot, these are some great treads to pull at

worthy sparrow
#

you can download it from adoptium

quick path
#

though I've found I only run into build errors when trying to build javadoc on java 21, most of the time I can use that to build fine too

amber rampart
#

pluginhub would work on any java 11 through 23

#

if it doesn't you probably just need to copy the gradle-wrapper.properties from the example plugin

silver flame
#

flatpak'ed intellij ftw

Edit for posterity:
[tags that may help with searching: debian linux trixie flatpak flathub]

  • Installed Intellij Idea community edition from flathub
  • installed jdk-11 when prompted on first run
  • cloned plugin from github within intellij (it had problems seeing my previous clone, prolly smth to do with flatpak sandboxing).
#

Thanks a lot everyone <3

ember flareBOT
ember flareBOT
sterile drum
#

Hi, I am trying to update a plugin to fix an issue that was reported. I want to listen for when the drag interface hotkey is pressed, but I am having some trouble figuring out the proper way to get the hotkey from the active config. Any advice?

To be clear I mean the RuneLite config not my plugin config. I don't have a hotkey config. This issue specifically happens when someone tries to drag the interface around.

worthy sparrow
#

Drag what interface around

sterile drum
#

Like overlays or the inventory window. This is a plugin that modifies the cursor and it seems like it breaks when trying to drag stuff around while the drag hotkey is pressed.

My planned fix is to just not modify the cursor while the drag hotkey is pressed.

worthy sparrow
#

How you are modifying the cursor that it breaks?

sterile drum
#

Essentially I am turning the cursor invisible as a workaround for linux and this user reports that this is causing runelite to ignore attempts to drag interface elements around. When using the config option to make it visible regardless, it seems to work as expected. Something about turning it invisible is doing something.

#

I don't exactly know how much of a deeper investigation I can really do on this at the moment so I figured a quick, timely fix would be to just make the cursor default while dragging.

#

I'm not really sure why this would even happen because the cursor is just transparent, not gone. Maybe some kind of overlay ordering thing because the custom cursor is technically an overlay?

worthy sparrow
#

Linux wm are notoriously inconsistent

sterile drum
#

Ain't that the truth

ember flareBOT
sterile drum
#

I will try to do some testing on my end, but I'm not sure at the moment how this is happening. Regardless. I would like to just draw the system cursor so everything works as expected when dragging for now. That's why I'm looking for a way to get the current config setting. As a last resort I could just change my config into a hotkey and have them make it the same but its a hacky workaround

worthy sparrow
#

Think you would need to copy the hotkey logic to know

sterile drum
#

So there's not really a way to get a setting from runelites settings via key/value pair or anything?

#

I saw an interface for RuneLiteConfig with a function called dragHotkey which seems like what I need, but this is just an interface. I was unable to find something else I could use.

amber rampart
#

just call ConfigManager::getConfiguration

sterile drum
#

aha that might be exactly what I need. I'll take a look, thanks.

ember flareBOT
#

The existing implementation uses the following regex with Matcher.find() to find task NPCs. This essentially checks if one of the Task's targetNames exists within the NPC name, separated by word boundaries, with the intent to include NPCs like "Baby blue dragons" when on a "Blue dragons" task:

Pattern.compile("(?:\\s|^)" + targetName + "(?:\\s|$)", Pattern.CASE_INSENSITIVE);

However, as more and more NPCs are added to the game, matching names exactly seems more resilient a...

ember flareBOT
#

I tried to figure out why this happens as it keeps driving me crazy and indeed as others have pointed out that having "Remember client position" on keeps increasing the size. ~This is somehow also related to whether the sidebar is visible (hidden using the arrow in top right) as then the behaviour is not as consistent~ further testing, this had no effect.

I also stooped down as low as installing intellij and debugging to figure out why the values got changed, but it's just endless call...

sterile drum
ember flareBOT
#

Fixes #19762

Elements from the pending deque are no longer removed after a type mismatch. Previously pending would be entirely cleared upon mismatch; causing unrelated chat messages received after the user clicks examine and before the ITEM_EXAMINE chat message to clear pending. Now only the first element is removed after confirming correct chat message type. We can also use pending.clear() instead of pending.poll() if we should be clearingpending.

Before

The autotyper ...

reef badger
granite quest
ember flareBOT
ember flareBOT
ember flareBOT
#

This looks backwards. If the intention is for these particular fish to not receive the fishing xp bonus from the angler's outfit, it should be written as such instead:

@Override
public Set<FishingBonus> getExcludedSkillBonuses()
{
	switch (this)
	{
		case RAW_GIANT_KRILL:
		case RAW_HADDOCK:
		case RAW_YELLOWFIN:
		case RAW_HALIBUT:
		case RAW_BLUEFIN:
		case RAW_MARLIN:
			return Set.of(ANGLERS_OUTFIT);
		default:
			return Collections.emptySet();
	}
}
ember flareBOT
#

@Nightfirecat For this and the other 2 crab meats, I have the following justification:

The process for cooking a raw crab is twofold:

Using a knife cut it into raw crab meat
Cook the raw crab meat at a range
Unfortunately the Wiki does not list the required level to do the cutting of the crab. Also, there is no reason to not fully complete the cooking process, as raw crab meat is not used as an ingredient for anything. Thus for simplicity and to avoid overpopulating the cooking ...

heavy bobcat
#

Do y'all have a preference on whether the commenter should mark the comment as resolved vs the PR owner if they've fixed the comment?

#

Figure it's not a big deal either way but wanted to double check

worthy sparrow
#

yes

heavy bobcat
#

yes there's a preference?

restive garnet
#

It really doesn't matter

trim pumice
#

failing checks
RuneLite Plugin Hub Checks
RuneLite Plugin Hub ChecksFailing after 2s — Requires maintainer review.

I noticed on my PR the check for runelite plugin fails, but when I go into it it literally just says it requires a review, I looked at other prs (and my last one) and they automatically got confirmed.

Is this an action point that's waiting on me (id assume not because it says requires maintainer review, but I don't want it just sitting there if its waiting on me) and if so, is it something I've missed

worthy sparrow
#

which one

trim pumice
worthy sparrow
#

don't use thread interrupt

restive garnet
#

It's also going to need the warning about submitting data to a third party server not verified by the Runelite developers

trim pumice
#

ah thanks

upper valve
#

since it's in the manifest file

restive garnet
#

Saves you a job if they add it themselves (or more accurately get Claude to do it) 😄

upper valve
#

it takes like 3 femtoseconds in the github pr ui

restive garnet
#

Well, you do you

trim pumice
#

hes much better than my old best friend Devin 😄

chrome grove
#

are there any rules or guidelines for first time plugin developers?

quick path
#

mostly make sure to read the plugin-hub's README

chrome grove
#

thank u

trim pumice
quick path
#

he looked at the code

wheat thunder
#

How do I iterate through the text of the CONTENTS? If I get them like that:

Widget codeWidgets = client.getWidget(InterfaceID.FairyringsLog.CONTENTS);

    for (Widget codeWidget : codeWidgets.getDynamicChildren()) {
        if(codeWidget.getText().equals(fairyRingCode))
            foundCodeWidget = codeWidget;
        break;
    }

I only get the S381.8 Fairyringslog.CONTENTS but not the others and not the [0] to [50]

rancid marten
#

that looks like it should work

worthy sparrow
#

you might be doing it too early

wheat thunder
#

Ah, its A I Q and not AIQ - indeed it worked, thanks

trim pumice
# trim pumice good point 🙈 https://github.com/runelite/plugin-hub/pull/10091

im sorry to ask this again, but im still unsure on the answer (i know last time it was checked and an issue was found)

Should this check (screenshot) automatically pass everytime unless there is an issue, or is it more than its just waiting on someone.
(Im honestly not pushing for it to be checked, im just making sure i do everything from my side i need too)

upper valve
#

the only thing that needs to pass for someone to review it is the build check

trim pumice
#

Thank you 🙂

ember flareBOT
rancid marten
#

Oh that is sort of annoying

granite quest
#

I think on Mac/linux the TCP fallback is not triggering in this situation but I haven’t tested on those OS

dense owl
#

Would need fixed on mac also.

rancid marten
#

I know some jmods on the infra team I’ll see if they can allow icmp

#

Using tcp for ping is sort of not great since it will at most cause 2k connections a second extra to the server

granite quest
#

I thought it was only ran on startup for that plugin?

rancid marten
#

Not if you have show current ping on

#

I think it’s once a second

granite quest
#

I see. If the infra team can’t make an exception maybe we can increase the polling interval when ICMP fails

rancid marten
#

That would probably be good for tcp pings in general, but I don’t think there are any systems which use tcp ping now except for the super obscure unixes

ember flareBOT
#
[runelite/runelite] New tag created: runelite-parent-1.12.11
#
[runelite/static.runelite.net] New branch created: 1.12.11-20765869388
ember flareBOT
ember flareBOT
rancid marten
#

these aws servers look like they are using the ec2 load balancers, since they have multiple ips

#

so I sort of suspect that they will not be able to allow icmp

#

idk

#

i feel less bad about doing a 3 way tcp handshake with some aws lb though

quick path
#

Yeah

glass sandal
#

Its only the salvaging worlds right? They said they made some performance changes so that would make sense

granite quest
#

Yup it’s just those two

granite quest
#

I wonder if we have any other options to calculate the current ping than opening and closing tcp connections

rancid marten
#

i dont think so

#

chatgpt says yes, you can use SIO_TCP_INFO to get the rtt from the tcp connection

#

assuming you have the fd I guess, i dont think we expose that

#

also I think eg nagle's algorithm can screw with the tcp rtt time

amber rampart
#

the client sets nodelay, so I think the server would too

granite quest
#

That’s what I saw too. I see lots of tcp connections in wire shark but idk if they’re obscured by the runelite client api

rancid marten
#

idk if the server does or not, that is what would matter since it would be measure acks from the server right?

amber rampart
#

yeah

rancid marten
#

not sure why you see "lots of tcp connections" there should be basically just 1

granite quest
#

I meant packets mb

amber rampart
#

linux has SO_TIMESTAMPING, SO_TIMESTAMPNS and SO_TIMESTAMP which all do different things lol

ember flareBOT
kindred sun
#

When creating a plugin, is there any way to determine an NPCs health regen rate? For example black dragons heal every 12 seconds whereas normal NPCs heal every 60 seconds. Is that NPC regen data available to plugins so I don't have to create my own list?

glass sandal
#

No

low hatch
# ember flare

Out of curiosity, has the updated CS2 broken Chat Timestamp plugin?

#

Running dev build of RL and I restarted my client and noticed my timestamps aren't working anymore, as well as some chat messages not being colored (eg. game messages/RL sent messages iirc)

amber rampart
#

its from the update later today, so it won't work until osrs updates

low hatch
#

Oh interesting, thanks for letting me know

#

I'll try to keep that in mind in the future 👍

amber rampart
#

we don't normally push it this early

#

we wanted to cut it early in case of any gradle shenanigans

low hatch
#

I remember a week or two ago y'all were making the change to gradle but reverted each push. It's official now?

amber rampart
#

yeah

low hatch
#

Sweet

ember flareBOT
#

Closes #19740

Currently, the Slayer plugin determines slayer task targets using an array of target names, and testing whether one of the target names exists within the NPC name as a whole word. A more robust system is needed to match NPCs such as Prifddinas "Guard" on the Elves task, because there are other non-task NPCs in-game which share the same name.

This PR refactors the Slayer plugin to match NPCs using a Predicate, rather than String[] targetNames. NPC predicates can be decl...

swift olive
#

I'd like to expand the World Hopper plugin with more advanced functionality around quick-hopping:

  • Constrict quick-hop to only hop between worlds of a specific type.
  • Skip worlds above a ping threshold when quick-hopping.

Most immediate use case is for ironmen doing blast furnace where constant world hopping is needed. I'm sure there are others. Would this feature be wanted?

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

does doing this no longer provide guava/commons?


    implementation group: 'net.runelite', name: 'cache', version: runeLiteVersion
    implementation group: 'net.runelite', name: 'runelite-api', version: runeLiteVersion

rancid marten
#

looks like no, why would you do that though

worthy sparrow
#

it's for the sprite exporter in resource packs

rancid marten
#

I think you need to add guava since cache has it as implementation() now

glass sandal
ember flareBOT
swift olive
#

Actually, it seems more primitive, probably not suitable for that

glass sandal
#

I typically use Random Hopper which allows you to filter by region. That kinda solves the ping thing. Not sure if it would be wanted in core world hopper or not

granite quest
#

Core world hopper also does not refresh the ping of all worlds after startup I believe

rancid marten
#

I dont think thats accurate

#

i talked with someone today about the icmp thing and they basically cant fix it to allow icmp

chrome grove
#

how long does it usually take to get reviewed for a plugin 🥺

granite quest
#

Shall we fall back to using tcpPing in all failed ping attempts? Currently only mac/linux use this fallback when an exception is thrown.

rancid marten
#

they also said they plan to move more servers to aws in the future, which is sort of not great

granite quest
#

I was fearing that

rancid marten
#

ideally long-term we would probably do the tcp ping for the slow crawl pings and then use tcp rtt for the current server ping. unless anyone else has a better idea

#

but that is extremely nontrivial to do since it would require a bunch of jna which sucks

#

maybe it would be good if someone looked at the current rtt stats and see if it even vaguely matches the ping or not, i dont know

trim pumice
chrome grove
#

i c thank u

#

❤️

restive garnet
#

So often we see people requesting a plugin review within an hour of submitting their PR

granite quest
#

I believe the rtt stats do match the ping but I will confirm later today with more testing

#

looks like Worldhopper indeed only pings all worlds on first load. Only currentworld and nextworld are refreshed on an interval (1 and 3 second intervals respectively). Should this plugin be refreshing the ping of all worlds more than once?

https://github.com/runelite/runelite/blob/a081bc7db3d9701cf70c115b890d808a4ce8f267/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java#L812

https://github.com/runelite/runelite/blob/a081bc7db3d9701cf70c115b890d808a4ce8f267/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java#L225

GitHub

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

rancid marten
#

im like 90% sure it does actually do this

#

read it more closely?

#

its just pingNextWorld() right?

#

if you turn on trace logging you should see it

granite quest
#

Ah my mistake. pingnext world slow crawls across the entire world list

rancid marten
#

yeah so it pings your current world every 1s, and then each 3s it pings the next world on the list

#

yeah we cant ping every world every 3s because its just too much traffic

#

and noone cares that much about the ping accuracy of non-active worlds

granite quest
#

I can see a use case if I want to switch to the world with current lowest ping. The entire world list takes ~15 minutes to update with the slow crawl of pingNextWorld(). What are your thoughts on the ability to manually refresh the ping of all worlds?

rancid marten
#

no

#

your ping to each world is not going to vary enough that this can matter unless you are doing something very weird like switching networks

glass sandal
#

And if your ping is changing that much it is likely just jitter in your own network and not specific jagex servers

restive garnet
#

Would getting the ping of one world in a region be a good enough estimate, or is it a case of there being several different server locations within a region

ember flareBOT
ember flareBOT
trim pumice
# ember flare

ah thanks riktenx. i wasnt sure where to put this so i actually put it in the description, i could have asked but now i know, thanks again!

upper valve
restive garnet
#

Clearly when they said Resources No More, they also included CPU cycles

ember flareBOT
jolly hearth
#
[proc,script1370]()(int)
return(calc(%barbassault_queenkills_extra_2 * 16 + %barbassault_queenkills_extra * 2 + %if3));```

extra_2 and extra are varbits, I believe if3 is a varp, does that mean that I can't reliably work out the number of queen kills? I ask because IF1 is used for lots of different stuff
lavish ice
#

If3 is a generic varp

ember flareBOT
ember flareBOT
#

6749693 gpu: remove alloc from alphamodel sorter - Adam-
c9b4714 overlay: inline position Point in text component - Mark7625
92edcf3 overlay: remove alloc in WidgtOverlay.getParent... - Adam-
9a51118 overlay: remove rect alloc in clampOverlayLocation - Adam-
0ed3fa1 overlay: remove dimension alloc from safeRender - Adam-

ember flareBOT
ember flareBOT
grim isle
# rancid marten maybe it would be good if someone looked at the current rtt stats and see if it ...

I'd be interested in helping measure this, looking at the code I think I only see the tcp ping though ( https://github.com/runelite/runelite/blob/a081bc7db3d9701cf70c115b890d808a4ce8f267/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/ping/Ping.java#L261) is the tcp rtt calculated elsehwere?

GitHub

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

rancid marten
#

no.. there is no code for it yet

grim isle
#

ah okay sorry I misunderstood then

rancid marten
#

if someone is on linux ss might work but i dont think there is a way to see it on windows idk

grim isle
#

I can grab that, one second

grim isle
#

Testing on the worlds closest to me it seems within the same ballpark, the tcpPing tends to swing a bit higher than what ss reports as the current rtt

#

so ss seems to stick pretty stable at 48ms for me but I see tcpPing swing upwards of low 50s

#

I imagine the difference might be pronounced to servers far away, let me test that

#

no actually it seems to maintain with +-5ms of what ss reports even with other regions

#

Tested with both the aus and uk worlds

rancid marten
#

err are you comparing ss and tcpPing or ss and normal icmp ping? i was mostly interested in the latter

#

but i guess the former is interesting too

granite quest
#

I'm seeing similar results timing TCP packets on windows to the current ICMP pings shown in the client.

rancid marten
#

that isnt really specific enough for me to know what that means

granite quest
#

I couldn’t find a built-in Windows API to get RTT from an active TCP socket, so I measured it manually. The RTT values closely matched the shown in-game ping across regions usually within a few ms.

rancid marten
#

there isnt a command for it afaik, there is an api though, SIO_TCP_INFO

#

id really like to know if it works

#

and if the reported rtt is what we think it should be

ember flareBOT
primal yew
#

It maybe seems the hair is not included in Polygon[] polygons = client.getLocalPlayer().getPolygons();

late hare
#

they added an offset to all human anims i think not super long ago.. not sure if that would've been the cause here

amber rampart
#

it looks like we didn't make getPolygon do footprint or anim offset

#

since its a dumb api anyway

late hare
#

ah yeah they did the human anim offsets dec 3

primal yew
#

👍 I don't really care if it is fixed but 5 people asked about it and it seems like a content creator thing

amber rampart
#

here is what getPolygons is supposed to look like

    public Polygon[] getPolygons()
    {
        Model m = getModel();

        if (m == null)
        {
            return null;
        }

        int[] x2d = new int[m.getVerticesCount()];
        int[] y2d = new int[m.getVerticesCount()];

        RSWorldView wv = getWorldView();
        int x = getX();
        int y = getY();

        int height = Perspective.getFootprintTileHeight(client, getLocalLocation(), wv.plane, getFootprintSize());
        height -= getAnimationHeightOffset();

        Perspective.modelToCanvas(client, wv,
            m.getVerticesCount(),
            x, y, height,
            getCurrentOrientation(),
            m.getVerticesX(), m.getVerticesZ(), m.getVerticesY(),
            x2d, y2d);

        List<Polygon> polys = new ArrayList<>(m.getFaceCount());

        int[] indices1 = m.getFaceIndices1();
        int[] indices2 = m.getFaceIndices2();
        int[] indices3 = m.getFaceIndices3();

        int[] xs = new int[3];
        int[] ys = new int[3];
        for (int tri = 0; tri < m.getFaceCount(); tri++)
        {
            int idx;

            idx = indices1[tri];
            xs[0] = x2d[idx];
            ys[0] = y2d[idx];

            idx = indices2[tri];
            xs[1] = x2d[idx];
            ys[1] = y2d[idx];

            idx = indices3[tri];
            xs[2] = x2d[idx];
            ys[2] = y2d[idx];

            polys.add(new Polygon(xs, ys, 3));
        }

        return polys.toArray(new Polygon[0]);
    }
#

if you want to just copy that then I can delete this method since nothing else uses it

primal yew
#

gotcha I can do that

late hare
#

getX and getY dont look exposed, at least not through those getters

#

ah would just be getLocalLocation()

ember flareBOT
ember flareBOT
grim isle
#

I tested with icmp at first and was getting similar results with slightly less jitter

#

but the results I posted earlier were with tcpPing

#

I could see the brief tcp connections through ss with watch

ember flareBOT
ember flareBOT
trim pumice
#

noticed a bug (all game chat getting filtered when filter other crew is enabled) with my Silence Crew! im fixing it now, only effecting 300ish people atm, but should be PRing it this morning
Just exposing the issue here in case anyone raises anything anywhere (wasnt sure where i should create an issue or if i even should)

sinful lava