Minecraft: Pi Edition: Reborn(MCPI)の2.4系から拡張用のSDK(ソフトウェア開発キット)が公開されたので試してみた。
といっても、現時点ではドキュメントに従い、ターミナル上にHelloworldの文字列を出力しただけ。
Minecraft: Pi Edition: Reborn on Ubuntu
とりあえず、MCPIの環境構築から改めて。
Raspberry Pi 4 8G
OS:Raspberry Pi OS 64ビット(arm64:Bullseye)
MCPI:2.4.3-3(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
で一度立ち上げて、
表示されたウィンドウはすぐに閉じる。
最初に開発に必要な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を実行してみる。
ウィンドウが立ち上がった後に端末に出力された値を見てみると、
$ 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(){}
のエントリポイントのような役割になっているそうだ。
次はゲーム画面内で何らかの影響があるコードを作成したい。