This commit is contained in:
parent
88843f6cbe
commit
62204aa1bf
2
Jenkinsfile
vendored
2
Jenkinsfile
vendored
@ -21,7 +21,7 @@ pipeline {
|
||||
withCredentials([usernamePassword(credentialsId: 'docker_hub_login', usernameVariable: 'DOCKER_HUB_USERNAME', passwordVariable: 'DOCKER_HUB_PASSWORD')]) {
|
||||
sh 'docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}"'
|
||||
}
|
||||
sh 'docker push thebrokenrail/minecraft-pi'
|
||||
sh 'docker push thebrokenrail/minecraft-pi-reborn'
|
||||
}
|
||||
}
|
||||
stage('Package') {
|
||||
|
@ -1,17 +1,17 @@
|
||||
# Modding
|
||||
Modding Minecraft: Pi Edition is possible by patching the binary at runtime. To make this easier ``minecraft-pi-docker`` includes a libary called ``libcore.so`` which provides several functions to help you patch the game.
|
||||
Modding Minecraft: Pi Edition is possible by patching the binary at runtime. To make this easier ``minecraft-pi-reborn`` includes a library called ``libcore.so`` which provides several functions to help you patch the game.
|
||||
|
||||
## Hex Addresses
|
||||
Minecraft: Pi Edition has no symbols so you must patch the hex address of an instruction instead of using a function name. Hex addresses can be found using tools like [Ghidra](https://ghidra-sre.org) or [RetDec](https://retdec.com). To find out what a function does, you can find its equivalent in Minecraft: Pocket Edition 0.6.1 and use its name for reference because Minecraft: Pocket Edition 0.6.1 includes symbols.
|
||||
|
||||
## Loading Directories
|
||||
``minecraft-pi-docker`` loads mods from two locations, ``/app/minecraft-pi/mods``, and ``~/.minecraft/mods``. The first location only exists in the Docker container and is immutable, so you should place your mods in ``~/.minecraft/mods`` which is mounted on the host as ``~/.minecraft-pi/mods``.
|
||||
``minecraft-pi-reborn`` loads mods from two locations, ``/app/minecraft-pi/mods``, and ``~/.minecraft/mods``. The first location only exists in the Docker container and is immutable, so you should place your mods in ``~/.minecraft/mods`` which is mounted on the host as ``~/.minecraft-pi/mods``.
|
||||
|
||||
## C++ Strings
|
||||
Minecraft: Pi Edition was compiled with an old version of GCC, so when interacting with C++ strings, make sure you set ``-D_GLIBCXX_USE_CXX11_ABI=0``.
|
||||
|
||||
## ``libcore.so`` API
|
||||
Header files and the shared library can be download from [Jenkins](https://jenkins.thebrokenrail.com/job/minecraft-pi-docker/job/master/lastSuccessfulBuild/artifact/out/lib).
|
||||
Header files and the shared library can be download from [Jenkins](https://jenkins.thebrokenrail.com/job/minecraft-pi-reborn/job/master/lastSuccessfulBuild/artifact/out/lib).
|
||||
|
||||
### ``void overwrite(void *start, void *target)``
|
||||
This method replaces a function with another function.
|
||||
|
20
README.md
20
README.md
@ -1,26 +1,26 @@
|
||||
# Minecraft: Pi Edition For Docker
|
||||
This is a project allowing Minecraft: Pi Edition to be run without a Raspberry Pi using Docker.
|
||||
# Minecraft: Pi Edition: Reborn
|
||||
Minecraft: Pi Edition Modding Project
|
||||
|
||||
## Setup
|
||||
1. Remove Old Minecraft: Pi Edition Package If Installed (``sudo apt remove minecraft-pi``)
|
||||
2. Download Appropriate Package (See Table Below) From [Here](https://jenkins.thebrokenrail.com/job/minecraft-pi-docker/job/master/lastSuccessfulBuild/artifact/out/deb/)
|
||||
2. Download Appropriate Package (See Table Below) From [Here](https://jenkins.thebrokenrail.com/job/minecraft-pi-reborn/job/master/lastSuccessfulBuild/artifact/out/deb/)
|
||||
3. Install With ``sudo apt install ./<Path To File>``
|
||||
|
||||
### Packages
|
||||
| Package | Description |
|
||||
| --- | --- |
|
||||
| ``minecraft-pi-server`` | Minecraft Pi Edition Modded Into A Dedicated Server |
|
||||
| ``minecraft-pi-virgl`` | Minecraft Pi Edition Using VirGL For Hardware Acceleration (Recommended For Desktop) |
|
||||
| ``minecraft-pi-native`` | Minecraft: Pi Edition Using Docker Device Mounting For GPU Acceleration (Recommended For ARM Devices (ie. Raspberry Pi, PinePhone, etc)) |
|
||||
| ``minecraft-pi-reborn-server`` | Minecraft Pi Edition Modded Into A Dedicated Server |
|
||||
| ``minecraft-pi-reborn-virgl`` | Minecraft Pi Edition Using VirGL For Hardware Acceleration (Recommended For Desktop) |
|
||||
| ``minecraft-pi-reborn-native`` | Minecraft: Pi Edition Using Docker Device Mounting For GPU Acceleration (Recommended For ARM Devices (ie. Raspberry Pi, PinePhone, etc)) |
|
||||
|
||||
### General Notes
|
||||
|
||||
#### Docker Versions
|
||||
While the distribution-provided version of Docker works fine on most systems, in rare cases it can be outdated and cause bugs. Before reporting a bug, try using the official builds of Docker. These can be installed by following your distribution's instructions at https://docs.docker.com/engine/install.
|
||||
While the distribution-provided version of Docker is fine for most systems, in rare cases it can be outdated and cause bugs. Before reporting a bug, try using the official builds of Docker. These can be installed by following your distribution's instructions at https://docs.docker.com/engine/install.
|
||||
|
||||
### Specific Notes
|
||||
|
||||
#### Raspbian Buster
|
||||
#### Debian/Raspbian Buster
|
||||
By default Raspbian Buster ships an older version of the package ``libseccomp2``. This package is used to block certain dangerous system calls from running inside Docker containers. The included version accidentally blocks the system call ``clock_gettime64``, this causes bugs inside Minecraft: Pi Edition. However, the Debian ``buster-backports`` repo includes an updated version. You can enable the ``buster-backports`` repo and update ``libseccomp2`` by running:
|
||||
|
||||
```sh
|
||||
@ -36,7 +36,7 @@ sudo apt install -t buster-backports libseccomp2
|
||||
```
|
||||
|
||||
### PinePhone (Mobian)
|
||||
This supports running on a PinePhone using Mobian. However, you will need to attach a keyboard and mouse as Minecraft: Pi Edition does not have touch support.
|
||||
This supports running on a PinePhone using Mobian. However, you will need to attach a keyboard and mouse because Minecraft: Pi Edition does not have touch support.
|
||||
|
||||
## Troubleshooting Crashes
|
||||
Game logs are located in ``/tmp/minecraft-pi``.
|
||||
@ -58,7 +58,7 @@ This is also compatible with MCPE 0.6.1.
|
||||
### Limitations
|
||||
- Player data is not saved because of limitations with MCPE LAN worlds
|
||||
- An easy workaround is to place your inventory in a chest before logging off
|
||||
- Survival mode servers are only compatible with ``minecraft-pi-docker`` clients
|
||||
- Survival mode servers are only compatible with ``minecraft-pi-reborn`` clients
|
||||
|
||||
## Modding
|
||||
[View Modding](MODDING.md)
|
||||
|
4
debian/client/native/DEBIAN/control
vendored
4
debian/client/native/DEBIAN/control
vendored
@ -1,4 +1,4 @@
|
||||
Package: minecraft-pi-native
|
||||
Package: minecraft-pi-reborn-native
|
||||
Version: ${VERSION}
|
||||
Maintainer: TheBrokenRail <connor24nolan@live.com>
|
||||
Description: Fun with Blocks
|
||||
@ -6,4 +6,4 @@ Homepage: https://www.minecraft.net/en-us/edition/pi
|
||||
Architecture: all
|
||||
Depends: ${DEPENDENCIES}
|
||||
Recommends: ${RECOMMENDED_DEPENDENCIES}
|
||||
Conflicts: minecraft-pi, minecraft-pi-virgl
|
||||
Conflicts: minecraft-pi, minecraft-pi-reborn-virgl
|
||||
|
4
debian/client/virgl/DEBIAN/control
vendored
4
debian/client/virgl/DEBIAN/control
vendored
@ -1,4 +1,4 @@
|
||||
Package: minecraft-pi-virgl
|
||||
Package: minecraft-pi-reborn-virgl
|
||||
Version: ${VERSION}
|
||||
Maintainer: TheBrokenRail <connor24nolan@live.com>
|
||||
Description: Fun with Blocks
|
||||
@ -6,4 +6,4 @@ Homepage: https://www.minecraft.net/en-us/edition/pi
|
||||
Architecture: all
|
||||
Depends: ${DEPENDENCIES}, virgl-server
|
||||
Recommends: ${RECOMMENDED_DEPENDENCIES}
|
||||
Conflicts: minecraft-pi, minecraft-pi-native
|
||||
Conflicts: minecraft-pi, minecraft-pi-reborn-native
|
||||
|
2
debian/server/DEBIAN/control
vendored
2
debian/server/DEBIAN/control
vendored
@ -1,4 +1,4 @@
|
||||
Package: minecraft-pi-server
|
||||
Package: minecraft-pi-reborn-server
|
||||
Version: ${VERSION}
|
||||
Maintainer: TheBrokenRail <connor24nolan@live.com>
|
||||
Description: Fun with Blocks
|
||||
|
@ -55,5 +55,7 @@ target_link_libraries(override dl)
|
||||
add_library(textures SHARED src/textures/textures.cpp)
|
||||
target_link_libraries(textures core feature GLESv1_CM)
|
||||
|
||||
add_library(test SHARED src/test/test.c)
|
||||
|
||||
add_library(init SHARED src/init/init.c)
|
||||
target_link_libraries(init compat server game_mode camera input misc options textures)
|
||||
target_link_libraries(init compat server game_mode camera input misc options textures test)
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include "init.h"
|
||||
|
||||
__attribute__((constructor)) static void init() {
|
||||
run_tests();
|
||||
init_compat();
|
||||
init_server();
|
||||
init_game_mode();
|
||||
|
@ -6,6 +6,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void run_tests();
|
||||
void init_compat();
|
||||
void init_server();
|
||||
void init_game_mode();
|
||||
|
42
mods/src/test/test.c
Normal file
42
mods/src/test/test.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <libcore/libcore.h>
|
||||
|
||||
#include "../init/init.h"
|
||||
|
||||
// Types
|
||||
typedef long long time64_t;
|
||||
struct timespec64 {
|
||||
time64_t tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
typedef long int time32_t;
|
||||
struct timespec32 {
|
||||
time32_t tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
void run_tests() {
|
||||
// Test clock_gettime64
|
||||
struct timespec64 ts64;
|
||||
long out = syscall(SYS_clock_gettime64, CLOCK_MONOTONIC, &ts64);
|
||||
if (out != 0) {
|
||||
if (errno == ENOSYS) {
|
||||
// clock_gettime64 Unsupported, Testing clock_gettime
|
||||
struct timespec32 ts32;
|
||||
out = syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &ts32);
|
||||
if (out != 0) {
|
||||
// Failure
|
||||
ERR("Unable To Run clock_gettime Syscall: %s", strerror(errno));
|
||||
}
|
||||
} else {
|
||||
// Failure
|
||||
ERR("Unable To Run clock_gettime64 Syscall: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
@ -2,5 +2,5 @@
|
||||
|
||||
set -e
|
||||
|
||||
docker build ${DOCKER_BUILD_OPTIONS} --tag thebrokenrail/minecraft-pi:client -f Dockerfile.client .
|
||||
docker build ${DOCKER_BUILD_OPTIONS} --tag thebrokenrail/minecraft-pi:server -f Dockerfile.server .
|
||||
docker build ${DOCKER_BUILD_OPTIONS} --tag thebrokenrail/minecraft-pi-reborn:client -f Dockerfile.client .
|
||||
docker build ${DOCKER_BUILD_OPTIONS} --tag thebrokenrail/minecraft-pi-reborn:server -f Dockerfile.server .
|
||||
|
Loading…
Reference in New Issue
Block a user