Commit Graph
15 Commits
Author SHA1 Message Date
Algent f40a9bf90b feat: add slot refresh API 2026-09-08 22:58:56 +02:00
Algent 4ec29ec49f docs: mark the internal API boundary 2026-09-05 15:11:34 +02:00
Algent fbef5d4653 feat: add named Java tile conversion result 2026-09-05 11:53:28 +02:00
Algent 4df9badc4f feat: add Java render ID accessors 2026-09-05 11:32:24 +02:00
Algent d70f69e79f feat: add Java collection occlusion query 2026-09-05 00:48:38 +02:00
Algent e1f5893607 feat: add Java tile loading APIs 2026-09-05 00:21:08 +02:00
Algent 533dc6a11e feat: add Java part traversal 2026-09-04 23:48:10 +02:00
Algent e5e1a041e4 fix: preserve tile part-list dispatch 2026-09-04 22:43:19 +02:00
Algent 36e1a58bd9 fix: preserve generated client render dispatch 2026-09-03 16:26:51 +02:00
Algent 60d060a3ff refactor: document the light hook and unify the mixin cache access
Explain why remPart_do keeps the reference's otherwise unused
getLightValue() call, so it is not mistaken for dead code.

Read the mixin cache through the same map reference that registration
writes, instead of the companion accessor. getMixinInfo is defined as
that map's get and the map is what registerScalaTrait already receives,
so this is an identity substitution; the public accessor is unchanged.
2026-09-03 15:19:59 +02:00
Algent 5af333cea8 fix: restore multipart equality and removal hooks 2026-09-03 14:02:47 +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 370b35328f perf: remove multipart read-path wrappers 2026-08-28 17:02:02 +03:00
Algent 56b7a4791a perf: remove multipart traversal copies 2026-08-27 22:54:44 +03:00
Algent cacc9a30a8 refactor: port TileMultipart to Java
Converts the central tile class and its companion object. TileMultipartClient
moves to its own Scala file unchanged: it is registered with the ASM
generator through registerTrait, so converting it is Phase 5
registerJavaTrait work rather than part of this step.

Every public member of the reference survives except protected$worldObj,
the accessor Scala emitted so the dropItems closure could reach the
protected field; no jar references it, and TileMultipartClient lost
nothing including its generated super accessor for markRender. All five
Scala-typed descriptors are preserved: partList and its setter, operate,
getOrConvertTile2's Tuple2, loadParts, and the Tuple2 rayTraceAll stores
into ExtendedMOP.data.

partList stays an immutable Scala List republished on each mutation, which
matches the reference semantics exactly and takes no performance decision;
that belongs to Phase 4 with profiling. Internal callers still go through
operate rather than a private loop, so a trait overriding it still sees
every call.

Recompiled Scala consumers need four adjustments, all source-only:
partList.apply(i) for indexing, renderID_$eq for assignment, an explicit
cast on getOrConvertTile2._2, and an explicit AbstractFunction1 for
operate since 2.11 will not adapt a lambda to Function1[_, BoxedUnit].
Eleven, one, two and one in-repo call sites respectively.

31 anonfun classes collapse to one Java anonymous class.

Validated with 90 plain-JVM tests, a clean build, and the Java 8 Forge
dedicated-server suite, which is the load-bearing check here because the
ASM generator builds composite tiles on top of this class.
2026-08-15 11:15:03 +02:00