0.7.0
Curse Maven Snippet
What's new
CatFrame - 0.7.0
What is changed?
Change version number from previous to 0.7.0
➕Add:
- Add atlas degrade guard, decode diagnostics and GL state hygiene: skip atlas when >50% sprites fail to decode (vanilla fallback), log real decode exceptions with full ResourceLocation, publish iconName alias keys and query them in TextureSlots.findIcon to avoid vanilla-UV space mismatch, restore GL_UNPACK_ALIGNMENT after upload
- Implement M1 custom texture atlas system: add CatSprite (IIcon) / CatStitcher (26.1.2 bin packing) / CatAtlas (CPU assembly + GL upload) / CatAtlasManager (orchestration + publish + fallback); hook CatAtlasManager.stitch() into TextureStitchEvent.Pre after ModelManagerDataLoader.init(); dual-Post idempotent publish into textureIcons before bake barrier; CatSprite branches in TextureSlots.isBlockAtlas and ItemModelGenerator.bakeSideFaces; rebind built-in render groups to catframe:atlas/blocks|items on upload success
- add bingo plushy, modify bluey plushy item
🔧Fix:
- Fix iron bars Z-fighting with vanilla-style multipart (post only when isolated); change bow use_duration to raw elapsed ticks with range_dispatch scale 0.05 so the pull animation reaches pulling_1/pulling_2; add powered property (meta bit 8) to comparator state definitions, mirror comparator torch geometry to match 1.7.10 RenderBlocks (single output torch at north, sunken in compare mode; pair input torches at south, lit when powered), add template_comparator_subtract, fix comparator side texture to stone_slab_side and expand both comparator blockstates to 16 facing/mode/powered variants with corrected rotation table; include prior torch/hopper/ladder/rail asset cleanups
- Fix missingno sprite in CatSprite.missing(): use 8x8 cells (x>>3) forming the vanilla 2x2 checkerboard (magenta top-left/bottom-right, black otherwise) instead of the previous 2px-cell 8x8 grid with inverted colors
- Add minecraft namespace fallback for unqualified texture references in ModelResolver.resolveTextureVariables and prefix grass_block.json textures with minecraft: to fix missingno rendering
- Add camera-distance painter sorting for translucent world batches (W1): sort blend groups far-to-near in flushWorldGroup, stable TimSort with per-submit square distance; fix stale UniformRenderPipeline JavaDoc; add design doc covering architecture, lookup semantics, SWOT and file index
- Make the CatAtlas the single texture source for world rendering too: BLOCK_WORLD submissions are now collected into a thread-safe WorldRenderBuffer and flushed at RenderWorldEvent.Post by the new FeatureRenderDispatcher.flushWorld, which binds the CatAtlas (block_atlas_solid/translucent) and merges all submissions into one Tessellator batch per group (2 draw calls per frame) with GL state isolated via push/pop. resolveWorldIcon is removed - world quads sample CatSprite UVs directly against the CatAtlas, so a texture-table miss renders the CatAtlas missing purple-black square exactly like item rendering; the destroy overlay keeps its vanilla atlas batch (destroy_stage icons live in the vanilla atlas space). Translucent blocks are grouped by getRenderBlockPass().
- Fix unresolved textures rendering as garbled UVs instead of missingno: findIcon in TextureSlots now accepts only CatFrame data-driven CatSprites from the texture table, skips leftover vanilla values (missingImage/empty sprites whose UVs belong to the vanilla atlas space), and drops the vanilla-atlas fallback entirely. A table miss now returns the owning CatAtlas built-in missing sprite (purple-black square, CatAtlas-space UVs) directly, so item rendering bound to a CatAtlas samples the true missingno.
- Remove the texture compatibility layer: atlas JSON definitions are now the single source of truth. Drop resolveActualPath candidate probing, canonical/alias dual-key publishing and model-driven forced stitching; model references must match definition outputs literally. Any unresolved texture now returns missingno (vanilla missing semantics) with an explicit texture-error report, never transparent or auto-corrected. Every atlas keeps a built-in missing sprite for final fallback; vanilla atlas key conversion (toVanillaBaseKey) is restored to plain 1.7.10 base-path semantics.
- Refactor: retire the hard-coded texture prefix compatibility layer (resolveTextureName). CatAtlas identity is now data-driven via CatSpriteLoader.resolveActualPath (candidate PNG probing, cached per stitch); merge/publish keys are actual resource paths with dual-key publication (canonical + every original spelling); vanilla registry/query keys derive from the resolved path (toVanillaKey) with a lightweight base-key fallback (toVanillaBaseKey); TextureSlots.findIcon drops the alias branch; LeavesGraphicsExtension reuses toVanillaKey; reformat compass.json
- Fix model texture references to real 1.7.10 vanilla names (rails, crops, stems, cocoa, stairs, pressure plates, dispenser vertical, grass snow, wooden hoe, tripwire hook, writable book, dark oak sapling), fix bingo texture slot #0 to #bingo, reformat compact item/block jsons, remove orphan item models (dye, enchantment_table, end_frame)
- Fix item icon leaks from singular/plural texture reference races: skip leftover vanilla missingImage in TextureSlots.findIcon level-1 lookup, publish normalized alias keys and normalized spritesByIconName reverse-lookup keys in CatAtlasManager so failed decodes no longer collapse onto the missingno key
- Fix item-model bake race: normalize element rotation into local vars in JsonModelBake.bakeElement (stop mutating the shared cached Element.rotation, null-guard axis) and isolate per-task failures in AsyncBakePipeline so one bad model no longer discards the whole bake round. Prevents item models from vanishing or rendering garbled geometry.
- Fix ItemBlock item-render UV mismatch: findIcon prefers CatAtlas CatSprite before vanilla fallback (CatAtlasManager.findSprite reverse map + warn logs), leaves _opaque override uses CatSprite in item phases, raise BakedModelCache cap 2048->3200, fix items/log.json fallback to oak_log
- Fix bingo model texture refs: replace Blockbench absolute paths with namespaced catframe:items/bingo so the sprite resolves to assets/catframe/textures/items/bingo.png instead of falling to minecraft namespace (missingno)
- Fix directory source prefix to plural form (blocks/, items/) matching 1.7.10 model references: per Wiki the prefix is prepended verbatim, so source=items + prefix=items/ yields minecraft:items/apple; also sync AtlasDecoder javadoc (atlases/ dir) and design doc
- Align atlas definitions with the vanilla Wiki format: definitions live at assets/<ns>/atlases/<id>.json (plural dir) and atlas ids become minecraft:blocks / minecraft:items; rewrite unstitch source to the divisor_x/y + regions[] form (per-region sprite/x/y/width/height block coords); rewrite paletted_permutations to plain namespace-id permutation values plus separator; fix PalettedPermutationsSource readPixels 1.7.10 plural-folder fallback; delete the never-consumed catframe:item ghost definition; sync design doc
- Implement M2-M4 of custom texture atlas: AtlasDecoder sources (directory/filter/single/unstitch/paletted_permutations), ResourcePackEnumerator pack traversal, CatSpriteLoader parallel PNG+mcmeta animation decode, CatSprite frame state machine, CatAtlas animation region glTexSubImage2D re-upload with mip rebuild, CatAtlasManager definition-driven merge (model-first dedup + filter) and tick hook in ClientOverlayHandler; singularize definition JSON prefixes
- Fix item rendering bilinear blur: CatAtlas MAG_FILTER to GL_NEAREST, add CPU box-filter mipmap chain with GL_NEAREST_MIPMAP_LINEAR min filter, set GL_TEXTURE_MAX_LEVEL
- Fix world-rendering UV space mismatch: publish replaced baked quad icons with CatSprites (CatAtlas UV space) while BLOCK_WORLD/BLOCK_DESTROY batches still bind the vanilla blocks atlas via flushInline, causing blurred/blank textures. Keep a vanilla sprite snapshot in VanillaTextureTracker before publish and remap CatSprite icons back to the vanilla sprite space in QuadWriter.writeBlockQuads (resolveWorldIcon)
❗❗❗Deprecated:
- remove the compact base to the catframe compact mod
- Migrate all legacy UI component render entries to the Renderable-based pipeline: replace deprecated render(int,int,float) overrides with renderWidget(GuiGraphicsExtractor,…) across AbstractButton/Button/TabButton/CyclingButton/CyclingArea/GuiButtonAdapter/AbstractSelectionList/ScrollableLayout/WaitingPanel/TitleOverlay/ActionBarOverlay/contextual bar components and the Toast system; make Toast extend Renderable, drive toasts via extractRenderState in ToastManager, propagate GuiGraphicsExtractor through renderBackground/renderListItems/renderItem hooks and drop the deprecated render bridge in AbstractComponent
- Remove deprecated BLOCK_GUI and ITEM_HAND render phases: drop dead GUI branches in QuadWriter.writeBlockQuads and UniformRenderPipeline.renderBlockQuads, simplify isBlockPhase/isItemGlintPhase/isHandPhase/getDisplayKey, remove BLOCK_GUI tint case, update stale comments/examples; also include build-touched gradle.properties modVersion bump
- Delete the compatibility layer to the compat mod
- Remove the legacy
block/foo/item/foo/blocks/foo/items/foocompatibility util layer
Notes
Full Changelog: https://github.com/song682/CatFrame/commits/v0.7.0
⚠️ Warning: This version introduced the modern data-driven texture map and stitch. And make it as the only source of all the model of item and the block world render. May cause OptiFine / Angelica / SwanSong / ShaderMods broke with this wersion.