The port is done; keep what consumer migration and Scala removal need.
- Remove the port plan Q&A; keep its one real constraint (ProjectRed's
external Scala trait needs registerScalaTrait) in the retention rules
- Remove the superseded +700 installed revision table
- Remove the pre-conversion test gates; move the two still unmet ones
(builder/editor round trip, UtilitiesInExcess fixture) to MANUAL_CHECKS
- Reword progress notes as current facts, fix stale JPartialOcclusion and
IDWriter notes and the Scala-typed descriptor count
AE2 casts the tile to the raw scalatraits TIInventoryTile to call
rebuildSlotMap after its cable bus inventory size changes. Give it a
supported entry point on TileMultipart instead.
- refreshInventorySlots is a no-op on base tiles; the generated inventory
trait rebuilds its flattened slot mapping without rebinding parts
- rebuildSlotMap stays supported for released AE2 jars
- Functional tests cover resize, tiles without inventories, and a
slotted plus inventory tile; smoke test freezes the new trait method
- Document it in the tile trait guide, API index and adoption ledger
GT5U 5.09.54.205 casts reduceMOP(hit)._1() to Integer to find the struck
ProjectRed wire. Give Java callers the same index without Scala types.
- hitPartIndex returns the jPartList index recorded by rayTraceAll, or -1
when the hit carries no part index
- reduceMOP and its companion are unchanged and not deprecated; tests now
pin the boxed Integer index and the rebased hit
- Add HitPartExample and the HIT_PART guide, link it from the API index
- Record the replacement in the compatibility ledger
Rescan 240 jars of the 2.9.0-RC-2 instance and freeze the result as a new
ABI baseline next to the +678 one. All baseline rows are still present and
every scanned type and member resolves against the port.
- 28 consumer jars: ThaumicEnergistics is new (Class.forName on
TileMultipart for Waila providers)
- GT5U now calls BlockMultipart.reduceMOP (Scala Tuple2) for ProjectRed
wire recoloring; no Java replacement yet, recorded in the ledger
- GuideNH 1.3.41 replaced its reflection with direct links
- AE2 links JCuboidPart.bind from its host refresh fix
- Source heads refreshed to 2026-10-16; only GT5U, ProjectRed and
ProjectBlue changed FMP-referencing files
- Add manual checks for GT5U spray cans and ThaumicEnergistics Waila
- drop per-guide Validation sections; manual gates stay in MANUAL_CHECKS
- drop audit/provenance lines (reference checkouts, dated refreshes, commit pins)
- state version status and Scala-free compile check once in API.md
- replace API.md status prose with link to migration status
- fix RELEASE_NOTES dangling sentence
- rewrite README for GTNH fork and Java port
loadIcons runs in TextureStitchEvent.Post and could cache icons before
other mods finished theirs in the same event (Chisel CTMLib -v4 submaps),
leaving microblocks with missing or previous-stitch textures.
loadIcons now marks icons stale; the first icont() read after a stitch
rebuilds them once. Icons set through icont_$eq are kept. Addon materials
reading icont() get the fix without API changes.
Fixes GTNH issue 27183 without relying on handler priority (upstream #63).
Keep the existing Java recipe fix for PR #61. Port PR #62 so client additions reuse multipart tiles without converting stale blocks, preserving server-side conversion. Add a regression for stale client torches and subsequent additions.
Validation: full build, formatting, checkstyleTest and Scala-free API examples passed; 588 unit tests and 300 Forge functional tests passed without skips. The new Forge regression failed before the fix by retaining an extra converted torch.
The convention plugin's jvmDowngrader mode forces a project wide Java 25
toolchain and Scala 2.11.5 cannot run above Java 8, so compileScala fails
outright. forceToolchainVersion cannot bridge it because the mode refuses a
toolchain below its multi release maximum and that list refuses entries below
9. Also note why the modern helpers cannot simply move to src/main/java.
Upload functional test reports, JUnit XML and server logs on every run so a
CI failure has something to read beyond aggregate counts. Print unit and
functional test summaries, naming each failed functional test.
Repackage the JUnit stack into the test mod jar without module descriptors so
FML stops logging a LoaderException per jar while scanning the classpath, and
silence the two ERROR lines that passing tests drive on purpose.
Refresh the handoff counts and record which migration documents are deleted
when the port closes.
Covers whose texture is greyscale and coloured at render time broke into
grey particles. A grass cover hit on the top face gave stone coloured
particles while its sides and bottom looked right, and a leaves cover was
wrong on every face. The cover itself rendered correctly, because
BlockMicroMaterial.renderMicroFace already feeds colorMultiplier to the
face renderer, but nothing carried that tint through to the particles.
Add getBreakingColour to IMicroMaterial, defaulting to no tint.
BlockMicroMaterial returns the block colour multiplier and
GrassMicroMaterial restricts it to the top face, since grass_side and
dirt are already coloured, matching the carve out in vanilla
EntityDiggingFX. JIconHitEffects gains matching getBreakingColour and
getBrokenColour defaults, IconHitEffects passes them to the colour aware
EntityDigIconFX overloads, and McBlockPart uses the colour multiplier of
the block it wraps.
Microblock carries the part level override rather than the
MicroblockClient trait. A new Scala trait member is abstract on the
compiled interface, so mixins built against older FMP would fail with
AbstractMethodError, which the frozen ReferenceScalaMicroblockTraits
fixture caught. A concrete method on the class is inherited by those
mixins instead, and still wins over the interface default.
Characterization expectations are updated for the added signatures and
for the hit effect evaluation order, which now reads the colour from the
material right after the icon for the same side.
Needs the CodeChickenCore build that adds the colour aware
EntityDigIconFX overloads.