promotional bannermobile promotional banner

Create: Interiors

A functional suite of innovative and configurable utility blocks for the modern builder
Back to Files

Interiors 0.6.1 for NeoForge 1.21.1 v2 (Bugfix)

File nameinteriors-0.6.1 v2.jar
Uploaded
Sep 10, 2026
Downloads
23.2K
Size
459.2 KB
Mod Loaders
NeoForge
File ID
8854020
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:interiors-906239:8854020"

Learn more about Curse Maven

What's new

Critical — broken features

1. Five blocks were completely uncraftable
Their recipes sat in data/interiors/recipes/ (the 1.20 folder name); 1.21.1 only reads recipe/. The files were also still in 1.20 JSON format (result.item instead of result.id), so relocating alone wouldn't have worked. Affected: Wall Mounted Table, Seatwood Planks, Kelp Chair, Kelp Floor Chair, Kelp Seat.
Fixed: converted all 8 files and moved them to recipe/crafting/kelp/.

2. Seats did not work on Create contraptions — at all
Create gates contraption seat capture on the create:seats block tag (Contraption#moveSeat), not on instanceof SeatBlock. The mod shipped no data/create/ directory whatsoever, so no chair was ever registered as a seat on an assembled contraption. All the mod's contraption code (BigSeatMovementBehaviour, the passenger-height mixin) was correct but unreachable.
Fixed: added data/create/tags/block/seats.json covering all 35 seat blocks, plus .tag(AllBlockTags.SEATS.tag) in CIBlocks so datagen reproduces it. Confirmed working in-game.

3. Every dye-recolor recipe was dead
All 32 recolor recipes used c:<color>_dyes — the Fabric tag convention. NeoForge 1.21.1 uses c:dyes/<color>, and the mod shipped no tag definitions, so the tags were empty and no chair could be re-dyed.
Fixed: rewrote all 32 recipes and the matching CITags.java source.

4. BigSeatEntity carried the wrong EntityType
BigSeatEntity(Level) chained to Create's SeatEntity(Level), which hardcodes AllEntityTypes.SEAT. Every instance was therefore typed create:seat, making the registered interiors:big_seat dead registration, and causing the client to rebuild riders as a plain SeatEntity — so the big-chair height offset only ever ran server-side.
Fixed: bind CIEntities.BIG_SEAT.get() and set noPhysics = true explicitly (the two-arg constructor doesn't).

5. The big-chair +0.34 rider lift was applied twice
SeatBlockMixin.getFixedY raised the seat entity's position, then BigSeatEntity.positionRider added +0.34 again to a value already derived from that position. Server riders sat at +0.68, clients at +0.34.
Fixed: deleted the mixin injector, making BigSeatEntity the single source of the offset.

6. BIG_SEAT entity height mismatch
Declared sized(0.25F, 0.85F) against Create's 0.35F. Harmless while #4 kept the type unused — but fixing #4 alone would have silently added +0.50 to rider height, since the passenger attachment point defaults to entity height.
Fixed: changed to 0.35F. Items 4, 5, and 6 were one coupled change.


Correctness

7. Utils.colorFromItem off-by-onex < DyeColor.BLACK.getId() stopped at 14, so black was never tested. Changed to DyeColor.values().length. (Note: the method has no callers, so this is a latent fix.)

8. Utils.rotateShape mixed coordinate systems — used to.ordinal() against from.get2DDataValue(). The two call sites passed compensating directions that cancelled the bug, so shapes were correct by accident. Fixed the math and updated the call sites to the intuitive form.

9. Waterlogging never applied on placementDirectionalSeatBlock.getStateForPlacement bypassed SeatBlock's withWater call. WallMountedTable (extending plain Block) had no waterlogging support at all despite declaring the property.
Fixed: chained through super, and added withWater / getFluidState / updateShape to WallMountedTable.

10. Unguarded mixin lookupsAbstractContraptionEntityMixin dereferenced a map lookup and the callback return value with no null checks, both of which can be null. Added guards.

11. Kelp item models pointed at the wrong parents — the kelp floor chair's inventory icon rendered as a full-size big chair. Fixed both kelp item models.

12. mirror() didn't swap armrestsChairBlock adds the asymmetric ARMRESTS property but inherited a mirror() that only handles FACING, so single-armrest chairs mirrored to the wrong side in schematics. Added an override swapping LEFT ↔ RIGHT.

13. Slab dismount offset droppedBigSeatMovementBehaviour copied Create's SeatMovementBehaviour but hardcoded +1.0 where Create uses slab ? 0.5 : 1.0, dropping riders half a block when dismounting onto a bottom slab. Restored the slab branch.


Polish

14. Kelp chairs had no display sourceKELP_CHAIR and KELP_FLOOR_CHAIR omitted AllDisplaySources.ENTITY_NAME, which every other seat has, so Display Links aimed at them returned nothing.

15. Wrenching a chair was silent — the overrides replaced IWrenchable's defaults without calling playRotateSound. Added to both wrench handlers.

16. Korean translation key typoko_kr.json had block.interiors.yelfloor_chair instead of yellow_chair, so the Korean yellow-chair name never applied.

17. Eight recipes missing unlock advancements — the recipes recovered in #1 never appeared in the recipe book. Added 8 advancement files (2634 → 2642 loaded).

18. mods.toml declared no minecraft or neoforge dependency — a wrong-version install would crash at class-load instead of failing with a clean dependency error. Added both blocks.

19. mods.toml used the dead FML2 key mandatory = true — never read by FML4; the dependency was required only because type defaults to required. Replaced with type = "required".

20. pack.mcmeta declared pack_format: 9 (a 1.18-era value). Set to 34 with supported_formats: [34, 48].

21. interiors.mixins.json declared compatibilityLevel: JAVA_17 while the build targets Java 21. Raised to JAVA_21 (verified safe — the project resolves sponge-mixin 0.15.2, which supports it).

22. 53 #missing texture faces across the 16 chair/floor-chair template models. All were geometrically occluded, so nothing was visible, but any future geometry edit would have exposed the missing-texture sprite. Remapped to defined variables.


Performance

Shape allocation in the collision hot pathChairBlock.getShape rebuilt a rotated VoxelShape on every call for 3 of 4 facings, and entity collision goes through the 3-arg getCollisionShape, which bypasses BlockStateBase.Cache. Replaced with a lazily-built 4-entry cache; WallMountedTable got a static pre-rotated shape.

This mod has no additional files