Repository navigation
Releases
GlowberryClient BETA5 - Radial Wheel Rebuild, Replay Flight & Hook Reliability
GlowberryClient BETA5
The last beta before the official OV.3 release. This build lands the preloader Phase 3 work
(hook reliability, verified installs, honest diagnostics), the radial wheel rebuild, replay
spectator flight, and auto sign-in on the working Bedrock auth path.
Everything below is what changed since BETA4.
✨ Added
Radial wheel — rebuilt around profiles
- Hold-to-open gesture. The wheel is now a hold-to-open menu: the press opens it, you point or
flick while holding, and the release commits. The old press-to-toggle shape is still available. - Player-authored profiles. One to eight entries per ring, each with its own label, icon and
colour, instead of a fixed four-destination ring. - Nested sub-wheels. A ring can open another ring in place, so the action count is no longer
capped at one wheel. - Profile manager. Create, rename, delete and reorder profiles on the fly. Deleting a profile
repoints any sub-wheel that opened it, and the last profile is never deleted.
Replay — interactive spectator flight
- The free camera can now be flown directly: a single-finger drag over the video looks around, and a
flight stick (with boost) moves the camera. The flight tick only integrates the stick in
interactive spectator mode, so an authored cinematic still plays untouched.
Sign-in
- Auto sign-in on the working Bedrock auth path. The launcher refreshes the active account's
stored auth blob on a background thread at launch, instead of depending on the MSAL silent path
whose placeholder client id can never succeed. A failed refresh opens the sign-in screen with the
reason already shown, rather than leaving you signed out with no prompt.
Launch tab
- The head pod's sync indicator is now driven by the real cosmetic-sync state: running reads as
synced, enabled-but-not-yet-up reads as loading (the sockets open on a background thread), and
off reads as hidden rather than claiming a link that does not exist.
Tooling
- One-step signature-rule generation (
tools/gen-rules): download the APK, extract the library,
analyze it, derive the RTTI rules and merge them with a revision bump — in one command, with host
tests and a CI run.
🔧 Fixed
Hook reliability (preloader Phase 3)
- Detours no longer drop return values. The cosmetics seams forward every volatile register, so
a return value inx0or ansretpointer inx8survives the detour exactly as if the hook were
not installed. The old passthroughs preserved them only by accident. - Hook installs retry instead of giving up. A deferral now re-arms the install with backoff
rather than sealing it for the session; only after three give-ups does it stay vanilla. - Patched prologues are verified. After every install the first instruction is read back and
confirmed to be a branch; an unverified patch is backed out, so a session never runs half-hooked. - A live probe replaces the version window. The render hook resolves its slot from the diagnostic
string the function body references and refuses a target that is not executable code, so newer
builds keep the attempt and still fail closed. - Generated rules carry their own probe, and a rule whose probe did not resolve is refused at
merge time instead of looking like a working one.
Diagnostics honesty
- The report now names the device, the process ABI, the render-hook refusal reason (which
exact gate refused it), the skin-path seam stage, and the frame-pacing reading — with
"unknown" for anything the build genuinely cannot read, never a confident wrong answer. - The render-distance route and the persona accessor names are now reported per build, so the
launcher can say a route is possible instead of guessing.
Optifine
- An item the crash guard switched off now says why (clear / retrying / last attempt / quarantined)
instead of looking identical to one you turned off yourself. Re-enabling an item by hand clears its
counter.
Tooling
- The analyzer's
ADRPreference scan no longer silently returns nothing when numpy is absent; it
has an equivalent pure-Python path, so a machine without numpy is no longer a quiet wrong answer.
Cosmetics
- The GLES mesh rasteriser's Java surface is retired. Every cosmetic route is now backend-agnostic,
and a test pins that the graphics backend never blocks a piece — so a preview-only piece is never
blamed on Vulkan.
✅ Verification
:app:assembleDebuggreen; APK shipsarm64-v8awithlibgxcore.soandlibpreloader.so.- Unit tests pass (pure logic, no mocks).
- Preloader host tests and the Python tooling tests now run on every commit in CI.
- Cosmetics, preview and the native seams are still unverified on device; the pure pipeline is
covered by the tests and the diagnostics report names which route is live.
📢 This is the last beta release until the official OV.3 is released.
GlowberryClient BETA4 - Module Data Fixes & Blueberry UI
GlowberryClient BETA4
This build fixes the module catalogue: the entries that were disabled, or enabled but doing
nothing, purely because they were refused for lack of a live native game feed now work wherever
this build actually has a route to their data. Every catalogue entry is classified by the route it
needs, and only the entries that genuinely require a feed this build does not expose stay badged —
with the reason they are badged.
Phase A — device input and launcher state (no game data needed)
- HUD readouts: clock, keystrokes, memory, watermark, combo, death counter, K/D tracker, streak
tracker, kill counter. - Actions: drop all, chat macro, command bind, auto GG, auto tip.
- Input-driven cooldown readouts: attack cooldown, attack indicator, crit timer, pearl timer,
gapple timer, shield timer, hit marker. - Sprint helpers: no sprint reset, sprint swing, keep sprint.
Phase B — the game options file
- Bob off, fullbright (self and world), particle off, sprint particles, FOV boost. Each writes the
instance's options file, applied on the next game load.
Phase C — the local-player feed
- Coordinates, direction, compass, chunk borders, speedometer, health display, position display,
speed display, velocity display, fall damage warning, waypoints, death waypoint.
Phase D — the peer feed
- Reach circle, target HUD and target info, from the proximity-voice peer feed (no game hook).
Phase E — engine/render hooks
- Not reachable on the shipped builds: the game exposes no entity, block, inventory or effect feed
to a mod. These stay badged with an honest note instead of showing a fabricated reading.
Phase F — server-decided / ban risk
- Reach, knockback, crits, TPS and inventory automation are server-arbitrated. Not shipped on
purpose; badged with the note that says which.
Launch tab polish (this build)
- Removed the duplicate skin head above the Play button; the hero panel's live preview is the one
place the character is shown. - The profile/version picker now sits above the Play button, and its instance list opens upward, so
it is no longer clipped at the bottom of the screen. - Removed the bottom-left client version label.
Also in this release (everything since OV.2, including BETA3)
- Cosmetics: capes, pets and hats reach the game across versions; native render pipeline, authored
Blockbench mesh support, per-piece textures and the in-app cosmetics diagnostics. - Cosmetics plan phases 0–6: rules revision/version coverage, honest skin identity, cape engine
texture swap, hand-designed capes, pet asset measurement, big-server skin finding. - Module catalogue phases A–C: the reachable owned routes, and a badge that names the reason a
module is unavailable instead of one shared "no game data" message. - Plan phases 7–13: a real F3-style debug readout, Closet icon sections with standalone previews,
the replay transport, an alphabetised Mod Menu, the Launch tab revamp, a controller cursor with
connection toasts, and every emoji icon removed. - Software rasteriser preview (character, pet, cape, accessories) with golden-image tests.
- Blueberry UI: shared design tokens and component library, restyled Mod Menus, radial wheel,
Closet and Launch tab; blue is the default accent. - Real Minecraft skin shown from the engine-hook seam, with the XUID-based account skin resolver
on after a Microsoft sign-in. - FPS modules trimmed to the seven options that work; radial hub head follows the cursor; cursor
disc replaced with a clean pointer arrow. - Signature rules revision 7: fresh pause/HUD hooks for 1.26.30–1.26.52.
Verification
:app:compileDebugJavaWithJavacgreen.- 1739 unit tests pass (pure logic, no mocks).
:app:assembleDebuggreen; APK ships arm64-v8a withlibgxcore.soandlibpreloader.so.- Preview, cosmetics and native seams are unverified on device; the pure pipeline is covered by
the tests.
Official Release coming in 4 days. Download not Recommended if you don't like spoilers.
GlowberryClient BETA3 - Module Data Fixes, Blueberry UI & Native Route Cleanup
GlowberryClient BETA3 — Module Data Fixes, Blueberry UI & Native Route Cleanup
The module catalogue entries that were disabled, or enabled but doing nothing, purely because they were refused for lack of a live native game feed now work wherever this build actually has a route to their data. Every entry is classified by the route it needs, and only the entries that genuinely require a feed this build does not expose stay badged, with the reason they are badged.
Module Catalogue — Phase A: device input and launcher state (no game data needed)
- HUD readouts: clock, keystrokes, memory, watermark, combo, death counter, K/D tracker, streak tracker, kill counter.
- Actions: drop all, chat macro, command bind, auto GG, auto tip.
- Input-driven cooldown readouts: attack cooldown, attack indicator, crit timer, pearl timer, gapple timer, shield timer, hit marker.
- Sprint helpers: no sprint reset, sprint swing, keep sprint.
Module Catalogue — Phase B: the game options file
- Bob off, fullbright (self and world), particle off, sprint particles, FOV boost. Each writes the instance's options file, applied on the next game load.
Module Catalogue — Phase C: the local-player feed
- Coordinates, direction, compass, chunk borders, speedometer, health display, position display, speed display, velocity display, fall damage warning, waypoints, death waypoint.
Module Catalogue — Phase D: the peer feed
- Reach circle, target HUD and target info, from the proximity-voice peer feed (needs no game hook).
Module Catalogue — Phases E and F: honestly badged, not faked
- Engine/render hooks are not reachable on the shipped builds: the game exposes no entity, block, inventory or effect feed to a mod. These stay badged with the reason, instead of showing a fabricated reading.
- Server-decided or ban-risk behaviour (reach, knockback, crits, TPS, inventory automation) is not shipped on purpose and is badged with the note that says which.
Native route cleanup (this build)
- Retired the raw OpenGL ES mesh rasteriser, which cannot draw on a Vulkan-only RenderDragon build, along with its draw self-test cube and mesh draw counter.
- Capes reach the game through the engine's own texture loader, so a cape appears with no resource pack, no world reload and no GL renderer.
- Accessories and pets reach the game through the client's native player-render hook; where that hook is not live the panel says the piece is preview-only instead of implying it is drawn.
- Cosmetics diagnostics now report the route that is actually live (cape engine texture route, engine image pipeline, player-render hook) and name the first failing stage, rather than a GLES draw count.
Also in this release (everything since OV.2)
- Cosmetics: capes, pets and hats reach the game across versions; native render pipeline, authored Blockbench mesh support, per-piece textures and the in-app cosmetics diagnostics.
- Cosmetics plan phases 0-6: rules revision and version coverage, honest skin identity, the cape engine texture swap, hand-designed capes, pet asset measurement and the big-server skin finding.
- Plan phases 7-13: a real F3-style debug readout, Closet icon sections with standalone previews, the replay transport, an alphabetised Mod Menu, the Launch tab revamp, a controller cursor with connection toasts, and every emoji icon removed.
- Software rasteriser preview (character, pet, cape, accessories) with golden-image tests.
- Blueberry UI: shared design tokens and a component library, restyled Mod Menus, radial wheel, Closet and Launch tab; blue is the default accent.
- Real Minecraft skin shown from the engine-hook seam, with the XUID-based account skin resolver enabled after a Microsoft sign-in.
- FPS modules trimmed to the seven options that work; the radial hub head follows the cursor; the cursor disc is replaced with a clean pointer arrow.
- Signature rules revision 7: fresh pause/HUD hooks for 1.26.30-1.26.52.
Verification
:app:compileDebugJavaWithJavacgreen.- 1738 unit tests pass (pure logic, no mocks).
:app:assembleDebuggreen; APK ships arm64-v8a withlibgxcore.soandlibpreloader.so.- Preview, cosmetics and native seams are unverified on device; the pure pipeline is covered by the tests.
Official Release coming in 4 days. Download not Recommended if you don't like spoilers.
GlowberryClient OV.2 — Cosmetics & Identity Overhaul
GlowberryClient OV.2
The big one. Cosmetics moved off the resource pack and onto the game's native renderer,
Bedrock Optifine Mode shipped, voice chat went online, and the VIP Mod Menu got hardened.
🎨 Cosmetics — rebuilt natively
- Cosmetics now render through the game's own player-render hook; the old resource-pack route is gone.
- The cape is a 16-segment bone chain with real cloth fold (walk, jump, sway, flutter).
- 100+ capes, 256 accessories and 18 animated 3D pets, built from authored Blockbench models.
- Cape artwork is swapped onto the real skin texture via the engine's own image loader.
- Preview is sharper: alpha cutout, depth-correct occlusion and 2x supersampling.
- Share your cape, hat and pet with other GlowberryClient users — LAN, relay, or a manual peer.
🟣 Bedrock Optifine Mode
- New Settings card with per-item toggles and launch wiring.
- Classic black Optifine cape with the "OF" monogram applied by default.
🔊 Proximity voice chat
- LAN voice, plus a standalone Go relay server for internet play.
- Public and private channels with shareable join codes, a live directory and a pixel mic meter.
- Opus codec, jitter buffer, token auth and IP/device bans.
🎮 VIP Mod Menu & Replay
- Bind-driven VIP Mod Menu with controller and keyboard layouts, hardened against crashes.
- Record, review, trim, stitch and share clips without leaving your world.
⚡ Fixes
- Fixed the GlossHook linker-init crash.
- Fixed dead cosmetics JNI exports so native cosmetics actually load.
- Fixed the Enter-in-chat crash.
- Fixed preloader load order and missing signature rules.
- Fixed the "clicking Modules crashes" VIP grid bug.
🧹 Housekeeping
- Removed the news feature; reworked the Launch tab (docked controls, live hero preview).
OFFICIAL FIRST RELEASE
Context Confirmed
- Repo:
ChimeraAnt-DEV/GlowberryClient(slug is stillGlowberryClient; docs/URLs still point at the oldChimeraLauncherslug). V7tag = merge commit of PR #72 ("mcpe-planet source + Hitboxes/Select Hit"), tagged 2026-09-25.- The "copied PR description" is the
BETArelease ("Biggest update so far…", 2026-09-27). Its body is the PR #78 description verbatim (.AntEgg+ proximity voice + in-game pack changer + cape/overlay fixes), including the "created by Malice" sign-off. - Since
V7: 91 commits, 486 files changed, +47,801 / −1,529, and 24 merged PRs (#73–#95). - Font angle is real, not a red herring: the repo actually ships a bundled font catalogue —
LauncherFonts.java+ 29 TTFs inapp/src/main/res/font/— added in commit86eefbd(part of PR #89), which is after V7. So "fonts since V7" is a genuine change too.
Part 1 — What changed since the V7 release
Everything below landed after tag
V7(PR #72). TheBETArelease is PR #78; PRs #79–#95 came after it.
1. Rebrand & identity
- Chimera Client → GlowberryClient (PR #86): app name, ~11 locale strings, OAuth user agents, backup folder, voice join-code prefix
CHIMERA-→GLOWBERRY-, docs/release/news JSON. Java package staysorg.chimeramc.*deliberately. - New launcher icon (PR #87): golden glowberry on a dark-purple gradient tile, full-bleed adaptive + themed (mono) icon, recoloured adaptive background.
- README/docs refresh (PRs #84, #85): removed fork lineage, added rights/shared-account footer; EN + zh-CN docs site updated.
2. Proximity voice chat (the biggest new subsystem)
- PR #78 — LAN-multicast voice between Chimera users in the same world, raw 16 kHz PCM, mic capture +
RECORD_AUDIO. - PR #79 — voice channels: public/private, shareable join codes (
GLOWBERRY-XXXX), live client-side directory, dedicated Voice tab, pixel-art mic meter. Protocol v2. - PR #82 — per-channel controls, advisory capacity, viewer-only per-member mute, in-world nametag mic icon; protocol v3.
- PR #83 — real local-player feed (position + view rotation via
ClientInstancevtable slot 31) so the nametag icon actually renders. - PR #88 — internet voice: a standalone Go UDP relay server (
server/voice-relay), Opus codec, jitter buffer, mixer, relay address setting, token auth + bans, Docker/systemd/Fly.io deploy; protocol v4; proximity distance rule fixed.
3. Mod packaging & porting
- PR #78 —
.AntEggformat: ZIP container,egg.jsonmanifest, native or Lua-script mods, sandboxed atomic extraction, import wired throughFileHandler. - PR #95 — JavaBridge: import a Java Edition
.jar, assess portability locally, decompile with CFR, and have a user-configured LLM generate a Bedrock.AntEggmod (with consent gating + AI-port provenance). Rewrites, never runs, Java mods.
4. Cosmetics
- PR #78 / #75 / #76 — in-game cape via a texture-override resource pack, real applied skin in the preview.
- PR #81 — depth-layering fix (wings → cape → body → head accessories), ore-loader art fix.
- PR #89 — Cosmetics status diagnostic (pure, unit-tested) + PNG skin import.
5. UI / UX
- PR #78 — Mod Menu full-screen white-overlay fix.
- PR #80 — splash & in-launcher motion overhaul (crystal-ore loader, staggered arrival, count-up stats).
- PR #81 / #91 — Mod Menu focus-wash hardening.
- PR #89 — 3D controller illustrations, nav-bar wordmark collision fix, ~30-font app-wide font picker (
LauncherFonts), controller-connected toast, per-button CPS. - PR #92 — VIP Mod Menu (Screen B) opened by the in-game bind, with keyboard illustration.
- PR #93 — Replay system (capture/review/export) shared by both Mod Menu screens.
- PR #94 — PvP Suite V1.1: four overlay-only modules; Modules → General tab rename.
6. Combat / PvP modules
- PR #91 — Hitboxes un-greyed, peer boxes + aim lines (protocol v5 yaw/pitch), chest-height target-box toggle, combo/item limitations documented.
- PR #94 — Reach Indicator, Trajectory Prediction, Hit Prediction, Custom Kill Effects (all fail-closed, overlay-only).
7. Controller
- PR #89 / #90 — 3D controller illustrations, CPS limiter, connection notification, remap layers, rumble strength, radial dead zone as default, illustration perf fix.
8. Performance / input hardening
- PR #90 — Enter-in-chat crash fix (
TextInputSanitizer), shader autofix, FPS optimizer (launcher-side only, honest scope). - PR #89 — CPS window fix, firework touch layer, "add server" fix.
9. Testing
- 381 tests at V7 → 1,037 at PR #95 (0 failures, no mocks). Intermediate: 510 (PR #78), 597 (PR #83), 845 (PR #91), 901 (PR #93).
Part 2 — Best fonts
First, the honest constraint
GitHub sanitizes <style> blocks and inline style attributes in READMEs and release bodies, so you cannot reliably force a custom font on the text itself — it renders in the reader's system stack. Two practical consequences:
- For the description's live text: pick from system stacks (they render everywhere) — don't try to load a webfont.
- For fonts you actually control: use them in embedded banner/heading images (PNG/SVG), where any font renders exactly as designed.
So the list below is split accordingly, and I've starred the fonts your launcher already bundles (LauncherFonts), so release art and the app can share a face.
A. Live text — recommended system stacks
| Role | Stack | Why |
|---|---|---|
| Body | -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif |
GitHub's own default; maximum legibility on every OS |
| Headings | same as body, font-weight: 600 |
Weight, not a new face, is what separates headings on GitHub |
| Code / commands | ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace |
GitHub's code stack; aligns version strings and flags |
B. Banner / heading-image fonts (ranked for a GitHub release description)
| # | Font * | Type | Best for | Why it works |
|---|---|---|---|---|
| 1 | Inter * | Sans | Headings, body, UI mockups | Neutral, superb at small sizes, huge weight range — the safest "modern tech" face |
| 2 | Montserrat * | Sans | Section headings, banners | Geometric, confident; great for ALL-CAPS feature titles |
| 3 | Space Grotesk * | Sans | Wordmark, hero headings | Slightly quirky, very "gaming-tech"; pairs with Inter body |
| 4 | Poppins * | Sans | Feature chips, badges | Round geometric; friendly, reads well in pills |
| 5 | Manrope * | Sans | Sub-headings, stat labels | Tight, modern, excellent numerals for "1,037 tests" callouts |
| 6 | Sora * | Sans | Headings, nav art | Techy and crisp; strong at medium weights |
| 7 | Outfit * | Sans | Hero banner | Clean variable geometric; great for large display text |
| 8 | Orbitron * | Display | Version tag / "V8" badge | Sci-fi; use only for short accents, never body |
| 9 | Bebas Neue * | Display | Big ALL-CAPS section bars | Condensed impact; ideal for "WHAT'S NEW" strips |
| 10 | Press Start 2P * | Display | Minecraft-flavoured accents | Pixel font; perfect for a single playful badge, unreadable in bulk |
| 11 | JetBrains Mono * | Mono | Code blocks, version numbers, terminal shots | Ligatures, clear 0/O and 1/l; ideal for ./gradlew commands |
| 12 | Fira Code * | Mono | Inline code art | Same clarity, slightly softer than JetBrains |
| 13 | Merriweather * | Serif | Long-form release prose | High readability in body text; good "changelog document" feel |
| 14 | Lora * | Serif | Quotes / callouts | Warm, editorial contrast against sans headings |
| 15 | Playfair Display * | Serif | Hero heading (elegant mode) | High-contrast display serif for a premium banner |
* = bundled in this repo under app/src/main/res/font/ (29 faces total).
C. Pairings that look deliberate
- Modern gaming (recommended for GlowberryClient):
Space Grotesk(headings) +Inter(body) +JetBrains Mono(code). - Clean corporate:
Montserrat(headings) +Open Sans(body) +Fira Code(code). - Premium/elegant:
Playfair Display(hero) +Manrope(subheads) +JetBrains Mono(code). - Playful Minecraft accent:
Bebas NeueorPress Start 2Pfor one badge only, withInterfor everything else.
D. Copy-paste stacks for embedded banners / external rendering
/* Headings */
font-family: "Space Grotesk", "Montserrat", -apple-system, "Segoe UI", sans-serif;
/* Body */
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
/* Code / versions */
font-family: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;Biggest update so far....
Summary
Implements the .AntEgg multi-language mod packaging format, adds a proximity voice chat module and an opt-in in-game resource-pack changer, and fixes the cosmetics/3D-preview/paper-cape defects plus the Mod Menu white-overlay bug.
Dependency: the preloader submodule pointer moves to
preloader-android@antegg-mod-loader(commit1ff3721). The submodule branch must be merged (or its commit made reachable) before this PR's pointer resolves.
Changes
.AntEgg mod packaging (core.antegg + preloader AntEggLoader)
- ZIP container with a custom extension;
egg.jsonmanifest at the archive root (name,version,author,type,entry_point, optionaldependencies,description). - Strict validation (Java
AntEggManifestand C++pl::runtime::AntEggManifestparse the same grammar): required fields, semantic version,typemust agree with the entry-point extension,entry_pointmay not escape the package. - native: extracted
.so's absolute path is handed to the preloader's existing native-mod injection entry point (ModManager.initializeLoadedMod)..AntEggadds packaging/validation, not a second injection mechanism. The original spec calls this API "ApexAntLamina"; no class/symbol by that name exists in this tree — theplpreloader bridge is the API in question. - script: entry
.luaruns on an embedded Lua VM (LuaJ, Lua 5.2) viaAntEggScriptHost, which exposes amodtable (name,version,author,id,dir,sandbox,dependencies). Failures are returned, not thrown. - Sandboxed atomic extraction to
getExternalFilesDir()/AntEggs/<mod-id>/(internal fallback). Every ZIP entry is resolved and checked to stay inside the sandbox; the archive is staged in a temp sibling and moved into place only when complete, so a failed import leaves no partial mod. - Import wired through
FileHandler;.anteggintent-filter path patterns/suffixes added; template + format docs atexamples/antegg-template/. - Native uses zlib raw inflate (no new third-party ZIP dependency); JNI bound via
AntEggBridgewithJava_org_chimeramc_client_core_antegg_*symbols.
Proximity voice chat (core.voice + VoiceChatOverlay)
- Peer link between Chimera users in the same world over LAN multicast UDP (
VoiceTransport), raw 16 kHz mono PCM framing (VoiceProtocol), mixing (VoiceRegistry+VoiceChannel), device (VoiceAudioEngine). - Multi-channel support: a listener hears their own channel plus the open
worldchannel in both directions, so switching to a private channel never cuts off someone standing next to you; two different private channels do not hear each other. - Mic capture with a runtime
RECORD_AUDIOrequest; a denied permission still starts listen-only.ensureCapture/stopCapturehandle a mic toggled on after a listen-only start. - Honest scope: distance/range needs a world position that lives in
libminecraftpe.so(see the native-feed notes inAGENTS.md), so the module runs in channel mode — everyone on a reachable channel is audible. The overlay states this rather than pretending a range applies.
In-game pack changer (InGamePackChanger + PackChangerPanel)
- Per-instance opt-in toggle in Instance Settings (
GameVersion.inGamePackChangerEnabled, persisted inVersionProfileMetadata). - When enabled, the in-game Mod Menu's Packs section lists the instance's resource packs with a per-pack on/off toggle that rewrites
minecraftpe/global_resource_packs.json, across every candidate game-data root.
Cosmetics / 3D preview / paper cape
- Fixed the left arm and left leg base/overlay UVs (they pointed at neighbouring strips, so one side of the body sampled the wrong atlas region). Pinned by new
SkinModelTestcases. - The built-in placeholder now paints from the same UV table the renderer samples, so it cannot drift from the model.
- The cape texture now paints every face (back panel, front panel, side columns, edge rows) — previously the transparent strips showed as holes when the cape swung, reading as flapping paper.
- The cape mesh is now depth-sorted per quad with two-sided shading; the old row-major paint order let a fold's far side paint over its near side.
Mod Menu white overlay
- The full-screen translucent white wash was Android's default focus highlight: the overlay root is
clickable, hence focusable, so a controller stick/d-pad input moved focus onto it and the framework painted the highlight. Fixed by making the rootfocusable="false"+defaultFocusHighlightEnabled="false"(XML and programmatically), while keeping children focusable for controller nav.
Testing
./gradlew :app:assembleDebug— BUILD SUCCESSFUL../gradlew :app:testDebugUnitTest— 510 tests, 0 failures, 0 errors.- Verified the three
Java_org_chimeramc_client_core_antegg_AntEggBridge_*symbols are present in the packagedlibpreloader.soinside the debug APK. - New tests:
AntEggScriptLoadingTest,VoiceChannelTest,VoiceProtocolTest,VoiceModuleGroupingTest,InGamePackChangerTest, plus expandedSkinModelTest/CapeResourcePackBuilderTest.
Not done (deliberately, with reasons)
- Hitboxes / Crystal Optimizer / Armor HUD live data. These need a native entity/camera feed. As documented at length in
AGENTS.md(verified against the reallibminecraftpe.so), game classes are stripped of exported symbols and the reachable RTTI vtables are pure-virtual interface bases, so there is no way to obtainLevel*/ClientInstance*without per-build byte-pattern signatures. The modules keep their honest "awaiting game data" state rather than fabricating readings. - Lint:
lintDebugalready fails on ~355 pre-existingMissingTranslationerrors unrelated to this change; not addressed here.
This change was created by Malice 🤔🤔
Bug fixes + 2 new mod menu modules
Switches the Installations tab to mcpe-planet.com, fixes three combat-module defects (settings not saving, and hit registration / aim settings adding input delay), and adds two new PvP modules: Hitboxes and Select Hit.
- Installations source → mcpe-planet.com
McpePlanetSource is added and registered first in SourceRegistry, so it becomes the active source out of the box. mcpedl.org is retained as an alternative — adding a mirror remains the documented two-step process (implement BedrockSource, add to all()), with no change to the UI, download client or import pipeline.
Verified against the live site rather than a hand-written fixture: 12 versions parsed (1.26.60.28/24, 26.51, 26.50) and the full POST download flow resolved end-to-end to a real wp-content/uploads/version/...apk.
2. Module settings not saving
Root cause: configNode() mapped every non-toggle config type to slider_int. Consequences:
The Crystal keybind rendered as a 0–100 slider and wrote a small integer over the stored key code.
The Aim Settings style radio lost its options entirely.
Fixed with schemaTypeFor(), which covers every ConfigType, plus InbuiltModuleProviderTypeTest pinning the mapping (including that a keybind must never collapse to a slider).
While there I found the _desc help strings and all the module scope notes had no consumer in code or layout — they were dead strings. They are now wired into the dialog, including an info node per combat module carrying its scope note. configDescriptionRes is an explicit switch rather than a name lookup, so a renamed key cannot silently bind to an unrelated string.
3. Hit registration / aim settings adding delay
A real bug, and the exact opposite of the module's stated purpose:
BURST_GAP_MS was 16L, just under one 60 Hz frame (16.7 ms). The smoothing filter therefore classified nearly every frame as a new gesture and reseeded constantly.
The reseed zeroed the filter, discarding (1 − smoothing) of each gesture's opening delta.
Both fixed in HitRegistrationMod and AimSettingsMod: window raised to 120 ms, and the filter is seeded with the frame instead of zero, so steady motion passes 1:1 and smoothing only damps frame-to-frame jitter. Tests updated to assert the first frame of a gesture is not attenuated and that 60 Hz frame pacing stays within one burst.
4. New: Hitboxes
Entity boxes plus an aim line. Players additionally get a red critical-hit line and a red best-combo box, both turning blue when aimed at.
HitboxProjector is pure (no Android/game types) and holds all the arithmetic: camera basis, box projection, crit band, combo box, and a crosshair slab test so the blue highlight cannot disagree with the geometry actually drawn. 18 tests.
The tests caught a real bug: Camera.forward() used the naive spherical form (sin yaw, …), which is counter-clockwise, while the documented Minecraft convention is clockwise from +Z. That would have mirrored every projected box horizontally once a real feed supplied yaw. Fixed, with new tests pinning the up vector too.
HitboxMod.EntitySource is the game-data seam. With no provider nothing is drawn — an invented box is worse than no box, because the player would aim at it.
The overlay is FLAG_NOT_TOUCHABLE and non-draggable, since boxes are world-positioned and the whole screen is the canvas.
- New: Select Hit
A small top-centre green/red pill (96×26 dp, deliberately clear of the crosshair and hotbar) showing when the next hit will land, with a combo count and a slim progress bar.
HitTimingSolver is pure; 13 tests. A click inside the window must not advance the combo or push the window out — counting a discarded click would make the indicator lie about both the streak and the next hit. A backwards clock is treated as a fresh engagement rather than producing a negative remaining time.
The window is clamped (50..2000 ms) and exposed as a slider, because the real cooldown varies by version.
Attack input is recorded from the paths that actually send an attack (mouse primary, and the controller mouse-button path in dispatchKeyEvent), before the preloader may consume the press — the player pressed attack either way, so the timing is the real input timing.
Honest limitations
Armor HUD still cannot display real durability, and Hitboxes cannot display real entity positions. I investigated rather than assuming: the preloader submodule exports only menu/HUD hooks, input handling and mod loading — there are no game-state entry points for entities, armor or position. Any values would have to be fabricated. Both DataSource/EntitySource are left as honest seams that render nothing (or a dimmed -), and the dialog now states this in-app rather than the feature appearing silently broken.
Fixing this needs new native hooks in the preloader submodule, which is a separate change.
Testing
381 unit tests, 0 failures, 0 errors (baseline on main: 322).
:app:compileDebugJavaWithJavac, :app:compileDebugKotlin and a full :app:assembleDebug all pass.
APK verified: lib/arm64-v8a/libgxcore.so present, and all six new classes present in the dex.
No mocks — every new test exercises real code paths.
Lint is unchanged: the project has no lint baseline and lintDebug already fails on ~355 pre-existing MissingTranslation errors, which is not a regression from this change.
Notes for reviewers
New modules are in ModIds.PVP_MODULES so they land in the PvP tab, and ModIds.requiresGameData() now marks three modules (armor, crystal, hitbox).
AGENTS.md updated with the new modules, the yaw convention, the config-description wiring, and the input-delay root cause.
BIG UPDATES
Changes since V6
Rebrand to Chimera Client (PR #66) — org.chimeramc.launcher → org.chimeramc.client across ~318 files, including namespace, applicationId and app name. The preloader submodule's JNI symbols were renamed to match. org.levimc.* classes and the prebuilt libgxcore.so/libinbuiltmods.so were left alone since they have no source and would UnsatisfiedLinkError. The org.chimeramc.xal.crypto pref key and games/org.chimeramc storage root were preserved so existing data isn't stranded.
Installations tab (PRs #61, #62) — new tab that lists Bedrock versions a mirror publishes and installs one as its own instance. Started on monster-mcpe.com (Cloudflare-gated, WebView required), then refactored to a pluggable BedrockSource/SourceRegistry abstraction defaulting to mcpedl.org (plain HTTP, no challenge — browser demoted to a 403 fallback). Failed installs keep the downloaded package for "Retry Import".
UI/branding overhaul (PR #63) — violet/magenta palette replacing the inherited green/cyan, shared card system (Widget.Chimera.Card* driven by dimens.xml), new splash and original ant-vector icon.
Navigation restored to top bar (PRs #64, #65) — the overhaul's vertical side rail could only fit ~2 of 6 tabs in landscape, so it was reverted and the original top bar brought back.
PvP Mod Menu tab (PR #67) — a PvP filter/section grouping Aim Settings, CPS Display and Snaplook, via ModIds.isPvpModule() + GROUP_PVP.
Combat modules (PR #68) — Armor HUD, Crystal Optimizer and Hit Registration, each built as decision logic behind an explicit game-data seam (no live game state is readable in this repo, so nothing fabricates a reading).
News push notification (PR #60) — FCM notification now uses a fixed "New Version Available" message instead of echoing the news item's own title/summary.
BIGGEST PVP/STABILITY/PREFORMANCE/FEATURE UPDATE !!!
BIGGEST UPDATE LOTS OF BUGS FIXES, FEATURES FOR CONTROLLER PLAYERS, BETTER UI CUSTOMIZATION, ANTI STICK DRIFT TOGGLE
More UI improvements, bug fixes, fps and overall launcher boost
V5 Merge pull request #55 from ChimeraAnt-DEV/feature/ui-glass-dynamic-c…