Ambient Launcher
A dedicated utility environment for Minecraft Bedrock on Android. Zero memory leaks, zero input delay. Just Minecraft, the way it should run.
Everything you need.
Nothing you don't.
Version Selector
Switch between game versions instantly with isolated saves, mods, and settings.
Shader Loader
Apply and swap shader packs in seconds.
Pack Manager
View and manage your packs with ease.
World Manager
Duplicate, backup, import and export worlds.
Playtime Stats
Track sessions, time and per-world activity.
Curseforge Integration
Install and manage mods inside Ambient without extra tools.
More tools built in.
NBT Data Editor
Structure Extractor
Skin Loader
Resourcepack Import
In-game Stats
Client Logs
Storage & Paths
Storage is pre-defined for stability. Toggling Internal/External storage is not supported — this is expected. All game files remain accessible for manual backup or modding.
You may need a file manager that can access Android/media — Shizuku + ZArchiver or similar works on modern Android.
Known Bugs
- Persistence: Settings reset when toggling between AmbientUI and OreUI.
- Resource Packs: Imported packs expose textures in gallery apps. Fix: add an empty .nomedia file in Android/media/io.kitsuri.mayape/.
- Add-ons: .mcaddon files aren't supported yet — force load them manually.
Changelog
- Fixed Marketplace issues
- Fixed Dressing Room / Skins not working
- Fixed servers not loading
- Fixed key mapper crash
- Fixed shader loader for version 1.26.10.4
- Added more customization options
- Added keymap button lock
- Improved overall performance
- Added RenderAPI::Register(cb fun ptr)
- Added RenderAPI::Unregister(cb fun ptr)
- Added TouchAPI::RegisterCallback(cb)
- Added TouchAPI::UnregisterCallback(cb)
- Added KeyApi::RegisterHandler(handler)
- Added KeyApi::UnregisterHandler(handler)
- Added TouchEvent fields: action pointerId x y
- Removed Shader auto-fixer — removed to align with YSS changes.
API Reference
JS API overview for Ambient mod development. Primary template: Lodingglue/nise-api
Logging
log(message)
Routes messages through the client logger (tag: "JS").
log("Script initialized successfully.");
Utility Functions
readFile(path)
Read a file from the device filesystem.
const data = readFile("/sdcard/MyMod/patch.bin");
writeFile(path, data)
Write data to a file on the device filesystem.
writeFile("/sdcard/MyMod/log.txt", "hello world");
Virtual Assets
VirtualAssets.addFile(path, data)
Inject a virtual asset into the game's asset system at runtime.
VirtualAssets.addFile("textures/terrain/grass.webp", buf);
Hooking
Hook.hookAddr(name, targetAddr, hookFunc, originalFunc, hookType, priority)
Installs an inline hook at targetAddr.
const tramp = Hook.hookAddr(
"myHook", target, myReplacementFn,
origPtr, Hook.Type.INLINE, Hook.Priority.HIGH
);
Hook.patchNop(name, addr, size = 4)
Patches instructions with NOPs.
Hook.patchNop("disableCheck", Hook.getBaseAddr() + 0xDEAD, 8);
Render API V1.0.4
RenderAPI::Register(cb fun ptr)
Registers a callback invoked each render frame.
RenderAPI::Register(myRenderCallback);
RenderAPI::Unregister(cb fun ptr)
Unregisters a previously registered render callback.
RenderAPI::Unregister(myRenderCallback);
Touch API V1.0.4
TouchAPI::RegisterCallback(cb)
Registers a callback to receive touch events with action, pointerId, x, y.
TouchAPI::RegisterCallback(function(event) {
log("Touch at " + event.x + ", " + event.y
+ " | pointer: " + event.pointerId
+ " | action: " + event.action);
});
TouchAPI::UnregisterCallback(cb)
TouchAPI::UnregisterCallback(myTouchCallback);
TouchEvent Fields
| Field | Type | Description |
|---|---|---|
action | int | Touch action type (down, move, up…) |
pointerId | int | Unique ID per active touch pointer |
x | float | X coordinate of the touch point |
y | float | Y coordinate of the touch point |
Key API V1.0.4
KeyApi::RegisterHandler(handler)
Registers a handler to receive key input events.
KeyApi::RegisterHandler(myKeyHandler);
KeyApi::UnregisterHandler(handler)
KeyApi::UnregisterHandler(myKeyHandler);