Tags
Creators
Details
All versions
0.10.10
Release
0.10.1010 hours ago 22
Compatibility
Minecraft: Java Edition
1.7.10
Platform
Forge
Supported environments
Client and server
Required content
Any compatible version
Changes
CatFrame - 0.10.10
What is changed?
Change version number from previous to 0.10.10
➕Add:
- Phase 4c: finish per-property meta byte-mapping migration. Add TableMetaProperty<V> (non-linear raw->value lookup table + fallback) for String-valued blocks. Restate remaining vanilla positional MetaCodec sites to distributed byte mapping: sand/wall (clamp), dirt/tallgrass/quartz_block (raw tables), yellow_flower (constant), and both comparators (facing+mode+powered bit fields). Decodes are byte-identical to the prior lambdas.
- Stage 4 (parts A+B) of blockstate refactor: restate VanillaStateDefinitions using property-level metadata byte mapping, removing the internal positional MetaCodec lambdas. Part A: linear/bit-field/clamp blocks (base pillar/stairs/slab, logs, single-variant clamps, stone/wooden/double slabs, anvil, red_flower, double_plant, trapdoor, door, cauldron, redstone wire, repeaters, pistons, fence gate, pumpkins) now use MappedMetaProperty/BooleanFlagProperty/EnumMetaProperty<Direction.Axis> so each property decodes its own bit field (no .metaCodec). Part B: non-linear facing tables (torch/redstone_torch, lever, ladder, dispenser/dropper, button, furnace, hopper) migrated to EnumMetaProperty.withTable over Direction, plus a new TorchFacing enum for the ground-standing case; powered/open flags use BooleanFlagProperty. Coexists with the legacy positional codec (kept for the residual coupled/constant blocks) which still takes precedence.
- Add GTNHLib-style meta-property foundation (Stage 1 of blockstate refactor): new StringRepresentable interface implemented by Direction/Axis; Property gains value<->name codec (getName(T)/getValueByName) with Boolean/Integer/Enum overrides; new MetaBlockProperty base plus BooleanFlagProperty, IntegerRangeProperty, MappedMetaProperty, EnumMetaProperty to push metadata byte-mapping down to each property. Purely additive, compileJava passes.
🔧Fix:
- Fix container data-slot sync in AbstractContainerMenu: override updateProgressBar to write S31PacketWindowProperty values back into ContainerData on the client; restore vanilla mode-1 guards in onQuickMove (slot -999 drop, negative index/button rejection, canTakeStack check) to prevent server-side OOB and slot-restriction bypass; push full data-slot state to newly attached ICrafting listeners in addCraftingToCrafters like vanilla ContainerFurnace.
- Stage 3 of blockstate refactor: BlockStateInheritance.resolve now detects distributed byte mapping — when every static (non-dynamic) merged property is a MetaBlockProperty, inheritance becomes a plain property union with no whole-definition MetaCodec, so multi-fragment merging no longer requires positional codec splicing (each property decodes only its own bit field). The legacy positional mergeCodecs path and its missing-codec warning are preserved and still used when any static property is not a MetaBlockProperty, keeping un-restated vanilla definitions working until Stage 4.
❗❗❗Deprecated:
- Remove now-unused private helpers singleVariant(...) and clampCodec(...) from the vanilla state definitions; every block has been migrated to per-property meta byte mapping, so their only callers are gone.
Notes
Full Changelog: https://github.com/song682/CatFrame/commits/v0.10.10
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:9EsesBhy"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lSH4nVom:9EsesBhy"
}

