Skip to content

Comments

2.0.38#1595

Merged
chsami merged 29 commits intomainfrom
development
Nov 5, 2025
Merged

2.0.38#1595
chsami merged 29 commits intomainfrom
development

Conversation

@chsami
Copy link
Owner

@chsami chsami commented Nov 5, 2025

No description provided.

Adam- and others added 28 commits November 1, 2025 15:02
I think 3.2 might work too, since that is required for geometry shaders. But the shaders have had #version 330 for a long time, so stick with that.
# Conflicts:
#	cache/pom.xml
#	pom.xml
#	runelite-api/pom.xml
#	runelite-client/pom.xml
#	runelite-jshell/pom.xml
#	runelite-maven-plugin/pom.xml
uploadStaticModel can be called from the client or map loader thread, so it each needs its own vertex buffer
NPCs which have tags in their names have those tags included in the
server npc loot event. This commit strips those tags before adding loot
records and sending npc kill chat messages.
# Conflicts:
#	cache/pom.xml
#	pom.xml
#	runelite-api/pom.xml
#	runelite-client/pom.xml
#	runelite-jshell/pom.xml
#	runelite-maven-plugin/pom.xml
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 5, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This pull request updates the Maven parent version from 1.12.0 to 1.12.2 across multiple modules, bumps the Microbot version from 2.0.37 to 2.0.38, and introduces extensive content additions. Primary additions include a new Sailing skill integrated throughout the API and client with corresponding configurations, varbits, and interface elements. The PR also adds a DBTABLE script variable type, numerous NPC IDs, item IDs, object IDs, animation constants, and quest entries. Significant refactoring occurs in the GPU plugin with updated method signatures for rendering calls and camera zoom handling via new VarClientID constants. Multiple game interface field indices are incremented, and builder scripts are updated or removed to support the new content and infrastructure changes.

Possibly related PRs

  • 2.0.37 #1593: Performs similar Maven parent version bumps across cache/pom.xml and other modules, directly matching this PR's infrastructure update pattern.
  • Bump to 1.11.15-SNAPSHOT & Fix Bank Menu Entry Identifiers #1433: Adds DBTABLE enum constant to ScriptVarType, providing the foundational support for database table script variable handling that this PR extends.
  • 2.0.34 #1585: Updates Maven parent versions in pom.xml files using the same versioning approach as this PR's infrastructure changes.

Pre-merge checks and finishing touches

❌ Failed checks (2 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive Title is vague and generic, using only a version number without conveying meaningful information about the changeset. Use a descriptive title that summarizes the main changes, e.g., 'Add Sailing skill support and update API constants' or 'Version 2.0.38: New game content and UI improvements'.
Description check ❓ Inconclusive No description was provided by the author; cannot assess relevance to the changeset. Add a pull request description explaining the purpose and scope of changes, including new features, bug fixes, or content updates.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
runelite-client/src/main/scripts/OptionsPanelZoomUpdater.rs2asm (1)

69-76: Wrong range used for fixed-viewport zoom conversion

The fixed-viewport branch subtracts the small-mode minimum (VarClientID 1338) but still pushes iload 0 (the big-mode range) into zoomExpToLin, then later divides by iload 1. That mismatch skews the conversion and sets the slider to the wrong position whenever the fixed viewport limits differ from the resizable ones. Load the small-mode range before invoking the callback so both operands stay in sync.

-   iload                  0
+   iload                  1
runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java (1)

604-627: Wire SAILING into fromSkill lookup.
TRAINING_SAILING is never surfaced because Skill.SAILING still hits the default null return, unlike every other skill. Add the missing branch so Discord presence updates correctly for the new sailing skill.

 		case CONSTRUCTION: return TRAINING_CONSTRUCTION;
+		case SAILING: return TRAINING_SAILING;
 		default: return null;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 42f48f0 and d1e3f29.

⛔ Files ignored due to path filters (3)
  • runelite-client/src/main/resources/net/runelite/client/plugins/gpu/frag.glsl is excluded by !**/*.glsl
  • runelite-client/src/main/resources/skill_icons/sailing.png is excluded by !**/*.png
  • runelite-client/src/main/resources/skill_icons_small/sailing.png is excluded by !**/*.png
📒 Files selected for processing (74)
  • cache/pom.xml (1 hunks)
  • cache/src/main/java/net/runelite/cache/util/ScriptVarType.java (1 hunks)
  • pom.xml (1 hunks)
  • runelite-api/pom.xml (1 hunks)
  • runelite-api/src/main/interfaces/interfaces.toml (2 hunks)
  • runelite-api/src/main/java/net/runelite/api/Actor.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/ItemID.java (8 hunks)
  • runelite-api/src/main/java/net/runelite/api/NpcID.java (3 hunks)
  • runelite-api/src/main/java/net/runelite/api/NullItemID.java (2 hunks)
  • runelite-api/src/main/java/net/runelite/api/NullNpcID.java (4 hunks)
  • runelite-api/src/main/java/net/runelite/api/NullObjectID.java (3 hunks)
  • runelite-api/src/main/java/net/runelite/api/ObjectID.java (10 hunks)
  • runelite-api/src/main/java/net/runelite/api/Quest.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/Renderable.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/ScriptID.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/Skill.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java (2 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java (19 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/ObjectID.java (7 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java (9 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java (1 hunks)
  • runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java (3 hunks)
  • runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java (1 hunks)
  • runelite-client/pom.xml (2 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java (7 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java (2 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java (20 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPluginConfig.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/Shader.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/TextureManager.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/VAO.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java (3 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java (2 hunks)
  • runelite-client/src/main/java/net/runelite/client/ui/SkillColor.java (1 hunks)
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java (7 hunks)
  • runelite-client/src/main/resources/item_variations.json (20 hunks)
  • runelite-client/src/main/scripts/BankMainBuild.hash (1 hunks)
  • runelite-client/src/main/scripts/BankMainBuild.rs2asm (24 hunks)
  • runelite-client/src/main/scripts/BankSearchFilter.hash (1 hunks)
  • runelite-client/src/main/scripts/BankSearchFilter.rs2asm (1 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomListener.hash (0 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomListener.rs2asm (0 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSetter.hash (0 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSetter.rs2asm (0 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSlider.hash (0 hunks)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSlider.rs2asm (0 hunks)
  • runelite-client/src/main/scripts/OptionsPanelRebuilder.hash (0 hunks)
  • runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm (0 hunks)
  • runelite-client/src/main/scripts/OptionsPanelZoomMouseListener.hash (1 hunks)
  • runelite-client/src/main/scripts/OptionsPanelZoomMouseListener.rs2asm (3 hunks)
  • runelite-client/src/main/scripts/OptionsPanelZoomUpdater.hash (1 hunks)
  • runelite-client/src/main/scripts/OptionsPanelZoomUpdater.rs2asm (4 hunks)
  • runelite-client/src/main/scripts/SkillTabBuilder.hash (1 hunks)
  • runelite-client/src/main/scripts/SkillTabBuilder.rs2asm (3 hunks)
  • runelite-client/src/main/scripts/SkillTabTotalLevel.hash (1 hunks)
  • runelite-client/src/main/scripts/SkillTabTotalLevel.rs2asm (6 hunks)
  • runelite-client/src/main/scripts/ZoomHandler.hash (0 hunks)
  • runelite-client/src/main/scripts/ZoomHandler.rs2asm (0 hunks)
  • runelite-client/src/test/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPluginTest.java (0 hunks)
  • runelite-jshell/pom.xml (1 hunks)
  • runelite-maven-plugin/pom.xml (1 hunks)
💤 Files with no reviewable changes (11)
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSetter.hash
  • runelite-client/src/main/scripts/OptionsPanelRebuilder.hash
  • runelite-client/src/main/scripts/OptionsPanelRebuilder.rs2asm
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSlider.hash
  • runelite-client/src/test/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPluginTest.java
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSlider.rs2asm
  • runelite-client/src/main/scripts/ZoomHandler.rs2asm
  • runelite-client/src/main/scripts/ZoomHandler.hash
  • runelite-client/src/main/scripts/NewOptionsPanelZoomListener.hash
  • runelite-client/src/main/scripts/NewOptionsPanelZoomListener.rs2asm
  • runelite-client/src/main/scripts/NewOptionsPanelZoomSetter.rs2asm
🧰 Additional context used
📓 Path-based instructions (2)
**/*.java

📄 CodeRabbit inference engine (AGENTS.md)

**/*.java: Use tabs for indentation, follow the brace placement style exemplified in MicrobotPlugin.java, and keep lines under 120 characters
Use UpperCamelCase for types and lowerCamelCase for members

Files:

  • runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java
  • cache/src/main/java/net/runelite/cache/util/ScriptVarType.java
  • runelite-api/src/main/java/net/runelite/api/ScriptID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
  • runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java
  • runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java
  • runelite-api/src/main/java/net/runelite/api/ItemID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/timersandbuffs/TimersAndBuffsPlugin.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java
  • runelite-api/src/main/java/net/runelite/api/Quest.java
  • runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java
  • runelite-api/src/main/java/net/runelite/api/Skill.java
  • runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/Zone.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/VAO.java
  • runelite-api/src/main/java/net/runelite/api/ObjectID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/SceneUploader.java
  • runelite-api/src/main/java/net/runelite/api/NullObjectID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/Shader.java
  • runelite-api/src/main/java/net/runelite/api/Renderable.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/TextureManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java
  • runelite-api/src/main/java/net/runelite/api/NullNpcID.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java
  • runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java
  • runelite-api/src/main/java/net/runelite/api/Actor.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPluginConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/VBO.java
  • runelite-client/src/main/java/net/runelite/client/ui/SkillColor.java
  • runelite-api/src/main/java/net/runelite/api/gameval/ObjectID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java
  • runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java
  • runelite-api/src/main/java/net/runelite/api/NpcID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java
  • runelite-api/src/main/java/net/runelite/api/NullItemID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java
**/pom.xml

📄 CodeRabbit inference engine (AGENTS.md)

Target Java 11 via maven-compiler-plugin using 11 in all module POMs

Files:

  • runelite-api/pom.xml
  • cache/pom.xml
  • runelite-maven-plugin/pom.xml
  • runelite-jshell/pom.xml
  • pom.xml
  • runelite-client/pom.xml
🧠 Learnings (13)
📚 Learning: 2025-08-25T06:50:43.493Z
Learnt from: Voxsylvae
Repo: chsami/Microbot PR: 1415
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/MicroAgilityPrePostScheduleRequirements.java:218-226
Timestamp: 2025-08-25T06:50:43.493Z
Learning: In MicroAgilityPrePostScheduleRequirements.java, the deprecated ItemID constants NATURERUNE and FIRERUNE should be replaced with NATURE_RUNE and FIRE_RUNE respectively when using the gameval package ItemID class.

Applied to files:

  • runelite-api/src/main/java/net/runelite/api/gameval/AnimationID.java
  • runelite-api/src/main/java/net/runelite/api/ItemID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java
  • runelite-api/src/main/java/net/runelite/api/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java
  • runelite-api/src/main/java/net/runelite/api/NullNpcID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java
  • runelite-api/src/main/java/net/runelite/api/NpcID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/SpotanimID.java
  • runelite-api/src/main/java/net/runelite/api/NullItemID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java
📚 Learning: 2025-08-25T15:51:39.272Z
Learnt from: runsonmypc
Repo: chsami/Microbot PR: 1417
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/AgilityScript.java:13-13
Timestamp: 2025-08-25T15:51:39.272Z
Learning: Both net.runelite.api.ItemID and net.runelite.api.gameval.ItemID are valid import paths in the RuneLite codebase. The microbot plugins consistently use net.runelite.api.ItemID as their established pattern.

Applied to files:

  • runelite-api/src/main/java/net/runelite/api/ItemID.java
  • runelite-api/src/main/java/net/runelite/api/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java
📚 Learning: 2025-08-25T15:51:52.157Z
Learnt from: runsonmypc
Repo: chsami/Microbot PR: 1417
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/AgilityScript.java:284-291
Timestamp: 2025-08-25T15:51:52.157Z
Learning: In RuneLite's ItemID class, both PIEDISH and PIE_DISH constants exist and are valid, both referring to item ID 2313. The gameval package uses PIEDISH while the regular api package uses PIE_DISH, so either naming convention can be used.

Applied to files:

  • runelite-api/src/main/java/net/runelite/api/ItemID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java
📚 Learning: 2025-08-25T06:45:09.673Z
Learnt from: Voxsylvae
Repo: chsami/Microbot PR: 1415
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/MicroAgilityPrePostScheduleRequirements.java:7-7
Timestamp: 2025-08-25T06:45:09.673Z
Learning: Always use game ID classes from net.runelite.api.gameval package (like ItemID, ObjectID, NpcID) instead of the deprecated classes in net.runelite.api package. The gameval package contains the new, preferred classes while the old ones in the direct api package are deprecated.

Applied to files:

  • runelite-api/src/main/java/net/runelite/api/ItemID.java
  • runelite-api/src/main/java/net/runelite/api/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/NullObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java
  • runelite-api/src/main/java/net/runelite/api/NullNpcID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/ObjectID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/InventoryID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/SpriteID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarClientID.java
  • runelite-api/src/main/java/net/runelite/api/NullItemID.java
  • runelite-api/src/main/java/net/runelite/api/gameval/VarPlayerID.java
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/test/java/**/*.java : Mirror production package structure for tests under runelite-client/src/test/java

Applied to files:

  • runelite-api/pom.xml
  • runelite-client/pom.xml
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/target/*.jar : Distributable JARs should be produced in runelite-client/target/

Applied to files:

  • runelite-api/pom.xml
  • runelite-maven-plugin/pom.xml
  • runelite-jshell/pom.xml
  • runelite-client/pom.xml
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/test/java/**/*.java : Write JUnit 4 tests (junit:4.12) under matching package paths

Applied to files:

  • runelite-api/pom.xml
  • runelite-client/pom.xml
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/main/java/net/runelite/client/plugins/microbot/**/*.java : Place all gameplay automation code under runelite-client/src/main/java/net/runelite/client/plugins/microbot

Applied to files:

  • runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java
  • runelite-client/pom.xml
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/main/java/net/runelite/client/plugins/microbot/**/*.java : Prefix configuration interfaces with the plugin name (e.g., ExampleConfig) within microbot plugins

Applied to files:

  • runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to **/pom.xml : Target Java 11 via maven-compiler-plugin using <release>11</release> in all module POMs

Applied to files:

  • runelite-maven-plugin/pom.xml
  • pom.xml
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotPlugin.java : When adding panel controls or overlays, update the Microbot navigation panel setup in MicrobotPlugin and provide default config values

Applied to files:

  • runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java
📚 Learning: 2025-10-16T17:14:29.778Z
Learnt from: CR
Repo: chsami/Microbot PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-16T17:14:29.778Z
Learning: Applies to runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/**/*.java : Put shared helpers under .../microbot/util

Applied to files:

  • runelite-client/pom.xml
📚 Learning: 2025-08-31T19:19:07.691Z
Learnt from: chsami
Repo: chsami/Microbot PR: 1455
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotVersionChecker.java:112-132
Timestamp: 2025-08-31T19:19:07.691Z
Learning: The Microbot project uses only numeric versioning (e.g., "1.2.3") without any alphanumeric suffixes like "-beta" or "-alpha", so simple integer parsing of version segments is safe.

Applied to files:

  • runelite-client/pom.xml
🧬 Code graph analysis (3)
runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java (1)
runelite-api/src/main/java/net/runelite/api/ScriptID.java (1)
  • ScriptID (27-500)
runelite-api/src/main/java/net/runelite/api/gameval/InterfaceID.java (1)
runelite-api/src/main/java/net/runelite/api/gameval/DBTableID.java (1)
  • SailingCrew (13346-13398)
runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java (1)
runelite-client/src/main/java/net/runelite/client/plugins/gpu/VAO.java (1)
  • VAO (37-137)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build
🔇 Additional comments (13)
runelite-client/src/main/scripts/OptionsPanelZoomMouseListener.hash (1)

1-1: No issues detected.

Hash update is consistent with the zoom listener script changes reflected in the PR.

runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java (1)

751-751: LGTM!

Sanitizing the NPC name by removing formatting tags is consistent with the pattern used elsewhere in the codebase (e.g., line 1241 for pickpocket targets). This ensures cleaner loot record data and more reliable name-based lookups.

runelite-api/src/main/java/net/runelite/api/hooks/DrawCallbacks.java (1)

159-161: LGTM! Signature now consistent with drawDynamic.

The addition of orient, x, y, z parameters aligns drawTemp with the existing drawDynamic method signature pattern (line 155), improving API consistency.

runelite-api/src/main/java/net/runelite/api/ObjectID.java (1)

1729-29254: LGTM! All constant declarations follow the established pattern.

All new ObjectID constants are properly formatted with unique ID values in ascending order, consistent naming conventions, and adherence to coding guidelines.

runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java (1)

229-230: LGTM!

The two new spinning wheel animation variants are handled consistently with all other skilling animations, properly falling through to the shared resetTimers() logic.

runelite-api/src/main/interfaces/interfaces.toml (1)

234-250: No changes are visible from this branch's perspective, so I cannot verify the offset pattern claim through automated inspection. Manual verification is needed to confirm that the offset differences between sections are intentional.

runelite-api/src/main/java/net/runelite/api/gameval/VarbitID.java (3)

5935-5935: LGTM!

The constant addition follows proper naming conventions and fits logically in the sequence.


6124-6124: LGTM!

The constant properly introduces the first sailing crew member flag, following naming conventions and fitting logically in the sequence.


12500-13839: LGTM! Extensive but well-organized sailing system constants.

The large addition of sailing-related constants follows consistent naming conventions and logical patterns throughout. The constants are properly grouped by functionality (charting, boats, crew, facilities) and values increment sequentially without conflicts.

runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java (1)

86-89: Logic looks consistent.

The zoom limit management implementation appears correct. The flow of fetching default values from the client, applying config-based adjustments, and responding to script events is logically sound.

Also applies to: 147-147, 180-180, 202-221, 266-273, 290-290, 433-433

runelite-api/src/main/java/net/runelite/api/NullObjectID.java (1)

1206-1212: LGTM!

All constant additions follow the correct pattern with values matching their identifiers, proper indentation with tabs, and numeric ordering. No inconsistencies detected.

Also applies to: 27267-27275, 29862-31269

runelite-api/src/main/java/net/runelite/api/NpcID.java (1)

12456-12456: Duplicate constant name causes a compile-time error.

GULLIVER is defined twice with different IDs (14932 and 15059). Java forbids duplicate field names; this won’t compile. Align with the existing suffix pattern.

Apply this diff to fix:

-	public static final int GULLIVER = 15059;
+	public static final int GULLIVER_15059 = 15059;

Also applies to: 12552-12552

⛔ Skipped due to learnings
Learnt from: Voxsylvae
Repo: chsami/Microbot PR: 1415
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/MicroAgilityPrePostScheduleRequirements.java:218-226
Timestamp: 2025-08-25T06:50:43.493Z
Learning: In MicroAgilityPrePostScheduleRequirements.java, the deprecated ItemID constants NATURERUNE and FIRERUNE should be replaced with NATURE_RUNE and FIRE_RUNE respectively when using the gameval package ItemID class.
Learnt from: Voxsylvae
Repo: chsami/Microbot PR: 1415
File: runelite-client/src/main/java/net/runelite/client/plugins/microbot/agility/MicroAgilityPrePostScheduleRequirements.java:7-7
Timestamp: 2025-08-25T06:45:09.673Z
Learning: Always use game ID classes from net.runelite.api.gameval package (like ItemID, ObjectID, NpcID) instead of the deprecated classes in net.runelite.api package. The gameval package contains the new, preferred classes while the old ones in the direct api package are deprecated.
runelite-api/src/main/java/net/runelite/api/NullItemID.java (1)

12192-12192: LGTM - Auto-generated constants are consistent.

The additions follow a consistent pattern with constant names matching their values. Since this is an auto-generated file, the declarations are correct.

Also applies to: 16124-16679

Comment on lines +78368 to 78370
* Stalactite
*/
public static final int DRAGON_SLAYER_QIP_STAGAMITE = 25083;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistency between constant name and comment.

The constant name DRAGON_SLAYER_QIP_STAGAMITE suggests a stalagmite (grows from the ground), but the comment now says "Stalactite" (hangs from the ceiling). These are geological opposites, so either the constant name or the comment should be corrected to match the actual in-game object.

int itemId = wItem.getItemId();
// Doses: 1234 or Quantity: 1234
int doses = Integer.parseInt(wDoses.getText().split(": ")[1]);
int doses = Integer.parseInt(wDoses.getText().split(": ")[1].replace(",", ""));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Inconsistent error handling compared to similar parsing operations.

Other quantity parsing in this file (lines 526-533, 554-563) uses try-catch blocks to handle ParseException, but this direct Integer.parseInt() call lacks error handling. Additionally, the split(": ")[1] assumes the array has at least 2 elements without validation. If the widget text format is unexpected, this will throw an uncaught exception.

Apply this diff to add consistent error handling:

-			int doses = Integer.parseInt(wDoses.getText().split(": ")[1].replace(",", ""));
+			String[] parts = wDoses.getText().split(": ");
+			if (parts.length < 2)
+			{
+				log.warn("Unexpected potion dose text format: {}", wDoses.getText());
+				continue;
+			}
+			
+			int doses;
+			try
+			{
+				doses = Integer.parseInt(parts[1].replace(",", ""));
+			}
+			catch (NumberFormatException e)
+			{
+				log.warn("Failed to parse potion doses from: {}", parts[1], e);
+				continue;
+			}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
int doses = Integer.parseInt(wDoses.getText().split(": ")[1].replace(",", ""));
String[] parts = wDoses.getText().split(": ");
if (parts.length < 2)
{
log.warn("Unexpected potion dose text format: {}", wDoses.getText());
continue;
}
int doses;
try
{
doses = Integer.parseInt(parts[1].replace(",", ""));
}
catch (NumberFormatException e)
{
log.warn("Failed to parse potion doses from: {}", parts[1], e);
continue;
}
🤖 Prompt for AI Agents
In
runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java
around line 705, the direct call to Integer.parseInt on
wDoses.getText().split(": ")[1] lacks the same defensive parsing used elsewhere;
wrap this extraction and parsing in a try-catch like the other blocks, first
validate that split(": ") yields at least 2 elements, trim and remove commas
from the token, attempt Integer.parseInt, and on NumberFormatException or
ArrayIndexOutOfBoundsException set doses to a safe default (e.g., 0) and
log/debug the failure so the plugin doesn't throw on unexpected widget text.
Ensure the new code mirrors the error handling style used in lines 526-533 and
554-563.

Comment on lines +81 to +90
@ConfigItem(
keyName = "smoothBanding",
name = "Remove color banding",
description = "Smooths out the color banding that is present in the CPU renderer.",
position = 2
)
default boolean smoothBanding()
{
return true;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Duplicate position value creates ambiguous UI ordering.

The new smoothBanding config item uses position = 2, but hideUnrelatedMaps (line 60) already occupies that position. Additionally, both drawDistance (line 49) and expandedMapLoadingZones (line 74) share position = 1. These collisions will cause unpredictable ordering in the configuration UI.

Assign a unique position value to resolve the conflict. Consider using position = 6 (currently unused):

 	@ConfigItem(
 		keyName = "smoothBanding",
 		name = "Remove color banding",
 		description = "Smooths out the color banding that is present in the CPU renderer.",
-		position = 2
+		position = 6
 	)
 	default boolean smoothBanding()
 	{
 		return true;
 	}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@ConfigItem(
keyName = "smoothBanding",
name = "Remove color banding",
description = "Smooths out the color banding that is present in the CPU renderer.",
position = 2
)
default boolean smoothBanding()
{
return true;
}
@ConfigItem(
keyName = "smoothBanding",
name = "Remove color banding",
description = "Smooths out the color banding that is present in the CPU renderer.",
position = 6
)
default boolean smoothBanding()
{
return true;
}
🤖 Prompt for AI Agents
In
runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPluginConfig.java
around lines 81 to 90, the new ConfigItem smoothBanding() uses position = 2
which conflicts with hideUnrelatedMaps at line 60 and there are other
collisions: drawDistance (line 49) and expandedMapLoadingZones (line 74) both
use position = 1; change smoothBanding() to use a unique unused position
(suggest position = 6) so all ConfigItem position values are distinct and UI
ordering is deterministic.

Comment on lines 38 to +44
iload 0
iconst -1
if_icmpne LABEL19
jump LABEL23
LABEL19:
if_icmpne LABEL21
jump LABEL25
LABEL21:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Redundant item id check - unreachable code path.

At LABEL17, the check for item id == -1 (lines 40-44) is redundant. The only way to reach LABEL17 is through LABEL6→LABEL12→LABEL17, and at LABEL6 (lines 26-29) we already verified that item id != -1 (otherwise we would have returned 0 at LABEL10). This means the conditional at line 42 will always jump to LABEL21, making the jump to LABEL25 at line 43 unreachable dead code.

🤖 Prompt for AI Agents
In runelite-client/src/main/scripts/BankSearchFilter.rs2asm around lines 40 to
44, the conditional that checks `item id == -1` is redundant and creates an
unreachable jump to LABEL25; remove the if_icmpne/iconst/.../jump sequence and
replace it with a direct jump to LABEL21 (or simply fall through to LABEL21) and
delete LABEL25 if it becomes unused to restore a correct, simplified control
flow.

@chsami chsami merged commit 7a9f52d into main Nov 5, 2025
2 checks passed
This was referenced Nov 19, 2025
@coderabbitai coderabbitai bot mentioned this pull request Dec 10, 2025
@coderabbitai coderabbitai bot mentioned this pull request Dec 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants