MCPELauncher API Reference

This document provides an overview of the MCPELauncher API, detailing the available symbols, their signatures, and descriptions. The API is designed for advanced modding and hooking functionalities in Minecraft Pocket Edition.

Overview

Mods have to be compiled as android shared libraries (.so files) using the Android NDK and placed in the mods directory of the MCPELauncher. The launcher will automatically load these libraries at startup.

The MCPELauncher API allows developers to hook into Minecraft's runtime, modify behavior, and manage dynamic libraries. It provides functions for logging, hooking symbols, patching memory, and handling dynamic libraries.

Accessing the API

Use dlopen("libmcpelauncher_mod.so", RTLD_NOW) and dlsym to access the API. The symbols are defined in the libmcpelauncher_mod.so shared library.

Otherwise declare the symbols as weak, extern "C" in your C++ code to avoid name mangling and allow the launcher to provide the implementations.

extern "C" {
    __attribute__((weak)) void* mcpelauncher_hook(void* sym, void* hook, void** orig);
    __attribute__((weak)) void* mcpelauncher_hook2(void* lib, const char* sym, void* hook, void** orig);
    // ... other symbols
}

Logging Functions

SymbolDescriptionNotes
mcpelauncher_logLogs a messageDeprecated; use Android liblog
mcpelauncher_vlogLogs a verbose messageDeprecated; use Android liblog

Hook Initialization

SymbolSignatureDescription
mcpelauncher_preinithook2void(const char* name, void* sym, void* user, void (*callback)(void*, void*))Registers a pre-init hook with a callback
mcpelauncher_preinithookvoid(const char* name, void* sym, void** orig)Registers a pre-init hook and stores original symbol

Hook Management

SymbolSignatureDescription
mcpelauncher_hookvoid*(void* sym, void* hook, void** orig)Creates and applies a hook for a symbol
mcpelauncher_hook2void*(void* lib, const char* sym, void* hook, void** orig)Creates a hook for a symbol in a specific library
mcpelauncher_hook2_add_libraryvoid(void* lib)Adds a library to the hook manager
mcpelauncher_hook2_remove_libraryvoid(void* lib)Removes a library from the hook manager
mcpelauncher_hook2_deletevoid(void* hook)Deletes a hook instance
mcpelauncher_hook2_applyvoid()Applies all registered hooks

Memory Patching

SymbolSignatureDescription
mcpelauncher_patchvoid*(void* address, void* data, size_t size)Patches memory at a given address
(Apple ARM64 only)Uses pthread_jit_write_protect_np and sys_icache_invalidate for JIT-safe patching

Dynamic Library Handling

SymbolDescription
mcpelauncher_host_dlopenWrapper for dlopen
mcpelauncher_host_dlsymWrapper for dlsym
mcpelauncher_host_dlcloseWrapper for dlclose
mcpelauncher_dlclose_unlockedCustom unlocked dlclose

Symbol Relocation

SymbolSignatureDescription
mcpelauncher_relocatevoid(void* handle, const char* name, void* hook)Relocates a single symbol
mcpelauncher_relocate2void(void* handle, size_t count, hook_entry* entries)Relocates multiple symbols
mcpelauncher_load_libraryvoid(const char* name, size_t count, hook_entry* entries)Loads a library and applies hooks
mcpelauncher_unload_libraryvoid(void* handle)Unloads a previously loaded library

Data Structures

struct hook_entry {
    const char* name;
    void* hook;
};

Used for batch relocation and library loading.