Files
handcrafted/PORTING-NOTES.md
T
2026-10-03 16:02:19 +07:00

9.8 KiB

4.0.12 — Minecraft 26.2 riding gate fix

  • Diagnostic 4.0.11 isolated the failure to player.startRiding(seat): the Seat spawned successfully but mounting returned false.
  • Verified against Minecraft 26.2 Entity.startRiding: server-side riding is rejected when the vehicle entity type reports canSerialize() == false.
  • Handcrafted registered Seat with EntityType.Builder.noSave(), which makes the Seat non-serializable and therefore impossible to ride on 26.2.
  • Removed .noSave() from the Seat entity registration. The Seat still self-discards when it has no passenger or its furniture block is gone, so it remains ephemeral during normal gameplay.
  • Kept the 4.0.11 diagnostic logging for this test build so the result can be confirmed from the next log.

4.0.9 — Seat synchronization fix

  • Compared the Fabric 26.2 port directly against the original 1.21.x seating implementation.
  • The current debug log proves server-side mounting already succeeds: the client reports Received passengers for unknown entity. This means the failure is no longer the chair/bench/couch interaction callback; the invisible Seat vehicle is not known client-side when the passenger update arrives.
  • Removed the legacy custom ClientboundAddEntityPacket/recreateFromPacket override from Seat so Minecraft 26.2 uses its native entity spawn/tracking packet path.
  • Kept one-passenger acceptance and the 26.2 passenger attachment implementation.
  • compile.bat and compile.sh now read both mod_version and archives_base_name from gradle.properties when detecting an already-built JAR. Existing-JAR Compile/Git-only behavior and first-time Git guidance are preserved.

Handcrafted Fabric 26.2 port

Target: Minecraft 26.2 / Fabric only / Java 25.

Dependencies:

  • Fabric Loader 0.19.3
  • Fabric API 0.161.0+26.2
  • Resourceful Lib 5.0.4 for Fabric 26.2

This workspace collapses the old common+Fabric Architectury build into one Fabric Loom project while preserving the original source/resource trees. The Architectury @ExpectPlatform client renderer bridge has been replaced by its direct Fabric implementation. NeoForge is intentionally excluded.

Windows

  • compile.bat : clean build using Java 25 / Gradle 9.7.1
  • test.bat : run development client or dedicated server

Important

Minecraft 26.2 contains substantial source/API changes relative to 1.21.1. The project configuration is ported to the 26.2 toolchain, but source-level migration must be driven by compiler errors against the real 26.2 dependencies. If a build error remains, keep the complete compiler output so the affected APIs can be migrated precisely.

port.2

  • Updated Gradle from 9.5.1 to 9.7.1 because the current Fabric Loom 1.18-SNAPSHOT resolves to Loom 1.18.2, whose plugin metadata requires Gradle Plugin API 9.7.x.
  • Kept Loom 1.18-SNAPSHOT, matching the current Fabric 26.2 example project.

port.6

  • Migrated 26.2 BlockBehaviour#updateShape signatures to LevelReader + ScheduledTickAccess + RandomSource.
  • Migrated removed onRemove overrides to affectNeighborsAfterRemoval for server-side removal cleanup.
  • Migrated Painting / PaintingVariant package to world.entity.decoration.painting.
  • Replaced removed ItemNameBlockItem with BlockItem (same constructor role in 26.x).
  • Migrated registry lookups from holder-returning get to value-returning getValue where an Item is required.
  • Migrated Crockery block-entity persistence to ValueInput / ValueOutput and ItemStack.CODEC.
  • Removed obsolete code-side chunk render-layer registration; 26.x determines chunk layer from model/material/texture transparency.
  • Removed legacy javax.annotation.ParametersAreNonnullByDefault usage.
  • Updated Level#getMaxBuildHeight() usage to getMaxY() for 26.x.

The remaining major migration area is the 26.2 extract/submit rendering pipeline for FancyPainting and Crockery renderers.

port.7

  • Fixed malformed braces introduced during the port.6 removal-hook migration.
  • Removed stale newState comparisons from affectNeighborsAfterRemoval, whose 26.2 signature no longer supplies a replacement state.

port.8

  • Added missing 26.2 imports for LevelReader, ScheduledTickAccess, and RandomSource.
  • Migrated container persistence to ValueInput / ValueOutput.
  • Migrated furnace fuel duration signature to FuelValues.
  • Migrated block entity registration to FabricBlockEntityTypeBuilder (vanilla builder is no longer public).
  • Migrated entity type construction to ResourceKey<EntityType<?>>.
  • Updated comparator output methods for the new Direction parameter.
  • Started entity persistence migration (Seat, FancyPainting).
  • Replaced removed direct vanilla block constants used as property templates with registry lookups.
  • Fixed Unix helper scripts for macOS Bash 3.2 case handling.

port.9

  • Removed stale net.minecraft.world.tick.ScheduledTickAccess imports left alongside the 26.2 net.minecraft.world.level.ScheduledTickAccess type.
  • Updated shift-key detection to Minecraft.getInstance().hasShiftDown().
  • Added the required 26.2 Entity#hurtServer implementation for seat entities.
  • Migrated custom painting entity data to TypedEntityData, EntityTypes.PAINTING, lookup-based painting variant access, and component-backed painting variant mutation.
  • Updated client/server interaction result handling and POI holder lookup for 26.2.
  • Removed obsolete FancyBed block-entity factory override and stale container open/close override annotations.
  • Renderer migration remains the next major compile category (26.2 render-state/submit pipeline).

port.10

  • Migrated renderer class signatures to the 26.2 render-state/submit API to expose remaining compile errors.
  • FancyPainting and Crockery custom drawing is temporarily no-op during compile isolation; it must be restored before final release.
  • Removed obsolete TypedEntityData application from CustomPaintingItem pending final data-component migration.

port.11

  • Fixed Minecraft 26.2 strict block/item instantiation: every Handcrafted BlockBehaviour.Properties / Item.Properties now receives its ResourceKey via setId before the object constructor runs.
  • This addresses the runtime crash NullPointerException: Block id not set seen first at OvenBlock.
  • Retains the Bash 3.2-safe compile.sh/test.sh scripts from port.10.

4.0.4-fabric-26.2

  • Migrated legacy model resources rejected by Minecraft 26.2 model baking.
  • Normalized negative/out-of-range UV coordinates in all stackable-book base models.
  • Normalized the same legacy negative UVs in pillager/vindicator trophy models.
  • Rescaled witch trophy Y geometry to the modern cuboid boundary while preserving its proportions.
  • Removed the block-model dependency on the item-atlas minecraft:item/bow sprite in skeleton trophy.
  • Replaced the missing minecraft:block/chain reference in phantom trophy with an existing Handcrafted block-atlas texture.

4.0.4-fabric-26.2

  • Added Minecraft 26.2 client item definitions under assets/handcrafted/items/ for every legacy models/item entry. This fixes items that render as the magenta/black missing-model placeholder in inventory/hand while their placed block model renders normally.
  • Restored empty-hand seating interaction through useWithoutItem(...) for chairs, modular seats (benches/couches), and dining benches. On modern Minecraft, an empty-hand block interaction does not enter the item-specific useItemOn(...) path, which previously contained the only call to sitOn(...).
  • Kept item-held interaction behavior intact so cushion customization still runs through useItemOn(...).

Port 14 runtime/data fixes

  • Migrated legacy recipe ingredient objects ({item: ...} / {tag: ...}) to the Minecraft 26.x ingredient string syntax.
  • Added item.handcrafted.* translation aliases for registered block-items so tooltips no longer expose raw translation keys.
  • Empty-hand seating now reports client-side success before the authoritative server creates the seat entity.
  • Retargeted the legacy oversized-model mixin to CuboidModelElement.Deserializer#getPosition used by 26.2.
  • Added missing particle references to fancy-bed item models.

4.0.4-fabric-26.2

  • Switched from temporary port-number versioning to release-style 4.0.4-fabric-26.2.
  • Updated Phantom Trophy recipe from removed minecraft:chain to minecraft:iron_chain.
  • Removed stale Java 21 compatibility declarations from Mixin configs; Minecraft 26.2 runs on Java 25.
  • Restored Seat.makeBoundingBox() lost during the API migration and made seating success conditional on Player.startRiding().
  • Seat occupancy is now tracked after a successful mount.
  • Added missing Handcrafted item-tag display translations.

4.0.4 Fabric 26.2 build fix

  • Removed the legacy Seat.makeBoundingBox() override. In Minecraft 26.2, Entity.makeBoundingBox() is final and cannot be overridden.
  • The seat-specific AABB is still retained for seat height/passenger attachment calculations and is refreshed by the wrapped level callback.

4.0.11-fabric-26.2

  • Reworked seat interaction dispatch to mirror Refurbished Furniture: seating is performed from useWithoutItem; held-item paths return TRY_WITH_EMPTY_HAND after Handcrafted-specific cushion handling.
  • Removed client-side fake success from SittableBlock.sitOn; Seat.sit is server-authoritative like the reference implementation.
  • Seat blocks now return SUCCESS after the empty-hand interaction attempt, matching the reference block behavior.
  • Added concise server-side Seat attempt/result diagnostics so a failed mount is visible in latest.log.

4.0.15-fabric-26.2

  • Dining Bench now captures the player's horizontal facing when sitting, instead of creating a free-rotation seat with a fixed initial world yaw.
  • This lets the same Dining Bench be used from either side: face north and sit north, face south and sit south, independent of the bench's placement facing.