NMod
Nmod是一种用来Modify Minecraft的工具,从而实现游戏里没有的功能
具体实现是使用Cydia Substrate来Hook掉libminecraftpe.so里的函数
前置知识
你只需要知道一些C++&JNI的知识
准备工作
- 你需要安装正确匹配版本的ModdPE与Minecraft PE
- 一个载有Android Studio的电脑(我这里使用的是Mac,不过差不多)
- 从http://www.cydiasubstrate.com/id/73e45fe5-4525-4de7-ac14-6016652cc1b8/
下载SubstrateSDK
Step1:Create Project
创建一个新的Android NDK项目,我这里取名叫NMod_Tutorial

※不需要在AndroidManifest.xml里改任何东西,那是BlockLauncher Addon的需要
Step2:Set up CMake
移到CMakeLists.txt

去掉注释会发现里面东西其实很少
1 | cmake_minimum_required(VERSION 3.4.1) |
这句是指定CMake最小版本的需求
1 | add_library( |
这句是将native-lib.cpp编译成一个名叫native-lib的SHARED库(动态链接库)(你当然可以自己命名成别的库),然后可以在Java里LoadLibrary(这里是顺口一提,做NMod时并不需要什么Java代码的使用)
然后等你打包好apk后,ModdPE会根据nmod_manifest文件用你指定的.so(后文会讲)
例如,如果您在构建脚本中指定“native-lib”作为共享库的名称,CMake 将创建一个名称为 libnative-lib.so 的文件。不过,在 Java 代码中加载此库时,请使用您在 CMake 构建脚本中指定的名称:
static {
System.loadLibrary(“native-lib”);
}
find_library(
log-lib
log)
这句是将liblog-lib.so添加到log中,以便你使用这个Log库
1 | target_link_libraries( |
这句话是将log库与你的库链接起来
我们的目标是利用Substrate来Hook掉libminecraftpe.so
那么我们得加载libsubstrate.so(位于你下载的SDK中)以及libminecraftpe.so(将你的Minecraft.apk的后缀改成.zip然后解压即可获得)
在/app目录下新增一个libs文件夹

里面建一个armeabi-v7a的文件夹(我们只需要做这个架构的NMnod,因为MinecraftPE本身就是32x的)
然后把上面说到的两个so拖进去

进入CmakeLists.txt,在findLibrary后加入
1 | add_library(substrate SHARED IMPORTED) |
这涉及到Cmake的使用方法,具体可以去
1 | target_link_libraries( |
光有库没用,我们知道还需要头文件的添加
其实我们只需要有Substrate.h就够了,但是为了让编译通过,我们不得不加入mcpe的头文件
在/src文件夹下创建include文件夹,并在CmakeLists.txt findLibrary前加入
1 | include_directories(${CMAKE_SOURCE_DIR}/include) |
Last Step
配置一下build.gradle
设置ABI filter(只要32x)
在设置一下Cmake文件位置

然后在写完了NMod后,在/src/main里建一个assets文件夹(如果没有的话)
在里面新建一个nmod_manifest.json来写你的NMod配置文件
基本要素有:
{
“name” : NMod名称,
“package_name” : 包名,
“author” : 作者,
“native_libs_info”:
[
{
“name”: 你的.so起的名字,
“use_api”: 是否使用api,我们不使用,所以填”false”
}
],
“version_code”: 版本号,
“version_name”: 版本名,
“minecraft_version_name” : 支援的MinecraftPE版本,
“description”: 描述
}
然后就可以编辑你的cpp档案开始你的MinecraftPE-modify了
ps. 如果你找不到以上所需的任何一个资源或有疑惑,可以在评论留言,不过也可以加839574598(QQ群),里面有很多大佬,而且他们都很热心帮你解答问题(里面还有NMod模版,可快速开始工程)