Minecraft: Pi Edition: Reborn(MCPI)の2.4系から拡張用のSDK(ソフトウェア開発キット)が公開されたので試してみた。

といっても、現時点ではドキュメントに従い、ターミナル上にHelloworldの文字列を出力しただけ。

Minecraft: Pi Edition: Reborn on Ubuntu

ソフトウェア開発キット - Wikipedia


とりあえず、MCPIの環境構築から改めて。

Raspberry Pi 4 8G

OS:Raspberry Pi OS 64ビット(arm64:Bullseye)

MCPI:2.4.3-3(MCPI++の方)

Raspberry PiにMCPI++を入れてみた


MCPI++のインストールを改めて触れてみる。

$ wget https://github.com/NoozSBC/mcpi-reborn-extended/releases/download/2.4.3-3/minecraft-pi-reborn-client-2.4.3-3-arm64.AppImage
$ sudo mv minecraft-pi-reborn-client-2.4.3-3-arm64.AppImage mcpi
$ sudo chmod a+x mcpi
$ sudo mv mcpi /usr/local/bin

これで端末でmcpiコマンドを実行するだけでMCPI++が立ち上がるようになった。


$ mcpi

で一度立ち上げて、


mcpipp_tmb


表示されたウィンドウはすぐに閉じる。




最初に開発に必要なC++用のコンパイラを入れておく。

$ sudo apt install gcc-arm-linux-gnueabihf
$ sudo apt install libncurses-dev
$ sudo apt install libqt4-dev pkg-config
$ sudo apt install u-boot-tools
$ sudo apt install device-tree-compiler
$ sudo apt install g++-arm-linux-gnueabih

※不要なコマンドがあるかもしれないけれども確認してない


次に共有ライブラリを作成する。

hello.cpp

#include <stdio.h>

__attribute__((constructor)) static void init() {
        printf("Helloworld\n");
}

ファイルが作成できたら共有ライブラリとしてコンパイルする。

$ arm-linux-gnueabihf-g++ -shared -fPIC -DREBORN_HAS_COMPILED_CODE hello.cpp -o libhello.so
$ mv libhello.so ~/.minecraft-pi/mods/

modsディレクトリ以下に配置するファイル名はlib<modname>.soにする。

今回はlibhello.soにした。


libhello.soを配置した後にmcpiを実行してみる。


mcpipp_tmb


ウィンドウが立ち上がった後に端末に出力された値を見てみると、

$ mcpi
[INFO]: Configuring Game...
[INFO]: Starting Game...
[INFO]: Starting Minecraft: Pi Edition (v0.1.1 alpha / MCPI++ v2.4.3-3)
[WARN]: Raw mouse movement is DISABLED by default. If your mouse is having sensitivity issues, please uncheck "Disable Raw Mouse Motion (WSL)" on launch.
[WARN]: The EGL context is enabled! If you have a NVIDIA graphics card and experience issues, please uncheck the "Force EGL" option from the launcher.
Helloworld
[INFO]: Status: Locating server: 0%

mcpiの開始の直後にlibhello.soで指定したHelloworldの文字列が出力されていた。




mcpi-reborn-extended/MODDING.md at source · NoozSBC/mcpi-reborn-extended · GitHubを読んでみると、

__attribute__((constructor)) static void init() { }

のコードがC++でいうところの

int main(){}

のエントリポイントのような役割になっているそうだ。


次はゲーム画面内で何らかの影響があるコードを作成したい。