Tags
Creators
Details
All versions
0.6.0
Release
0.6.04 days ago 7
Compatibility
Minecraft: Java Edition
1.7.10
Platform
Forge
Supported environments
Client-side
Client and server
Required content
Changes
CatFrame - 0.6.0
What is changed?
Change version number from previous to 0.6.0
➕Add:
- add ITEM_MODEL data componets
- Remove the tooltips features
- Add missing block/piston.json and block/sticky_piston.json (parent block/cube, piston_top_normal / piston_top_sticky) which caused the item form to fall back to BuiltinMissingModel.
- Add connection-direction model rendering for redstone_wire (1.7.10 renderBlockRedstoneWire)
- line / line_ns: exact-match straight states (EW uses line texture; NS adds face rotation 90 so the 4px bar runs along x, matching i1==1/2 UV mapping)
- VanillaStateDefinitions: REDSTONE_UP_* properties; registerRedstoneWire now connectionMultipart with 8 dynamic props, metaCodec keeps power only
- Add full model rendering support for redstone blocks
- New PISTON_FACING / EXTENDED / STICKY properties
- Rework iron_bars item model to match the glass_pane pattern: new models/item/iron_bars.json (parent item/generated, layer0 = 1.7.10 blocks/iron_bars texture) and items/iron_bars.json now points to minecraft:item/iron_bars instead of the 3D block/iron_bars_post, giving a flat 2D item icon consistent with glass_pane.
- items/wooden_button.json added (was wooden_botton.json typo), old file deleted
- Add unified GlintPass to the deferred render pipeline, restoring enchantment glint for all CatFrame-managed items across every phase (GUI, first/third person hand, dropped, item frame). Forge disables vanilla glint for custom IItemRenderer paths ('modders must handle themselves'), so the pipeline now replays each submit's full quad geometry (including solid-color side quads) with the glint texture, GL_EQUAL depth overlay, additive blending and dual scrolling texture-matrix animation (3000ms/4873ms, -50deg/+10deg, scale 8.0 aligned with 26.1.2 GlintTexturingStateShard). The legacy fullscreen-quad glint in GuiGraphicsExtractor is removed; hasFoil (ENCHANTMENT_GLINT component override + hasEffect fallback) moves to GlintPass as the shared foil predicate.
- Add IItemStateProvider.getPropertyDefinitions() optional declaration hook mirroring IBlockStateProvider.getStateDefinition(): items declare namespaced custom properties (modid:name -> provider) in place, auto-registered via CatItemProperties during ModelManagerDataLoader.init() discovery. Invalid declarations (bare/empty keys, null providers) are skipped with warnings without aborting discovery.
- Add CatItemProperties facade as the official third-party item property registration entry: enforces modid:name namespacing, materializes defaults before external registration so overrides survive lazy registerDefaults, and provides a validated override() for existing properties. ItemPropertyRegistry.register now warns when an existing provider is replaced.
- Abstractify the Edit box- Add l10n for Welcome Toast
- Add door blockstates.
- Add fallback security.
- Add BlockstateKeyValidator: validates variant keys (property=value check groups) against the block's typed CatStateDefinition. Unknown property logs Unknown blockstate property: '<prop>'; invalid value logs Unknown value: '<value>' for blockstate property: '<prop>' [allowed values]. Any invalid group invalidates the whole variant key and its model mapping, replacing it with builtin/missing (MissingNo). Wired into ResidentStateModel (build-time + redirect targets), RenderDispatcher CatBlockState path, and ModelManagerDataLoader.loadStateProviderBlock. Legacy keys (normal / meta=N / number / no '=') are skipped.
- Add a progress bar on the forge init.
- Remove the second pass of solidColor without texture rendering (writeSolidColorQuads + FeatureRenderDispatcher call), backface culling solves the problem of translucent side penetration
- bake: add blocking barrier for stitch-time prebake
- State Core Layer (Purely new, does not break existing paths)
- New ResidentStateModel: A unified resident implementation that merges the three branches—variants, multipart, and dynamic property resolution—with lazy baking delegated to BakedModelCache.
- New CatModelSpec + CatModels chained registration API (register().states().mapper().dynamic().itemFromBlockstate() + materialize()), stored in the SPECS resident table.
- Add the base of defalut catframe ui screen.
- Add the inactive message that a load of components needed.
- Add the overlay can pausing screen
- New VanillaBlockResolvers: Migrate in-world calculations for stair corners (STAIRS) and glass pane/iron railing connections (PANE) to DynamicPropertyResolver.
🔧Fix:
- Fix redstone wire wall-climb rendering and piston item models
- Fix IndexOutOfBoundsException in registerPistons metaCodec
- CatStateDefinition.Builder.create() pre-fills resolvedByMeta[0..15] and calls the metaCodec for every meta value. The piston codec indexed PISTON_FACING.getValues() with meta & 7 (0-7) but the property only has 6 values (EnumFacing 0-5), so meta 6/7 crashed pre-init with 'Index: 6, Size: 6'.
- VanillaBlockResolvers.REDSTONE_WIRE: isPowerProviderOrWire replica (redstone wire always connects; repeaters/comparators only at facing/back via rotateOpposite; others via canConnectRedstone), horizontal + downhill (side -1) + uphill (neighbor full-cube + wire above) flags, up_* props per 1.7.10 2422-2608
- RedstoneWireTintProvider: f1/f2/f3 color from power (0x800000 fixed colorMultiplier cannot vary), registered in ClientProxy
- redstone_lamp_lit: new model fixing broken reference from items/redstone_lamp_lit.json (was pointing to non-existent model)
- Complete command_block and lit_furnace model support: command_block model upgraded from cube_all to the 6-face cube layout (north=command_block_front arrow, south=command_block_back, up/down/sides=command_block) matching 1.7.10 vanilla; furnace model texture fixed from nonexistent furnace_front_off to 1.7.10 furnace_front; new items/command_block.json and items/lit_furnace.json point at their 3D block models for inventory/GUI/hand rendering like furnace.
- Unify iron_bars and nether_brick_fence to the modern blockstate pipeline and fix fence_gate: new blockstates/iron_bars.json (10-case multipart: post + 4 side + 4 cap + post_ends), new blockstates/nether_brick_fence.json (5-case multipart) with new nether_brick_fence_post/side/inventory models and item models; registered both in VanillaStateDefinitions via connectionMultipart (BlockPane/BlockFence dispatch already handled by PANE resolver); fence_gate blockstate rewritten: open=true now selects oak_fence_gate_open, facing rotation aligned to 1.7.10 BlockDirectional order (south=0, west=90, north=180, east=270) using the 1.21 oak_fence_gate models.
- Fix cobblestone_wall and fence in-world connection rendering: PANE resolver now dispatches by block type (BlockWall.canConnectWallTo / BlockFence.canConnectFenceTo, both non-BlockPane in 1.7.10); wall registered as connectionMultipart with a 10-case multipart blockstate (2 materials x post + 4 side, when matches variant+direction); new blockstates/fence.json (4 side + isolated post) and fence connectionMultipart registration.
- Fix stained glass pane top textures disappearing (transparent): CatModels redirects are now synced into blockstateRedirects, so ModelManagerDataLoader.init() preloads the 16 per-color blockstates before the atlas stitch and collects their pane edge/glass textures into pendingTextures. Also drop the unused model_mappings.json.
- Fix skull item rendering and button/dandelion model issues
- items/skull.json: fix 'caframe:meta' typo -> 'catframe:meta' (select never matched, all skulls fell back to missing texture); correct meta mapping per 1.7.10 ItemSkull (0=skeleton, 1=wither, 2=zombie, 3=steve, 4=creeper); fallback -> skeleton_head; drop invalid case 5
- models/block/wood_button(+_pressed).json: fix self-referencing parent (circular dependency) -> block/button, planks_oak texture
- Move the unified enchantment glint pass from standalone GlintPass into GuiGraphicsExtractor (glintApplicable/hasFoil/renderEnchantmentGlint), per the established convention that glint lives in GuiGraphicsExtractor; FeatureRenderDispatcher now delegates there and GlintPass.java is deleted. Also fix glint animation running 64x too fast: the texture matrix applies scale(8) before translate, so the scroll amplitude was amplified 8x on top of the vanilla 8.0 amplitude; new GLINT_SCROLL_AMPLITUDE = 1/UV_SCALE yields exactly 1 texture unit per cycle (seamless wrap), matching vanilla 1.7.10 ItemRenderer flow speed.
- Fix fishing_rod.json: use minecraft:fishing_rod/cast property instead of using_item (rod cast never triggers isUsingItem), remove invalid fallback field from condition node
- Flip vertical side-face winding to outward (LEFT->WEST, RIGHT->EAST): vanilla 26.1.2 winds them inward relying on no-cull cutout rendering, which our culled fixed pipeline rejects, making east/west extrusions invisible
- Migrate anthor_example_of_bluey_plushy.json from exact_match to select, merging both hand contexts into a single multi-value when array. Also fix the case keys: display_context evaluates to uppercase enum names (RenderPhase.name()), so the old lowercase keys never actually matched (unnoticed since every branch pointed to the same model).
- fix the potion Icon
❗❗❗Deprecated:
- Remove the tooltips features
- ModernItem: drop default setHasSubtypes(true), deprecate dual-model API (inventoryModelPath/handModelPath/setModels/hasDualModels), document setFull3D() as consumed by RenderJsonItemModel.computePreTransform RenderBiped branch; RenderPhase: deprecate BLOCK_GUI in favor of ITEM_GUI; block models: align command_block/furnace/piston/sticky_piston parents to high-version structure
- Harden fishing_rod/cast property: also check fishEntity.isDead to avoid stale ghost-cast state when hook self-removes without clearing the field
- Retire the non-wiki ExactMatchNode from the item-state decision tree. Migrate the last two users (bluey_plushy display_context JSONs) to minecraft:select with when arrays, rebuild ModernItem's dual-model dispatch on SelectNode with grouped when sets, drop the exact_match deserialization branch, and remove the ExactMatchNode evaluation/tint/transformation walks from ItemStateModel. In-game verification of the prior select+catframe:meta migration passed before this removal.
- assets: drop ender_chest/enchanting_table mappings, reorg mixin config, tweak item models
- Remove ender_chest and enchanting_table from NamespaceLoadTask and model_mappings.json; move MixinTextureMap/MixinGuiScreen into the common 'mixins' section of mixins.catframe.json; adjust book_and_quill and handheld item model JSON.
- ModelRegistry.getRegisteredItemModel no longer force-registers builtin/missing (+IItemRenderer) for unregistered ItemBlocks. It now returns null for any item lacking an explicit registration, so block items fall back to vanilla rendering. This aligns the method with RenderJsonItemModel's documented contract and the strategy-B policy, and removes the landmine where any queried ItemBlock (e.g. via a stray model_mappings entry) was permanently hijacked into the purple-black missingno sprite. Updated class/method javadoc; dropped now-unused ItemBlock import.
- Remove the private uildVariantKey from StateProviderBlockModel and use RenderDispatcher.buildVariantKey instead, consolidating three duplicates into one.
- Removed 7 dead code classes:
Notes
Full Changelog: https://github.com/song682/CatFrame/compare/v0.5.0...v0.6.0
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:usS1skNn"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lSH4nVom:usS1skNn"
}


