Tags
Creators
Details
All versions
0.6.5
Release
0.6.54 days ago 9
Compatibility
Minecraft: Java Edition
1.7.10
Platform
Forge
Supported environments
Client-side
Client and server
Required content
Changes
CatFrame - 0.6.5
What is changed?
Change version number from previous to 0.6.5
➕Add:
- Add group-claim SPI: IRenderGroupHandler (claim + flush with RenderSubmitView) in model.render.api with OIT boundary contract (collector/executor/gatekeeper, inline never claimable, background-thread-zero-GL), RenderGroupHandlerRegistry with slot arbitration snapshot, FeatureRenderDispatcher extracts flushGroup and falls back to built-in path on no-handler/exception
- Replace RenderType enum with runtime RenderTypeRegistry (CopyOnWriteArrayList + volatile sorted snapshot, explicit sortKey 0/1/2/3 preserving flush order), RenderSubmit.type now RenderTypeKey entry reference, SubmitNodeStorage EnumMap to HashMap keyed by registry entries, adapt FeatureRenderDispatcher/UniformRenderPipeline/RenderCommandBuffers
- Systemize render extension chain with priority contract (DEFAULT_PRIORITY=0, BUILTIN_PRIORITY_BASE=-1000, stable sorted insert) and per-extension Throwable isolation in ModelRenderRegistry; ThreadLocal state in DisplayTransform/GuiLight/Tint extensions; ConcurrentHashMap data sources (textureIcons, spriteCache, stateBlockData, loadedItemStates, ModelRegistry registries, LeavesGraphics maps); drop redundant bindTexture in flushInline; add isEscapeKeyPressed/isSpaceKeyPressed to KeyTypedEvent
- Add section 8: GuiGraphicsExtractor dependency graph review (DC1-DC7) -- cover 19 dependents and 18 imports, identify bidirectional coupling with FeatureRenderDispatcher, MATRIX_BUFFER duplication, ItemGuiDrawer abstraction inversion, TooltipComponent silent discard, hasFoil hot-path NBT chain, EntityPipRenderer scissor contract drift, and OversizedItemPipRenderer empty shell delegation
🔧Fix:
- Add ItemPhysic compat: replay its physical drop rotation in RenderJsonItemModel ENTITY render while keeping CatFrame JSON model and ground display transform; new compact.itemphysic.ItemPhysicCompact resolves ClientPhysic.tick/ItemDummyContainer.rotateSpeed/ServerPhysic.getFluid reflectively with zero compile-time dependency
- Fix destroy decal UV orientation in QuadWriter: vertical faces now use V = 16 - y16 (vanilla binds V(0) to the top edge, previously upside down) and NORTH/EAST faces flip U (16 - x16 / 16 - z16) so the decal wraps continuously around the block perimeter, matching vanilla renderFace semantics
- Add BLOCK_DESTROY phase with destroy overlay rendering: BlockDestroyExtension (full-bright white decal via ThreadLocal icon injection), block-space decal UV projection in QuadWriter, BLOCK_ATLAS_DESTROY render type registration, resolveBlockModel extraction plus renderBlockDestroy in RenderDispatcher, renderBlockUsingTexture mixin interception, and GuiLightExtension gating on the destroy pass; bump mod version to 0.6.5-ThreadSafe
- Add block destroy texture rendering for CatFrame pipeline: new BLOCK_DESTROY phase and BlockDestroyExtension (icon override, full brightness, white color), block-space projected UV branch in QuadWriter, renderBlockDestroy in RenderDispatcher sharing the resolved model paths, and MixinRenderBlocks injection into renderBlockUsingTexture to intercept the vanilla destroy pass
❗❗❗Deprecated:
- Remove ItemPhysic crash-on-load detection (revert of the rejectItemPhysic part of 2933964d): drop CompactBase.rejectItemPhysic()/classExists and its preInit call in CatFrame; keep the ItemPhysicCompat removal intact. Compatibility with the Kotmatross Mixin fork is deferred to a future combined plan
- Revert ItemPhysic compat (6e7c007c) and reject the mod outright: CompactBase.rejectItemPhysic() crashes in CatFrame.preInit when ItemPhysic is loaded (Loader probe + class-existence fallback) since its ASM doRender takeover structurally conflicts with CatFrame's IItemRenderer dropped-item render
Notes
Full Changelog: https://github.com/song682/CatFrame/commits/v0.6.5
Supplementary resources
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:lSH4nVom:KkbqKDFP"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lSH4nVom:KkbqKDFP"
}


