Ambient Launcher

Official release now available. A dedicated utility environment for Minecraft Bedrock on Android.

Download App

Ambient Feature Set

CategoryFeatureCapabilities
File ManagementDirect .mcpack SupportAmbient maps itself to .mcpack files; open them directly from your browser/downloads to import without a file manager.
CoreNative Mod LoaderSeamlessly load native .so modules.
ToolsWorld Structure ExtractorExport structures directly from your save files.
ConfigurationExternal Game Config EditorModify engine-level settings without opening the game.
GraphicsShader LoaderAmbient patches the renderer engine to allow the loading of shaders and material.bin files.
DataWorld ManagerComprehensive backup and level editing tools.

Storage & Expectations

Storage is pre-defined for stability. Users are unable to toggle from Internal (App) to External storage. This is expected. However, all game files remain accessible for manual backup or modding.

/Android/media/io.kitsuri.mayape/games

*Note: You may need a file manager that can access the Android/media directory (like Shizuku + ZArchiver or similar tools on modern Android versions).

Known Bugs

  • Connection Services: Marketplace, Servers, and Realms are disabled. Singleplayer only.
  • Keymapper: Stays active even when the option is toggled off.
  • Persistence: Settings reset when toggling between AmbientUI and OreUI.

API Documentation

JS API and Native API overview for Ambient mod development. Primary template: Lodingglue/nise-api

JS: Logging

log(message)

Routes messages through the client logger (tag: "JS").

log("Script initialized successfully.");

JS: Utility Functions

readFile(path)

const data = readFile("/sdcard/MyMod/patch.bin");

writeFile(path, data)

writeFile("/sdcard/MyMod/log.txt", "hello world");

JS: Virtual Assets

VirtualAssets.addFile(path, data)

VirtualAssets.addFile("textures/terrain/grass.webp", buf);

JS: 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)

Hook.patchNop("disableCheck", Hook.getBaseAddr() + 0xDEAD, 8);