#development
1 messages · Page 1 of 1 (latest)
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.
thats kind of odd since i think it only calls this when you move the music handle
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();
}
}
oh
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?
that doesnt sound correct to me really at all. this is probably a question more for abex though
it resetting the volume to what the config has is intentional
since otherwise it wouldn't get set on login
yeah, I noticed, and it works well.
it just fights for volume when another plugin is trying to change it.
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
Is anyone able to point me to where I might find NPC spawn tiles, and defined wander radius/max range?
Probably wiki if anything
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!
based
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
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...
Source as in you figure it out
Ah, got it. Thank you for the help
Wrong picture
Sometimes wiki has good map data and other times it has data like this
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 onVolumeChangednow only updates slider positions without changing the actual volume
Test plan
Unit Testing
- Verified volume is not overridden when
VolumeChangedevent fires for music channel - Verified volume is not overridden when
VolumeChangedevent fires for sound effects cha...
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.
how does this set the correct volume on login?
through updateMusicOptions from what I saw and tested
idk it looks like you removed the call to updateMusicOptions
from the onVolumeChange yes, but not from the startUp
im not actually sure how this works, but based on what abex says, this is wrong
hmm let me try to get a gif going, from what I tested, it sets it to the correct volume level.
I've amended the commit, added another test specifically for this logic, and added the gif to the PR.
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
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.
the LLM has objectively no idea how our codebase works
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
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...
(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
You are entitled to that opinion.
that reminds me i gotta tell some guy his png is a jpeg
fe86d00 update cox-light-colors to v1.3.4 (#9940) - AnkouOSRS
d68f818 update quest-voiceover to v1.4.0 (#9921) - KevinEdry
30a2887 update pet-spell-blocker to v1.3.0 (#9925) - Sacca-1
try teleporting and observe that it will reset your volume
Anyone have any idea why a overlay render might be shown vs not shown depending on camera angle?
Z level buffer changes?
probably it's trying to draw lines to or from tiles which might be culled at certain camera angles
Yeah that makes sense, will have to see if theres a way to fix it I guess cause not exactly the best experience.
I got $20 for anyone that can make transparency mode for Blindfold plugin
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/...
Anyone want $20? Recreate this plugin #runelite message and you got it
please stop posting that
Is it against the rules?
it annoys me
well that's dumb
it’s his discord and client
and you know, he said please
then where do i go to commission a plugin
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...
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..
Solve your own damn problems
who pissed in ur cereal this morning?
Santa
im making a simple commission and everyone either getting annoyed or angry. yall need help
no jolly christmas spirit here
fwiw I did look at this music thing and the problem is a lot more deeper than I realized before, since it also has to sync with the stored volumes in config too, it would probably be very hard to fix it correctly (though its sort of debatable if it is a problem even I guess)
this is not really an ok way to behave, stop doing this
@rancid marten can you lmk when you fix the maploader thread thingymcbob? thanks
I think it was fixed awhile ago, is it still broken?
oh i just haven't tried
i'll add my fix that was dependent on that when i have time then
merry christmas
sounds good, lmk if its still not working
Type
Incorrect behavior
Operating System
None
OS Version
No response
Bug description
When double clicking to hop worlds using the side bar interface, if your mouse moves even 1 pixel between the first and second click it doesn't register the double click. This has been a problem for years.
Screenshots or videos
No response
RuneLite version
All
Logs
No response
All
b47129c Update wiki data - RuneLite Wiki Scraper
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
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
This PR fixes a typo in the Neitiznot mooring location name. A user on Reddit noticed the typo.
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.
no?
what event and code is being seemingly missed for you?
36991da update collection-log-luck to v1.2.2 (#9953) - peanubnutter
8ea5419 update event-scouting to v1.0.1 (#9960) - peanubnutter
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.
IIRC some widgets arent always removed from memory and still exist even if theyre not noticeably there or even needed at that moment, which could interfere with loading events. not sure if thats related tho. someone else may have better input
i think widgetloaded is always fired
this is sort of half true but mostly made up
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
they can stay loaded after they are no longer visible sometimes yeah
but the load event always fires
even if it is
ah
the client is not just dropping events randomly
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
737b8a2 update contextual-cursor to v1.6.2 (#9970) - ldavid432
0b67727 update quest-voiceover to v1.5.0 (#9958) - KevinEdry
Is it possible to reset a modified widget to the original state without tracking it?
Generally no
(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
removeGameObjectinclientThread.invokeLater, I don't see the back wall, but it's not clear to me that's intended usage to fix this
you want to use the new RenderCallback api
oh interesting, will take a look ty
All good thanks. Just added a conditional instead.
These are already included in #19644
Awesome! Ill close this one.
13a71ab update time-tracking-reminder (#9974) - queicherius
Happening to me on Windows 10 too. Swapped my GPU from an old Nvidia one to an AMD one, and now the cursors are all washed out
Screenshots display the cursor fine, such as when selecting a crop area on ShareX
Type
Incorrect behavior
Operating System
Windows
OS Version
No response
Bug description
Easy clue scroll for the second floor of lumbridge castle says first floor instead of second
Screenshots or videos
RuneLite version
1.12.10
2.7.2
Logs
No response
The clue scroll plugin's hints follow Jagex's (really, the UK's) floor numbering convention. That is, the US 1st floor is the ground floor, 2nd floor is the 1st floor, and so on.
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
wonder if its truly a bug or the conditions are deterministic but not obvious. in the meantime, u could always have your code account for the inconsistency id imagine
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
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
i wonder if this is something like client-server desync and the server thinks it needs to fire the fade in script still so it fires it a second time
which if its lag-related could explain the inconsistency/difficulty to repro
thank you, i hate spamming you guys with PR's like this especially when theres a lot in queue
i'd also like to know but unfortunately not something I can test on my end
@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
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
Okay great I’ll follow that guideline, when I get home I’ll point to a different commit and do incremental MRs. Thanks!
Reduced the size of the MR by going back a few commits and excluding the major refactor that caused a big diff
Someone post the meme
sed -e 's/Linux/Windows/' < crying-doge.jpg
claude is this safe for me to paste into my terminal
That's a great question, I'm glad you asked!
: - )
There's actually quite a bit of nuance here...
Ayo?
kotlin is not allowed or anything we just didn't want that disclaimer in that spot
it's still listed on the /rejected page
is this a recent thing? cause i think one of the camera plugins is in kotlin
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
oh
they made us get rid of our kotlin tests because of that 😿
sad
yeah thats the one, i think i looked at it and just assumed master branch was the active one
surprised that hasn't come up prior
People usually ask first
there's an old github of someone asking yeah
Instead of seeing no kotlin in the code base and just sending it
literally the only 2 people to ever try is us and that guy
i bet github reports kotlin now due to the gradle stuff
it compiles to jvm broither
You can compile to jvm too
i'm still waiting for electron plugin panel
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
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
its only really an issue for core where code style and sanity are enforced
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
Actually didn't know there was a hotkey for reformatting all, neat.
it's only on the open file
if you select a folder before you presss it, it does that
in go you just bow down to gofmt and if you don't like the way it formats then everybody laughs at you
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...
is there a specific Widget, Interface, or Overlay layer that item counts are drawn on, or does it not work like that
it's part of the item sprite
darn. gonna have to redraw the count too then. ty
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
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
Example of a disclosure: https://github.com/runelite/plugin-hub/blob/master/plugins/flipping-copilot
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?
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
oh yea, hadn't considered that. Thanks for the info guys!
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
would guess because a reviewer hasn't done a related slayer task maybe
Wouldn't have happened if the task weighting was higher 😤
so when we hit PR 10000 do we just nuke the hub
You won't
I'm down
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)
the roof removal pluigin calls fromLocalInstance() on tiles from the PreMapLoad event and it works
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
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
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
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
ah yeah true. ill play around with this, tyvm
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...
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.
You could maybe add the safe mode arg? I assume that'd disable the one you're testing too tho
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
That's perfect thanks!
awesome, seems to work. i didn't realize how annoying it was to not have the over-heal indicator on food like marlin.
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!)
i have to snipe the easy ones to reach my monthly quota
yesterday the craziest thing happened, someone submitted a new plugin, they were given feedback, they fixed it, and it was merged all in the same day
was it a good plugin though?
All plugins are good 🙂
it was definitely one of the plugins of all time
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...
aa3dec3 update runite-rocks to v1.4 (#10009) - TheStonedTurtle
c6b3dcf update mahogany-homes to v1.8.4 (#10007) - TheStonedTurtle
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:
- Party Members do not show up on the world map when they are on boats
- 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...
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.
Grabbing the wiki's categories would probably be your best bet
For food, maybe you could check what the right-click options are for that item? If there's an "Eat" option (or similar), you'd know that's food
But wiki categories will be more useful probably lol
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.
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)
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
i would recommend you just do your dataset in json but sure
they specifically want a lot more data than equipable but yes
oh i missed the "beyond" lol
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
ooc why do you all suggest xml? or was this a meme that started off with an x and then others replied ml
it didn't use the red x so it must be intended
i am sure they are joking
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
override render
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());
render in infobox is just a bool iirc
oh yeah it's all on 1 overlay
there is indeed
Is it possible to learn such power?
someone with access would have to expose it
Should I open a github issue for something like that?
honestly im not sure the process for requesting something like that
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
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
yeah zoom2d, xoffset2d, and yoffset2d are the 3 that aren't exposed. You can even see them in the cache module classes
Ah now that I know what to search for I see this is a very old issue
This would be really awesome to have. Any updates on this?
I worked on a branch awhile ago (comment here https://github.com/runelite/runelite/pull/18941#issuecomment-2852357744) that I left for feedback, maybe one of you could try it?
Search for NorbsCode returned no results.
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...
My most recent combat achievement was on December 17th of this year, so I definitely am seeing it working fine myself.
Search for ca-grey returned no results.
[ https://github.com/ca-gray ] [ @empty crypt 151096440364597248 ] lindor.#0
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
41395cf update bone-shard-helper (#10018) - CarelessEsper
03821cf update compass-camera-control to v1.2.2 (#10020) - RaazKH
Didn’t we add a logback-test thing so you only get debug of the tested plugin a little while ago?
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
Ohh shoot didn't see we hit PR #10000 hype af
#github message i would be surprised if it was?
its cheap, just a few array lookups and some bit shifts
Any luck looking into it? I've been away and haven't tried yet
👍
yuhp
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
use java 11
I use ./gradlew :runelite-client:shadowJar --refresh-dependencies
Run the Maven builder to output a shaded JAR in /runelite-client/target/
we should update this
Output is to /runelite-client/build/libs/
Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/
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?
I think its because it defaults to building javadoc now
i dont think it ever really worked
you mean building the javadoc never worked with java >11?
gotcha
thanks! i actually tried this earlier but was looking for the jars in the wrong place and concluded it didn't do anything. 🤦♂️ it avoids building the javadoc so i'm able to compile it with java >11 :D
i dont think even assemble builds javadoc does it
idk
i dont really know how gradle works
i was using assembleAll
it's one piece of software that i truly despise
out of curiosity, what was the motivation for the move?
I build with java 17. Just set options.release = 17 in common.settings.gradle.kts
dependency verification and sped up build times
i can do hundreds of builds a day so it is pretty nice
that's true. still baffles me that maven can't do incremental builds but oh well
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
Kinda surprised Google hasn't bought them with how integrated it is with android
Google has bazel or something
My most recent combat achievement was on December 17th of this year, so I definitely am seeing it working fine myself.
What is your OS?
he edited it to say he knows about many unreported screenshot bugs on macaroni os
Well, case closed lol
i did @ them to tell em to check at least :^)
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.comdomains 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! ❤️
You dont have to add a discloure for github urls
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
Okay I will definitely do that, then. Good idea
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)
oh?
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).
Looks like it can happen outside of sailing too, like in Mor Ul Rek outside the inferno. The legacy GPU plugin works fine, and so does the java CPU renderer which I assume doesn't do frustum culling anyway. Just the new Z-indexed GPU plugin.
https://github.com/user-attachments/assets/5c5f14a0-861f-4134-b674-01471a2b0143
is there any context to this? we did a site build on Nov 28 and it worked ok, im not aware of it not building
infact there are no failed builds
it doesn't build on windows by default if that's what they mean
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.
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.
#github message idr does sailing plugin do this?
Yes, but not with that much control. Just mute all, mute other boats, and mute none.
#runelite message ive seen a few people ask about this, can someone who is familiar with the sailing content look at it?
I'll look it over tonight
the debug plugin now contains a dumbed down version of a heap analyzer https://cdn.discordapp.com/attachments/359016743802503178/1456035792005890068/image.png?ex=6956e680&is=69559500&hm=5cbd585d62eec127e9d9deb6e0c9b7b3760a8b279f498128abe1125ddb5dd48d& - its not a true visualvm/jhat replacement, but we should direct #support users who are getting ooms or perf issues from gc stress to it
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
it takes a heap dump and then reads that
very good
That's pretty neat
GA is using node16, so that issue doesnt matter there. for the other issue, i dont know why it works (could be windows vs linux or something with package versions), its easily fixed by just upgrading the package though. ill PR something today or soon
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
Happy New Year! Trying to decide what I should do with this lol 
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.
You can't generate inputs to send to the game server so this would be definitely against the rules
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
613a282 Update wiki data - RuneLite Wiki Scraper
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-waylandThen in Bolt → RuneLite → Custom Command, type manually (don’t paste, no newline):
`/h...
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).
If you're having a login issue ( need to login to test plugin because you have a Jagex account ) - Try this.
https://github.com/runelite/runelite/wiki/Using-Jagex-Accounts
Damn, missed this piece of docs. Thank you very much, this is exactly what I was looking for!
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...
What
lmk if you need anything from me for that PR. I do think I need to redo the Haddock logic, just gotta catch some in game first to test it.
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
Updated the haddock logic, now should correctly show the theoretical as 18. I had to copy/paste the whole effect function though just to change this line. It might look nicer if we added a cap variable or something to Food/FoodBase but not sure how that would look and if it would be worth it since we only have 1 item like this.
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 ...
Hey! I'm curious, should I be worried about this (https://github.com/runelite/plugin-hub/actions/runs/20664059380/job/59332600115) failing? It doesn't seem like the issue is related to my plugin, or am I wrong? I'm assuming this doesn't let the plugin to be updated.
sometimes github/cloudflare don't work
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
The !pets command will show your pets when you visit the all pets tab in your collection log.
<img width="950" height="301" alt="Image" src="https://github.com/user-attachments/assets/cddf5e3b-67f1-482a-9e09-ebaa21f1d00e" />
Your first KC during quest is not timed I am pretty sure.
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-3706186104The !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...
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
when multiple different plugins are rendering overlays on the same overlay layer, how does the pipeline determine z-order?
However it's stored by priority
you can call setPriority to change it
and what if plugins aren't doing setPriority? like how does their priority default
defaults to something, .25f?
Registered order on default I think
alright thanks
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
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:
it still does priorities, but you likely have nothing else in the same draw group
hmm. ive tried both 0.2 and 1.2 and no luck
are you calling showOnInventory or something else?
and item ident's prio is 0, so you want to be < 0
im calling drawAfterLayer(int component)
ohhh. i thought it was using default. thanks ill try that
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?
its in WidgetItemOverlay
love u
Does it bother plugin hub reviewers if there is markdown documentation in a docs folder in the hub plugin repo? A) yes, B) no
can't see why it would
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
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
cdfec47 gradle: fix intellij client debugging (#19758) - LlemonDuck
So that the icons look better
10000 coins much better than 1 coin
10,000 ana in a barrel here we come
Ditto arrows, tokkul, etc
b037b5f gradle: fix client and jshell artifact ids - LlemonDuck
Type
Incorrect behavior
Operating System
Windows
OS Version
Windows 10
Bug description
New farming items such as cotton, camphor, and coral frags are not recognised.
Screenshots or videos
No response
RuneLite version
Runelite version: 1.12.10
Launcher version: 2.7.6
Logs
No response
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.
they're called submenus, look for instances of submenu in core's code
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
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.
ChatMessageManager is a thread safe utility for this specifically
for other things you can use ClientThread#invokeLater
Thanks I'll have a read into it
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
How to develop plugin-hub plugins: https://github.com/runelite/plugin-hub/blob/master/README.md
there's roughly a 200% chance that https://github.com/runelite/plugin-hub/pull/10052 is just genAI right
sshh don't reveal my secrets
you think the person that wants claude to advise all their runescape decisions made their plugin with AI? I suppose it's a possibility...
big if true
Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/
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
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?
We'll rewrite commits if they're not neat, but we'd prefer you have a clean history if possible
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...
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.
That doesn't sound worth the PR split in my opinion
Gotcha, thanks pajlada ❤️
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?
did you try looking at his client log for errors?
I looked through with him and only say WARNs for my plugin, here is the log he had.
maybe thats why its not working then
I guess I'm trying to figure out why his log has warnings and mine does not, we both have the same version installed
do you know how to read stacktraces?
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
seems you have your answer
my question is why do I not have that in my log if we are running the same code?
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
I think his menu just has less than 3 entries
You're doing menuEntries[3] == null . Check the count of the array instead
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
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
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
yeah I'm trying to figure that out, is there something besides the client log file to look at to debug this?
no
so is my best bet to fix the menuEntries problem, then send him a jar file to see if it works?
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
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?
shadowjar would work yeah
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.
okay thanks
is wiseoldman.net trusted or do we need a disclaimer on that one
looks like we have some examples where there is a disclaimer but it's just called by name
only github the wiki, jagex and i guess us i believe
mostly no because the core client already submits stuff to it
o yeah thats fair
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.
I didn't think an ambient sound of -1 was able to play any real sounds besides the sounds in the array of back ground sound effects.
Is it okay if, when a user modifies a particular config setting for a plugin, the sidebar panel for the plugin is automatically opened?
seems fine
is it like an "open settings" button in the plugin config?
cause that sounds neat.
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
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
Awesome, I much prefer the open panel approach to chat message spam
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
Here's what it'd look like in case anyone else wants to provide their perspective:
Thanks ❤️
Maybe only swap on valid url links too
Lol I'm so caught
I definitely noticed this problem when I cleared out the config
On config change check if 200 on url response then swap to panel seems reasonable
ty
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
It’s going to GitHub eventually and repo has to exist
Idk better than just swapping no matter what
i guess your internet would have to be really slow for it to be a pain in the ass
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
there are valid use cases that open a panel without explicit user input e.g. zulrah helper
#support message I wonder if this is due to the dll blocking
Ahhh I think this is what prompted me to ask about it
mayb, i swore someone said it happened to another app other than runelite* but i cannot find that message
so maybe that never happened
i can try unblocking the dlls maybe
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
}
You can create a plugin in the test directory and load it, and use that.
Loadbuiltin takes vararg
Brilliant thanks!
be sure to put the separate plugin in the test source set so we don't have to review it
Per https://github.com/runelite/runelite/wiki/Developer-Guide, I want to check if my suggestion sounds right for the core client.
TLDR: potion timer text changes to red at 10% time remaining, I want to make this threshold configurable.
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)
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
That's probably fine yeah
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.
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
I'll take a look thanks
phub dev tries to use or contribute to an existing translation plugin challenge (impossible)
Let's start a new translation plugin that takes the best bits of all the others!
fyi
That bot really does have a command for everything lol
Run ./gradlew :runelite-client:shadowJar to output a shaded jar in runelite-client/build/libs/
i think we need to fix this one again
Are there any plugins that use google analytics?
.. the SEO tools for websites?
I was thinking for metrics
afaik its not a general purpose thing like that
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?
that's a bummer, I guess I'll give it a miss then, ty anyway
we dont have a good way to deal with that
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...
heh
ive noticed that before too
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)
afaik that is basically that bug
it really just needs a timeout and to not invalidate after it gets a message I think
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
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
Hi has this been resolved or any thoughts? I asked in the Runelite discord but there were no answers. I am having a similar issue since the Summer around when this issue was opened, with screenshots through the months. My issue is different where I just gear, go do what I need to do I come back and my bank is a mess.
0c1690e update tictac7x-charges to v0.6.9.1 (#10065) - TicTac7x
e254234 api: fix drawcallbacks drawDynamic backwards co... - Adam-
fb062d2 update configurable-slayer-task-overlay (#10070) - mathiaslj
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
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
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.
public static final int HH_EASY_SAIL = 58130;
public static final int HH_ELITE_SAIL = 58131;
public static final int ...
From the wiki for Entity Hider:
- 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.
Adapted from OpponentInfoPlugin.
This has a minor merge conflict with #19764, will fix if both are approved.
Currently, attackers are only hidden (with "Hide attackers" on) during the duration that they're interacting with the local player. If they stop interacting with the player temporarily like walking to another tile or eating food, they imme...
Search for repsejnworb returned no results.
This seems very subjective of what you would consider an attacker.
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
you shouldn't need that though
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.
you can contribute to the plugin
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
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
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
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:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
close intellij, delete ~/.m2, reopen
ah perfect, thanks
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)
...
Is there any way to know if they might add it or if it ultimately won't be added?
what?
One would assume it would get added, but it is speculation at this point. As far as I know nobody from Jagex has commented on it.
oh thought I deleted the message, I had typod like thrice into the repo looking for the file
https://github.com/runelite/plugin-hub/pull/10083 can someone have a look at this, fixes a bug in RDI
whenever someone reviews it sure
This seems very subjective of what you would consider an attacker.
Could you please explain further? This doesn’t change anything with regards to how it initially detects an attacker, it only keeps them hidden for a little longer so attackers don’t constantly hide/unhide.
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.
a configurable time seems reasonable maybe but definitely not hardcoded 5 seconds lol
Something like that would be fine, I think. As much as possible, we should try to keep the enum ctor simple (ie. update the existing constructors to use NpcMatcher transparently), and not be too general with the NpcMatcher API since there are very limited cases where it is needed.
821bb70 update raids-death-indicator (#10083) - vikke1234
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...
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
are you going through intellij or were you like trying to install your own jdk and run stuff from terminal
Been trying to get by with vscode + extensions, but trying intellij now
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
65 is 21
Correct, thats the current default-jdk for debian
we recommend java 11
intellij+java 11 specifically, changing/adding versions is pretty straight forward within intellij as well so thats nice
Looks like thats old enough to have been deprecated from sources, jippee
But thanks a lot, these are some great treads to pull at
you can download it from adoptium
I've been developing on debian for years now, as was mentioned you should install the openjdk-11-jdk package and use that for builds
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
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
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
Will do.
It seems there could be broad use cases for a general npc matcher throughout other plugins. I was planning to make this utility local to the Slayer plugin, unless you think there's justification to consider this as a client util.
It's not difficult to promote it to be available more broadly later, but I'd prefer we start with a smaller enhancement first
@evilgenious448 anything still needed before this goes out? Noticed this missing in the client so went looking (haven’t contributed yet)
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.
Drag what interface around
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.
How you are modifying the cursor that it breaks?
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?
Linux wm are notoriously inconsistent
Ain't that the truth
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
Think you would need to copy the hotkey logic to know
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.
just call ConfigManager::getConfiguration
aha that might be exactly what I need. I'll take a look, thanks.
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...
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...
if anyone in the future needs this info, I was able to just inject RuneLiteConfig conf and call super(conf::dragHotkey) in the HotkeyListener constructor
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 ...
// eh
Its easy to reproduce that bug in the GE
I think most slayer monsters don't need exact naming for every variant. (eg. "Blue dragon" matching all of "Blue dragon", "Baby blue dragon", and "Brutal blue dragon" is very convenient) That said, having the option for exact matches is fine too.
6cddeab update configurable-slayer-task-overlay (#10075) - mathiaslj
I wonder if this is actually how this item works? We don't really have a good way to test this at the moment, maybe we could get some direct feedback from jmods to confirm it. For now, this is fine, assuming we don't get further details on the implementation.
Each of these negative boosts should be BoostedStatBoosts, as they are relative to your current level.
Are these real values from ingame testing? If not, let's remove them; I'd like for these tests to only reflect values matching that from real game testing.
The existing staminaPot variable exists because it is also used for the stamina mix effects. There are no barbarian potions for extreme stamina/energy pots, so these can be inlined to the item definitions.
Same as above; no barbarian potions exist for the super fishing and hunter potions.
Also a small nit-pick is that we typically format the negative boosts with a negative offset rather than a negative percent (ie. .10, -2, not -.10, 2)
Closes #19759
Adds the following items to item identification plugin:
- Hop seeds
- Flax (FLAX)
- Hemp (HEMP)
- Cotton (CTN)
- Trees
- Camphor (CAM)
- Ironwood (IRON)
- Rosewood (RSWD)
- Special seeds
- Elkhorn frag (ELK)
- Pillar frag (PIL)
- Umbral frag (UMB)
This is 85xp according to the wiki.
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();
}
}
This name override isn't needed? They've renamed the ingame item...
This is 200xp according to the wiki.
This is what the item is already called, what is this override meant to do? Ditto for the rest of the keel parts. (The gameval name is not the same as the item name ingame)
7aec267 item identification: add sailing items - OfficiallyToast
@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 ...
You are correct, it is not needed. I will remove this.
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
yes
yes there's a preference?
It really doesn't matter
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
which one
good point 🙈
https://github.com/runelite/plugin-hub/pull/10091
don't use thread interrupt
It's also going to need the warning about submitting data to a third party server not verified by the Runelite developers
ah thanks
typically i just add this for people these days
since it's in the manifest file
Saves you a job if they add it themselves (or more accurately get Claude to do it) 😄
it takes like 3 femtoseconds in the github pr ui
Well, you do you
my best mate claude
hes much better than my old best friend Devin 😄
are there any rules or guidelines for first time plugin developers?
thank u
out of interest, did this say this anywhere, or did you quick glance the code?
he looked at the code
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]
that looks like it should work
you might be doing it too early
Ah, its A I Q and not AIQ - indeed it worked, thanks
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)
the only thing that needs to pass for someone to review it is the build check
Thank you 🙂
Thanks for adding all these :)
f27e836 worldmap: add rare trees added by sailing - coopermor
Closes #19709
Worlds 596 and 597 seem to be uniquely hosted on AWS.
AWS seems to reject ICMP pings outright causing these worlds to fail the ping test. Adding a fallback TCP ping resolves this. A log is included when the ICMP ping fails on windows.
Before:
After:
Oh that is sort of annoying
I think on Mac/linux the TCP fallback is not triggering in this situation but I haven’t tested on those OS
Would need fixed on mac also.
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
I thought it was only ran on startup for that plugin?
I see. If the infra team can’t make an exception maybe we can increase the polling interval when ICMP fails
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
a4018ab examine: don't clear pending queue on message t... - BBeeaarr
e11b541 API docs for 1.12.11 - RuneLite updater
2367e0e Release 1.12.11 - RuneLite updater
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
Yeah
Its only the salvaging worlds right? They said they made some performance changes so that would make sense
Yup it’s just those two
I wonder if we have any other options to calculate the current ping than opening and closing tcp connections
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
the client sets nodelay, so I think the server would too
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
idk if the server does or not, that is what would matter since it would be measure acks from the server right?
yeah
not sure why you see "lots of tcp connections" there should be basically just 1
I meant packets mb
linux has SO_TIMESTAMPING, SO_TIMESTAMPNS and SO_TIMESTAMP which all do different things lol
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?
No
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)
its from the update later today, so it won't work until osrs updates
Oh interesting, thanks for letting me know
I'll try to keep that in mind in the future 👍
we don't normally push it this early
we wanted to cut it early in case of any gradle shenanigans
I remember a week or two ago y'all were making the change to gradle but reverted each push. It's official now?
yeah
Sweet
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...
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?
what do you think of aligning this value with the combat logout timer? wiki says 16t/9.6s
mostly for consistency with what the game considers no longer being attacked
https://www.reddit.com/r/2007scape/s/TDoCsQnLGh
Hi, this is planned to be come with the next game update 🙏
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
looks like no, why would you do that though
it's for the sprite exporter in resource packs
I think you need to add guava since cache has it as implementation() now
The first can already be done with the World Cycle plugin
Ahh thanks. Am I better off adding the latter feature to that plugin then?
Actually, it seems more primitive, probably not suitable for that
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
Core world hopper also does not refresh the ping of all worlds after startup I believe
I dont think thats accurate
i talked with someone today about the icmp thing and they basically cant fix it to allow icmp
how long does it usually take to get reviewed for a plugin 🥺
Shall we fall back to using tcpPing in all failed ping attempts? Currently only mac/linux use this fallback when an exception is thrown.
they also said they plan to move more servers to aws in the future, which is sort of not great
I was fearing that
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
i guess it depends on size, availability (these are volunteers that review) and current priorities
So often we see people requesting a plugin review within an hour of submitting their PR
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?
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
Ah my mistake. pingnext world slow crawls across the entire world list
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
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?
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
And if your ping is changing that much it is likely just jitter in your own network and not specific jagex servers
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
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!
this has to be some kind of record, scene scan per frame per worldview per game object https://github.com/Aethdae/no-more-resources/blob/66533bab3bcfa89ef22ff6715e3f6dbe89738744/src/main/java/com/resources/ResourcesNoMore/ResourcesNoMoreOverlay.java#L47
Clearly when they said Resources No More, they also included CPU cycles
[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
If3 is a generic varp
https://github.com/user-attachments/assets/c3806d08-e8ea-48e5-86ae-9f69e97f5a8c
There are bugs, but I think I got a working prototype, and it would only be a plugin to boot. LMK if anyone is interested
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-
I'm on linux and i'm also experiencing this issue, it's been prevalent for months, definitely something to do with stretched mode.
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?
no.. there is no code for it yet
ah okay sorry I misunderstood then
if someone is on linux ss might work but i dont think there is a way to see it on windows idk
I can grab that, one second
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
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
I'm seeing similar results timing TCP packets on windows to the current ICMP pings shown in the client.
that isnt really specific enough for me to know what that means
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.
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
java_lJ40vlKJot.mp4
There are bugs, but I think I got a working prototype, and it would only be a plugin to boot. LMK if anyone is interested
Man, i need this so much RN, can you add me in discord? Nick: p3caun
I am mostly out of the loop with changes these days, is there something obvious with the new zbuf stuff that would cause https://github.com/Trevor159/runelite-external-plugins/issues/47
It maybe seems the hair is not included in Polygon[] polygons = client.getLocalPlayer().getPolygons();
they added an offset to all human anims i think not super long ago.. not sure if that would've been the cause here
it looks like we didn't make getPolygon do footprint or anim offset
since its a dumb api anyway
ah yeah they did the human anim offsets dec 3
👍 I don't really care if it is fixed but 5 people asked about it and it seems like a content creator thing
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
gotcha I can do that
getX and getY dont look exposed, at least not through those getters
ah would just be getLocalLocation()
tcpPing I commented out the icmp pings
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
java_lJ40vlKJot.mp4
There are bugs, but I think I got a working prototype, and it would only be a plugin to boot. LMK if anyone is interested
I would love to test this out
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)
no need for an issue, don't worry