ForgeMultipart
11 merged pull requests.
Needs action on an existing world:
- [read before updating] #47 Fixed a critical issue where microblocks were randomly transforming into Blood Rune slabs. The problem was caused by unknown material names falling back to id 0 and a race condition in single-player where the client handshake cleared shared name maps while the server was reading them. Now unknown materials resolve to a placeholder and redundant handshakes are skipped in integrated mode.
No step is needed before you update, but do not expect a repair. Microblocks that already turned into Blood Rune slabs in a singleplayer world are permanently changed on disk and have to be broken and put back by hand. From 2.9.0-beta-3 on, no further microblocks are converted, and a microblock whose material is genuinely missing shows the purple-and-black missing texture instead of silently becoming a Blood Rune.
New Features
- #53 Added ISBRHPart interface and updated MultipartRenderer and TileMultipart to support ISBRH-based rendering for parts that implement the interface. - @Cardinalstars
- Added: ISBRHPart interface
- #48 Added ItemMicroPartTransformer and PosteaCompat classes that implement PostEA transformer integration to remap microblock material IDs during mod transitions. - @FourIsTheNumber
- Added: ItemMicroPartTransformer, PosteaCompat integration
- #38 Added dynamic render option to TMultiPart interface and updated TileMultipart render logic to use the new option instead of doesTick dependency. - @Worive
- Added: dynamic render option
Changes
- #50 Refactored render pass handling in BlockMultipart, MultipartRenderer, and TileMultipart to improve thread-safety during concurrent rendering operations. - @mitchej123
- #45 Changed BlockMultipart material definition from Material.rock to a more fitting alternative material class. - @DarkShadow44
Bug Fixes
- #47 Modified DefaultContent, ItemMicroPart, and MicroMaterialRegistry to resolve unknown material names to MissingMicroMaterial placeholder instead of id 0, and updated packet handlers to skip redundant id-map handshakes on integrated clients. - @Caedis
- Added: MissingMicroMaterial placeholder class
- Fixed: microblocks becoming Blood Rune slabs randomly
- Migration: No step is needed before you update, but do not expect a repair. Microblocks that already turned into Blood Rune slabs in a singleplayer world are permanently changed on disk and have to be broken and put back by hand. From 2.9.0-beta-3 on, no further microblocks are converted, and a microblock whose material is genuinely missing shows the purple-and-black missing texture instead of silently becoming a Blood Rune.
- Closes GTNH#14921
- #46 Added null check in TMultiPart.sendDescUpdate to skip sending updates when tile() is null, protecting against NPE during chunk unload and wireless redstone frequency updates. - @alppp
- Fixed: null pointer crash on chunk unload in sendDescUpdate
- #44 Fixed world client reference leak in MultipartRenderer to properly clear references after rendering. - @Alexdoru
- Fixed: world client memory leak in renderer
- #43 Fixed world client reference leak in ControlKeyModifier and MultipartMod handler keybind processing. - @Alexdoru
- Fixed: world client memory leak in keybind handler
- #41 Improved world server lifecycle management in MultipartMod handler to properly null out references and prevent memory leaks. - @Alexdoru
- Fixed: world server memory leak
- #37 Reverted light value caching in BlockMultipart and TileMultipart; improved null-safety in tile iteration to prevent NPE when tile() returns null during light value queries. - @Worive
- Removed: light value caching
- Fixed: AE2 null pointer crash, glowstone mob spawn prevention
- Closes GTNH#22769, GTNH#22774
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@boubou19 (4), @Alexdoru (3), @Caedis (2), @Kogepan229 (2), @RecursivePineapple (2), @Worive (2), @alppp (1), @Cardinalstars (1), @DarkShadow44 (1), @FourIsTheNumber (1), @Guvante (1), @Luca-Guettinger (1), @mitchej123 (1), @OvermindDL1 (1)