Skip to content

Latest commit

 

History

History
96 lines (67 loc) · 3.86 KB

File metadata and controls

96 lines (67 loc) · 3.86 KB

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

Symbol Description Notes
mcpelauncher_log Logs a message Deprecated; use Android liblog
mcpelauncher_vlog Logs a verbose message Deprecated; use Android liblog

Hook Initialization

Symbol Signature Description
mcpelauncher_preinithook2 void(const char* name, void* sym, void* user, void (*callback)(void*, void*)) Registers a pre-init hook with a callback
mcpelauncher_preinithook void(const char* name, void* sym, void** orig) Registers a pre-init hook and stores original symbol

Hook Management

Symbol Signature Description
mcpelauncher_hook void*(void* sym, void* hook, void** orig) Creates and applies a hook for a symbol
mcpelauncher_hook2 void*(void* lib, const char* sym, void* hook, void** orig) Creates a hook for a symbol in a specific library
mcpelauncher_hook2_add_library void(void* lib) Adds a library to the hook manager
mcpelauncher_hook2_remove_library void(void* lib) Removes a library from the hook manager
mcpelauncher_hook2_delete void(void* hook) Deletes a hook instance
mcpelauncher_hook2_apply void() Applies all registered hooks

Memory Patching

Symbol Signature Description
mcpelauncher_patch void*(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

Symbol Description
mcpelauncher_host_dlopen Wrapper for dlopen
mcpelauncher_host_dlsym Wrapper for dlsym
mcpelauncher_host_dlclose Wrapper for dlclose
mcpelauncher_dlclose_unlocked Custom unlocked dlclose

Symbol Relocation

Symbol Signature Description
mcpelauncher_relocate void(void* handle, const char* name, void* hook) Relocates a single symbol
mcpelauncher_relocate2 void(void* handle, size_t count, hook_entry* entries) Relocates multiple symbols
mcpelauncher_load_library void(const char* name, size_t count, hook_entry* entries) Loads a library and applies hooks
mcpelauncher_unload_library void(void* handle) Unloads a previously loaded library

Data Structures

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

Used for batch relocation and library loading.