Commit Graph
573 Commits
Author SHA1 Message Date
Algent fdfd7763dd refactor: port multipart packet handlers 2026-09-01 00:50:14 +02:00
Algent bed000cacf test: characterize multipart packet handlers 2026-09-01 00:42:10 +02:00
Algent f063cc94b4 refactor: port microblock proxy to java 2026-09-01 00:31:27 +02:00
Algent 36a0e9c865 test: characterize microblock proxy 2026-09-01 00:22:01 +02:00
Algent 0f84ff203e refactor: port multipart proxy to java 2026-09-01 00:08:20 +02:00
Algent e6278a8d14 test: characterize multipart proxy 2026-08-31 23:54:41 +02:00
Algent b0b7005a5b docs: plan API deprecation and upstream consumer cleanup
Add Phase 9 and Phase 10 to the migration plan.

Phase 9 is a deprecation pass, not a redesign. The published API is already
largely Java-shaped; nine public entries still carry Scala types, two of which
already have a Java sibling. It also covers a second problem: private[multipart]
compiles to public, so seventeen implementation hooks are advertised as API.

Phase 10 covers upstream consumer cleanup, where consumer-side reflection and
Scala-trait registration constrain FMP internals. It is unsequenced and parts of
it can land before this port merges. ProjectRed's is not one of them, so its two
blockers are recorded as Phase 7 prerequisites.

Phase 8 now notes that removing Scala from FMP has no pack-level payoff.
2026-08-31 22:18:35 +02:00
Algent 86d8c14c4f refactor: port grass micro materials to java 2026-08-31 20:09:40 +02:00
Algent a1ab154f4c test: characterize grass micro materials 2026-08-31 20:01:13 +02:00
Algent 8d4ad03223 refactor: port default content to java
Preserve the exact built-in factory, material, and remap registrations.
2026-08-31 19:45:20 +02:00
Algent f9724b9d93 test: characterize default content
Pin the singleton ABI and exact built-in factory, material, and remap registrations.
2026-08-31 19:36:36 +02:00
Algent 9a8bbfd7a7 refactor: port missing micro material
Preserve the singleton ABI, client stripping, and placeholder registration.
2026-08-31 19:12:26 +02:00
Algent e1ca4fba53 test: characterize missing micro material
Pin the singleton ABI, inert defaults, registration, and client stripping.
2026-08-31 19:04:10 +02:00
Algent 386c3b2cef refactor: port multipart save/load 2026-08-31 14:36:02 +02:00
Algent 3cdc62455c test: characterize multipart save/load 2026-08-31 14:33:56 +02:00
Algent 471c767d33 refactor: port microblock packet handlers
Preserve the registry channel, singleton ABI, client skip, and handshake payload.
2026-08-31 13:51:22 +02:00
Algent 7152b5e394 test: characterize microblock packet handlers
Pin the packet-handler ABI, client registry handling, and server handshake payload before the Java port.
2026-08-31 13:38:00 +02:00
Algent 1c91fbb4c9 refactor: port microblock event handler
Preserve the client-only ABI and dedicated-server side stripping.
2026-08-30 22:02:48 +02:00
Algent cd84c140ae test: characterize microblock event handler
Pin the client-only ABI and dedicated-server side stripping before the Java port.
2026-08-30 21:55:54 +02:00
Algent 2728c45a26 build: refresh inlined version annotations
Force Zinc's joint compiler when generated Tags change so @Mod versions do not lag incremental builds.
2026-08-30 21:51:50 +02:00
Algent 1946ea4695 refactor: port microblock mod to java
Preserve the Scala FML instance and mutable Angelica compatibility hook.
2026-08-30 21:45:10 +02:00
Algent dbe617ed46 test: characterize microblock mod lifecycle
Pin the Scala mod instance, handler surface, and mutable compatibility hook before the Java port.
2026-08-30 21:37:09 +02:00
Algent 4cd63eb3c8 refactor: port multipart event handler
Preserve event-bus identity and the annotated singleton surface.
2026-08-30 21:24:49 +02:00
Algent e9f244fefa test: characterize multipart event handler
Pin event annotations, bus identity, and server dispatch before the Java port.
2026-08-30 21:15:20 +02:00
Algent 3e6a7ce6f3 refactor: port multipart mod to java
Preserve the Scala FML instance and packet-channel identity.
2026-08-30 16:23:14 +02:00
Algent 6dbdb74559 test: characterize multipart mod lifecycle
Pin the Scala singleton identity and FML event surface before the Java port.
2026-08-30 16:14:00 +02:00
Algent b2bdf569e8 refactor: port multipart compatibility to java
Preserve the Scala Function4 singleton ABI and MCPC failure fallback.
2026-08-30 15:40:47 +02:00
Algent 53e5901360 test: characterize multipart compatibility
Pin the Scala Function4 callback surface and MCPC fallback behavior before the Java port.
2026-08-30 15:29:59 +02:00
Algent 970e888b7f refactor: port client tile traits to java
Preserve the exact generated client interfaces, render-cache behavior, and ordered display ticks.

Teach Java mixin generation to linearize a registered parent and exclude transient runtime caches from copying.
2026-08-30 15:25:15 +02:00
Algent 6417e9b731 test: characterize client tile traits
Pin render-cache state, random display dispatch, and the generated TileMultipartClient inheritance before the Java port.
2026-08-30 14:06:13 +02:00
Algent 4e8d238b57 refactor: port inventory tile trait to java
Keep TIInventoryTile as AE2's public rebuild API and JInventoryTile as the registered mixin input, preserving both generated interfaces and flattened sided-slot behavior.
2026-08-30 13:56:05 +02:00
Algent 48cbb7ff3e test: characterize inventory tile trait
Pin flattened slot routing, sided access, AE2-style rebuild calls, and the generated TIInventoryTile/JInventoryTile interfaces before the Java port.
2026-08-30 13:50:31 +02:00
Algent bf8c9c24b8 refactor: port fluid handler trait to java
Preserve the exact generated interface and ordered fluid behavior.

Isolate FluidStack.amount access outside the transformed class. The transformer treats every field read as trait-owned state.
2026-08-30 13:33:05 +02:00
Algent cad4b1cef0 test: characterize fluid handler trait
Freeze ordered tank state and fluid distribution behavior.

Pin capability short-circuiting and the exact generated interface. All checks run against the untouched Scala trait.
2026-08-30 13:26:13 +02:00
Algent bef35139fb refactor: port tile change trait to java
The fourth generated tile written directly in Java, and the first with
both mutable state and inherited member access. The eight characterization
tests pass unchanged, and the runtime interface keeps the exact thirteen
methods. INeighborTileChange, the surface shipping jars link against, is
byte-identical between the reference and ported dev jars, and no consumer
references the removed $class or closure classes.

Two transformer constraints turned up, both now in the handoff gotchas.

registerJavaTrait rejects a trait with a non-empty InnerClasses attribute
outright, so the anonymous AbstractFunction1 for the operate callback
could not stay in the trait; it is a named class in the access shim.

The shim's parameters are Object rather than the trait type. Typing them
as the trait let javac elide the cast to TileMultipart, since the
untransformed trait extends it, and the verifier then rejected the
getfield once Forge rewrote the trait to an interface.
TRedstoneTileAccess only escapes this because IRedstoneTile is unrelated
to TileMultipart and forces a real checkcast.
2026-08-28 18:44:47 +03:00
Algent 003e8f94ca test: characterize tile change trait
Seven behavioral tests and a generated-interface freeze, both against the
untouched Scala trait. Nothing in the frozen consumer baseline references
TTileChangeTile or a $class helper for it, so there is no binary fixture
to take: the load-bearing surface is INeighborTileChange, which is already
Java and unchanged.

The behavior pinned is the flag lifecycle and the coordinate filter.
bindPart only ever ors the flag in, copyFrom takes it from another change
tile but leaves it alone for a plain source, clearParts resets it, and
partRemoved recomputes from the remaining list rather than from the part
handed to it. onNeighborTileChange dispatches only for an axial offset of
one or two blocks, and marks the two-block case weak.

The runtime interface is the exact thirteen methods: six overrides, the
field getter and setter, and five super accessors.
2026-08-28 18:35:22 +03:00
Algent bde3445488 test: characterize multipart raytrace index production
rayTraceAll was the one method the read-path cleanup restructured, moving
from an indexed loop over a copied list to an iterator with a manual
counter, and nothing covered it. The index it writes into ExtendedMOP.data
is what reduceMOP hands back to every click, activate, harvest and pick
block, so an off-by-one there would misroute interactions silently.

Six tests pin the index production: a part that misses still consumes its
index, sorting by distance happens after the indices are assigned, the
part's own data is nested underneath rather than replaced, subHit keeps
its default because data is assigned directly, and an index taken from a
hit still selects the part that produced it. harvestPart's indexing and
collisionRayTrace's nearest-or-null are covered alongside.

All six also pass against the pre-cleanup implementation at 370b353^,
which is the evidence that the restructure preserved behavior.
2026-08-28 18:31:33 +03:00
Algent 370b35328f perf: remove multipart read-path wrappers 2026-08-28 17:02:02 +03:00
Algent 85c2c4d15c test: characterize multipart read paths 2026-08-28 16:54:50 +03:00
Algent e2822d3938 refactor: port redstone tile trait to java 2026-08-28 16:16:31 +03:00
Algent eff7509585 test: characterize redstone tile trait 2026-08-28 15:58:57 +03:00
Algent 39e0858006 refactor: port slotted tile trait to java 2026-08-28 11:42:06 +03:00
Algent 7894c98352 test: characterize slotted tile trait 2026-08-28 11:36:38 +03:00
Algent 6c370c8734 refactor: port partial occlusion tile trait to java 2026-08-28 11:27:29 +03:00
Algent 2b04a2e52b test: characterize partial occlusion tile trait 2026-08-28 11:19:44 +03:00
Algent 984d3a2f61 refactor: port microblock recipes to java 2026-08-28 11:07:57 +03:00
Algent df21e4041c test: characterize microblock recipes 2026-08-28 10:59:04 +03:00
Algent 1cb2cc4cc6 refactor: port redstone interaction unit to java 2026-08-28 10:48:19 +03:00
Algent 28c90189a6 test: characterize redstone interaction unit 2026-08-27 23:15:56 +03:00
Algent 56b7a4791a perf: remove multipart traversal copies 2026-08-27 22:54:44 +03:00