Commit Graph
4 Commits
Author SHA1 Message Date
Shirona1337andClaude Opus 4.7 c31c6a873a feat(dll): add hot-injection DLL path with embedded GUI loader
Ship a self-contained OpenZenLoader.exe (OpenZen.dll embedded as
RCDATA) that injects into a running Minecraft 1.20.1 Forge
javaw.exe and brings up the Zen client without -javaagent or a
mods/ entry. The existing Forge mod path stays intact.

Native (native/):
  - DLL: JNI_GetCreatedJavaVMs + JVMTI late-attach via the JDK's
    instrument.dll Agent_OnAttach to obtain a real Instrumentation;
    URLClassLoader on the game loader loads a single bridge class.
  - Loader EXE: Win32 listview of javaw.exe/java.exe processes
    with window titles, CreateRemoteThread+LoadLibraryW injection,
    embedded DLL extracted to %TEMP%\OpenZenLoader at runtime.

Java:
  - shit.zen.dll.GameLoaderBridge re-defines every jar class onto
    the Forge GameClassLoader (fixed-point retry for super-class
    deps) and extracts non-class resources to
    %TEMP%\openzen-resources-<pid>, exposed via the
    openzen.resources system property.
  - shit.zen.dll.DllBootstrap only runs Bootstrap.init +
    registerPatches + installPatchesAndRetransform; ZenClient
    construction stays on MinecraftPatch.onTick lazy-init.
  - shit.zen.asm.Bootstrap parses mapping.srg, detects SRG vs
    mojmap runtime via Minecraft.tick reflection, exposes
    remapMethod/remapField used at 5 PatchTransformer match
    points and from ReflectionUtil.
  - ReflectionUtil.resolveField walks the superclass chain trying
    SRG then mojmap on each level so e.g. activeEffects on
    LocalPlayer resolves on LivingEntity.
  - shit.zen.utils.misc.Assets unifies resource lookup with a
    fallback to openzen.resources; fonts, cloud assets and WebUI
    static files route through it.
  - PatchAgent.installPatchesAndRetransform is now idempotent so
    DllBootstrap and ZenClient.init can both call it safely.

Build:
  - ./gradlew jar   forge mod jar (unchanged)
  - ./gradlew dll   single-file Loader EXE in build/dist
  - CMake auto-located via vswhere when VS 2022 ships it.
  - README documents both paths and required toolchain.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-23 09:06:24 +08:00
Shirona1337 0a50ed3e1c fix(rotation): port Naven's LivingEntityRenderer head/pitch redirect
Replace the entity-state force-write in RotationHandler.onHeadTurn with
a render-side override that fires RotationAnimationEvent from inside
LivingEntityRenderer.render's Mth.rotLerp / Mth.lerp call sites — the
local entity's yBodyRot/yHeadRot/xRot keep doing Mojang's natural body-
follows-head lerp.

Wrap slices account for PatchApplier's loose (owner || name) && desc
matcher: head yaw is rotLerp #2, head pitch is lerp #4 (after the three
Mth.rotLerp matches that the owner-match alone pulls in).

Also surface PatchTransformer behavior so future broken targets are
visible: log every applied handler at INFO and warn whenever a wrap /
invoke / TAIL inject / ModifyLocals anchor finds no site.
2026-05-23 06:42:03 +08:00
Shirona1337andClaude Opus 4.7 797f1f3d33 refactor: drop Encryption, fix init order, simplify shutdown
- Remove unused Encryption class (AES wrapper around shit.zen.utils)
  and its construction from ZenClient bootstrap; drop dead TimerPatch
  import.
- Defer ConfigManager.loadAll() and CommandManager.initCommands() so
  configs load only after modules are registered, fixing values that
  were silently discarded.
- Make isOwner() return true so the local user is treated as owner.
- Rename ZenClient.disconnectFromServer() to shutdown() and pin the
  MinecraftPatch close hook to At.Type.HEAD so it runs before the
  game tears down its subsystems.
- README: invite users to file issues / open PRs for missing features.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-05-21 21:23:39 +08:00
Ichinomiya Shirona 956a6e515f init 2026-05-21 13:51:00 +08:00