03511a4e0051d2ebf6cc627e1e54b2d4c18c8a17
this reverts commit abaf45092b
We need to run this every frame because the client can update the widget
bounds cache without calling [proc,toplevel_resize]. This is easily
reproducible by resizing the client in fixed mode, which causes the
the tli to be revalidated, but because its in fixed mode it doesn't run
the resize listener because the bounds don't actually change.
We use BeforeRender instead of ClientTick because ClientTick is posted
before cs2s are evaluated each tick, so if [proc,toplevel_resize] (or
any other cs2 that can touch these widgets) is called the widget would
be in the vanilla position for the next frame.
runelite

RuneLite is a free, open source OldSchool RuneScape client.
If you have any questions, please join our IRC channel on irc.rizon.net #runelite or alternatively our Discord server.
Project Layout
- cache - Libraries used for reading/writing cache files, as well as the data in it
- http-api - API for api.runelite.net
- http-service - Service for api.runelite.net
- runelite-api - RuneLite API, interfaces for accessing the client
- runelite-client - Game client with plugins
Usage
Open the project in your IDE as a Maven project, build the root module and then run the RuneLite class in runelite-client.
For more information visit the RuneLite Wiki.
License
RuneLite is licensed under the BSD 2-clause license. See the license header in the respective file to be sure.
Contribute and Develop
We've set up a separate document for our contribution guidelines.
Description
Languages
Java
98.9%
GLSL
0.7%
C
0.3%
