Conversation
- render checkerboards with a cached tiled shader - skip unnecessary image clipping and use linear sampling - support callback removal and non-blocking surface submission
[skip-native-auto]
[skip-native-auto]
…ding [skip-native-auto]
[skip-native-auto]
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 296c6ad52a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| @JvmStatic | ||
| @JvmOverloads | ||
| fun drawText(text: String, pos: Vec3, scale: Float = 1f, backgroundBox: Boolean = false, increase: Boolean = false, seeThrough: Boolean = false, translate: Boolean = true) { |
There was a problem hiding this comment.
Honor the requested text background
When callers pass backgroundBox = true, the argument is never used, so Render3D.drawText renders exactly the same output as when it is false. This regresses the replaced RenderUtils.drawText behavior, which drew the requested background; either configure/draw a background here or remove the unsupported parameter rather than silently ignoring it.
Useful? React with 👍 / 👎.
# Conflicts: # src/main/java/com/chattriggers/ctjs/internal/mixins/EntityRendererMixin.java # src/main/java/com/chattriggers/ctjs/internal/mixins/GuiGraphicsExtractorMixin.java # src/main/java/com/v5/mixins/ChatComponentMixin.java # src/main/java/com/v5/storage/V5MixinStorage.java # src/main/resources/assets/v5/natives/linux/x86_64/V5PathJNI.so # src/main/resources/assets/v5/natives/macos/arm64/V5PathJNI.dylib # src/main/resources/assets/v5/natives/macos/x86_64/V5PathJNI.dylib # src/main/resources/assets/v5/natives/windows/x86_64/V5PathJNI.dll # src/main/resources/v5.mixins.json
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c09d652272
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| private void afterExtract(GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) { | ||
| Render2D.INSTANCE.runPreDrawables(context); |
There was a problem hiding this comment.
Run pre-render callbacks before extracting an open screen
When any Screen is open, both callback sets are now enqueued at the tail of extractRenderStateWithTooltipAndSubtitles. Because the full-screen PIP state intersects the already-extracted screen elements, it is layered above them, so callbacks registered through registerV5PreRender no longer render behind the GUI as the previous renderer's HEAD hook did; enqueue the pre state before screen extraction and leave only normal callbacks at the tail.
Useful? React with 👍 / 👎.
| fun loadImage(path: String): String { | ||
| if (path.isUrl()) return path |
There was a problem hiding this comment.
Start URL downloads from loadImage
When path is an HTTP(S) URL, loadImage returns without caching the image or adding it to pendingUrls; downloads begin only if the caller later invokes drawImage. Consequently, code that explicitly preloads a URL and waits for isImageLoaded(url) will wait forever, and even code that draws later receives no preloading benefit. Schedule the URL download here and make the loaded-state API account for the URL cache.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ba0823f078
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| shadow.draw() | ||
| outline.draw() | ||
| Renderer.drawRect(color, x, y, width, height) | ||
| Render2D.drawRect(x, y, width, height, color.toInt()) |
There was a problem hiding this comment.
Preserve Rectangle rendering outside Skija callbacks
When Rectangle.draw() is called from ordinary CT render triggers such as renderOverlay or guiRender, Render2D.beginSkijaFrame has not installed a canvas, so this inherited drawRect call silently does nothing. The previous implementation rendered through the active DrawContextHolder, and Rectangle remains a public compatibility API; keep a vanilla-context fallback here or route Rectangle through the active GUI extractor so existing rectangles, shadows, and outlines remain visible.
Useful? React with 👍 / 👎.
| val (endX, endY) = when (resolveGradient(direction)) { | ||
| Gradient.TOP_TO_BOTTOM -> x to y + height | ||
| Gradient.TL_TO_BR -> x + width to y + height | ||
| Gradient.BL_TO_TR -> x + width to y - height |
There was a problem hiding this comment.
Anchor bottom-left gradients at the bottom-left corner
For BottomLeftToTopRight, the shader still starts at (x, y) and ends at (x + width, y - height), placing its axis above the rectangle rather than across the requested corners. As a result, the bottom-left and top-right corners do not receive the requested endpoint colors; construct this direction from (x, y + height) to (x + width, y) instead.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 22933c77d7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| //? if <26.2 { | ||
| /*internal fun createSkijaPIP(factoryInput: Any?, pre: Boolean): PictureInPictureRenderer<*> { | ||
| val buffers = factoryInput!!.javaClass.getMethod("bufferSource").invoke(factoryInput) as MultiBufferSource.BufferSource |
There was a problem hiding this comment.
Resolve the 26.1 render buffer without named reflection
On the advertised 26.1.2 build, the PIP factory receives Minecraft's RenderBuffers, but release jars run against intermediary names: the bundled mappings identify this accessor as method_23000, not bufferSource. Consequently this reflective lookup succeeds in a named development environment but throws NoSuchMethodException when the PIP renderers are initialized from a remapped production jar, preventing the new renderer from starting on 26.1.2; use a mapped call/accessor or resolve the method through the mapping API.
Useful? React with 👍 / 👎.
| } | ||
|
|
||
| private class EntitySelectorAccess(private val impl: EntitySelector) { | ||
| private fun field(name: String): Any? = impl.javaClass.getDeclaredField(name).apply { trySetAccessible() }.get(impl) |
There was a problem hiding this comment.
Keep entity-selector access remap-safe
In a remapped production jar, EntitySelector does not expose fields named maxResults, includesEntities, etc.; the repository mappings show intermediary names such as field_10822 and field_10830. Thus every dynamic command using entity() or entities() reaches this helper and throws NoSuchFieldException, whereas the removed mixin accessor was remapped safely. The later reflective isAny/matchesSqr calls have the same problem, so these accesses need mapped accessors rather than named reflection.
Useful? React with 👍 / 👎.
| internal var referenceSystemTime: Long = 0 | ||
| private val heldKeys = mutableSetOf<String>() | ||
|
|
||
| @JvmStatic @Volatile var isFreecam = false |
There was a problem hiding this comment.
Preserve hide-particles during the storage migration
The other former V5MixinStorage controls are migrated into Client, but the hideParticles control and its BlockMixin consumer were deleted without a replacement (a repo-wide search finds no remaining implementation). When the macro enables crop-particle hiding, it can therefore no longer set this state and melon, crop, cactus, and related break particles render normally; migrate this flag and the corresponding particle-cancellation hook along with the other controls.
Useful? React with 👍 / 👎.
💡 Codex ReviewV5Loader/src/main/kotlin/com/chattriggers/ctjs/api/render/Render3D.kt Lines 96 to 97 in 68d28b3 When https://github.com/V5-Client/V5Loader/blob/68d28b3071d7bec557c07a723e6500b5ddc87976/typing-generator/src/main/resources/typings.d.ts#L163-L164 The runtime binds AGENTS.md reference: AGENTS.md:L41-L41 ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4b016dbb98
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -494,25 +250,6 @@ object Renderer { | |||
| } | |||
There was a problem hiding this comment.
Restore drawString's non-GUI rendering fallback
When Render2D.drawString is called from renderEntity, preRenderWorld, or postRenderWorld, withMatrix supplies a matrix stack but those paths do not install a DrawContextHolder; this nullable block is therefore skipped and the method returns without drawing anything. The replaced Renderer.drawString handled this case with Font.drawInBatch, so retain an equivalent fallback for render callbacks that run outside GUI extraction.
Useful? React with 👍 / 👎.
| graphics.drawImage(frame, x, y, null) | ||
| frames += bufferedImage(master) | ||
| if (control.getAttribute("disposalMethod") == "restoreToBackgroundColor") graphics.clearRect(x, y, frame.width, frame.height) |
There was a problem hiding this comment.
Apply restore-to-previous disposal when decoding GIFs
For GIF frames whose disposalMethod is restoreToPrevious, the decoder leaves the rendered frame on master, so the next frame is composited over pixels that should have been reverted. Such animations accumulate stale pixels or trails; preserve the pre-frame canvas and restore it after taking the snapshot for this disposal mode.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ad435787a2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @Inject(method = "lambda$addMainPass$0", at = @At("RETURN")) | ||
| private void afterMainPass(CallbackInfo ci) { | ||
| WorldListener.INSTANCE.triggerRenderLast(); |
There was a problem hiding this comment.
Submit post-world gizmos before finalizing them
On Minecraft 26.2, this RETURN hook invokes triggerRenderLast() only after the main-pass lambda has finalized and rendered its gizmo collection, while Render3D now implements every primitive through Gizmos. Consequently, calls made from the supported postRenderWorld trigger are submitted too late to appear; the 26.1 mixin correctly hooks the finalizeGizmoCollection() invocation instead, and the 26.2 hook should use the same ordering.
Useful? React with 👍 / 👎.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
See V5-Client/V5#91 for description