Compare commits

...

669 Commits

Author SHA1 Message Date
804c9da179 Fix Artifacts v4
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 17m41s
CI / Build (AMD64, Client) (push) Successful in 17m55s
CI / Build (ARM64, Server) (push) Successful in 18m16s
CI / Build (ARM64, Client) (push) Successful in 20m15s
CI / Build (ARMHF, Server) (push) Successful in 13m34s
CI / Build (ARMHF, Client) (push) Successful in 16m49s
CI / Test (Client) (push) Successful in 18m6s
CI / Test (Server) (push) Successful in 17m5s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 10m33s
2024-05-30 22:22:30 -04:00
cdc1a82142 CI Badge!
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (AMD64, Server) (push) Failing after 17m17s
CI / Build (AMD64, Client) (push) Failing after 17m50s
CI / Test (Client) (push) Has been cancelled
CI / Test (Server) (push) Has been cancelled
CI / Build Example Mods (push) Has been cancelled
CI / Release (push) Has been cancelled
CI / Build (ARMHF, Client) (push) Has been cancelled
CI / Build (ARMHF, Server) (push) Has been cancelled
2024-05-30 21:52:15 -04:00
04b9ad5efd Update Dependencies
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 17m48s
CI / Build (AMD64, Client) (push) Successful in 17m58s
CI / Build (ARM64, Server) (push) Successful in 19m24s
CI / Build (ARM64, Client) (push) Successful in 21m40s
CI / Build (ARMHF, Server) (push) Successful in 15m1s
CI / Build (ARMHF, Client) (push) Successful in 18m36s
CI / Test (Server) (push) Successful in 18m4s
CI / Test (Client) (push) Successful in 19m56s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 11m9s
2024-05-27 03:47:04 -04:00
8203e20971 Revert Change, I Did Bad Math
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 16m56s
CI / Build (AMD64, Client) (push) Successful in 17m14s
CI / Build (ARM64, Server) (push) Successful in 18m4s
CI / Build (ARM64, Client) (push) Successful in 20m6s
CI / Build (ARMHF, Server) (push) Successful in 13m46s
CI / Build (ARMHF, Client) (push) Successful in 16m36s
CI / Test (Server) (push) Successful in 17m6s
CI / Test (Client) (push) Successful in 19m15s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 10m46s
2024-05-24 22:23:58 -04:00
4dc69885f2 Fix
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 17m7s
CI / Build (AMD64, Client) (push) Successful in 17m26s
CI / Build (ARM64, Server) (push) Successful in 18m41s
CI / Build (ARM64, Client) (push) Successful in 20m23s
CI / Build (ARMHF, Server) (push) Successful in 13m38s
CI / Build (ARMHF, Client) (push) Successful in 16m53s
CI / Test (Client) (push) Failing after 14m36s
CI / Test (Server) (push) Failing after 15m8s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 11m12s
2024-05-24 17:52:54 -04:00
36cb84b672 Tweak QEMU Base
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-05-24 17:42:42 -04:00
f53f405bdd The Compiler Strikes Back!
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 17m14s
CI / Build (AMD64, Client) (push) Successful in 17m16s
CI / Build (ARM64, Server) (push) Successful in 18m11s
CI / Build (ARM64, Client) (push) Successful in 20m30s
CI / Build (ARMHF, Server) (push) Successful in 13m28s
CI / Build (ARMHF, Client) (push) Successful in 16m48s
CI / Test (Server) (push) Successful in 17m56s
CI / Test (Client) (push) Successful in 19m32s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 13m42s
2024-05-24 04:44:53 -04:00
60a5accff2 Fix Another Link 2024-05-22 02:57:00 -04:00
c9fafd6cd4 Use Different Discord URL
Some checks failed
CI / Build (AMD64, Client) (push) Failing after 12h35m51s
CI / Build (AMD64, Server) (push) Failing after 12h35m50s
CI / Build (ARM64, Server) (push) Successful in 13m2s
CI / Build (ARM64, Client) (push) Successful in 15m23s
CI / Build (ARMHF, Server) (push) Successful in 8m56s
CI / Build (ARMHF, Client) (push) Successful in 11m25s
CI / Release (push) Has been skipped
CI / Test (Server) (push) Successful in 14m19s
CI / Test (Client) (push) Successful in 17m15s
CI / Build Example Mods (push) Successful in 8m2s
2024-05-22 02:29:54 -04:00
668552e354 Mention Discord In Docs
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-05-22 02:23:15 -04:00
fedc006a4b Remove Reference To Deleted File
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-05-22 02:15:21 -04:00
1dc23fe615 Remove Line
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-05-22 02:04:44 -04:00
ef3f8da720 One More Tweak
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-05-22 01:56:35 -04:00
eca42150cb Improve Getting Started (Thanks ChatGPT!)
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-05-22 01:53:36 -04:00
db45df1e52 Update Documentation
Some checks failed
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Successful in 12m36s
CI / Build (AMD64, Client) (push) Successful in 13m1s
CI / Build (ARM64, Client) (push) Has been cancelled
CI / Build (ARM64, Server) (push) Has been cancelled
2024-05-22 01:32:52 -04:00
0e44bb5f06 Add Welcome Screen 2024-05-21 19:16:19 -04:00
3088a13725 Tweak Loading
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m14s
CI / Build (AMD64, Client) (push) Successful in 12m31s
CI / Build (ARM64, Server) (push) Successful in 13m10s
CI / Build (ARM64, Client) (push) Successful in 15m41s
CI / Build (ARMHF, Server) (push) Successful in 8m59s
CI / Build (ARMHF, Client) (push) Successful in 11m26s
CI / Test (Server) (push) Successful in 13m8s
CI / Test (Client) (push) Successful in 16m47s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m9s
2024-05-20 16:37:55 -04:00
56d93f0150 Tweak Text Wrapping
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m17s
CI / Build (AMD64, Client) (push) Successful in 13m39s
CI / Build (ARM64, Server) (push) Successful in 13m37s
CI / Build (ARM64, Client) (push) Successful in 16m16s
CI / Build (ARMHF, Server) (push) Successful in 9m25s
CI / Build (ARMHF, Client) (push) Successful in 12m21s
CI / Test (Server) (push) Successful in 15m8s
CI / Test (Client) (push) Successful in 16m28s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m3s
2024-05-19 00:19:01 -04:00
3132f9442d Better Error Message 2024-05-18 21:25:11 -04:00
b129f0a503 Attack Of The Templates!
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m3s
CI / Build (AMD64, Client) (push) Successful in 13m21s
CI / Build (ARM64, Server) (push) Successful in 13m52s
CI / Build (ARM64, Client) (push) Successful in 16m29s
CI / Build (ARMHF, Server) (push) Successful in 9m26s
CI / Build (ARMHF, Client) (push) Successful in 12m33s
CI / Test (Server) (push) Successful in 14m51s
CI / Test (Client) (push) Successful in 16m35s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m26s
2024-05-18 18:58:39 -04:00
97bc124d72 Better Static Properties
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 14m16s
CI / Build (AMD64, Client) (push) Successful in 14m37s
CI / Build (ARM64, Server) (push) Successful in 13m0s
CI / Build (ARM64, Client) (push) Successful in 15m26s
CI / Build (ARMHF, Server) (push) Successful in 8m58s
CI / Build (ARMHF, Client) (push) Successful in 11m38s
CI / Test (Server) (push) Successful in 14m12s
CI / Test (Client) (push) Successful in 16m37s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m50s
2024-05-17 02:52:55 -04:00
b23f7f1618 Remove alloc_*() Functions 2024-05-17 00:36:28 -04:00
bbaa69edeb Tweak Reborn Info Screen
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m2s
CI / Build (AMD64, Client) (push) Successful in 13m22s
CI / Build (ARM64, Server) (push) Successful in 13m18s
CI / Build (ARM64, Client) (push) Successful in 15m57s
CI / Build (ARMHF, Server) (push) Successful in 9m11s
CI / Build (ARMHF, Client) (push) Successful in 12m14s
CI / Test (Server) (push) Successful in 14m14s
CI / Test (Client) (push) Successful in 16m5s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m55s
2024-05-16 21:59:51 -04:00
6cfc1a7e20 Small Tweaks
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m46s
CI / Build (AMD64, Client) (push) Successful in 13m3s
CI / Build (ARM64, Server) (push) Successful in 13m8s
CI / Build (ARM64, Client) (push) Successful in 15m26s
CI / Build (ARMHF, Server) (push) Successful in 9m10s
CI / Build (ARMHF, Client) (push) Successful in 11m55s
CI / Test (Server) (push) Successful in 14m0s
CI / Test (Client) (push) Successful in 16m6s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m55s
2024-05-16 04:07:02 -04:00
f25a2adcef Update More Methods!
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m47s
CI / Build (AMD64, Client) (push) Successful in 13m7s
CI / Build (ARM64, Server) (push) Successful in 13m7s
CI / Build (ARM64, Client) (push) Successful in 15m38s
CI / Build (ARMHF, Server) (push) Successful in 9m9s
CI / Build (ARMHF, Client) (push) Successful in 11m46s
CI / Test (Server) (push) Successful in 14m4s
CI / Test (Client) (push) Successful in 16m33s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m55s
2024-05-15 05:08:39 -04:00
6ae475785e Fix Newlines 2024-05-15 05:06:36 -04:00
51bbad15f4 Use New Method Call Style
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-05-15 05:02:19 -04:00
73454adc22 Refactor Logging
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m31s
CI / Build (AMD64, Client) (push) Successful in 12m51s
CI / Build (ARM64, Server) (push) Successful in 13m2s
CI / Build (ARM64, Client) (push) Successful in 15m33s
CI / Build (ARMHF, Server) (push) Successful in 9m14s
CI / Build (ARMHF, Client) (push) Successful in 12m4s
CI / Test (Server) (push) Successful in 14m15s
CI / Test (Client) (push) Successful in 16m20s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m6s
2024-05-14 01:23:16 -04:00
4d54a9d28c Refactor Launcher
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 13m26s
CI / Build (AMD64, Client) (push) Successful in 13m45s
CI / Build (ARM64, Server) (push) Successful in 14m6s
CI / Build (ARM64, Client) (push) Successful in 16m50s
CI / Build (ARMHF, Server) (push) Successful in 9m35s
CI / Build (ARMHF, Client) (push) Successful in 12m27s
CI / Test (Server) (push) Successful in 15m7s
CI / Test (Client) (push) Successful in 16m38s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Failing after 8m12s
2024-05-12 03:19:01 -04:00
d7616419bc Fix Server Build
All checks were successful
CI / Build (AMD64, Client) (push) Successful in 13m1s
CI / Build (AMD64, Server) (push) Successful in 13m30s
CI / Build (ARM64, Server) (push) Successful in 14m22s
CI / Build (ARM64, Client) (push) Successful in 15m26s
CI / Build (ARMHF, Server) (push) Successful in 9m40s
CI / Build (ARMHF, Client) (push) Successful in 12m59s
CI / Test (Client) (push) Successful in 16m15s
CI / Test (Server) (push) Successful in 13m38s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m16s
2024-05-11 22:06:37 -04:00
823495a811 Fix QEMU Build
Some checks failed
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Failing after 8m0s
CI / Build (AMD64, Client) (push) Successful in 12m20s
CI / Build (ARM64, Server) (push) Failing after 8m36s
CI / Build (ARM64, Client) (push) Successful in 13m48s
CI / Build (ARMHF, Client) (push) Has been cancelled
CI / Build (ARMHF, Server) (push) Has been cancelled
2024-05-11 21:43:28 -04:00
03c7c50d48 Trampoline
Some checks failed
CI / Build (AMD64, Server) (push) Failing after 7m39s
CI / Build (AMD64, Client) (push) Failing after 11m40s
CI / Build (ARM64, Server) (push) Failing after 8m50s
CI / Build (ARM64, Client) (push) Failing after 13m21s
CI / Build (ARMHF, Client) (push) Has been cancelled
CI / Build (ARMHF, Server) (push) Has been cancelled
CI / Test (Client) (push) Has been cancelled
CI / Test (Server) (push) Has been cancelled
CI / Build Example Mods (push) Has been cancelled
CI / Release (push) Has been cancelled
2024-05-11 21:14:14 -04:00
f15625ff79 UI Tweaks 2024-05-10 19:50:28 -04:00
e2d32cad21 Add QEMU Patch 2024-05-10 18:58:39 -04:00
eeef63d9ef Improve Creative Restrictions Mod
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m26s
CI / Build (AMD64, Client) (push) Successful in 13m47s
CI / Build (ARM64, Server) (push) Successful in 13m36s
CI / Build (ARM64, Client) (push) Successful in 14m0s
CI / Build (ARMHF, Server) (push) Successful in 9m34s
CI / Build (ARMHF, Client) (push) Successful in 12m46s
CI / Test (Client) (push) Successful in 15m57s
CI / Test (Server) (push) Successful in 13m22s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m19s
2024-05-09 19:03:48 -04:00
e1f0787e48 Fix Layering Iverwrites 2024-05-09 17:50:02 -04:00
37e1abbdd3 Fix Splash Animation
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m6s
CI / Build (AMD64, Client) (push) Successful in 13m29s
CI / Build (ARM64, Server) (push) Successful in 13m22s
CI / Build (ARM64, Client) (push) Successful in 14m9s
CI / Build (ARMHF, Server) (push) Successful in 9m25s
CI / Build (ARMHF, Client) (push) Successful in 12m41s
CI / Test (Client) (push) Successful in 16m6s
CI / Test (Server) (push) Successful in 13m40s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m59s
2024-05-09 04:19:08 -04:00
c88db307d7 Reduce Code Duplication
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-05-09 02:55:30 -04:00
75fc48da24 One Last Fix
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 13m34s
CI / Build (AMD64, Client) (push) Successful in 14m8s
CI / Build (ARM64, Client) (push) Successful in 13m53s
CI / Build (ARM64, Server) (push) Successful in 13m32s
CI / Build (ARMHF, Server) (push) Successful in 9m24s
CI / Build (ARMHF, Client) (push) Successful in 12m37s
CI / Test (Client) (push) Successful in 16m0s
CI / Test (Server) (push) Successful in 13m24s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 8m1s
2024-05-09 02:20:09 -04:00
cd39733177 Update Changelog & Fix Flatpak Detection In Info Screen
Some checks failed
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (ARM64, Client) (push) Has been cancelled
CI / Build (ARM64, Server) (push) Has been cancelled
CI / Build (ARMHF, Client) (push) Has been cancelled
CI / Build (ARMHF, Server) (push) Has been cancelled
CI / Test (Client) (push) Has been cancelled
CI / Test (Server) (push) Has been cancelled
CI / Build Example Mods (push) Has been cancelled
CI / Release (push) Has been cancelled
2024-05-09 02:06:24 -04:00
592d6c4e63 Simplify CMake
Some checks failed
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Successful in 13m53s
CI / Build (AMD64, Client) (push) Successful in 14m25s
CI / Build (ARM64, Client) (push) Has been cancelled
CI / Build (ARM64, Server) (push) Has been cancelled
2024-05-09 01:38:57 -04:00
d519142a8a Fancy Info Screen 2024-05-09 01:25:53 -04:00
09bae1cf3e Split Up Options Mod 2024-05-08 20:18:50 -04:00
4523935d62 Fix Example Mod (Again)
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m25s
CI / Build (AMD64, Client) (push) Successful in 12m48s
CI / Build (ARM64, Server) (push) Successful in 12m48s
CI / Build (ARM64, Client) (push) Successful in 13m18s
CI / Build (ARMHF, Server) (push) Successful in 9m15s
CI / Build (ARMHF, Client) (push) Successful in 12m53s
CI / Test (Client) (push) Successful in 15m7s
CI / Test (Server) (push) Successful in 12m23s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m44s
2024-05-05 02:17:46 -04:00
Bigjango13
f3f8e342d8 More chunk symbols
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m46s
CI / Build (AMD64, Client) (push) Successful in 13m8s
CI / Build (ARM64, Client) (push) Successful in 13m13s
CI / Build (ARM64, Server) (push) Successful in 12m54s
CI / Build (ARMHF, Server) (push) Successful in 9m13s
CI / Build (ARMHF, Client) (push) Successful in 12m15s
CI / Test (Client) (push) Successful in 15m39s
CI / Test (Server) (push) Successful in 13m1s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m42s
2024-05-05 01:06:47 -04:00
Bigjango13
f010e51c3a Add ChunkSource vtable 2024-05-05 01:03:44 -04:00
Bigjango13
91ee97f005 Fix HOOKing mods 2024-05-05 01:03:43 -04:00
Bigjango13
a6b01da677 Fix Tile_lightEmission 2024-05-05 01:02:05 -04:00
Bigjango13
2549670ee4 Add TileRenderer_tesselateTorch 2024-05-05 01:00:51 -04:00
Bigjango13
d0954a22f3 More symbols, remove Entity_moveTo 2024-05-05 01:00:50 -04:00
49a54a7396 Update Symbol Processor
Some checks are pending
CI / Build (AMD64, Client) (push) Waiting to run
CI / Build (AMD64, Server) (push) Waiting to run
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
2024-05-05 00:44:37 -04:00
a305cf9e38 More Changes!
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m33s
CI / Build (AMD64, Client) (push) Successful in 12m58s
CI / Build (ARM64, Server) (push) Successful in 12m56s
CI / Build (ARM64, Client) (push) Successful in 13m35s
CI / Build (ARMHF, Server) (push) Successful in 8m51s
CI / Build (ARMHF, Client) (push) Successful in 12m9s
CI / Test (Client) (push) Successful in 15m39s
CI / Test (Server) (push) Successful in 13m16s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m43s
2024-05-04 20:46:15 -04:00
cf6989bed2 I need to sleep, here be dragons
Some checks failed
CI / Build (AMD64, Server) (push) Failing after 6m39s
CI / Build (AMD64, Client) (push) Successful in 10m47s
CI / Build (ARM64, Client) (push) Successful in 10m26s
CI / Build (ARM64, Server) (push) Failing after 6m43s
CI / Build (ARMHF, Server) (push) Failing after 6m13s
CI / Build (ARMHF, Client) (push) Successful in 11m13s
CI / Release (push) Has been skipped
CI / Test (Client) (push) Failing after 5m45s
CI / Test (Server) (push) Failing after 5m1s
CI / Build Example Mods (push) Failing after 8m54s
2024-04-03 03:19:12 -04:00
b2a7fe3eaf C++-Ification! 2024-04-02 19:22:01 -04:00
7739fb6b9b Update Dependency
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m36s
CI / Build (AMD64, Client) (push) Successful in 12m54s
CI / Build (ARM64, Server) (push) Successful in 12m14s
CI / Build (ARM64, Client) (push) Successful in 13m19s
CI / Build (ARMHF, Server) (push) Successful in 8m54s
CI / Build (ARMHF, Client) (push) Successful in 11m59s
CI / Test (Server) (push) Successful in 12m52s
CI / Test (Client) (push) Successful in 15m10s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m32s
2024-04-02 15:21:35 -04:00
f3755387e8 Improve Mouse Sensitivity On Wayland
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m9s
CI / Build (AMD64, Client) (push) Successful in 12m20s
CI / Build (ARM64, Server) (push) Successful in 12m35s
CI / Build (ARM64, Client) (push) Successful in 13m4s
CI / Build (ARMHF, Server) (push) Successful in 8m47s
CI / Build (ARMHF, Client) (push) Successful in 12m6s
CI / Test (Client) (push) Successful in 14m25s
CI / Test (Server) (push) Successful in 12m22s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m31s
2024-03-19 00:25:50 -04:00
b1b28defd5 Small Change 2024-03-19 00:12:26 -04:00
18c5d34974 Ignore CLion Files 2024-03-19 00:12:26 -04:00
Bigjango13
76a66a0ba5 Sneak in Level_setTileEntity
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 12m25s
CI / Build (AMD64, Client) (push) Successful in 12m41s
CI / Build (ARM64, Server) (push) Successful in 12m25s
CI / Build (ARM64, Client) (push) Successful in 12m56s
CI / Build (ARMHF, Server) (push) Successful in 8m51s
CI / Build (ARMHF, Client) (push) Successful in 11m57s
CI / Test (Client) (push) Successful in 14m36s
CI / Test (Server) (push) Successful in 12m32s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Failing after 7m21s
2024-03-18 21:02:01 -04:00
Bigjango13
a6ad1994de Remove left over check 2024-03-18 19:58:38 -04:00
Bigjango13
8de638eb1a Make chat history edits saved temporarily 2024-03-18 19:44:17 -04:00
Bigjango13
5e5088e3ef Move chat history into chat
- `get_death_message` is no longer static
- Fix ItemInHandRenderer_instance symbol
2024-03-10 22:46:34 -04:00
Bigjango13
a6e0cd8f13 Fix history editing bug
- Use the `get_<var>` pattern for chat's `history`.
- Make the Biome_map comment clearer
2024-03-09 13:01:52 -05:00
Bigjango13
3ff24c2a92 Add chat history
- More symbols too
- Made CUSTOM_VTABLE not static, for modders
2024-03-08 18:03:19 -05:00
d74d1501ce Update Sound Warning
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m33s
CI / Build (AMD64, Client) (push) Successful in 12m47s
CI / Build (ARM64, Server) (push) Successful in 12m35s
CI / Build (ARM64, Client) (push) Successful in 13m5s
CI / Build (ARMHF, Server) (push) Successful in 8m52s
CI / Build (ARMHF, Client) (push) Successful in 12m2s
CI / Test (Client) (push) Successful in 15m14s
CI / Test (Server) (push) Successful in 12m27s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m27s
2024-03-02 17:16:16 -05:00
fb84bcc06b GLFW 3.4!
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m58s
CI / Build (AMD64, Client) (push) Successful in 13m20s
CI / Build (ARM64, Server) (push) Successful in 15m3s
CI / Build (ARM64, Client) (push) Successful in 15m32s
CI / Build (ARMHF, Server) (push) Successful in 8m59s
CI / Build (ARMHF, Client) (push) Successful in 12m16s
CI / Test (Client) (push) Successful in 15m10s
CI / Test (Server) (push) Successful in 13m15s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m49s
2024-02-23 20:54:07 -05:00
117c5d2702 Better HiDPI Support
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-02-23 20:50:56 -05:00
9556d13791 Minor Tweaks
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m42s
CI / Build (AMD64, Client) (push) Successful in 12m59s
CI / Build (ARM64, Server) (push) Successful in 12m49s
CI / Build (ARM64, Client) (push) Successful in 13m21s
CI / Build (ARMHF, Server) (push) Successful in 9m2s
CI / Build (ARMHF, Client) (push) Successful in 12m23s
CI / Test (Client) (push) Successful in 15m37s
CI / Test (Server) (push) Successful in 13m6s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m43s
2024-02-15 23:02:44 -05:00
Bigjango13
f8bd6d380b Fix invalid ItemInHandRenderer texture cache 2024-02-15 01:59:35 -05:00
Bigjango13
5d57253d56 More symbols and better patch error message 2024-02-15 01:59:34 -05:00
Bigjango13
6ac808919f More symbols! Mostly tile entity stuff 2024-02-15 01:58:38 -05:00
Bigjango13
5353bc188d Rename Entity::aabb to Entity::hitbox 2024-02-15 01:58:38 -05:00
Bigjango13
f57c0a6190 More symbols and clean up "Disable Hostile AI In Creative Mode" 2024-02-15 01:58:38 -05:00
b033912633 Also Scan .data.rel.ro
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m2s
CI / Build (AMD64, Client) (push) Successful in 12m22s
CI / Build (ARM64, Server) (push) Successful in 13m4s
CI / Build (ARM64, Client) (push) Successful in 13m36s
CI / Build (ARMHF, Server) (push) Successful in 8m37s
CI / Build (ARMHF, Client) (push) Successful in 11m27s
CI / Test (Server) (push) Successful in 12m26s
CI / Test (Client) (push) Successful in 15m7s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 7m22s
2024-02-12 00:55:50 -05:00
a2b3bb128b Bug Fixes & Low-Level Improvements
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-02-12 00:44:38 -05:00
180ba9dcaf Small Changes 2024-02-11 20:35:41 -05:00
71cc24104c Add More Splashes
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 11m14s
CI / Build (AMD64, Client) (push) Successful in 11m30s
CI / Build (ARM64, Server) (push) Successful in 11m31s
CI / Build (ARM64, Client) (push) Successful in 11m51s
CI / Build (ARMHF, Server) (push) Successful in 7m54s
CI / Build (ARMHF, Client) (push) Successful in 11m11s
CI / Test (Client) (push) Successful in 14m25s
CI / Test (Server) (push) Successful in 11m49s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m54s
2024-02-08 00:59:57 -05:00
6951ebe620 Improve Performance
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 11m15s
CI / Build (AMD64, Client) (push) Successful in 11m33s
CI / Build (ARM64, Client) (push) Successful in 11m49s
CI / Build (ARM64, Server) (push) Successful in 11m35s
CI / Build (ARMHF, Server) (push) Successful in 7m50s
CI / Build (ARMHF, Client) (push) Successful in 11m3s
CI / Test (Client) (push) Successful in 14m43s
CI / Test (Server) (push) Successful in 11m40s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m48s
2024-02-08 00:34:43 -05:00
28dbb2eacd Some CMake Cleanup
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 12m44s
CI / Build (AMD64, Client) (push) Successful in 12m56s
CI / Build (ARM64, Server) (push) Successful in 11m40s
CI / Build (ARM64, Client) (push) Successful in 12m1s
CI / Build (ARMHF, Server) (push) Successful in 8m1s
CI / Build (ARMHF, Client) (push) Successful in 10m59s
CI / Test (Client) (push) Successful in 14m15s
CI / Test (Server) (push) Successful in 11m53s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m49s
2024-02-07 22:12:02 -05:00
d86018717e Split Splash Loading Into Own Function 2024-02-07 21:40:26 -05:00
db22caa50f Add Splash Text From MCPIL
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 11m15s
CI / Build (AMD64, Client) (push) Successful in 11m28s
CI / Build (ARM64, Client) (push) Successful in 11m48s
CI / Build (ARM64, Server) (push) Successful in 11m47s
CI / Build (ARMHF, Server) (push) Successful in 7m55s
CI / Build (ARMHF, Client) (push) Successful in 11m14s
CI / Test (Client) (push) Successful in 14m39s
CI / Test (Server) (push) Successful in 11m42s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m49s
2024-02-07 21:15:48 -05:00
ecbcfb2922 Split Up Animated Textures Into Three Flags
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 11m25s
CI / Build (AMD64, Client) (push) Successful in 11m46s
CI / Build (ARM64, Client) (push) Successful in 11m50s
CI / Build (ARM64, Server) (push) Successful in 11m40s
CI / Build (ARMHF, Server) (push) Successful in 7m56s
CI / Build (ARMHF, Client) (push) Successful in 11m14s
CI / Test (Client) (push) Successful in 14m25s
CI / Test (Server) (push) Successful in 11m29s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m51s
2024-02-07 19:00:55 -05:00
781377005e Update Dependencies
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 11m17s
CI / Build (AMD64, Client) (push) Successful in 11m30s
CI / Build (ARM64, Server) (push) Successful in 11m36s
CI / Build (ARM64, Client) (push) Successful in 12m0s
CI / Build (ARMHF, Server) (push) Successful in 7m57s
CI / Build (ARMHF, Client) (push) Successful in 11m18s
CI / Test (Client) (push) Successful in 14m21s
CI / Test (Server) (push) Successful in 11m49s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Has been cancelled
2024-02-07 18:04:53 -05:00
6e306e500d I Have Made This Typo Countless Times
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 10m4s
CI / Build (AMD64, Client) (push) Successful in 10m14s
CI / Build (ARM64, Server) (push) Successful in 10m12s
CI / Build (ARM64, Client) (push) Successful in 10m22s
CI / Build (ARMHF, Server) (push) Successful in 7m0s
CI / Build (ARMHF, Client) (push) Successful in 9m26s
CI / Test (Client) (push) Successful in 13m20s
CI / Test (Server) (push) Successful in 10m55s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m6s
2024-02-07 02:01:43 -05:00
7e300a6e1b Update Changelog
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Client) (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-02-07 01:58:21 -05:00
f5a680af7b Add Cake (#81)
Some checks failed
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Successful in 10m3s
CI / Build (AMD64, Client) (push) Successful in 10m16s
CI / Build (ARM64, Client) (push) Has been cancelled
CI / Build (ARM64, Server) (push) Has been cancelled
Adds cake, crafting remainders, milk buckets, death messages, `misc_run_on_language_setup`, and a lot more symbols.

Co-authored-by: Bigjango13 <bigjango13@gmail.com>
Reviewed-on: minecraft-pi-reborn/minecraft-pi-reborn#81
Co-authored-by: bigjango13 <bigjango13@noreply.thebrokenrail.org>
Co-committed-by: bigjango13 <bigjango13@noreply.thebrokenrail.org>
2024-02-07 06:47:46 +00:00
Bigjango13
c62d5264a8 More consistent lookup for sounds
Some checks failed
CI / Build (AMD64, Client) (push) Has started running
CI / Build (ARM64, Client) (push) Has been cancelled
CI / Build (ARM64, Server) (push) Has been cancelled
CI / Build (ARMHF, Client) (push) Has been cancelled
CI / Build (ARMHF, Server) (push) Has been cancelled
CI / Test (Client) (push) Has been cancelled
CI / Test (Server) (push) Has been cancelled
CI / Build Example Mods (push) Has been cancelled
CI / Release (push) Has been cancelled
CI / Build (AMD64, Server) (push) Has been cancelled
2024-02-07 02:16:34 +00:00
Bigjango13
93498ce9c0 Fix load_symbol ignoring source when a previous source has already been loaded 2024-02-07 02:16:34 +00:00
90a2b0ac85 Call Ninja Directly
Some checks failed
CI / Build (ARM64, Client) (push) Waiting to run
CI / Build (ARM64, Server) (push) Waiting to run
CI / Build (ARMHF, Client) (push) Waiting to run
CI / Build (ARMHF, Server) (push) Waiting to run
CI / Test (Client) (push) Waiting to run
CI / Test (Server) (push) Waiting to run
CI / Build Example Mods (push) Waiting to run
CI / Release (push) Blocked by required conditions
CI / Build (AMD64, Server) (push) Has been cancelled
CI / Build (AMD64, Client) (push) Has been cancelled
2024-02-06 19:35:44 -05:00
Bigjango13
2d9d4a638a Move food overlay to after classic HUD
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 10m14s
CI / Build (AMD64, Client) (push) Successful in 10m26s
CI / Build (ARM64, Server) (push) Successful in 10m28s
CI / Build (ARM64, Client) (push) Successful in 10m38s
CI / Build (ARMHF, Server) (push) Successful in 7m6s
CI / Build (ARMHF, Client) (push) Successful in 9m47s
CI / Test (Client) (push) Successful in 13m41s
CI / Test (Server) (push) Successful in 11m12s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m15s
2024-02-06 18:16:21 -05:00
Bigjango13
8c265a69d9 Add Food Overlay 2024-02-06 17:53:21 -05:00
b5e9486460 Fix Script Bug
All checks were successful
CI / Build (AMD64, Client) (push) Successful in 5m45s
CI / Build (AMD64, Server) (push) Successful in 5m22s
CI / Build (ARM64, Client) (push) Successful in 5m39s
CI / Build (ARM64, Server) (push) Successful in 5m24s
CI / Build (ARMHF, Client) (push) Successful in 5m48s
CI / Build (ARMHF, Server) (push) Successful in 4m0s
CI / Test (Client) (push) Successful in 9m6s
CI / Test (Server) (push) Successful in 5m53s
CI / Build Example Mods (push) Successful in 5m58s
CI / Release (push) Has been skipped
2024-02-04 03:40:59 -05:00
7fc5638143 Fix CI (Again)
All checks were successful
CI / Build (AMD64, Server) (push) Successful in 9m45s
CI / Build (AMD64, Client) (push) Successful in 9m55s
CI / Build (ARM64, Server) (push) Successful in 9m57s
CI / Build (ARM64, Client) (push) Successful in 10m10s
CI / Build (ARMHF, Server) (push) Successful in 7m14s
CI / Build (ARMHF, Client) (push) Successful in 9m33s
CI / Test (Server) (push) Successful in 10m23s
CI / Test (Client) (push) Successful in 13m14s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Successful in 6m0s
2024-02-04 02:33:35 -05:00
7ba9daa84e Fix CI
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 9m47s
CI / Build (AMD64, Client) (push) Successful in 9m58s
CI / Build (ARM64, Server) (push) Successful in 9m50s
CI / Build (ARM64, Client) (push) Successful in 10m11s
CI / Build (ARMHF, Server) (push) Successful in 7m1s
CI / Build (ARMHF, Client) (push) Successful in 9m6s
CI / Test (Server) (push) Successful in 10m45s
CI / Test (Client) (push) Successful in 13m11s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Failing after 5m56s
2024-02-04 01:31:41 -05:00
930d0120f3 More CI Improvements
Some checks failed
CI / Build (AMD64, Server) (push) Successful in 9m46s
CI / Build (AMD64, Client) (push) Successful in 9m57s
CI / Build (ARM64, Client) (push) Successful in 10m0s
CI / Build (ARM64, Server) (push) Successful in 10m3s
CI / Build (ARMHF, Server) (push) Successful in 6m53s
CI / Build (ARMHF, Client) (push) Successful in 9m8s
CI / Test (Server) (push) Successful in 10m50s
CI / Test (Client) (push) Successful in 13m14s
CI / Release (push) Has been skipped
CI / Build Example Mods (push) Failing after 5m55s
2024-02-04 00:43:25 -05:00
31fcff13e9 CI Improvements 2024-02-04 00:36:58 -05:00
41fcc942fa JS-Based Build Script
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 10m4s
Build / Build (AMD64, Client) (push) Successful in 10m19s
Build / Build (ARM64, Client) (push) Successful in 10m11s
Build / Build (ARM64, Server) (push) Successful in 10m0s
Build / Build (ARMHF, Server) (push) Successful in 6m57s
Build / Build (ARMHF, Client) (push) Successful in 9m20s
Build / Test (Server) (push) Successful in 10m42s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 13m41s
2024-02-03 21:07:53 -05:00
ddd9226e9e Fix Button Hover 2024-02-02 22:28:57 -05:00
a336cd1c7b Improve Key Handling 2024-02-02 22:25:22 -05:00
eaf6dd2fe2 Add Peaceful Mode To Options Screen 2024-02-02 14:49:47 -05:00
99b43ddb5a Create World Screen + Scrolling Text Boxes!
Some checks failed
Build / Build (AMD64, Server) (push) Successful in 9m42s
Build / Build (AMD64, Client) (push) Successful in 9m52s
Build / Build (ARM64, Server) (push) Successful in 9m55s
Build / Build (ARM64, Client) (push) Successful in 10m20s
Build / Build (ARMHF, Server) (push) Successful in 6m59s
Build / Build (ARMHF, Client) (push) Successful in 9m9s
Build / Test (Client) (push) Failing after 10m13s
Build / Release (push) Has been skipped
Build / Test (Server) (push) Successful in 10m4s
2024-02-02 04:20:34 -05:00
4f32cfab45 Send Button In Chat
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m38s
Build / Build (AMD64, Client) (push) Successful in 10m0s
Build / Build (ARM64, Server) (push) Successful in 7m58s
Build / Build (ARM64, Client) (push) Successful in 10m35s
Build / Build (ARMHF, Client) (push) Successful in 8m50s
Build / Build (ARMHF, Server) (push) Successful in 6m45s
Build / Test (Server) (push) Successful in 10m54s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m7s
2024-02-01 14:56:16 -05:00
69211eb31d Improve Markdown Formatting 2024-02-01 03:18:47 -05:00
58713976d4 In-Game Chat
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m49s
Build / Build (AMD64, Client) (push) Successful in 10m10s
Build / Build (ARM64, Client) (push) Successful in 9m53s
Build / Build (ARM64, Server) (push) Successful in 10m0s
Build / Build (ARMHF, Server) (push) Successful in 7m7s
Build / Build (ARMHF, Client) (push) Successful in 9m14s
Build / Test (Server) (push) Successful in 11m12s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m21s
2024-02-01 03:12:24 -05:00
d175f692e0 Put Sending Full Level Behind Flag 2024-01-31 23:52:29 -05:00
6d4ff44092 Java Light Ramp (Also From ReMCPE)
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m51s
Build / Build (AMD64, Client) (push) Successful in 10m2s
Build / Build (ARM64, Server) (push) Successful in 10m4s
Build / Build (ARM64, Client) (push) Successful in 10m21s
Build / Build (ARMHF, Server) (push) Successful in 7m11s
Build / Build (ARMHF, Client) (push) Successful in 9m23s
Build / Test (Server) (push) Successful in 10m53s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m33s
2024-01-31 23:44:04 -05:00
1771919cc1 Port Fire/Lava Textures From ReMCPE
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m44s
Build / Build (AMD64, Client) (push) Successful in 9m59s
Build / Build (ARM64, Server) (push) Successful in 9m58s
Build / Build (ARM64, Client) (push) Successful in 10m28s
Build / Build (ARMHF, Server) (push) Successful in 6m56s
Build / Build (ARMHF, Client) (push) Successful in 9m28s
Build / Test (Server) (push) Successful in 11m28s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m51s
2024-01-31 22:13:20 -05:00
522cee2d3b Fix overwrite_calls_within Macro
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m54s
Build / Build (AMD64, Client) (push) Successful in 10m9s
Build / Build (ARM64, Server) (push) Successful in 10m14s
Build / Build (ARM64, Client) (push) Successful in 10m32s
Build / Build (ARMHF, Server) (push) Successful in 7m1s
Build / Build (ARMHF, Client) (push) Successful in 9m27s
Build / Test (Server) (push) Successful in 11m58s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 17m23s
2024-01-30 01:30:11 -05:00
ccc7e5b190 Fix MCPI Ignoring ♪
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m37s
Build / Build (AMD64, Client) (push) Successful in 10m3s
Build / Build (ARM64, Client) (push) Successful in 9m51s
Build / Build (ARM64, Server) (push) Successful in 9m45s
Build / Build (ARMHF, Server) (push) Successful in 6m56s
Build / Build (ARMHF, Client) (push) Successful in 9m11s
Build / Test (Server) (push) Successful in 11m45s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m54s
2024-01-28 21:48:51 -05:00
7c9d16d662 Fix Mistake
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m49s
Build / Build (AMD64, Client) (push) Successful in 10m1s
Build / Build (ARM64, Server) (push) Successful in 10m0s
Build / Build (ARM64, Client) (push) Successful in 10m13s
Build / Build (ARMHF, Server) (push) Successful in 6m59s
Build / Build (ARMHF, Client) (push) Successful in 9m21s
Build / Test (Server) (push) Successful in 11m47s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m57s
2024-01-27 17:47:43 -05:00
49f56bd90d Fix Benchmark
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 10m10s
Build / Build (AMD64, Client) (push) Successful in 10m24s
Build / Build (ARM64, Server) (push) Successful in 10m15s
Build / Build (ARM64, Client) (push) Successful in 10m35s
Build / Build (ARMHF, Server) (push) Successful in 7m7s
Build / Build (ARMHF, Client) (push) Successful in 9m43s
Build / Test (Server) (push) Successful in 11m22s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 17m22s
2024-01-23 23:00:22 -05:00
0b252faa5f Simplify Some Code
Some checks failed
Build / Build (AMD64, Server) (push) Successful in 10m14s
Build / Build (AMD64, Client) (push) Successful in 10m27s
Build / Build (ARM64, Server) (push) Successful in 10m18s
Build / Build (ARM64, Client) (push) Successful in 10m37s
Build / Build (ARMHF, Server) (push) Successful in 7m12s
Build / Build (ARMHF, Client) (push) Successful in 9m44s
Build / Test (Server) (push) Successful in 11m50s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Has been cancelled
2024-01-23 21:58:18 -05:00
Bigjango13
233e8d691b Fix Tesselator instance symbols
Some checks failed
Build / Build (AMD64, Server) (push) Successful in 10m36s
Build / Build (AMD64, Client) (push) Successful in 10m48s
Build / Build (ARM64, Server) (push) Successful in 10m27s
Build / Build (ARM64, Client) (push) Successful in 10m42s
Build / Build (ARMHF, Server) (push) Successful in 7m15s
Build / Build (ARMHF, Client) (push) Successful in 9m47s
Build / Test (Client) (push) Failing after 2m55s
Build / Release (push) Has been skipped
Build / Test (Server) (push) Failing after 1m55s
2024-01-24 01:51:57 +00:00
Bigjango13
83a282551d Add packet related symbols 2024-01-24 01:51:57 +00:00
Bigjango13
29b49ac70a More symbols 2024-01-24 01:51:57 +00:00
Bigjango13
118fc6f396 Even more symbols from other projects 2024-01-24 01:51:57 +00:00
Bigjango13
e95236023c A few more symbols 2024-01-24 01:51:57 +00:00
46241c9aa0 Expose Some Properties
Some checks failed
Build / Build (ARM64, Client) (push) Waiting to run
Build / Build (ARM64, Server) (push) Waiting to run
Build / Build (ARMHF, Client) (push) Waiting to run
Build / Build (ARMHF, Server) (push) Waiting to run
Build / Test (Client) (push) Waiting to run
Build / Test (Server) (push) Waiting to run
Build / Release (push) Blocked by required conditions
Build / Build (AMD64, Server) (push) Has been cancelled
Build / Build (AMD64, Client) (push) Has been cancelled
2024-01-23 20:51:36 -05:00
f7be586a4c Build On Bullseye 2024-01-23 18:20:14 -05:00
Bigjango13
5c5538df2f Move worldgen desync patch to misc, for LAN games
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m30s
Build / Build (AMD64, Client) (push) Successful in 9m43s
Build / Build (ARM64, Server) (push) Successful in 8m29s
Build / Build (ARM64, Client) (push) Successful in 9m17s
Build / Build (ARMHF, Server) (push) Successful in 6m41s
Build / Build (ARMHF, Client) (push) Successful in 8m46s
Build / Test (Server) (push) Successful in 10m27s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m49s
2024-01-21 19:00:01 -05:00
Bigjango13
2995d1c9ad Fix short alignment 2024-01-21 18:43:31 -05:00
Bigjango13
b9b44a62bc Fix worldgen desync (and add some symbols) 2024-01-21 18:24:06 -05:00
Bigjango13
7e546a4a09 Fix ItemInHandRenderer in symbols
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m32s
Build / Build (AMD64, Client) (push) Successful in 9m46s
Build / Build (ARM64, Server) (push) Successful in 9m2s
Build / Build (ARM64, Client) (push) Successful in 9m28s
Build / Build (ARMHF, Server) (push) Successful in 6m39s
Build / Build (ARMHF, Client) (push) Successful in 8m58s
Build / Test (Server) (push) Successful in 11m53s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m43s
2024-01-20 08:24:35 +00:00
Bigjango13
be5bcf24c4 More symbols, mostly item rendering related 2024-01-20 08:24:35 +00:00
91ff082c97 Create AppImages Using CPack
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m39s
Build / Build (AMD64, Client) (push) Successful in 9m57s
Build / Build (ARM64, Server) (push) Successful in 8m59s
Build / Build (ARM64, Client) (push) Successful in 9m17s
Build / Build (ARMHF, Server) (push) Successful in 6m35s
Build / Build (ARMHF, Client) (push) Successful in 8m47s
Build / Test (Server) (push) Successful in 11m17s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m22s
2024-01-20 02:10:18 -05:00
40cd1b0a14 Improve CMake Superbuild
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 10m14s
Build / Build (AMD64, Client) (push) Successful in 10m31s
Build / Build (ARM64, Server) (push) Successful in 9m2s
Build / Build (ARM64, Client) (push) Successful in 9m27s
Build / Build (ARMHF, Server) (push) Successful in 6m43s
Build / Build (ARMHF, Client) (push) Successful in 8m50s
Build / Test (Server) (push) Successful in 12m13s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m57s
2024-01-16 03:08:34 -05:00
5c607d96b8 Simplify CMake
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 10m2s
Build / Build (AMD64, Client) (push) Successful in 10m13s
Build / Build (ARM64, Server) (push) Successful in 9m2s
Build / Build (ARM64, Client) (push) Successful in 9m22s
Build / Build (ARMHF, Server) (push) Successful in 6m37s
Build / Build (ARMHF, Client) (push) Successful in 8m50s
Build / Test (Server) (push) Successful in 11m39s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 17m2s
2024-01-16 01:45:52 -05:00
6e9b364f81 Organize Symbols
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m53s
Build / Build (AMD64, Client) (push) Successful in 10m7s
Build / Build (ARM64, Server) (push) Successful in 9m16s
Build / Build (ARM64, Client) (push) Successful in 9m49s
Build / Build (ARMHF, Server) (push) Successful in 6m39s
Build / Build (ARMHF, Client) (push) Successful in 8m49s
Build / Test (Server) (push) Successful in 11m35s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m27s
2024-01-11 22:10:30 -05:00
67a0d3017b Fix Furnace Visual Bug
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m53s
Build / Build (AMD64, Client) (push) Successful in 10m11s
Build / Build (ARM64, Server) (push) Successful in 9m17s
Build / Build (ARM64, Client) (push) Successful in 9m34s
Build / Build (ARMHF, Server) (push) Successful in 6m24s
Build / Build (ARMHF, Client) (push) Successful in 8m42s
Build / Test (Server) (push) Successful in 11m19s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m15s
2024-01-07 04:57:16 -05:00
e4d9ee4f20 Code Style Changes 2024-01-07 03:23:43 -05:00
d32fa2d265 Add Some Symbols From MCPI-Addons
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 9m50s
Build / Build (AMD64, Client) (push) Successful in 10m5s
Build / Build (ARM64, Server) (push) Successful in 9m12s
Build / Build (ARM64, Client) (push) Successful in 9m46s
Build / Build (ARMHF, Server) (push) Successful in 6m35s
Build / Build (ARMHF, Client) (push) Successful in 8m49s
Build / Test (Server) (push) Successful in 11m0s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Successful in 16m16s
2024-01-07 02:59:04 -05:00
34c24378f3 Update Example Mods 2024-01-06 20:36:59 -05:00
b7b60876d8 Fix Item Dropping When Killing Players From The Server Console
Some checks failed
Build / Build (AMD64, Server) (push) Successful in 9m59s
Build / Build (AMD64, Client) (push) Successful in 10m15s
Build / Build (ARM64, Server) (push) Successful in 9m17s
Build / Build (ARM64, Client) (push) Successful in 9m40s
Build / Build (ARMHF, Server) (push) Successful in 6m31s
Build / Build (ARMHF, Client) (push) Successful in 9m3s
Build / Test (Server) (push) Successful in 12m4s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Failing after 17m0s
2024-01-06 18:15:52 -05:00
4dff667749 Fix Server Build
Some checks failed
Build / Build (ARMHF, Client) (push) Waiting to run
Build / Build (ARMHF, Server) (push) Waiting to run
Build / Test (Client) (push) Waiting to run
Build / Test (Server) (push) Waiting to run
Build / Release (push) Blocked by required conditions
Build / Build (AMD64, Server) (push) Successful in 10m3s
Build / Build (AMD64, Client) (push) Successful in 10m15s
Build / Build (ARM64, Client) (push) Has been cancelled
Build / Build (ARM64, Server) (push) Has been cancelled
2024-01-06 18:03:48 -05:00
aa92da6fdd WIP New Modding API
Some checks failed
Build / Build (AMD64, Server) (push) Failing after 3m17s
Build / Build (AMD64, Client) (push) Successful in 8m28s
Build / Build (ARM64, Client) (push) Successful in 8m27s
Build / Build (ARM64, Server) (push) Failing after 4m1s
Build / Build (ARMHF, Server) (push) Failing after 3m31s
Build / Build (ARMHF, Client) (push) Successful in 7m38s
Build / Release (push) Has been skipped
Build / Test (Client) (push) Failing after 5m48s
Build / Test (Server) (push) Failing after 3m9s
2024-01-06 06:30:23 -05:00
0be1f4fce8 Tweak Outline Color
All checks were successful
Build / Build (AMD64, Client) (push) Successful in 8m40s
Build / Build (AMD64, Server) (push) Successful in 8m45s
Build / Build (ARM64, Client) (push) Successful in 8m7s
Build / Build (ARM64, Server) (push) Successful in 8m1s
Build / Build (ARMHF, Server) (push) Successful in 6m33s
Build / Build (ARMHF, Client) (push) Successful in 8m48s
Build / Test (Server) (push) Successful in 11m30s
Build / Release (push) Successful in 1m1s
Build / Test (Client) (push) Successful in 16m23s
2023-12-26 19:22:50 -05:00
631cbc07d0 Simplify Scripts 2023-12-26 17:45:53 -05:00
5f8c700081 Fix CI
All checks were successful
Build / Build (AMD64, Client) (push) Successful in 7m46s
Build / Build (AMD64, Server) (push) Successful in 7m56s
Build / Build (ARM64, Client) (push) Successful in 7m42s
Build / Build (ARM64, Server) (push) Successful in 7m19s
Build / Build (ARMHF, Client) (push) Successful in 8m9s
Build / Build (ARMHF, Server) (push) Successful in 5m59s
Build / Test (Server) (push) Successful in 11m14s
Build / Release (push) Successful in 48s
Build / Test (Client) (push) Successful in 16m8s
2023-12-26 17:29:45 -05:00
ac55d7d6b3 2.5.3
Some checks failed
Build / Build (AMD64, Client) (push) Successful in 10m27s
Build / Build (AMD64, Server) (push) Successful in 10m13s
Build / Build (ARM64, Client) (push) Successful in 8m34s
Build / Build (ARM64, Server) (push) Successful in 8m28s
Build / Build (ARMHF, Server) (push) Successful in 6m33s
Build / Build (ARMHF, Client) (push) Successful in 9m15s
Build / Release (push) Successful in 51s
Build / Test (push) Failing after 16m30s
2023-12-26 02:31:22 -05:00
ef29e4fc0e Remove GL Stubs From Headless Mode 2023-12-25 17:29:30 -05:00
35c6adf94b Fix Bug On X11
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 10m3s
Build / Build (AMD64, Client) (push) Successful in 10m21s
Build / Build (ARM64, Server) (push) Successful in 8m32s
Build / Build (ARM64, Client) (push) Successful in 9m3s
Build / Build (ARMHF, Server) (push) Successful in 6m6s
Build / Build (ARMHF, Client) (push) Successful in 8m27s
Build / Release (push) Has been skipped
Build / Test (push) Successful in 16m31s
2023-12-06 12:54:21 -05:00
1d08b8a29e Update Example Mods
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 34m39s
Build / Build (AMD64, Client) (push) Successful in 35m14s
Build / Build (ARM64, Server) (push) Successful in 37m42s
Build / Build (ARM64, Client) (push) Successful in 39m8s
Build / Build (ARMHF, Server) (push) Successful in 31m38s
Build / Build (ARMHF, Client) (push) Successful in 38m8s
Build / Release (push) Has been skipped
Build / Test (push) Successful in 42m39s
2023-12-04 20:08:48 -05:00
7296fcee83 Update Documentation
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 37m21s
Build / Build (AMD64, Client) (push) Successful in 37m26s
Build / Build (ARM64, Client) (push) Successful in 33m26s
Build / Build (ARM64, Server) (push) Successful in 40m19s
Build / Build (ARMHF, Client) (push) Successful in 35m14s
Build / Build (ARMHF, Server) (push) Successful in 29m48s
Build / Release (push) Has been skipped
Build / Test (push) Successful in 43m26s
2023-12-02 14:25:58 -05:00
97b46ad01a Fix AppImage updating, which has apparently been broken for *years*. Why didn't anyone tell me????
All checks were successful
Build / Build (AMD64, Client) (push) Successful in 34m25s
Build / Build (AMD64, Server) (push) Successful in 26m21s
Build / Build (ARM64, Client) (push) Successful in 31m46s
Build / Build (ARM64, Server) (push) Successful in 30m1s
Build / Build (ARMHF, Client) (push) Successful in 30m7s
Build / Build (ARMHF, Server) (push) Successful in 26m36s
Build / Release (push) Successful in 5m26s
Build / Test (push) Successful in 43m14s
2023-11-25 18:22:43 -05:00
17d11647e7 Fix CI (Hopefully)
All checks were successful
Build / Build (AMD64, Client) (push) Successful in 35m13s
Build / Build (AMD64, Server) (push) Successful in 25m45s
Build / Build (ARM64, Client) (push) Successful in 30m23s
Build / Build (ARM64, Server) (push) Successful in 28m10s
Build / Build (ARMHF, Client) (push) Successful in 29m18s
Build / Build (ARMHF, Server) (push) Successful in 26m1s
Build / Release (push) Successful in 5m41s
Build / Test (push) Successful in 43m40s
2023-11-25 02:39:19 -05:00
48137f9665 Final Tweaks
Some checks failed
Build / Build (AMD64, Client) (push) Successful in 35m5s
Build / Build (AMD64, Server) (push) Successful in 25m47s
Build / Build (ARM64, Client) (push) Successful in 30m50s
Build / Build (ARM64, Server) (push) Successful in 29m6s
Build / Build (ARMHF, Client) (push) Successful in 29m9s
Build / Build (ARMHF, Server) (push) Successful in 25m58s
Build / Release (push) Successful in 2m57s
Build / Test (push) Has been cancelled
2023-11-24 22:16:13 -05:00
c956151603 CI Fixes
All checks were successful
Build / Build (AMD64, Server) (push) Successful in 38m56s
Build / Build (AMD64, Client) (push) Successful in 39m40s
Build / Build (ARM64, Server) (push) Successful in 41m29s
Build / Build (ARM64, Client) (push) Successful in 43m2s
Build / Build (ARMHF, Server) (push) Successful in 34m58s
Build / Build (ARMHF, Client) (push) Successful in 41m8s
Build / Release (push) Has been skipped
Build / Test (push) Successful in 44m51s
2023-11-24 18:53:16 -05:00
73b51be43f Try Fancy CI
Some checks failed
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (AMD64, Server) (push) Has been cancelled
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (ARM64, Client) (push) Has been cancelled
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (ARM64, Server) (push) Has been cancelled
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (ARMHF, Client) (push) Has been cancelled
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (ARMHF, Server) (push) Has been cancelled
Build / Test (push) Has been cancelled
Build / ${{ matrix.mode }} (${{ matrix.arch }}) (AMD64, Client) (push) Has been cancelled
Build / Release (push) Has been cancelled
2023-11-24 18:37:08 -05:00
71b11b314b Animated Chests 2023-11-24 17:57:39 -05:00
168b825bf4 Clean Up CI
All checks were successful
Build / build (push) Successful in 3h7m58s
2023-11-24 12:09:21 -05:00
edca3ad394 Fix ARM Build
Some checks failed
Build / build (push) Failing after 3h12m6s
2023-11-24 03:43:15 -05:00
1aed33a48b Improve Flatpak Build [skip ci]
Some checks failed
Build / build (push) Has been cancelled
2023-11-24 03:28:17 -05:00
177c5262a6 2.5.2
Some checks failed
Build / build (push) Has been cancelled
2023-11-24 03:07:06 -05:00
7969fb2127 3D Chest Model 2023-11-23 23:54:36 -05:00
b0aac13057 Ȩ̴̛̛̛̝͉̬͙͕̯̬̙̥̬̺̫̭͉̱͈̭͕͍͈̲̯̀̔͒̑̈͛̂̃̑̓̄̊͌͆̎̉͐́̀̇͒̋̒́͊̈́͊̓̈̓̍̑͛̑̃͒̌͗̐̈́̈̈̒̏̀́͌̿̂͂̽́̂̉̅̽̀͌́̔̔̾̃͆̓͗͊͌̃͘̚̚̕̚̕͝͠͝͝ê̴̢̨̧̢̧̛̛͖̲̠̞͓̪͕͙̖̟̯͕̭̘͖̤͕̲̬͔͎̞͇̩̦̳̲̺͎͍̱̯͔̼͙̯͙̮͔̼͎̫͇̯͚̳̭̇̂̃̃̓̅͐́̆̀͑̅͌̓͑̏̄̆͊̅̀̒́̌̄̌̈́͆̋̔͐͊̓͒̈́̋̉͆̑͑̿̈͑̓̾͗̿̈̏͘̕͝͠͠ͅͅḩ̵̛̘̣͖̤̪͉̦͓͖̈́̎́̌̂̈͌̍̍͋͒̊͊́̑̓̓͘͘͘̚͜͝͝͝†̷̧̨̨̨̩̩̺͔̖̼̺͙̰̞͚̻̙̙̜͙̯̪͉̻͈̲͎͔͉̟̻̱̦̝̱̝͍̩̣̞͍̘̥̪̺̺̜̯̹̬̮̱͚̥̦̲̙̪̮̠̩̞̫̞͙̰̪̤͖̙̖̼̖͇͚̆̋̋̀̃͒̑̌͛̍̿̄̏͜͠ ̵̢̛̲͈̩̭͙͙̺̠͇̲̣̗̗͕͍͚̼̯̣̮̌̾̉̓͐̄͐̓̇̂̔͂̔̒̈́͌̏̓̔̾͆̈́͌̑̄͋̃̎͑͛̈́̃̋͑͑̍̍̀̂͆͛͂̇͒͂̃͐͊̈́̍̆͆̐͊̈́̓͑́̐̾͐̈́̒̔̓̾̈́̄̔̚͘̚̕̚͘͝͠͠ͅñ̸̨̢̡̳̙͔̗͕̙̩̝̖̹̪̺̟̼̝͓̬̻͓̮̣̜̖̤̯͖͕̗̝͖̩̬͎̳͚͙̤͙̞̺͉͇̱̩̪̞̭͙̱̫̯͚͓͌̋̄̃̔́̐̀̐̍̈́̽̑͋̋̉̽̌̅̈̅̓̇̓̈̚͘͘͜͝͝͝ð̷̡̧͈̭̤̙̦͇̺̝͖͖͈̤̦̤̗̐̅̓̓̓͐͒̐͗̓̃̈̿̾̒̈̈́̂̇̂̅̽̈̈́͊́͛̅̾̔̀̎̈̽̒̓̎̎̂̀̏̽̃̌̎̎̏́̒̓͗͐̾̍͒̓̏̽̚̕̕̕̕͝þ̴̨̢͕̙̯͈͉͈̳͔̪̥̲̯̥̞̜̪̬̺͖͈͉̼̟̠̥͈̮̻̼̤̤͎̘̪̻̗͐̉͌́̎͑̊́̇̈́͑͐͆̋̆̾͂̈̉̑̈̊́̾̈́̈͂̀͛͂̂͊̓̂̆̉̀͌̒͊͊́͆͛̿͑͌͗̏̽̎̋̚̚̚͘̕͜͜͝͝͠͝͝͝͝͝ͅµ̴̡̨̛̤̭͇̫̹̳͇̞̼̳̣̙̘̫͇͖͈͕̮̀̉̒̎̈̀̓͒̽͊̎͋̆́͂͒̎̉̎̒̑͆͌̒̂̎̂͋̇͌̄͛̑̏́͂̾̎͂̅͋͗̄́̿͌̔͌͘͘ ̶̧̧̧̮̩̜̝͈͙͖̼̦͕̥̻̬̣̜̣̣͉͙͕͔͓̟͚̩͎͍̣̟͔͚͚̼̦̥̯̠͎̩͎̣͈̦̯̰͎̦̜͚̀̇̄̎̀͑́͆̽̓̋̀̎̾̃̅̏͌͑̇̏͗̅́̽̈́͐̑͊͂̃́͐̈͐̀̍̽̔͗̊̓̓̾̉̄͗̈́̓͗̇̈́͛͗͒͑̏̈́̿͗̂̀͒̾̽́̀͒̓̔́̕̕̕͘͘͘͝͠͠͝͝͠͠͝ͅͅͅͅL̵̢̡̧̧̢̨̨̨̛͉̺̖͍̻͉̟̯͔͚͎͚̝̻̞̠͓̻̰͉̲̺̦̤͍̫͙̲̺̣̬̜͖̮̬̪̣͙̩̮̭̪͖͖̱̺͚͍̳̙͚̣̬̥̫̳͔̬͇͙̣̍̓̆͊͐̂̀̔̾͌̔͐͂̃̍̍̊̈̈̐̌̈́̔͂̎͊̅̏̍̽̚̚͜͝͝͝͝ͅͅl̴̢̧̢̩͍̩̫̙̤̦͇̟̪̩̙̠̮͖̩͇̘̼̫̼̲̣̟̩̘̟̳͇̜̠͔̗͈̯͙̞͓͛́̍͂́͑͛̇͂͌͆̇͂̾̐͑̒̌́̒̑̒̈́̃̉́͑̈́͋̓̒͒̽̉̔̆̈́͑͆̍͒̂͆͊̚̚͘͘͝å̶̡̢̢̢̡̨̨̡̢̛̮̰͚͕̹̘̼͈͖̠̲̗̰̥͈̪̲̱͕̦̘͎̖͇̗̜͇̬̤̞̱̯̟͎̲̦̩̜̳̮̟͈͇̫͎̯̗͙͔̼̒̊̐͊̍̂̈͑̑̎͊̒͑̊͋̽̂̉͜͜͝ͅͅͅ¢̶̡̧̧̛̜̲͕͇̮͙̹͎̘̦̖̺͕̪͔͈͉̝͓̖͖̫͖̥̌͛̅̀͆̎́̈́͒̃͑̋͘̕ͅ ̴̨̨̛̛̛̛̛̛̰͈͔̪̥̲̲̮͖̗̺͕͚͚̦̞͕̩̙̲̫̘͚̙͚̖̳̙͈̮͉̬̹̯̞̥͉̼̦̣̠̠̹͚̗̫̝̤̩͓̪̜͒̆͗̀̐̊̔̿̈͆̍͌̾̀̓̅͑͑̄́͂̓̋͆̇͆͆͑̎̑̆̽́̒͊͂̄͊̅͗̅͌͋͑͑̎̈́́̈́̆̿̏̈́̍̊̍́̄͋̀̉̿͛̏̌̉̊͌̒̌̑̌̚͘̚̕͜͜͠͝͠Ì̷̡̧̧̛̻̟̻̤̗̙̻̻̠̖̰̞͍̤̥̙̳̮͉̱͉̳͚̉͒̎̎͌̓̈́̐̓̅̍̈́̍̂̀͒̾͑̈̚͜͠,̴̡̢̨̡̨̡̧̧̛̰͉̫͎̼͍̬̠̬̳̠̫̳̼̻̜̞̪͔̖͓͇͉͖̥̩͚̫͇̱̤́̃͆̄̒͆̒͌̉̄̓̂̂̎̂̌̇̓̈́͌́̃̌̓̈́̋͐́̀͂̓̒̀̄͗̒͂̾̂̈́̍̌̎͂͌̏̊͘͘̕̕͠͝͝͠͠͝ ̷̡̨̛͍̗̙̹̻̳͖͉̟͇͖̙̖̹̙̰̩̘̗͉̗͇͙͔̝̗̯̫̭̬̰̩͉̥͖̪̤̮̟̖̯͖͔̫̦̰̞͍̹̠͔͇̠̣͉͙̖̙̪͔̪͎̍͐̌̀̎͑́̉̈́̐͗̋̅̄͗̈́̉͆̿̓̈́̑̓͐̋̈̇̽̑̈́̓͐͛͐̓̏͒̈́͋͂̎́͐̈́͌̏̓̎̉̾̚̚͘͝͝ͅͅͅÌ̵̢̧̧̨̢̛̛̛̼̙̩̖͓̫̥͎̳͖̟͍̙̦̟͔̲̯̱̮̣̻͙̪̹̭̞̻̠̠̟͔̭̘͔̝̯̮̳̺̗̪͇͇̳̼̦͎̺̩͈̑́͋̌̋̄͌̇̍̓͂̋̆̎̔͌̀͋͆̏̈́́̍̇̈́̿͐͊̅̇̒͐̾̽̌̇́̅̑̒̄͌̿́̈̏͌̂͌̽̿̌̽͛̏͗̋̾̍̈̈́̽͐̏̒̇̈́̂̃̚͘̕̚̚͜͠͝͝͠͝͝͠þ̸̧̧̨̢̨̛̱̲̜͍̤̺̭̮̫̯̼͕͈͍̮͎̥̫̖̙͙͍̞̱̳̜͕̙̯͈̯̣̬̹̰̘̤̣̫̯̙̲͔̝̲͇͙̖̗̬̪̭̱̯̙͈̰͓̱̲̯̈̑̿͌͜͜ͅͅÇ̸̧̢̨̡̨̨̡̛̛̛̛̛̛̲̜͎̙̖̞̪̝͉̹̣̙͙̠̣͈̭̥̺̰͇̤̰̹͔͍̹̥̱̬̫̠̙͖̱̙̞̮̘̟͇̥̹̺̺̝͇̲̣͖̭̭̥͋́̃̓̉̈́̒̂̏̀̉́̾́͆͛̐̂̏́́̇͂̀̏̇̆̓̓͑͐͊̾̾͌̂͑̀͛̏͐̂͒̏̎͆̋͒͛̐͊̃͋̇̈́̓̈́̈̆̚̚̕͜͜͜͜͠͠͝͝͝M̶̡̢̧̨̡̢̛̲̥̯͉̗̥̙̲̬̫͚̼̜̝̲̲͓̖̬͔̖̦͕̫̗͈̼̹̥̣̙͚̮̣̘̟͕̰͍̬̘̮̱̲̘̜̫͚̹̤̘̥̲̮̦̱̲͍͔̝̤̣̣͕̯͕͍̞̘̰̲̮͗̎̓̀́̀̾͐́͋̍̐̽̂͌͑̅̒̏̾̇̋̓̋̈́̈́̐̅͌̈́̀̿̏̈́̒͊̃̽̐̎̆̽̄̄́̊͗̉͋̅͗͒̔̀̐́̈́͌͗̑̀̑̋̍́͂̓̏̈́̐̓̚̕͘͜͝͠͝͝͝͝ͅͅ ̸̧̢̛̛̗̣̺̩̤̬͓͈̦̙̠͉͕̲͚͕͉̩̺̬̣̳͇͍̞͈̬̉̏̔͊̔͂̋̌͒̔̎̊͂͆̓͆̄͌̓̊̈́̐̀̋̅͗͋͊͌͑̿͋̊̈͒̅́͌͒͒́̋̈́̂͌͂̇͒̈̽̔͛̉̔̀͘̚̚͝͠†̷̨̨̡̡̡̨̢̡̥͖̫͕̭͕̣̜̹̺͍̤̞̩̤̮̙̟̞̝̱͇͖͕̗̪̺̝̳͈̘̬̰͉̳̭̼̗̝̞͚̫͕̺̬̪͎̤͉̣̱̩̜́̂͂̽͑̀̀̃̇̽͑̾̈́͑͐̂͝͝͝ͅͅḁ̶̢̡̢̨̧̭̳̺̼̪͔̻̯̗͎̠̪̥̟̙͔̬̳̤͎̪͍̥̳͈̤̱̩̦͇͈̳̻͉̻̥̺͉͓̣̟̝̺̱̣̰̙̱̹̞̱̣̘͍̜̩̥̳̥̭̻̠̥̬͚̤̫̩̮̯̜͍̊̌̀͊́͂̓̒̀̈́̎͑̌́͆̒̇̽̂̿̋̓͊͂̑̌͂͛̿̊͌̈́̈̅̎͋͂͐͑̏̊̑̉͒̎͑̃̎̾̌̈̀̅͐̿̎̒̄̐̌̃̿̈́̎̉̿͋̑̌̂̑́̌̂̇͛̾̕̕̚̚͜͠͝͝͝ȩ̸̢̛̲͖̳̦̖̝͈͉̬̟͚̲͍͚̬̲̥̳͙̰͖̺̙̥̜͈̹̪͚̗̰̹͍̘͓͙̞̬̤̫̞͉̤̲͔̘̭̻̯͍̂͑͊̇̾̀͐̐́̅̒̋̃̑̅͋̀̌͒̆̇́̾̾͂̀̒́̍̒̄̏̓͗̄͑̓̏́̇͒͑͊͑̾̐͗̉͆̅̓̔͗̾̍̏͆͂̾̅͊̽̆̄͌̕̚̚͜͝͝͠͝͠͠͝ͅͅͅͅr̴̢̡̨̡̡̢̧̡̢̨̛̛̛̗͙͖̱̖̣̣̰̻̘̮̻͉̳̙͈̳͚͓̟̦͚͕͓͈̬̥͚̪̰̘̗̮͖̯̬̯̲̠͎͍͔̯̩̱͕̲̺̖̥͈̼͍̤̗͕̻̗̘̙̥̦̼͔̘̰̹̱̰̫̜͇͎͚̞̥̝̉͂̈͐̃̒̔̑̈́̉̒̃̄̀̈́̃̔͆̄̓͋͐̓̍̊̉̍̈́́̒̓̍͛͌̾̎͘͜͜͝͝͝ͅͅģ̶̧̡̧̧̨̧̡̡̨̛̛̹̻̥̱͕̥͙̮̣̻̖̭̪͚͍͖̬̲̠̞̭͈̼̙̼̼̺͍͚̟̭̫̯̦̬̭̤̙̺̪̹̣̦̘̭̠̞͕̳̻͙̟̼͉̘̞̥̭̪̺͔̼̠͖̫̥̬̦̳͈̱̱̳̀͊̅͛̎̆̓̑͒̉̀́̎̔̇̈̂̓̓̏̈̔̇͛̏̑̊͐̈́̀͊̎̏̆̿͗̂̓̊͂͒̌̄̄̔̈̔̏̔͊͊̏̂̅̄͒̀̇̚̚͜͝͝͝͝͝ ̷̢̧̡̢̢̧̺̗̙͉̠̺̤̝̲͔̠̹̬̬͎̪̖̜̘̪̪͚̹̜̥̖̻̙̩̝͕̥͚̜̣̞̫͎͚̪̰̣̭̻̠̲̮͙͙͈̜̣̲̫̺͖̤͉͙̤̻̲͖̙͗͜͜͜͜H̵̨̧̡̡̨̧̛̛̛̛̛̫͈͔̲̭̠̮̪͕̳̼̞̞͈̪̲̺̤̗͓͙̠̬̪͈̩͇͈͎̤̼̳̣̰͉̯̻̋͂̌͂̋͒̂̎̂̑͂̑͐̌̈́̌͑́͐̀̆̏̎̀͌͗̅̉̇̾̆̋̂͒̋̈́̾̓̏͌̈̏͐̈́̇̓̅́̓́͗͋̀̓͑̿̑̅̀̎͊͋̌̀͆͛̕͘̚̕̚͜͝͠͝͝͝ð̶̨̧̨̧̛͇̟͔̮͉̹̻̘͔̞͇̬̹͚̞̗͓̘̠̺̹͚̝̳̗͚͚̝͈̣̠͖̦͙̰̹͍̬̘͙͚͙̺̘̩̙̰̖͇̤̺̎́͛̍̓̊̒̈́̈́̋̈́̋̋̓̾͋̈́͐̈̓͋͋̄̑̒͛̑̄̉̅͋̽̓̋͑̉́̋͑͗̽̂͊͆̊̉̀͑̍̊̑̏̒̄́̆̊̆͒͌̒̾̌̓̐͛̄́̆̇̿̅̃͗̈̄̈́̄̓̎͐͘̚͘̚͘͘͘̕͠͝͝͠͝ͅͅ!̸̢͇̺̲͙̣͚̮͙̝͖͚̒̽̌͂̓́̌̒̓̋̓͐͑̐͋̐̀̔̊̍̂̎̍̆̓̅̒͋̆̇͂̑̀̔͊̏̕͘͝
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2023-11-13 17:45:05 -05:00
80c0f24a5d J̶̨̡̨̨̧̧̧̧̨̢̢̢̧̡̨̢̨̢̢̧̧̢̡̡̧̨̤̩̱̗̣̗̱̮͇͇̻͕͉͇̗̭͕̻̝̼̻̤̞͍̫̣͔̗̠̠̪͕̮̙̤͓̯̦̙̬̫͙̖̙͙̬̜̗̙̬̩͔̹̱̠̩͎̞̪͖̯̹̲͙̥͈͕̼̜̪̙͔̖͈̞̣̝̦̤̺̺͓̮͓̮̝̤͙̗͉̗̞̟͈̞̼͕̩̻̥͖̤͇̪̪͍̗̥̼̲̝͇̜̥͚͍͕̞̝̖͔̜̦̮̫͍̜̬̥̲̮̜͈̠͙̭̱͇̥͈͇̩͖̝̱̪̹̜͕͈̫̦̭͉̞̪̤̗͙͚̰̙̝͚̹̝̫̪̤͇̠̮̤̜̭̰̞͚̝̫̭͉͕̠̻̤͕̫̳͓̳̯͍̣̭̘̤͚̯̖͓̼͕̥̞̘̤̣͔̥̮͉͍̝̣͇̳͇͎͈͖̤͎̯̬̬̭̗̫͚̹̫͉̮͋̕͜͜ͅͅͅu̶̢̡̢̧̧̡̡̨̡̧̢̧̨̢̢̧̧͚̟̥̘̭͇͈̳͔̠͓͔͉̱͙͓̪̱͚͉̬͎͉͚̹̩̪̥̤͍̖̜̼̦͍͎̫͇͉͔͔̙̪̝̱̥̭̠̭͈̙̗͓̲͙̰̻̲̬̪͖̤̹̘̬̻̜͙̫͇͎͚̺̩̬̬̰̬̣̲̯͓̝̝̹͖̼͓̹̺̯̱͚̗̩̱̠̠̺͎̮̮̪̤̝͇͚̫̹̼̗̺̻̗͓̠͕̯̯̱̘͎̳̱͉̙̪͇͓̼̯̙̘̪̲̳̭̝̹̦̮̳̗͔͈̪̰͇̖̥͕͓̺͇͔̝̲̫͉̣̭̥̹̼͖̺̰̳̪̠͕͉͚͎̪̪͎̪̩͍͛̊̈́̾͒̈̂͐̑̿͑̀̾̎̋͗̒͋̄̑͐͗́̈́̎̆̉͛̎̋̐͗͒̄̑͌͆̀̉̐̓͐̆͂̂̿̓̇̽͒̀̀̍̓͒͛͆̇̂͒́̄̔͛̎́̓͆̈͐͒͛̽̕͘͘̚̚̕͘̕͘͜͜͜͝͠͠͝͝͠͝͠͠͠ͅͅͅͅͅͅͅͅͅs̷̡̧̨̡̢̢̨̧̨̧̢̢̡̨̡̧̢̨̢̡̨̢̢̨̧̡̛̛̛̛̛̛̛̥̹̳̬͚̠̼̲̬̞̺̤͈̪̲͓̣̤̬̘̰̮̪̟͍̪̗̦̲̺͉̦̤̟̖̲̲̠͉̙̜͇̞͓̻̣̞͉̝̪̺̰͓̝̥͙̘͎̘̭͎̺̮̼̥̩͓̘̠̺̪͚̝̯͈͚̬̦̯̦͕͖̰̭̠͇̣̙͉̻̘̜̟̤͔̳̣̖̻͚͚̻̺̦̳̣̘̣̩͉͈̳͎̫̯͕̪̠͕̲͚̜̗̗̫̫̱͎̯̙̣̗̫̭͎̩̫̟͚̦̟̙̤͉̜͔͙̙͙̫̣̮̱͙̳̺̺̗̼̻͍̣͍͙̯̝̼͕̭̦͖̻̝͍̝̪̮͇̯͔̼̣̩͕͕̘̭͕̖͓̭̉͒̂̌̐̂͑̋͂͋̈͐̈́̄̂̅͗͋̾̓͌̈̀̇̂̇̃̉̎́̀̏̐̐̽̿̏̈́͗͑̓̇̊̊̇̓̈́̒̀̅̈͗̓̌̄͂̽͆̇̓̄̿̃̀͛͊̽̉̑̉̑̆̅̽̎͒̔̔̒̍͆̑̐̽̄͛̐̀́̓̈́͋̍̿́͂͊̃͐͐͋̊̌̒̾͗̓͊͐̋́̔̍́̐̑̌̏̆̓͋̐͗̀͋̆̓̃̇͂͗̎̅̈́͒͗͗̔̆̈̃͋̆̒̇̄͗̋̓̔͛̉̈́̑̂̉̐̋̎̅̅̆͒̈̀͂̾̂̐̂̊͋͋̔̃͋͆̑̇̂̾̆̎̈́̉̍̽͊͊̏̎̏͐͋͂́̾̀̓̽̐̀̓̉͂̅̂̋̅̇̚̚͘̕̕͘̚̚̚͘͘̕͜͜͜͜͜͜͜͜͜͜͝͝͝͠͝͝͝͠͝͠͠͝͝ͅͅͅt̵̡̧̛̛̛̛̛͙͉͍̱̰̘͍̻̬̝̦͎̣̖̙̠̬̻̝͔̣̲̩͍̱̑͒̍͊̊̎́̊̂̂̄̽̿̀̍͌̏̽̿́̍̆͆͗̔̈́́͊͂̆̾̿̐̓̈́̓͑̑̋͗̀͐͛̐͐́́̒͂̆̒̉͌̇̄̀̃̆̂͛̽͐͌̓͗̾̔̊͐̎͐̄͌͋̐̅͋͋͒̋̊̊̀͂̇͛̅̂̐̀͒̒̉̇̃̒̔̔̍͌̒̌̌͊͐͂̑͒̾̽͊̈́͑̐̈̑̉̽̇̆̓͂̋͌́̿̓̇̀̏̾̈́̏̌̔̉̐̽̃̿̈̈̉̈͌͐̊́̾̊̔̉͆̄͆̈́̈́̍̈̃̽̊̉͌̆͑͆̊̽̽̒̒̿̏͋́̀̅̍̏̑̈̿̋̃̈̄̏̋̋̈́̎͆̍͛̀̈̂̀̀̀̈́̐͑͌͑͒́̀̎͛̒̍͗̊̉̒͋͋͒͐̌̏̆̑̓̈́̾̒͂̆͌͆̀͊̐̎̂̅̾̋̔̂̀̍̏̓́̇̽̾̅̚̚̚̚̕̚̚̕̕͘̕̚̚͘̕͘͘̚̕͘̚̚̚͜͜͝͝͝͝͝͠͝͝͝͠͠͝͠͠͠͝͝͝ͅ ̸̡̧̡̡̧̧̧̧̡̨̡̨̨̧̧̢̛̛̛̛̛̛̘̰͓̼͍̗̥̮͕̝̞̟͇̞̙̻͙̯͕̗̺̠̺̗̭̰̗̺̗̲̥̯͎̫̻͔͓̩̜̦̘͓̬̳̟̻͈͔̯̩͕̙̩̝̬͇̣͓͇̱̹̼̹̹̩̰̣̹͈͈̬̜̳̪̹̠͓̥͎̩̥̥̳̱̩̹̝̘͕̗̘̲͓̺̱̹̫̱̟̜̺̹̥͎̳̺̹̘̞̼̟̪͉̝̼̣̤͓̮̩͍̜͍͖̻̺͈̤̹̙͇͙̭̙̜̰̻͙̣͕̼̘̠͓͉̲̻̟̻̦̺͕͍̦̩͖̰̥̩̱̱͚̩̹̰̹̙̫̟̣̗̝̹̝͉̻͉̟̗̙̫͖͈͖̬̜̬̞͍̭̻̤̣̪̭͍̗̠̬̘͕̠͈̖̥̓̀̈̉́̆̌̅̈͊̊̔͗̀͆͒̓͗̽͋̉̒̈́̃͛̾̄̄̀̍̑̀͗͋͛̓̈́̓̈̓̊̅̔̀̓̾̄̈̓̂͊͛́̾̉̉̎̍̆̅͆̀̇̈́͆̌̔̓̈́͌̄̈́̋͌̍̅̓̈͐́̉̀̓̊̍̽͗̂͑̐̔̅͆̀̎̓͊̽̔͑̽̂̓̇̓͐̎͑͛̽̄̈́̉̾͒̍̑̀̐̓̀̇̿̈́̎̊͂͑̇̎͆̇̄͒͋̀̿̓̐͆̈́̂̿̏͂̍̈͌̏̆̿͋̈͂́͗̎͊͒̅̈́̋̃̉̽̀̿̎̈̅̇̽̒́̐̈́̎̑̄̂͗͛̌̄͊̀̓͋͘̕̕͘̚͘͘̕̕̚̕̕̚͘̚͜͜͜͜͜͝͝͠͝͠͠͝͠͝͠͝͝͝͝͠͠͝͝͝͠͠͝͝͠͝͝ͅͅͅͅͅͅͅF̷̢̨̧̨̡̧̢̛̛̛̛͓͈̱̯̬̭͖̫̞̻͖̲̭̝͕̤̤̜̬̖̺̹͎̺͚͎͙̮̟̖̗̻͚͕̙̦̱͚̝̯̜̙̩͈̱̙͖̞̞̰̳͕̦̬̙̉̏̈́̑̎͛͑̆̆̽̉͂̏̑̅̌̿̔͛̿͌̏̿͋̈̐̾̃̈́̾̃̃̀͒̈́͋̅̇̐͒͆̿̄͋̉̋̏́̅͊͑̆̔̽͌͗̒̀̽̍͗́͋̔͆̎͊̊͌͑̾̈̂̑̿͆͛̅̒̇̈́̆́̉͊̆͐̀̋̊͛̌͌̈́͑̿̓̐̈́̅͌̑̅̒͋̒̈́̈́̃̈́̃̂̍̐̏̾͒̀̉̌̀́̂͐̌̒̇̉̅͗̓̈́̽̍̇̂̉̅̿̒̓̾͂̾̿̈́̂̔͋̆̈́̈͌̃̍̈́̎̈̑͆̅̓͗͆͋̈́̂̀́̏͑̃̂̍̐̃͆̓̕̕̕̕̕̕͘̕͘̕̕͘͘͜͜͜͜͝͠͝͝͝͝͝͠͝͝͝͝͝ͅͅͅi̵̢̧̢̨̢̨̧̛̛̛̥̣͕̤̤̥̺̪̝͖̫̪̻̠̲̹̞̟͖̲͕͓̝̲͉͇̙̻̞̤̩̟̣͈̜̞͈̠͇͈͍̜͔̙̦͚͔̣̙̪͙̩̝̮͇̪͙͉͖̪͈͖͖̳̗̯̠͉̭̋͗̄̾̂͆̆̐͛͗́͆͌̃̉̂̋̓̇͑̈́̓̊̀̂͆̒̾͛͗̉̌̍̅̑̀͊͑͛̐͋͆̽̎̑̂̎͑̑̌̓́̈́̒̂͌͛͐̐̿̽̈́̐̀́͆̐̌͊͊́͒̌̂͑̏̔̎͂̍̏͑̇̍̑͊͊̀̂͂̈́̎̅̔̍̅̑̅̽̃͑͒͗̿̑̔̒̑͋͂̂̑̍̄̇͒̐̌̽̀͊̔̊͋͒̾̂̿̏́̀̃̇͐̔̈́́̊̽̄̉̅̓̈̾̀̓̄͂͛̂́̍̉͆͂̓̀̂̓̎̉̎̔̓̐̂̂́̌̕̚̕̕̚̚͘͘͘̚̕̚̚͘͘̚͜͜͝͝͝͝͝͝͝͝͝͝͠ͅͅͅx̶̢̨̢̧̧̧̨̧̧̢̧̧̨̛̛̛̛̛̛̮͎̜̳̻͕̥̰͇̺̝̤͖̬̲͓̫̗͇͎̻̯͍͙̺͉̱͔̤̫̻͚̣̹̥̰̼̫̱̫͖̱̙͓̭̞͇̪̯̘̠̯̩͙͕̙̼̣̪̻̻̥̹͍̹̭̫͓̱̻̖̮̹̮̥̥͕̲͉̝͈̥̗̪̥͚͚͚͕̺̠̹͔̫̤̰̘̯͕̳͈̭͖̣͖̹͖̩̼͙̯̭̣͈̣͇͈̘̫̖̠̞͍̬̫̲̳̻̹̱̳̞͙͔̠̱͕̮̯͉̩̪͎̯̪̻̜͒̇̋̂̋̽͗̔́̐̂̂̾͆̑͗̏̐̈́̃͐̊͌̓̓̐̌̈̇̽̋͛̐͋̄̏͑͋̿̿͆̈́̐̾̈́͗͌́͑́͗̍͒̌̒̅̇͌̽̊̈́̾̒͒͒͆̅̾͌̑͛͑͒́̍̉̏̊́͂̌̇̔͛̾̾̓̽̑̌̾̏̔͋̾̈̊̑̎͋̈́̄̾̄̅͋͐̿̆̋̈̄̐͊̆͋̋̽̂̌́͆͆̎̇̄̃͊̈́̉̔̍̓͆͑̃̋͂̀̉̏̉̓͊̽́͊̓̈́͑̂̑̎̉́̈̈̋̂̈́̒̽̓̑̐́̇͒̊̿̎̔̑͊̿̈̀̈̅̈́̑̊͒̎̏̄͆̈́̇̄́̈́̑̓͗̒̃͒̀̈́̅́̑͑̂̃̂̿̆͌̎͆͌͋̅͑͋͊̈́̓̾̂̏̀̾̔̅̐́̏̓̈͊͋̇͐̅̽͌̂̀̓̏̒̿͌̿͗͗̎̾̀̈́̓̈́̊̚̚͘̚̚̚̚̚͘̕̚̚̚͘̚͜͜͜͜͜͜͜͠͝͝͝͠͝͝͝͠͝͠͝͝͠͝͝͠͝ͅͅͅͅͅͅͅͅ ̸̡̨̧̢̧̢̢̨̧̢̡̢̧̧̨̡̧̨̛̪̜̼̟̤͚̯͓̪̦̥͎̯͕̟͍͚̼̩̩̤̖̥̤̤̳̻͕̼̣͍̜͙̙̭͙̗͇̣͎̦̭͔͙̥̯̬̭̯̞̼͓̳͙͉̲͍͚̲̺͕͕̟̼̻͇͔̺̼͙̦̣̝̖͍̻͍͎̣̹̻̯̲̗̝̤̞̗͍̭̮̮͕̣̗͋̅́̍̍͌̉̊̃̓̓̂̈́͐̓̇̉̋͋̅̊̔͆͗̅̑̓̀̂̍̆̈́̈́̉̃̃̾̏̀͗́̒̌̈͌̅̿̏͆͒̌̀͛̓̐̋̾̀̈́́̾̇̈́̿̀̈́̊́́͛̽̀͌̔̈͆̉͌͋̑̌̈́̽̈́̉̀͛̓͋͗̚͘̚̚͜͜͜͠͝͝͝͠͝͠͠ͅT̴̢̢̡̢̨̡̧̡̢̧̧̡̡̡̨̨̛̛̛̛̛͖̻̯̼̗̫͕̥̝̦̹̪̙̖̩̯̮̦̗̤͚͙͙̬̣̙͈̥͓̬̰̗̤̞͖̞̪̣͎̬͈̹͕͔̦̤̙̝̣̗̜̘͎͙͕͇̟̟̠̮̹̪͖̟͎̼̯̻̮̭͕̬̖͖̼̺̟̠̫̳̖̜̳̖͕̫͔̺̼̯̫̯̫̘̙͔̰͍͎̜̭͎̖͎͚̬̘͔̯̞̝̞̜̣̥̼̙͔̤̦̭̲͍̝̩̼̦̣͇̘̟̦̳͚͔͔̟̣̼̺͎̮̟̖̠̞̗͍̪̯̠̱̭̬̰͍͓̝̲̯̙̭̯̤͕͓̲̹̣̼̦̳̝̞̰͔͍͂̿̓̔͗͌̋̆̓̋̈́̽͑͒̓̈̎̇͗͂̒͐̅̽͗͂̂̇̓̀̍̈́͗̐͂̇̇̽͑̾̏̊̑̓̋̒̒̿͐̐̿̓̅͋̑̋͛͋͗͌̌̑͂̐̏̇̽̑͛̓͗̓̃̂̈́͛̈́̆̌̆̓̋̆̏̊̾́͊̀̐͛̿̅̃̑͑̔̀͂̾̇͑̿̎̐͌͌͌̿̈̽̃́̃̆̆̈̋͑͊̍̈͛͊̐̐̀̍́͊̿̂̌͗͑̃̐̍̊̐̑̈́͛̔̏́̋̈́̑̔͆̎͋̏̒͗̍͗̋͑͂͑̐̑̏̿̃̅͆͒̽̈́͋̋̀̈́̽̑͗̂̿̑̓͐́̊͋̾̄͑̂͐͗̓͛͆̀̏̈́̊́̈́̍̈́̽̂̊̈́̆͊͗̽̈́̓͊̂̅́͗͌́̾̑̀̊͋̀͘̚̚͘̕̚͘̕̚̕̕̕̚̚͘̕͘̚̚͘͜͜͜͜͜͜͜͝͠͠͠͠͝͠͝͠͝͝͝͝͝͠͠͝͝ͅͅͅͅͅͅḧ̵̢̨̨̡̢̡̡̢̡̨̧̡̨̡̢̧̧̨̨̧̢̨̛̛̛̛̛̛̹̞̥͇̘̰̭͖͙͖̥̙̗̹̘͔̞̬̟̠͓͔̪͇̗͈̠̭̱̘̘͎̲̭̼̯̺̘̤̖̲̜̪͔̻̘͕̞͙̜̻͙̦̞̰͉͓̖̞̖͇̺̗̜̩̩̪̺̣̹̺̥͇̘͍͎̫̦͇̻͓̲̗̼͖̙͍̪̙͉̬͓̝̹̳͈̠͎̤̥̯̩̬͙̫̮͕̦͕̻̫̞̙̲͈̤͉͙̤͔̰̗̜̲̹͔̫͈̜̲̦̮͎̗͔̥̤̣̯͈̲͇̝͎͔̺̙̗̲̫̭̟̓̏͋̎̑̂̈́̀̄̉̾͋̍̒̑́̐̈͊͗͊̾̾͛̽̎̊͒̑̈́̀̑͌̌͗̑͋̍̔̎̍͋͗͂́̌̆̏͊͌͒͐͊̈́́͋̈́̒̅͒́̓̉̓́͌̐̓̎̀͂̄̉͌͂̍̌̒́̌͌̃̀̇̂̒̓́́́̃̾̉́̒̆̈̒͒̌͛͋̋̂̒̈͊͐̀͐̾͐̄͋͌̈̐̓͑̍̅͋́̀͂͛͐̉̿͒͌̈́̅̈́̆̉͊̑͊̈́͒͐̌̆́̈́̔͐͋́͐́̆͌͂͂͗̀̋͊̎̏̑̑͛͋̈́̌̿̾̂͋́̅͂̌͌̅́̄͌̎̇͋̾̀̓̀̑̚̕͘̕͘̕̕͘̕̕͜͜͜͠͝͝͝͝͝͝͝͝͝͠͝͠͝͝͠͠͠͠͝͝ͅͅͅͅͅȩ̸̢̢̡̧̨̡̡̨̨̡̛̛̛̛̛̩̪̫̲̣̹̦̝̠̺̬͖̥̬̝̞̥̦̣̤͍̘͈͉̤̘̬͉̖̫̼̘̬͕̗̲̞̟͈͖̥͖̞͔̞̣̘̙̙͖̱̮̙͉̬̤͎̲̙̦̲̱̹͓͉͕̞̰̳̤̰͍̠̻͕̥̺͙̹͇̳͈̻͌́́̀̋͂͒͗̉̏̌̆̒͒͆͒͋͌̀͒͆̂̔́̈̈́͂̾͂̓͗̓͒̆͋̏͛͒̐̈́̋̐̈́͛̉́͆̅͆̾̂̉̄͊̓͆̊͑͐̔̒͂̒̏̆̀̌̉̓̃̔̈̓͛͗̍́̀̉̅͌̀͋͋̒̿̍̒̍̈́̆̐̐͋͆̉̆͒͑̉̅͂̓̿͛́̌͊̍̊̽̽́̓̈́̿̍͑̔́̑̆͗̎͛̅̐̿̑͆͌̉̓̊̑̈́̋́̎̇͂͒̑̇̾͆͘̚͘̕̕̕̕͘͝͠͠͝͝͝ͅͅͅ ̴̡̡̨̨̧̧̢̡̧̡̡̢̡̡̢̡̨̧̧̡̢̛̛̛̛͔̝̦͉̜̭̹̫͕̻̫̳̩̰̖̤̮̮̬̱̖̱͕͙̲̹̞͎͚̻͎͎̜̗̻̪̥̥͈̖͖̖̗͎̖̼̺͖̫̪͙̻͚̱͙͚̤̞̮̯͉̲̰̼̥̙͔̱̹̭̗͙͖̥̥͕̙͎̖̮̼̤̻̙̟̹̣̞̼̫̗̳͇̖̮͍̪̹̞̦̙̹̮̭̫͍̭̹̯̗͍̣͕̱̭͓̩̗̭͍̰̱̦̮̤͓̲̮̞̖̘̲͚̗̜̲̯̱̠͍̠̺̰̳̙͎͉͉̟̮̲̩̖̤͙̰̖̙̤̹͙̭͎̹̺͙̼̠̻͉̯̪̪̫̳̰͇̘̣̻̪̙̗̠̝̤̩̤̣͚̦̹͖͚͖̜̳̦̝̺̳̻̼̩̹͖̥̞̗̥̩̱͐̓̂̊́̄̃̈́̏͋̿̿͂̐̎̈́͊̈̌͒̇͐͊̆̽̅̔̓̎̃̀͗̾̓͋͆̃̌̀̾̋̽̇͛̿̀͒̄́̉́̀̉͛̅̎̀̽͋͑͋͗̊̀͋̾͛̈́̇̐̓̏̄̂̅͘͘̚̚͘̕̕͘͜͠͠͠͝͠͝͝͝ͅͅB̴̨̧̨̢̡̨̨̨̡̨̧̡̡̢̢̡̡̛̛̲͕̹̠̮̠͖͇̮̩̰͎̱͕̳͈̱̫̹̮̗̠̙͓̮̖̻̫̟̣̗͕̫͇̗̥͔͔̩̳̥͙͔͙̥̻͙͉̣̯̮̰̩̹̼͎͓̜͈̜̖̰̣̹͕͚͔̜̹̭̗̖͍̪͔̙̭͖̹̹̮̜̮̤̜͔̜̺͕̮̯̦̣̱̖͍̭͎̦̣͎͔͚̙̩͇͓̫͎̼̻͖̼̮͖͓̼͈̞̘̤͇͈̺̞̗͔̩̮̪̱̠̬̼̺̬̲̤̖͕͍̣̤̦̘̻̹̠̘͖̥̜̮̤̰̬̖͈̤̀̈́̉̇̑̇̈̄̑̀͊̓̈́͌̾̀͊̾̀͆͑́̂͛̋̓̅͌̆̓̌̇̈͒̾̾̽̇̈̅͛̐͊̓̉̌͂̂̅͗̆͛̀̋͋̂̌͛̈͌͊͆̀͐̊̑͒̃͂̌̾̏̂͛̉͌̉̄̈́̄̀̈́̉̌͋̈́̅̀̐̀̾̈́̓̽͑̃̏͒̄̓̍̌́̀̿̐̿͒̈́̌̃̏̈́̏̈́̅͗̂̾́̆͌̏͒́̈́́̑̾̆͒̄̓̈́́̈́̀̇̒̒͋̇̈̔́̀̽̎͌̎̌̊̚̚̚͘̚̚̚̕̕͘͜͜͜͜͝͠͝͝͝͝͠͠͝͠͠͠͝͠͝͠͠͠ͅͅͅͅư̵̢̧̡̨̡̢̡̧̨̢̧̡̡̨̡̛̛̛̛̛̭̮͕̳̜̬̠̟͎͎̘̜̹̣̥̦͎̰̺̼̹̣͕̰̖͔̣̳͉͙͚̫͎̹̫͍̟̫̺͈̫͔̺̗̬̖̳̖̯͖̲̤̦̙̹̠̬̭̺̥̲̦͇̳͖̤͖͉̮͉͇̟͍͔̟͍͕͍͕̙̱̘̜̺̲̠̞̹̟͚̦͈̘̦̼̠̟̳̳̝͎̟̟̣̮̙͚̱̱̝͈̭͍̟͐̑͋̍̂̆͂̓̽̈́́̈́̑̅͊̔͑͐̓͋͆̄̅̔͒̇̋̒̓́̏̀̉̒̀̿̐̈́͗̃̏̅̾͊͗̎̏̀͆̄̈́̇̈̔̔̏̇́̀̈́̒͐̑̏̾̌̐̉̒̏̏͌̄̒̇̍̃̊̏̅̓̃͐͗̓̽̌͌͌̌̓̑̓́̂̽̓͛̂̀͌̾̄͆̀̅̌̒̆͗̐̊͆͒̀̔͆̔̏̀͒̍͋̀̅͛̒̂͂̅̉͋̿̿͌͛̍͗͑́̀̃̀̏͋̃̓̿̆̈́͘̚͘̕͘͘͘̕̚͜͜͠͝͠͝͝͝͝͝͠͝͝͠ͅͅͅį̵̛̛̛̲̫̯̟͔͖̟͇̦̠͓̘̪̻͋̾̀̿̌̀̑̿̍̈́͋̒̔̄̑̏̄̏̒͐͋̏̍̏̋̈́̃́̇̋̀̃̆̈́͒̒̅͑̈́͑̈̾̌̀̒̾̈́̊͂̅͋̃̽̃̑͋̄̍̎̑̃͒̐͂̋̊͒̌̋͌̈́̂̇̋̑͆̄͒̀͑̿͐͗̈͑̈̇̓̇̈́͋̌̄̉̂̀̀̈́̀͂̆̆͗̋̄̅̈́̔́̀̂̾̇̊͗̿͊̀̋̾̎͐̑̉͛̉̓̾̐͌̊̆̍͆̈́̆͊͂́͊̒̀͆́̌̋̾͛̈́̾̍͋̍̉͛̽̽͆̊̀̄͗̃͒͆̐̓̈͐̔̓̅̓͌̋̕̚̚̕͘̕̚̕͘̚̚͘͜͝͝͝͝͠͝͠͝͝͝͠͝͝͝͠͝͠͝͝l̸̢̨̨̧̢̢̨̡̧̧̨̢̡̢̡̡̡̢̡̡̡̨̨̛̛̛̝̰̜͎̹͉͔͓̹̱̞̥̦̘̯̩̣͈̤̙̘͈̗͖̺͇̳͙͔̩̯̱͍̱̝͖̮̭̼̬̬̙̘̜̼͉̺͔͔͇̜͖̞͔̱̱̱̘̝̦̻̘͚̤̤͈̞̟̟͚̠̯̪͖͉͖̪͔̻̖͍͖̘̟͖̳̦̻͖̮͍̬̥͚̼͔̩̯̳̯̗͚̭͚̤̩͖͍̱̻̮̦͈̪̱̹͇̬͕͉̬̦̝̜̳̣͉̘̑͐͐̅́̾͌̄͋̋̀̊͒̓̅̑̿͑͗͌̃̈́́̑̔̀̑͆͛̆̐͛͊͆̍̐͋̔̋͋̈͗̃̃̓͊̀̆͆͒̀̑̒̃́̅̆̒̈́̽̈́̒̽͌̐̌́̓̽̾͑̓̅̂̇̐̊̈́̏̾̾̀̉͒̃̾͛͐͊͆̇͌̅̈́̔͛͐̄̈̊̓̋̈́̾͑̈́̀̆̎͑́͊̀̎̐͌̋̋̅͒̒͆͋́́̈́̏̔̾͋͂̄̕̚̕̚͜͜͜͜͝͝͝͝͝͠͠͝͠͠ͅͅd̴̢̢̡̛̛̛̛̛̛̛̛̪͔̖͇͚͓̩̪͔̜͓̣͍̫̳̺̳͇̖͖̟͉̹̟̪̫̖̜̩͙̗͕̳̹̥̭̩̙̹͔͙̟͔̥̰̙̆̂̈́̍̔̌̈́̃̿̒̏̓͐͆̎̎́͗̈̽͌̆̆̑͂͛̃̆̈́͗̇͐̿̈́͒̽̌͗̾̌̐̓̈́̽͗̾̇̑̔̂́̓̓͛͋̏́̏̑̓̍̑̓̃̂̀̀̏̆͋̉̇̀͂͗̄͐̊̈̓͊̈́̽͑́̽̅̽̓̑̈́̂̈́͋́͗̑̇͋̒̋̎͛̈́̿̃̔̐͂̍̀̃̔̀̏͂̅͋̆͆̇͒̈́̾̽͂̎͊̀̄͛́́͋̉͗̓͒͌̈́̏͑̆͒̏̓̃̓͐̏̈́̋͛́́̂̈́̓̋̐̅̏͗̓̓̅͋̔́͋̏͑̑̀̓͐͒͌̀͛̔̐̓̈́̉̈̈́̍̋̄̈́͋̇̆͑̂͗̾̂̒̉̍̈̐̐͑͑̂̾͋̀̐͆̔̌̆̍̽̅͆̓͋̀̽̔̈̽̀̃͑̉̂̈̄͆̌͗̃̎̈́̇̓̍̈́̌̃̋̚̚̕̕̕̕̚̕̕̕͘̕͘̕̕̚̚̚̕̕͘͜͠͝͝͝͝͝͠͝͝͝͠͝͝͝͠͠͝͝͝͠͠͝ͅ ̵̡̨̨̧̨̧̧̨̛̛̛̪͍͖̜̟̫̬͚̦̮̪͚͓͈͙͕̺̮̬͍̯̼̞̤̙̬͚͚̖̳̹̙̤̦͙̖̼̜̫̟̘̺͖͖̰̗̦͔̫̟̗̞̹͇̣͕̫͇͔̪̬̯̩̥̭̗̫̤͉̖̻̳͔͎̤̪̻̜̦̬̫̩̟͚̺̼̩͎̖͚̩̫͖̰͐͋͑̎̎́̊͒̈́͗͆͗͑̀͌̐̎͂̑̏̾̈̈́̈́̃͌́̄̈̿̍̊͊̉̇̀̾͌͐̐̄̐̂̈́̏̒̈̀̀̎̊͋͐̈̏̅̾̈̎̆̂̍̅̈̀͌̒͌̈́̇͑̇͌͂̅̈́͐́̇͌̓͊͑̃͐̓̉̈́̊̒̀̎̔̾̉̌̓̊͌̓͋͒̏̒̀̈́͒́̓̂̂̌̄̈́̀̊̐̈́͂̓̈́͊͛̃̾̈̿̆̿̍̔̈́̽͌̊̅͆̎̊͑̉́͛̌͑̏̒̈́̈̍̔̿̊̀̂̊̾̌̃́̈̈́̐̃͆̽̒̅͊̓̿́͋̀͊́̂̍̿̐̀͋̀̂̈͑̄̍̔͌́̆͑̑̎̌̊̈́͊̿̈́́̂̇̉̋̆̌̕͘͘͘͘̚͘͘̕̚̚̕̕͜͜͜͝͠͝͠͝͝͠͝͝͝͝͠ͅͅ(̴̢̧̡̧̛̘̭̗̥̙͉̮̯͉̦̯̦̫̙̹͚̜̜̥͙̰̯͇̖̩̼̲̙͚̣͍̳̲̬͖̜̼͙̤͓̫̟̺̻̹̲̖̗̺̥̫̘͓̻̗͎̪͎̖̩̩̦̦͈̣̣̺͉̺̥͎̠̯̦͚̝͈̬̲̭̻͍͚̲̯̍̈́̈͊̾͗̊̀̓͌͌̒̎́̒̎́̅̓̅̅̈́͆̃̄̊̊́͂͒̈́̒̉̓̓̾͗̑̔̐̈́̇͗͐̈́́̅̈̄̓̓̎́̓̂̋͆̈́̂̑̑̽̈́͆͛̒̅̑̊̋̔́̎͂̈̔͋̈́̃̀̑̒̍̆̌̎͋̀͒͒͊̈̂͐̈́̽̀͌̆͐͌̈́͆͂̆̐̓͂̈̌̀́͐̑̅̋̈͐̽̂̐̇̏̐͐̄̅̔̚͘̚̚̚͘̚̕͜͜͜͝͝͝͝͠͝͠͠͝ͅͅH̵̡̢̡̧̛̛͖̤͈̣̺͉̳͈̖̜̘͖̪̼̣͇̮̜́̆̐͌̓͗̾̇̈́̏̎̊̋͑̍̌̒̉̐̐̄̓͂̽̐̅̑̀̅͗̅̀̓̓͐̅̌̉͛̀̐̓̈́̔͌̉͌̽̉͆̿̊͊̓̈́͋̓̀̇̓̂̒̓̉̀̆̊͛͆̽̽͐͐͛̇́́̀̐̓̄̾̉̎͋̑̿̐͋́́͐̿̈́̍͋͂͑̀̒͛͋̐́̿͛̓̋̏̓̓̋̎̽̉̔̈́̓̒͋͐̄͗̈̊̀̇̑͋͒̾͊̈̄́̽͘̕̕͘̕̕͘̚̚̕̚͘̚͜͠͝͝͝͠͝ͅǫ̵̡̢̨̧̧̧̨̨̧̨̧̨̡̧̧̧̨̡̧̡̨̨̡̛̛̛̛̫͇͓̗̠͈̬̼̖̗̤͕͈̠̙̼͕̪̮̜̠̻̲̺̯̣͎͙̥̯̖̳̤̞̮̞͕̭̮͓̻͕͖̝͈̟̰̱̪̤̣̰̤͉̠̰͚͇̼̯̫͍̣͚͎̭͙͍̱̳̪͈̞͈̹͚̲̞͔̙̪̞̗͈̩̹͇̠͇̩̲̟̳̖̻͍̤̜̙̜̥̪͕̤͔̮̤̗̜̪̺̺̙͕̜̞̘̳̪̹̰̺̠̩̻̤̤͍̦͚͖̩̟̖̻͕͇͕͇̲̘͎͈̪̬̜̻̜͓͓͚̮̠͚̠̼̳͎̖̜̣̘̙̹͓̮̗͕̟̭̘͉̥̩̳̱͚̣̣̱̗̩̭̦̗̦̞̦̱͙͍̰̟̱̩̠͖̮̟̱͖̰͈̖̺̣̮̗͇̦̣̬͓̳͙̰͉̖̹͖̜̫̭̥̗̦͍̘̫̯̯̗̼̩̮̟͔͖͍̞̽̅̓́̈̀̂͛̈̑̂͋̒̆̌͂̀̎̋̋͌̌́̀̌͊͊̏͋̃́̋́̈̎̎̒̌́̒͋̾̈́͊̃̃́̍͛̄̾̐̆̅͐͗͒́͋͛̌̅́͌̀́͒̇̔͂̌͗̐͛̽̀̀͗̾̂͂̃̈̐͋̒͐̐͗͗̍̿̏̀̈̾́͌̔͌̃̅̄̀̈̂̍͒̈͊̂̾́̈̋̈́͌̐͊̈̓́̒̓́̍͊̾̾̂͂̍́͌͛̆͐̓̈́́̽́̂̂͗͛͌͆̀̍̑̊̿̋̏͛͗̍̀̆͆̀̐̈́̀̒̎̐́̽͊̃̏͊͊̋͒͆̈̅̀͒̕̚̕̕͘̚̕͘͘̕̕̕͜͜͜͜͜͜͜͜͝͠͝͝͠͝͝͝͝͝͝͝͝͠͠͝͠͠ͅͅͅͅͅp̵̧̢̧̢̨̛̛̛̝̻̗̳̝̜͈̖͎̠̩̳̝̺͕̫̯͖̱͙̦̦͚͕̘̖̺̠̠̩͙̜̪͇̼̺̖̆̎̾̽̑̉̽͐͒͌͌͐̀́̿͗͊̒̇̿̇͛͂̀̊͆̈́̂́̒͑͛͂̇̃̑̉̈́͊̈́̌͌̽́́̃͊̂̓̓̐̽̊͌̈̈́͌͑͛̍͂̏͑̎̉̀̍̾͒͂̉̉͊̇͌̓̈́̀̅̇́̿͌̈́̉̂͌͌̐͑̐̐́̔̽̋̀̔͗̽͑̏̊̔̈̀͗̈̓̒̍̏͑̒͑̉̆̊̈́̈́̈́̈́̈́̓̈́̎̾̈́̂̆̊̆̏̀̄͐͒̉̈̈́̚̚̕͘͘̚̚̕͘͠͠͝͠͝͝͠ͅͅę̷̧̡̢̨̢̨̧̢̢̡̛̛̛̛̛͚̩̙̠͇͕̲͇̗͕̤͓̘͚̬̣͖̞͖̬̪͕̼̪͈̺̙̼̳̩̰̪̥̭̼̠̩͓̗͉͖̦͎̮̱̰̺̙̯̯̺̣̲͙͉̘͍͇͕̻͉͇͕̪̥̳̦̼̜̥̟̖͚͖̼͎̦̺̖̲̯͍͓̯̣̪͓̝͉̦̗̬̦̩̜͎͉̗̗͍̜͓͚̲̤̩̖̳͖͔̜̝̰͕̹̻̤̖̮͎͎̱͉̮̗͕̙̞̘͎̰͎̣̗̼̬̻͓̺̬̟̬͓̥͉̱̖̤̣͕̰̱́̾̎̉͆̆̀͛̈́̉͐̅̆̋̾̌̋́̅̊͂̀͒̓̿̆͊͐̈́̐́̎̃̔͆̈́̒̒̋̓̓̐̽̔̌̈͒͒̐̀͊̇͂͂̈̓͊̽̎̅̐̈̔̒̌̅͑̒͗̔́͛̃̈́̊͛̈́̾̅̓͑͗͐̀̌̇̈̾͌̌̄̃̈́̐͗̅̈́̈́̾̈́̓̊̃̿̆̀͐̒͆̃̂̀͗̈̈̍̿͒̉̉̒̅̇̅̄͌͂̀͋̑͂̍̊̔̌͌̈́̓̄̋̔̃̍̿͑̉̿̾̍̄͛̈̀̇̐́̅̈́͆̎̈́̂̽̂̑̏̃̏͂͌́͌́̿̀̒̂́̅́̓͂̂̈́͋̏̇́̈́̄̽̉͛̂̽̀̈̍̀̀̐̉͌̇̑̓̆̇̍̄̐̊́̅̊̈́̿̀̍̑́̇̾͒͌͂̎͆͐͗̆̇̇̄̅̀͘͘̚̚̚͘̕̚̕̕̚̚̕̚͘̚̕̚͘̚͜͜͜͜͝͝͠͠͝͠͠͝͝͝͝͠͝͝͠͠ͅͅͅͅͅf̸̢̡̡̨̢̢̢̡̧̢̢̡̢̢̨̡̢̢̢̨̢̧̧̨̛̛̛̛̛̤̭͖͇̯͍̣̜̖̟̭̭͍̰͙̯̥̱͕̤͕͇̯̩̫͈̯͚̗͇̘̦̠̦̻̟̗̳̩̥̜̱͓̬̺̦̭̥͕̖̪̻͖̳̭̮̠̘̜͈͙̤͉͚̬̞̲̳͖̦̯̞͚̜̘̯̭̥̹̯͕̱̞͙̝̳̗̰͓͙̲͇̹͍͚̣̺̮̖̤͇͉̫͉͙͇̺̦̳͉̟̫̘̹̦̮͈̟͕̫͚̤̫̱̙͍̫̲͎̪̙͔̣̮̺͉̳̫̪͇̹̜̹̺͍̟̜̼̩͇̮͍͙͙̫͕̳̣͖̬̟͓̙̗̟̪͖͕̜̰̳̼̱͈̳̩͓͙͍̖̼͔͔̬̼͓͖̯͉͖͎̻̘͙̤̯͇̠̗͈̦̈́́̐͂̀̐̆̌̇̂̊̑̅̈͐̆͗̒̑͋̅͊͂͛̀́͐̌̍͐͆̋́̏̍̓̒̎̎̍̉͂͐̐͗̀͒͆̈́͆͋̈̍̐̆̿̔̉́̀̾̃͂͗͑̋̈́̽͆͋̽̔̔͛̈̊̿̔͗̂͛͗̉̈́̉̀͊̓̒̆̔́̓̐̎̀̂͌̎̈́̀̓̀͒̈́͑͒̿̏̑͒̉̍͗̓̌̋̋͗̈̿̇̐̈́̇̍̂̓̊́̊̈́̈́̒͋̈́͆͋̽̔̓̅͂̇̽͑̃̅̀̓͗̌̐͛̓̊̀̉͛̽̅͒̌̀́̽̋̄̈̏̽̕̕̕̚̚̚̕͘̕̕͘̕͘̕͘͜͜͜͜͜͜͜͠͠͝͝͝͠͝͠͝͠͝͝͝͝͠͝͝͝͝͝ͅͅͅͅͅͅͅͅͅͅų̷̡̨̡̡̡̫̣̜̬̮͇͖̙͎͖̣͙̻̹̼̭̣̜͉̥̩͚̩̲̼̼̩̣̳͓̣͎̩̼͔̬̤̣̩̘̤̱̟̭̘̙̪̫̞͕̘̤̩̥̹̣̱̾̌͂͊̋̃̒͗́͊̈͑̒͋͘͜͠ͅͅl̸̢̢̨̡̢̡̧̡̛̛̛̛̛̛̛̛̥̯̳̬̥̺͙̰͎̭̞̘̫̼͉̫̜͖͕͔͚͇̯̮̪͖͓̥̺̦̟̪̠̣̻̣̗͖̻̲͚̮͕͈̹̺̣̮̣̘̠̜̻̘̬̹̘̠̼̳̬͕͍͇͉̲̞̪̦̰͚̘̙̺̫̻͎̦̟̹̣̠͍̭̗̖̤̫̣̣̞̱̦͇̫͚͚͇͖̯̬̤͕̪͇͈̳̠̣̻͍͖̼̹̱͕̹̟̀͂̎̈́̑͋͋̇͊͛͑̎̈̐͌͆̐̊̀̅̂̾̄͛̐̽̔́̏̀̈́̿͆̇͊̓̎̈̎̎͐̈̾̌̄̐̃̋̈̇̅͗̑̊̈́̽̌̃̈́̽̋̊̆̅̽̍̔̇̉̒̊͂́̇̃̒͆͊̌̓͌̅͊̄͆̅̂̈́͆̄̈̀̊͗̎̉͌̿͛́̂̌̊̎̎͒͊͛͗̍̀̋́̇̎͛̈́͂͐̂̆͒̈̆̑͐̾͗̆̊͐͊́̓̔͐̅̋̐̈͆͐̓̆̑̑̌̄͋̿̀͋͋̽̄͒̾͌̅͛͊̒͌͂̎̃͌̇̃̿͆̉̇͂̀͆͗̎̊͌́̀͗̽̚͘̚͘̕͘̚̕̚̚̕̚̚̕̕̕̕̚͜͜͜͠͝͝͝͝͠͝͝͠͠͝͝͠͠͝ͅͅl̶̡̧̧̧̧̡̡̨̨̨̢̢̢̡̧̨̢̧̨̡̨̡̢̛̜̳̩̪͈̰̣̤͓̙͔̗̣̗̹͉̞͉̠͖̪̭̗̲̰͇̠̱̯̟͖̯̝̠̳͍̬̳̬͔̠̟͍̬͓̜̪̭͚̟̝̺̫̩͈̩̼͕̘̜͔̹͇͙͍̪̪͔͇̩̠̟̲̝͕̖̥̣̣͕̮̣̤̙̥̼̫͓͍̥̘̩͍̯̺͍̪̠̮̟͔̠̟̮̣̞̻̥̠̯̣̯̮̬̘̦̖̝̩̥̝̪̫̱͍̥̺͙̺̹̱̤͇͕̜̻̮̞̫͖̠̳͚̪̘̖̟̭͔͙͈̜̟̰͖̪͚̖̤͕͓̘̮͚̼̰̜̺̪͖̥̠̮̯͉̙͕̹̙̲͈̫̮͓͍̣̥̥͉̹͎̥̣̫͉̞͍̲͔̣̰̳̠͈̤̣͔̠̥̥̓̆̊͋̔̆͋̊̾̃͒̉̀͛̾̍̃̋̈́̎̚͜͜͜͜͜͜͜͝ͅy̴̨̢̡̧̧̢̨̡̛̭̲͎̜̯̪̳͔͔̳̳̠͚̼͙̰̥͙̟̳͈͚͚͚̟̜̥̣̠͇̳̬͍͔͚͕͙͇͍͈͎̖̟̭̝͈͈͔͍̞͈͈͉̮̙̥͖̖̣̤͈̘̲͈͆͒͊̄̓̓͆́͛̇̍́͂́̒̿̈́͐̄̀̽͗̅̑̀͆̊̀͋̀͐̆̒͌͑̀̃͗͑̀̔̌͆̓͛̾̌̂̃̓̃̓͂̀͋̆͊̊͌̊̈́͋͐͆̾͐͛̏̏͂̀̀͐͋̇̎͗̑͛̅́́̈́̊͆̑̽̀͗̂͂̇́̎̈́̎̎́̌͐̋͋̑̎̀̐̐̐̀̉̈́̍̅̌̀̑̊̈́̍̏̾̀̊̐͊̄̅̌̅̈́̑̔̒̌̈́̄͆͒̇̒̍̓͊̀̎́̐̎̎̓̉̋̉̍̾̏͗̾̿̓̎̾̏͊̆̓̋̽̊̉̐̈̔́̈́̿͌͐̓̄̽́̓͒̀̃̀̄̇͒́̅̀̊̓̌̅͌͒̓̀̀͗̂̓̆̇͒̂̇͗̿̉́̃̉̈́͌͊̔́̽̍́̓̇̽̓̅̏̒̍̚̕͘̕̚̚̚̚͘͘͘͘͜͝͝͠͠͠͝͠͠͝͠͠͝͠͝͝͝͝͝͠͝͠͝͝ͅͅͅ)̴̨̧̡̢̢̢̢̡̡̨̢̧̢̨̨̡̡̧̰̠̣̤͕͕̳͓̲͉͎̮̳̼̟͇̲̳̺̳͚̟̙̫͈̱̮̲͈̬͓̝͙͖̝͚͕̟͎͎̪̱̹̗̼̹͙̫̰̬̮̥̦̻̪͍̮̝͓̪̤̜̹̹̝̻͓̠̗̪͚̜̭̝͉̜̣͈̹͉̪͎̜͙̗̫̺̘͙̘̼̜͕̰̠̟̮͓̳͚̬̝̼͖͕̘͚̱̜͓͉͉̮̟͕̰̮̩̬̩͓̪͓̪͓͎̻̲̙͉͚̺̻̩̮̟̬̗̖̩̝̮͖͖̺̩̝̙͓̜̪̺̩͚͓͕̙̭̯͇̪̣̭̦̼̥̥̱͔̹̤̝̗͉̙͖͕͈̪̟̗̟̞̣͖̤̪̮̹͈̰̱̬͔̗͓̫͎̦͍̬̭̲̩͉͍̺̱͇̻̟̥̞̼̫̜̯̮̗̣͙͈͛̒͋̿̾̃̾͐̓̓̌̇́̋̀͒̂͌̓͋́̂̓͜͝͝͝͝ͅͅͅͅͅ ̶̧̧̨̧̧̨̨̛̛̗̘̝̼̙͍̖̗̼̪̠͙̜̺̰̼͖̬͉̥̺͔̖͖̯̜̬͕̖̭̭̭̯̖̝̜̱͉͕̩͚̥̪̥̮̼̦̫͓̣̱̬̖̼͓͚̳͇̗̞͚̞͖̗̳͎͉̠͚̥̝͔͈̬̖͔͍̠̗̟̥̳͕͍̺͙̖̯̯̗̙̼̘͇͖͚͍̩̱͈̙̫̻̝͉̤̻̼̪̯̈́̈́̌̀͂̈́͌̋͛͋̏̿̀́̈̿̄̀͛͆̑́́͑̑͑͛͌͊̕͘͜͜͜͜͜͝ͅͅͅͅͅ(̷̢̨̢̨̢̧̡̡̡̨̟̗̖̯͕̞̞̭̰̮̫̘͓̼͇̻̝͚̬̤̻̱̫͇̳̪̼̫̼͈̮̹̮̱̗̖͇̤̱̠͙̼͚̻̞̣̳͎̩͍̭̖̩̫̖̭̬̰͚̖͓̝̟̦̫͎̩̖̩̬̖̝̬̦͚̹̞̪̪͇̭̯̘̝̹̞͉̖̘̱̣̤̖͊͌͐̔̏͛̓͆͆͐̄̑̾̌̇̆̉̌̊͆̂̅͛̀̄̇̽̋͊͒͆̐̀̾̓̌̾̑͊̌̒͗̾̈͛̍͂̈̓͘͘͘͘͘̕̕͜͠͝͝͝ͅM̴̡̨̧̨̧̡̡̨̧̧̧̛̛̛̛̛̛̛̫͇̘̬̥͎̘͓͓̮̦̗̹̭̼̭̟̩̝̣͓͚̘̥͔̲͙͈̖̤͔̯͉͕̬̰͈͍̰̭͍̗͇̦̟̙͉̦͕͍̤̯̼̹͖̜͕͉͖͔̩̝̠̘̪̠͕̯̪̲̘̭͓̬̮̰̙̥̰̝͈͍̩̜͍̥̘̮̯̞̠̲̲̯̬̝̥͎͇̼̝͇̜̰̳̯̝͖̫̪͔̝͖̯̩͕͕̮̬̠͇̻̗͉͔̖̟̙̬̞̪͇͇̠͇͚̫̯̖̝̝̱͖͉̣̙͎̥̯̗̺̜̖̜̭͚͇͈͉̖͋̎͒̈́̍̄̊̈́̒̿͊̀̔͑̈͂̉̍͛̏͗̈́̐̃̐͂̀͊̊̑̈́͌͋͆̆̆̒͋̋̊͆͌͂̇̅̽̐̀̿͋͋̌͒̓͒̈́̾͂̂͗̔́̓̋̈́͑̏̎͛̊̈́̓͋͑͛͒̌́̀̀̽̈̌̍̀̆̋̌̇͆̀́́̊̿́́̎̀̇͛̌̊̆́̌͋̅͒͂͋͑̇͌͛̈́͌͗̀͂͑͂̄͐̿͌̈́̒̐̃̄̃͂͂͛̀͌̉̍͊͊͐̊̚͘̕̕̚̚̕̕͘̚̚̚͘͜͜͜͜͜͠͠͠͝͠͝͝͠͝͝͠͝͠͠ͅͅǎ̵̡̢̧̡̧̧̧̨̢̡̨̧̨̢̡̡̨̨̢̢̧̢̛̛̛̛̛̛̪̭͙̩̥͔̪̞̣̘̩͈͎̲̹͇̟̰̖͇̙̩̹̣͎̜͕̣̙͇̲̙͇̯̖̺̘͇̹̝̪̱̭͚̜̻̻̳̹͇̺̰̬̠̞͓̟̥̣͇̗̮͈̜͈̰̲͉̰̩̩̯̯̻̻̣͈͙̜̙͙̜̝̻̼̪̳͇̲̥̞͎͉͈̙̣͕̗̩̼͎̦̹͚̣̥̲͙̣̦̤̳̮̹͔̤̝̩̜̰̤̺͓̮͔͉̞͇̣̞̪̞̫̘̻̫͚̳̤̙̜̩̦͔̘̪̠̺̪̼̤̫͎͚̳̪̥̗̰͇̻̺͕̦͖͈̤̗̭̜͔̘̝͚͔̥̹̫̻̩͈̫͔͍̲̬̲̻̦̼̮̜͕̬͖̹͎͖̭̝͍͕͓̤͈̠̹̪̣̰̟̬̖͍͖͍̥̘̰̦͚̤̙͔͕̱͚̩̫̙̳̗̣̺͚̹̜͖͉̬͙͔̎̌̊͆̃̀͗͊̂̉͂̈̍̄̏͛̾͂̊̍͑̌͌̈́̈́͂̇̀̾̋̑͑̏̈́̅̐͑̑̂̈́̒͊̿̇̈́̅́̓̎̐͌̓̀̓̾͆̉̄̑̇̈̓̋́̿́̏̈́̽͗́͗̾̌̂͊̂̈́͛͂͆̈̒̂̂̔͂̓̈́͗͒̐̾͐͌̋̐͐́̋̎̃̀́̑̅̾̇͑̽́̄̃̉́͌͆́͗͑͐͛̉̓̓̌̈́̓̔̀̍̌̃͗͗͐̂͐͊̇̈́̆͑̓͋̀́̈́̾̂̔̈̑͊͑̍́̈͗̉̋͂̍̀̔̑͆̃̔͑̍̅̄̒͒̂̐̐̈̿̑͛̄̍̒̈́̔͋̈́̚̕͘̚͘͘̚̚̕̚̕͘̚̚̚͜͜͜͜͜͜͜͜͜͜͜͠͝͠͝͝͠͝͝͝͝͠͝͝͠͠͝ͅͅͅͅͅỳ̵̧̡̧̨̡̧̧̢̢̡̧̡̢̡̡̡̨̡̧̢̧̛͉͉͕̘̳̲͚̘͙̬͓͙͎̺̗̺̘̬̠̲̳͔̥͎̟̯̮̦̰̯͔͈̮̤̗͖̩̣̥̻̹̱̟͖̥̱̰̗͓͉̟̤̰̠͓̺̘͈̻͎̜͍̞̗̫̫̼̤̤̤̮̤̮̥̳̫̝̫̞̗̲̹͈̫̼̮̬̯̻̼̖̣̺̳͇̲̠̥̳͔͖͇̟̣̩̭̥͚̟̖̯̠̥͉̭̫̹̖͇̩͉̥͉͇̪̱̠͔̟̗̞͔̙͍̙͙̺̰̖͍̱̹̦̬̳̠͇̙͉͕̗̤͕̦̯̳̘̘̖̙̺̫̝͔̱̘͍͚͎͕͔͕̹̩̼̳̝̮̤͎̪͉̫̺̪̼̠̦͚͈̿͆͐̿̊͒͋̒͗̓̀̓̾̂̏̈̊̆̎̑͊̊̽͐̄̊͌̑̽̇͗̂̋̔́͒̄͆̈́͛̃̂̎͂̈́̋͋̎́̚͘̕̚͜͜͜͜͜͜͜͜͜͜ͅͅͅb̶̡̧̧̨̨̡̡̧̧̢̧̡̢̧̡̧̧̢̢̨̢̧̡̨̛͈̘͙͙̦̘̙̞͙͉͎̱̱̹̭͈̘͚̰̠͕̦̣͇͇̠̘̘̭͓̠̻͈̙͚͔̟͚̟̪̲͇̳̼̮̤̫͉̭̬̬̺̼̼͍͓͕̱͓̝͙̺̞̯̳̣̩̯̺̙͇̣̩̣͉͔͙̗̪̺͔͓͈̮̜̱̭̩̼͉̠̹͓͕̬̳̻̱̥̦̖̯̻͔̟̻̤̞̼͎͇̲̩̻̣̠̤͙̝͎̘͇͚̗̗̞͕̼͔̮͕̥̖̹̮͎̱͎̰͙͖̤͖̝̳͉͎̪̖̬̙̖̯̖̫̝͇̣̱̩̝̲̪̺̭͎͖̫͍̯̱̥̤̪̣̫͖̞̠̖̩̞̝̟͉̠̲̦̭͖͓͈̣̳̮̟͙̯͇̹̮͍̙̩̖͚̬̺͎̬̙̜̺̞͕͙͖̬̬̖͍̝͍͈̗̘̰̪͓̣̳̱̺͇̾͛̾̏͆̇̒̈̂͛̐̀̀͂̈̍̋́̌͑̌̿̂́̆͒͋͒͐̽̈́̐̒̀͐͂̈́̾̍̇́̾̚̚͜͜͜͜͜͝͝ͅͅͅͅͅͅͅͅͅͅͅͅͅě̴̡̧̨̡̨̨̡̢̡̢̛̛̛̛̥̗͈̘̬̙̺̥̞͔̹̱̬̙̹̠͖̙̫͈̖̳̪̙͙̼͎̮̗͙̹̙̯͈̞̲̩̮̞̠̲͔̝͓̥̟̮̪̘̥͕̠̲̯̫͓͍̻͎̠̞̟̤͓͍̥͙̙̯̯̮̳̹͍̼̪̗̀͒̾̋͌̀̀͗͂͌̏̄̓͗̓͐̔̏̓̅̾͂̓̂͌̌̉̂̍̽͌̓̓͛̔̓͂͒̂͋̅̾̀̍̅͑̇̽̋̔̉̑́͗̓̂̔̄̿̾̈́̀̓͑̈́͂̾̓́̈̎̇̿̈́͋̀̀͋̎̈̀̎̈́̏͐͌̄̀̈́̾̌́͗̀͊̒̑̾̐̈́̒̊̐̍̾̏́̇͌͑̔̇̿͋̃͒́̑̆̀́̑̏̎̄̃́̋̄͑͂̈́͆̆̓̏̋̒̀̑̑̀́̈́̿̑̑̓̃̆̇͆͛̽̑̍̅̔̊͊̅̀̅́̈́̎̑̈́̈̕̚͘̕̚͘̕͘̕̚̕̚̕̕͘͜͝͝͝͝͝͝͝͝͝͝͝͝͝͠͝͝ͅͅ)̸̨̡̨̨̢̧̢̡̧̡̧̨̡̡̛̛̛̛̛̛̛̛̺̪̱̬͇̣͇̬̟͇̖̣͎̙͕̯̫͈̫̘̦͖̹̱̼̮̟̯̙͚̮̲̖̬̲̗̩̩͉̯̘̻̙̞̳̝̜̝̙̳̱͙̲͚̞̫̝̜̭͙̘̟̱͈͎̹̪̰͓͈̹̩̜̘̱̦̮̲̰̻̜̭̗̘̣̙̳͖͍̦̣̙̜̯̙͎̥̯̹̣͎̲̙̲͖̻̺̲̪͙̗̻̱̰͕̳̤͖̝̫̦̣͍̮͍̺̻͚̮̙͉͙͚̜̥̭̠̘̫͎̜̯̺͎͖͖͇̪̼͈͙̰̖̜͇̼̣̝̮̮̺̝̬̫̮͎̩̘̭͈͔̞̤͇̥̤͕̄͌̏̾̉̍̔͑͑̔̔͑̀̎́̽̀͑̽̀̍̃̇̅͆̈́̈́́̌̂̐̇̎̍̀̆̏̓̈́̀̓͛̾͋̃͊̿̉̀̄̀̎̓̅̍͆͒̈̿̀̐̏̍̀́̔̇̑̏͗̽͂̑̆̌̎́̉̋̎̈́͗̑̊́̑̈́̒͊̀̀͋͂͒̔̃̋̋̊͗̉̈́͛͗̇̋̐̔͆́́́̈́̈́͂̎̏́͒̾͗͊̑̑̆͒̂̽͛̏́̊̑̄̍̈̈́̍̔̽͛̋́̒̓̀̋͐̓͌̅̿̍͂̎̈́̀̍̆͒̀́͒͂͊̌́̆̓̊̀͆̈́͗͛̓͒̑̓͐̋͌͑́͐͒̊̋̈͆̕͘̚̕̕͘̚̚̕̕̚̕̕͘͜͜͜͜͜͜͝͝͠͝͝͝͠͠͝͝͝͝͠͝͝͝͝͝ͅͅͅͅͅͅ
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2023-11-13 10:25:57 -05:00
0f9da6148b (Esimorp I) (Niaga) Dliub Xif Ot Tpmetta
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-11-13 01:41:52 -05:00
ea48728a68 Fix ARM Build
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-11-11 19:22:07 -05:00
3e7037f621 Remove iconv
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-11-11 01:33:19 -05:00
11230c120d Remove LibPNG + Clean Up 2023-11-11 00:44:26 -05:00
1f05424651 Include Compiler Check In SDK 2023-11-09 18:41:10 -05:00
98db527a13 Older CMake Compatibility
Some checks reported warnings
minecraft-pi-reborn/pipeline/head This commit looks good
Build / build (push) Has been cancelled
2023-10-21 19:27:22 -04:00
85e04fbcc6 2.5.1
Some checks failed
Build / build (push) Has been cancelled
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-10-21 16:36:54 -04:00
018e506c80 Include More Dependencies
Some checks reported warnings
Build / build (push) Has been cancelled
minecraft-pi-reborn/pipeline/head This commit looks good
2023-10-19 21:50:39 -04:00
945ce81fe1 Skip CI On Flatpak Tag
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2023-10-19 21:14:52 -04:00
fab66319ea Merge pull request 'Update ARM GNU toolchain to version 12.3-rel1' (#64) from taylorthemushroom/minecraft-pi-reborn:master into master
Some checks failed
Build / build (push) Has been cancelled
minecraft-pi-reborn/pipeline/head There was a failure building this commit
Reviewed-on: minecraft-pi-reborn/minecraft-pi-reborn#64
2023-10-19 21:13:00 -04:00
99424546f8 Remove old toolchain URLs 2023-10-19 21:13:00 -04:00
cef22a5325 Oops
Forgot to update a few lines of code in the previous commit. Sorry!
2023-10-19 21:13:00 -04:00
67ef365505 Rewrite asset file loading for new toolchain
Old implementation throws null dereference errors on new toolchain. New implementation has not been fully stress-tested but should be mostly operational.
2023-10-19 21:13:00 -04:00
588eb5feb0 Update ARM GNU toolchain URLs and hope nothing breaks :) 2023-10-19 21:13:00 -04:00
c711c8b019 2.5.0
Some checks reported errors
Build / build (push) Has been cancelled
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2023-10-19 21:03:01 -04:00
864c096785 Use Official Skin Server 2023-10-19 20:53:38 -04:00
9ef0868889 Update Dependencies 2023-10-19 02:11:41 -04:00
5b792fbf3a Add Feature Flag For Custom Skins 2023-10-19 01:56:09 -04:00
c908d46d54 Fix "Sleeping Beauty" Bug 2023-10-19 01:46:09 -04:00
db03d964de WIP Custom Skin Support 2023-10-19 01:23:34 -04:00
c0cd9b8b1f Nicer Release Formatting
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Successful in 1h36m19s
2023-09-21 12:57:59 -04:00
a8835153b0 CI Fix Attempt #2
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Successful in 1h36m49s
2023-09-21 00:25:47 -04:00
e1f2867d78 Attempt To Fix CI
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Successful in 1h37m45s
2023-09-20 22:34:19 -04:00
7a5fef7024 Try Gitea Releases
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Failing after 1h37m8s
2023-09-20 20:54:07 -04:00
da9edee160 2.4.9
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
Build / build (push) Successful in 2h38m15s
2023-09-17 15:53:34 -04:00
9e517f5e60 The Return Of ES2 Support
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
Build / build (push) Successful in 1h43m7s
2023-09-07 21:38:14 -04:00
85e3cb6228 Fix CMake (Again) (Again)
All checks were successful
Build / build (push) Successful in 2h44m8s
minecraft-pi-reborn/pipeline/head This commit looks good
2023-08-05 17:26:36 -04:00
1dd0526197 Fix CMake (Again)
Some checks failed
Build / build (push) Failing after 1h26m22s
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-08-05 01:42:47 -04:00
7ecc6cb00b Fix CMake
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
Build / build (push) Failing after 1h10m4s
2023-08-04 23:32:25 -04:00
4189f3fd1d Use Newer GLES Compatibility Layer
Some checks failed
Build / build (push) Failing after 7m31s
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-08-04 22:52:30 -04:00
de18189b44 Fix Graphical Glitches On Some NVIDIA GPUs And Fix Crash When Taking Large Screenshots
Some checks failed
Build / build (push) Failing after 7m24s
minecraft-pi-reborn/pipeline/head This commit looks good
2023-08-02 01:08:31 -04:00
a622858a18 Better Fog Shader
Some checks failed
Build / build (push) Failing after 2h11m44s
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2023-06-12 19:14:37 -04:00
b005106b44 [Gitea Actions] Clone Submodules
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Failing after 1h33m17s
2023-06-04 00:58:26 -04:00
61add936cc Fix Workflow Name
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
Build / build (push) Failing after 27m6s
2023-06-04 00:03:15 -04:00
d3b78acbef Gitea Actions Attempt #2
Some checks reported errors
Build / check-and-test (push) Has been cancelled
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2023-06-03 23:53:26 -04:00
07a27d4dd9 Try Gitea Actions
Some checks reported errors
Build / check-and-test (push) Failing after 20s
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2023-06-03 23:48:28 -04:00
6779905830 Reference New AUR Package
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2023-05-28 02:58:28 -04:00
c3fda82642 2.4.8
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2023-05-28 00:50:08 -04:00
e0ab968fa3 2.4.7
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2023-05-18 18:38:35 -04:00
45b93534fa Revert "Add Night Vision"
This reverts commit 5273d6cdf9.
2023-02-25 19:36:35 -05:00
5273d6cdf9 Add Night Vision 2023-02-25 04:05:20 -05:00
06af8c821f Add Cave Generation 2023-02-25 00:26:45 -05:00
7b4729b8ec Add Biome Colors To Grass 2023-02-24 19:53:41 -05:00
ffad36224e Improve Server Performance 2023-02-24 17:41:49 -05:00
236f7e385d Update Dependencies
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-10-31 19:27:02 -04:00
f506b10051 Add Minecraft::handleBack Safety Check
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-10-20 23:58:40 -04:00
9b4a9994ba 2.4.6
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-10-08 16:33:12 -04:00
32cd0c426f Workaround GLFW Joystick Bugs 2022-10-08 16:27:04 -04:00
5690df3ebe Formatting Tweaks 2022-10-08 16:27:04 -04:00
b4bebfb701 More Fixes 2022-10-08 16:27:04 -04:00
1fa444f810 Fix Controls Documentation 2022-10-08 16:27:04 -04:00
f3dc145d4a Allow Opening Crafting With Controller 2022-10-08 16:27:03 -04:00
5d65b4092f Move Code Around 2022-10-08 16:27:03 -04:00
81aa01daf9 Fix Silly Typo 2022-10-08 16:27:03 -04:00
2edfa62c25 Fix Holding Left-Click When Attacking 2022-10-08 16:26:57 -04:00
4870afcc7f Document Controls 2022-10-02 01:23:46 -04:00
c178e5e5eb Logging Improvements 2022-10-02 00:47:11 -04:00
57b0bce12c Fix For ARMHF 2022-10-01 19:29:11 -04:00
95345a5f1b Minimal Controller Support + Input Fixes 2022-10-01 01:37:20 -04:00
717b4a11a7 2.4.5
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-09-26 22:19:27 -04:00
40a527bb23 Bundle QEMU 2022-09-26 20:59:46 -04:00
2766611878 Small Fixes
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-09-25 20:56:45 -04:00
8532e7707f 2.4.4
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-09-25 19:53:19 -04:00
703ced337b Use File Locking 2022-09-25 19:35:51 -04:00
bedd5ea53a Replace PatcheLF With LIEF 2022-09-25 15:47:36 -04:00
eb3c5d2e6f Remove Unused File 2022-09-23 17:56:44 -04:00
ab1dbd2996 Update Docs 2022-09-23 17:55:38 -04:00
29bc6faf3d Add Disable Creative Mode Mining Delay 2022-09-23 17:08:26 -04:00
5aae95fd37 Add --wipe-cache 2022-09-23 00:31:42 -04:00
5739c5f999 Add Disable Speed Bridging 2022-09-22 23:59:44 -04:00
34ef2d51aa Small Fixes To The Launcher 2022-09-22 18:08:12 -04:00
f328800ce8 Cache Launcher Configuration 2022-09-22 17:43:21 -04:00
02c73176a5 Fix Particles In Front-Facing View 2022-09-21 23:06:58 -04:00
16ce586e9c Add Quit Button 2022-09-21 20:15:00 -04:00
6378a18494 Add 3D Anaglyph To In-Game Options 2022-09-21 18:40:09 -04:00
6994671c6d Add MCPI_API_PORT 2022-09-21 17:54:40 -04:00
58f329bb4f Bug Fixes 2022-09-21 17:34:19 -04:00
d03a1a96ff Tweaks & Fixes 2022-09-20 18:25:27 -04:00
35cafec1ee Tweaks
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-10 17:21:38 -04:00
4ab6b7aed1 New GCC Is *Still* Broken
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-09 18:48:30 -04:00
edd346dd66 Stop Fighting CMake
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-08-09 18:39:34 -04:00
0d9f498aa7 Fix ZLib In "git status" 2022-08-07 14:14:00 -04:00
d761ad8614 Better CMake
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-05 22:07:19 -04:00
4977898bcd Use New Repos
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-08-05 20:37:11 -04:00
513628d91f More CMake Tweaks
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-08-05 20:08:13 -04:00
9a521ebca2 Remove Warnings From SDK
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-03 13:08:20 -04:00
deae36ed94 Better SDK Setup
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-01 19:56:35 -04:00
00d6ee4f9a 2.4.3
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-08-01 18:41:08 -04:00
8dd562a20f Fix Signs With CP-437 2022-07-30 23:52:50 -04:00
c11c7203ef 2.4.2
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-29 22:13:03 -04:00
379da809cd 2.4.1
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-20 02:58:14 -04:00
96baf9627a Actually Fix Screen Rendering When GUI is Hidden
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-16 00:02:51 -04:00
279b101e46 Hotfix #2
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-15 23:20:31 -04:00
b190851d36 Hotfix
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-15 22:08:12 -04:00
c3c7d22006 Actually Fix CI
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-07-15 20:09:51 -04:00
3abbb0cb16 Improve Server Dockerfile 2022-07-15 19:54:58 -04:00
dda511f8ff Fix CI (Again)
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-07-15 19:43:26 -04:00
0ccc1ba6e8 Fix CI
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-07-15 19:05:59 -04:00
9d3a0964b0 Fix CI Stage Name
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-07-15 17:54:43 -04:00
ed9bef8492 2.4.0
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2022-07-15 17:27:21 -04:00
c4e26c5be2 Fix Classic HUD 2022-07-15 01:37:12 -04:00
0c82db4116 Diable Broken Touchscreen-Specific Block Outline Behavior 2022-07-15 01:28:51 -04:00
ce168c1c16 Add Translucent Toolbar 2022-07-14 19:52:51 -04:00
93eb7807aa Fix Attacking 2022-07-14 18:23:40 -04:00
12074e15d9 Fix Sound 2022-07-14 18:11:44 -04:00
010aaa89e3 Embed Feature Flag Data 2022-07-13 23:35:05 -04:00
0e32fd36c8 Store Temporary Logs In Own Directory 2022-07-13 23:05:59 -04:00
6c89e64f8b Add Classic HUD 2022-07-13 22:11:46 -04:00
9fe6a2fb39 Remove Superfluous Mutexes 2022-07-13 19:32:08 -04:00
c87a6fa3c0 Improve Proxy Client 2022-07-13 17:02:18 -04:00
69d3832815 Move Screenshot Code To ARM 2022-07-13 16:46:33 -04:00
67002006f3 Vendor PatchELF 2022-07-13 11:58:35 -04:00
eb96d80e5a CMake Restructure 2022-07-11 23:51:27 -04:00
968001897d Build Fixes + Don't Force EGL 2022-07-11 20:47:57 -04:00
68519f06fd Add Buckets 2022-07-10 10:37:19 -04:00
b3b935dd1d Logging Changes 2022-07-08 22:40:56 -04:00
006243d02f OpenAL Fixes 2022-07-08 15:00:01 -04:00
3c1bce876c Run Benchmark During CI Test 2022-07-08 13:57:48 -04:00
484d3e7f90 More Miscellaneous Fixes + Fixed GLES v1.1 Support 2022-07-08 00:25:01 -04:00
23df63abb7 CMake Cleanup 2022-07-07 18:55:43 -04:00
126c3d618d No More APT 2022-07-07 18:54:11 -04:00
3937f88084 More Fixes 2022-07-07 00:37:53 -04:00
4bd2fecfa2 Better package.sh 2022-07-04 16:51:56 -04:00
b539491713 Treat AppImages As Self-Mounting Tarballs 2022-07-04 16:44:00 -04:00
ea4c5c77a1 Cmake Refactor 2022-07-02 18:14:23 -04:00
e506dbb1bb GL Fixes 2022-06-30 19:53:32 -04:00
699d83c61b Recipes API 2022-06-27 14:47:55 -04:00
329f92c0a4 Fix Weird Shading 2022-06-26 22:01:31 -04:00
bfa0567ac9 Better Examples 2022-06-26 21:17:52 -04:00
a94708a1ae More Reliable Jenkins 2022-06-25 23:40:24 -04:00
905a569c09 Better Flathub Badge 2022-06-25 23:38:29 -04:00
53f602403a Cache Blacklist/Whitelist 2022-06-25 23:32:31 -04:00
2f64552926 Fix SDK Bugs 2022-06-25 23:03:46 -04:00
2b920f50ba Improve Example Mod README 2022-06-25 17:49:09 -04:00
d859a16b5a Initial SDK Support 2022-06-25 17:30:08 -04:00
78e17d8c18 Block Running As Root
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-24 20:37:52 -04:00
0e7a108a0a Improve Build
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-13 22:53:43 -04:00
ca21877000 Ditch FreeImage
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-13 20:49:09 -04:00
f1ec29ec86 Build Tweak
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-12 16:23:32 -04:00
13ac816baa Fix Invalid AppStream XML
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-10 23:49:15 -04:00
6ba86b9193 Tiny Docker Fix
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-10 22:02:43 -04:00
49f8da2a80 Fix Build
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2022-06-10 21:59:57 -04:00
e8faee62fa Improve AppStream
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-06-09 23:23:37 -04:00
a8ff58f0c4 Update Dependency Installation 2022-06-09 23:10:29 -04:00
daccf65361 Improve Metadata 2022-06-09 21:31:40 -04:00
3d508d7609 2.3.13
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-05 16:14:03 -04:00
0061edb3b2 2.3.12
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-06-04 14:36:47 -04:00
baeeceeaac Slightly Faster 2022-06-04 14:34:15 -04:00
211bf265ff Optimizations & Fixes 2022-06-03 22:25:22 -04:00
0dd0706f52 2.3.11
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-29 22:54:57 -04:00
1743626113 Sweeping Media Layer Changes (GL ES 2.0 Support) 2022-05-29 18:44:27 -04:00
4ed11b67e7 Add Front-Facing View 2022-05-17 18:31:25 -04:00
365e238c29 Small Fix
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-16 18:56:19 -04:00
36c4ed7e4d Fix Stupid Mistake
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-15 15:16:45 -04:00
cf1faf4835 Better Exit Code Messages
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-15 13:51:28 -04:00
cb4560a602 Don't Require MCPI_DEBUG For Command Errors
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-05-15 00:53:46 -04:00
b3a96dc3e2 2.3.10
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-14 00:16:25 -04:00
be300a2809 Fix Zenity On Wayland 2022-05-13 23:27:06 -04:00
77d7b82a14 Add Crash Report Dialog 2022-05-13 22:36:12 -04:00
b59c580f6a Fix Build On Ubuntu 22.04 & Bug Fixes
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-11 18:24:03 -04:00
524a390921 Use Debian Sid As AppImage And ARMHF Sysroot Base
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-04 20:47:15 -04:00
ead7e575f3 Allow Specifying Custom Sysroot
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-03 21:08:56 -04:00
f2a9b274d2 Cleanup Sysroot Sources
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-03 17:29:10 -04:00
dd4972172d Fix In-Source Build
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-03 17:27:52 -04:00
8822a22987 Re-Run CMake On Version Change
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-02 22:52:52 -04:00
53cb68beee 2.3.9
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-02 22:46:53 -04:00
47ae13ac51 Bundle An ARM Sysroot 2022-05-02 22:44:10 -04:00
492725ed63 Colored Logs 2022-05-02 20:43:52 -04:00
7c2d0d5625 2.3.8: Switch Up Mod Loading Order
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-05-01 00:25:29 -04:00
9449cdf747 Fix Bad Comment
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-30 23:29:29 -04:00
d95a9e1871 Update Changelog Formatting
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-30 22:34:52 -04:00
8a83702c3c 2.3.7
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-28 20:54:00 -04:00
be7e44fd3c Update GLFW
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-28 17:00:11 -04:00
651c49980e 2.3.6
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-27 23:43:13 -04:00
46a53ba3cf New Create World Dialog 2022-04-27 23:38:30 -04:00
186728ca5f Small Tweaks 2022-04-24 22:30:35 -04:00
9412c07c45 Fix ARM Check
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-24 18:56:21 -04:00
2717e062b3 Replace LINK_FLAGS With LINK_OPTIONS
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-24 17:56:21 -04:00
0723fb1894 Improve Docs
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-23 23:01:52 -04:00
16f919d147 2.3.5
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-23 21:19:53 -04:00
e18fc9fc63 Simplify 2022-04-23 21:10:44 -04:00
3ebdffd396 Fixes 2022-04-23 18:49:08 -04:00
82b6252927 Classic UI By Default! 2022-04-23 16:46:40 -04:00
4a35935daf Add Improved Title Background 2022-04-22 19:38:15 -04:00
89c29f14b1 More AppImage Fixes
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-04-20 18:21:29 -04:00
4edfaeead4 More Fixes 2022-04-16 16:38:09 -04:00
bfcdd3c7e9 AppImage Fixes 2022-04-14 21:12:42 -04:00
5467b5178f Fix LD_PRELOAD 2022-04-13 20:59:47 -04:00
8f49c550ba 2.3.4 2022-04-12 22:08:27 -04:00
50eb4801a0 Revert Earlier Username Decision 2022-04-12 20:38:44 -04:00
a3eef9fc3b Add "Fix Pause Menu" 2022-04-11 22:52:38 -04:00
f455780833 Add "Force Touch Inventory" 2022-04-11 19:59:21 -04:00
0150879d2b Fix Options Button On Classic UI 2022-04-11 18:48:43 -04:00
623cf06516 Fix Options Screen 2022-04-10 22:41:47 -04:00
0b1849a9ad Make Death Messages Customizable Server-Side 2022-04-09 20:06:44 -04:00
157d51e6b6 Improve feature_has 2022-04-09 20:01:16 -04:00
ed58356dd8 Fix Q Behavior 2022-04-02 19:25:03 -04:00
fae728061a Update Screenshot
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-28 17:29:28 -04:00
353565ce5a Hide Server Desktop Entry
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-27 23:24:42 -04:00
efa21bc8a5 Fix AppStream
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-27 16:42:24 -04:00
61f9a329ea 2.3.3
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-27 16:21:58 -04:00
3c0c260920 Add Smooth Stone Slab
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-25 22:40:13 -04:00
0592db9bdf 2.3.2
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-25 21:20:34 -04:00
3fee57ce60 Fix Missing Comment 2022-03-25 21:09:29 -04:00
b3c32b211b Add Grass To Expanded Creative Inventory 2022-03-25 21:07:28 -04:00
ea92e5188e Add Nether Reactor Stages To Expanded Creative Inventory 2022-03-25 00:35:06 -04:00
9a4b70b5ca Improve Temporary File Improving 2022-03-24 23:03:59 -04:00
b5974f3f46 Simplify Launch Process 2022-03-24 22:47:34 -04:00
709de17558 Fix Nether Reactor With Creative Restrictions Disabled 2022-03-23 19:26:49 -04:00
3894e98a04 2022! 2022-03-18 23:56:27 -04:00
bf890d190b Sort Feature Flags 2022-03-16 19:51:45 -04:00
a40da62b70 Speedup run_command 2022-03-16 19:51:33 -04:00
59b8fd9f54 Make iterate_text_sections MCPI-Agnostic 2022-03-16 19:50:46 -04:00
55a815643b Add "Disable V-Sync" Feature Flag 2022-03-16 19:49:13 -04:00
aa471fb4ba Update Zenity 2022-03-16 19:48:37 -04:00
4c33b6da9a 2.3.1 Final
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-14 21:51:38 -04:00
3048b3bf50 Load Custom Mods First
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-14 20:49:56 -04:00
03312f44b6 2.3.1
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-14 19:09:25 -04:00
bdeb45eed2 Hardcode ldconfig Path
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-13 17:13:50 -04:00
9f63fa712f Fix ARM32 Support
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-12 22:52:58 -05:00
e319d46ea0 Update Changelog
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-11 23:19:24 -05:00
c88cbd151e Shallow Submodules Just Break Things
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-11 21:38:46 -05:00
46abc4c4bd Fix Jenkins
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-03-11 20:39:00 -05:00
00f8ed4752 2.3.0
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2022-03-11 20:34:50 -05:00
0fd8ba7de9 Improve AppImages & Safer OpenAL 2022-03-11 20:02:38 -05:00
07baea7b5a Vendor Zenity For AppImages 2022-03-11 00:00:13 -05:00
8792e5749d Remove Broken WebKit Exclusion 2022-03-10 21:05:33 -05:00
53b2c20b8b Fix More AppImage Bugs 2022-03-09 23:29:37 -05:00
244a69d1aa Move CI Dockerfile 2022-03-09 22:54:30 -05:00
a1f777f632 Add MCPI_DEBUG & Improve Documentation 2022-03-09 22:40:21 -05:00
5d8a1e4230 Small Debug Fixes 2022-03-09 22:08:47 -05:00
742ead51e1 Vendor GLFW 2022-03-09 21:23:41 -05:00
c33a27b2ea AppImage! 2022-03-09 18:47:31 -05:00
c1377d4f2a Add "Disable Hosting LAN Worlds" 2022-03-07 17:03:03 -05:00
e0ebc7fc32 Fix Furnace Not Checking Item Auxiliary 2022-03-06 22:43:42 -05:00
0fcda17120 (Hopefully) Improve CI Speed 2022-03-06 20:46:18 -05:00
e9e9b90bdb Use Ninja 2022-03-06 20:13:41 -05:00
0fd562af40 Allow Disabling Raw Mouse Motion 2022-03-06 20:07:49 -05:00
1eb06b6b60 Add Back ~/.minecraft-pi/mods & Fix Segmentation Fault With Media Layer Proxy 2022-03-06 18:22:28 -05:00
c6983ac6c5 Improve Build System + Use GCC (Clang Is Just Too Broken) 2022-03-06 15:53:27 -05:00
4a69d38e35 Add "Close Current Screen On Death"
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2022-01-02 15:26:56 -05:00
5636abc051 Fix More Furnace UI 2022-01-01 19:04:58 -05:00
33c7d025a5 2.2.10
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-29 21:12:49 -05:00
7f7bc08201 Update Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-22 14:05:05 -05:00
b36df1d8ff Improve Handling When MCPI-Reborn Directory != MCPI Directory
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-19 18:24:59 -05:00
bf58129164 Extended ASCII Is A Myth Perpetuated By ASCII Table Manufacturers
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-19 17:17:34 -05:00
654c719187 Add MCPI_OPEN_SOURCE_ONLY Build Option
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-19 16:09:16 -05:00
e1e2977c29 Move Icon To Incorrect Place That Everyone Checks
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-18 16:51:40 -05:00
a85fc1f5fa Fix CI Build
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-18 16:29:35 -05:00
e3a4cabf61 Stop Using Static QEMU
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-12-17 21:04:05 -05:00
4c3fefae89 Fix Symlink
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-17 20:01:29 -05:00
729eff232a Move Icon Again...
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-12-17 19:37:52 -05:00
560c040416 Fix Desktop File
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-12-17 19:22:03 -05:00
ea49470450 No More /opt
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-12-17 19:07:58 -05:00
5a5fe4c731 Fix CMake
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-12-17 18:19:23 -05:00
406aa3f9a6 Stuff Learned From Legacy
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-30 21:54:43 -05:00
55679dd54c Fix Small Bug
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-30 21:58:44 +00:00
dbee357ebc Fix More Size Data
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-29 22:54:40 +00:00
bc461d39d5 Fix More Size Info
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-28 23:02:34 +00:00
21de7487bb Fix Size Data
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-28 21:42:26 +00:00
7ad36d0ce1 Finally Make Server STDIN Code Not Suck As Much
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-20 23:09:25 -05:00
d17416421a Remove Useless Code
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-15 20:14:11 -05:00
154adea292 Add Eating To Removed Creative Restrictions
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-14 17:28:20 -05:00
291e560c8f Last Minute 2.2.8 Fix
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-14 13:37:51 -05:00
472f5d67a5 2.2.8
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-13 23:29:48 -05:00
a79a601c59 Use -ffast-math
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-12 17:12:37 -05:00
e85231bf69 Fix ARMHF Output Path
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-12 05:04:11 +00:00
da0aef568d Fix CI Test
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-11 22:52:47 -05:00
f8b7af1370 Fix CI Again
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-11-11 22:27:10 -05:00
6a7d881258 Fix CI
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-11-11 21:37:29 -05:00
2e9ee42d75 Fix ZLib Includes
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-11-11 20:37:43 -05:00
941572063e Revert To Binary Packaging
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-11-11 20:12:16 -05:00
43d27e8e11 Fix Build Dependencies
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-10 22:52:33 -05:00
7e3cfaa1a8 Update Build Dependencies
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2021-11-10 22:48:41 -05:00
320e0c652a Add Missing File
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-10 22:37:29 -05:00
e5fc2a61aa Revamp Packaging
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-11-10 22:17:04 -05:00
5cf4d7f915 Small Cleanup 2021-11-09 16:26:02 -05:00
51d7974ded Fix Typo
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-06 22:40:11 -04:00
16ebea9ed6 Even More Symbols
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-11-02 17:50:26 -04:00
05587efc04 Fix CMake
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-28 22:57:47 -04:00
9ad6cc3906 Add Tile Symbols
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-28 19:21:07 -04:00
12de038f37 Improve Patch Comment 2021-10-27 18:14:30 -04:00
1daede7dba Fix ARM Toolchain On Some Devices
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-22 22:39:26 -04:00
28a6d59c2d Fix Build Better
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-22 18:36:09 -04:00
f2bd893241 Fix Build (Finally)
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-22 17:28:26 -04:00
28424aa86a Faster Build
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-10-12 16:13:11 -04:00
637f1c1132 2.2.7
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-12 16:01:07 -04:00
74d14ecaa6 Small Optimization
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-07 16:54:47 -04:00
f3eaa57041 Fix Symbol Name
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-04 19:46:51 -04:00
015235b889 Clean Up
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-10-04 19:42:55 -04:00
8c356dd65c Update README Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-30 20:28:37 -04:00
6a9a22ac25 Fix Bug In Texture Scaling Code
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-30 19:37:24 -04:00
c45211ad22 Improve Changelog Formatting
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-28 16:03:56 -04:00
7498c1e932 Scale Animated Textures
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-28 14:04:05 -04:00
734bded289 Add Note To Building Docs
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-21 22:21:53 -04:00
b7b130e675 Fix Building Documentation
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-21 22:15:04 -04:00
0a65c91d14 Fix Cross-Compilation Toolchain (Again)
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-20 23:16:09 -04:00
55475a3a0c Fix Cross-Compilation Toolchain
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-20 22:47:33 -04:00
f9acb08e4f Document Server Docker Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-19 15:44:13 -04:00
db64afc550 Improve Build System
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-16 22:00:40 -04:00
0465dc75a7 Instead Of Crashing, Disable Polling Block Hits In Survival Mode Using The API
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-16 16:39:24 -04:00
68a252c3df Fix Crash When Taking Odd-Sized Screenshots
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-15 19:12:03 -04:00
866ebfe159 Don't Cache GCC Version
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-14 19:29:48 -04:00
1f3036c7e1 Improve Clang Toolchain (Again)
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-09-14 19:04:39 -04:00
a338c11f9d Improve Clang Toolchain
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2021-09-14 19:02:50 -04:00
647a482fbd Build Using Clang
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-09-14 18:39:23 -04:00
6c791d6c9d Add More Missing Sound Events
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-13 17:09:57 -04:00
d18afddf1b Prevent random.burp Sound From Crashing Game
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-12 16:41:10 -04:00
d851a8f3e1 2.2.0
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-09-12 00:08:01 -04:00
a762654e35 Split Headless And Server Mode Code
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-26 23:05:26 -04:00
4aeb2fd95b RIP Debian Buster, You Won't Be Missed
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-26 20:33:01 -04:00
c60fb51fae Move ServerLevel To minecraft.h
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-24 17:21:38 -04:00
4597e824bb Split Off "Allow Joining Survival Servers" From Game-Mode Mod
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-23 18:33:50 -04:00
d372169c79 Clean Up Some Code, No Noticeable Difference
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-21 23:00:12 -04:00
99b709fea7 Fix Crash On ARM Systems
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-15 23:11:03 -04:00
578bb1c89f Fix On 64-Bit ARM Systems
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-08-05 21:00:41 -04:00
80d5674781 Optimize Media Layer Proxy
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-20 17:22:56 -04:00
a925463fdf Print Error Message If RakNet Fails To Start
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-18 21:23:44 -04:00
a9830c3bba Fix RakNet::RakString Security Bug
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-16 18:30:16 -04:00
d114a2d668 Workaround Broken Library Search Path On Some ARM 32-Bit Systems
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-06 20:26:19 -04:00
8f782099da Fix Library Loading On ARM 32-Bit Systems
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-05 19:40:43 -04:00
99f33cab61 Fix Symlink Code
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-04 23:44:37 -04:00
4652efcd65 Clarify Variable Names
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-04 22:32:19 -04:00
665fe30a5f Hotfix
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-04 21:23:12 -04:00
e8ae2a9230 Update README Image
Some checks reported errors
minecraft-pi-reborn/pipeline/head Something is wrong with the build of this commit
2021-07-04 19:59:36 -04:00
7b4a8a4d4f 2.1.0
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-04 19:12:46 -04:00
6e6537eea1 Fix Typo
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-07-01 16:01:17 -04:00
a196581bbe Fix Furnace UI With gui_blocks Disabled
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-30 19:41:18 -04:00
b32c6013fb Improve libreborn
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-30 18:38:43 -04:00
1877996874 Cleanup
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-30 16:40:57 -04:00
bf14e71c87 Update Landing Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-29 23:29:48 -04:00
07d79b66ea Update Install Instructions To Include ARM 64-Bit
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-29 18:51:51 -04:00
0bce0d17ac Use Default Port In servers.txt If Not Specified
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-29 16:19:02 -04:00
0c0a61cd23 Fix Various Input Bugs
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-28 22:59:24 -04:00
989dd7983b Fix Toolbar Size In Normal GUI
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-28 17:12:06 -04:00
73f900f8b4 Hyphenate Game Mode Mod
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-28 17:00:29 -04:00
053bf4aa5f Show Reborn Version In Start Screen
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-28 16:00:52 -04:00
2b0d1d55ff External Server Support 2021-06-27 22:16:37 -04:00
b1d81e860f Compile For ARM64
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-24 12:40:34 -04:00
bf937f8c86 Optimize Media Layer Proxy
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-23 17:52:31 -04:00
d72c65b7ab Fix Mod-Specific Documentation
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-22 23:32:50 -04:00
9d1b6aea65 Ubuntu 18.04 Isn't Supported
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-22 23:14:33 -04:00
f0439e9683 Make "kill" Admin Command Print Death Message
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-21 21:51:45 -04:00
6d79beeeb6 Build (And Publish) Docker Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-21 13:51:35 -04:00
747d2032e6 Fix Mouse Cursor Bugs
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-19 19:07:09 -04:00
0f6c3c2e43 Add EGL To Runtime Dependencies
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-19 14:59:57 -04:00
4fad749cdf Fix Blank Screen On Twister OS
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-19 14:37:12 -04:00
f84ffebf8c Document Command Line Arguments
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-18 08:48:55 -04:00
e73596fd57 Fix Location Of EGL Stub When Using Media Layer Proxy
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-17 20:54:35 -04:00
005492fad4 Fix Jenkins Build
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-06-17 19:40:31 -04:00
80d6385d68 Update Dedicated Server Documentation
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-06-17 18:33:57 -04:00
42ef5b9b8b Fix Documentation Hyperlink
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-06-17 17:40:37 -04:00
d0c2b98ca6 2.0
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-06-17 17:32:24 -04:00
e252afbe22 Rearrange Script
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-03-07 13:56:32 -05:00
352c9de936 Add Whitelist Support And "Show FPS Monitor" Feature Flag
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-03-06 15:56:05 -05:00
9efaf5ec42 Document Patches
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-03-04 19:27:33 -05:00
97e7655b12 Nicer Exit
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-28 15:35:04 -05:00
0bbcf91466 Fix Bug When Restarting Container
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-23 16:43:35 -05:00
1582066d0d Sanitize Usernames + Allow Extended ASCII In Sanitizer
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-23 15:44:37 -05:00
19f8228058 Tweak Sanitizer
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-21 22:51:01 -05:00
c36f89e523 Sanitize All Messages
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-21 22:43:57 -05:00
7b6fa15893 Sanitize Chat
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-21 22:16:05 -05:00
615a3a28a0 Use EXIT_SUCCESS Instead Of 0
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-21 15:07:22 -05:00
f8836fb2ae Remove SDL Dependency
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-21 14:53:17 -05:00
521d10a9fd Improve README
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-20 19:11:45 -05:00
d36d3aafea Fix Troubleshooting Link
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-20 19:10:13 -05:00
24ec820932 Fix Typo
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-18 18:10:06 -05:00
c1b52370dd Document Overrides Folder
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-18 15:01:59 -05:00
71fadf1645 Improve Documentation
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-18 14:04:59 -05:00
5da52a962b Small Rename
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-17 11:37:10 -05:00
b10616905d Add Death Messages
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-17 11:31:01 -05:00
4f4cdf915f Fix Chat Bugs
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-16 17:08:43 -05:00
6a6e973867 Fix Chat Logs When Wrapping
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-16 14:35:03 -05:00
032490c7b2 Add Chat
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-16 12:26:40 -05:00
b037ff6d98 2021
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-12 11:49:55 -05:00
05ec8f6059 Remove More Magic Numbers
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-11 23:16:36 -05:00
04e6f345e5 Actually Fix Mouse Jump Bug
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-11 16:02:46 -05:00
6ab07f04db Improve Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-10 20:03:19 -05:00
4de452517a Fix Typo
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-10 16:24:47 -05:00
2b0f2b4cc1 Small Technical Improvement
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-10 15:47:38 -05:00
b81d29095b Remove Some Magic Numbers
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-10 15:25:56 -05:00
4d8c8ae3c1 Improve Launch
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-08 22:52:39 -05:00
e7d0d66e54 Add Display Nametags By Default
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-03 20:58:51 -05:00
d10274988e Distribute minecraft.h
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-03 17:00:02 -05:00
cd91a2fd12 Remove Test
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-03 15:59:50 -05:00
096b442988 Test
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-03 12:28:44 -05:00
6279ff2f6e Update Wording
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-02 12:06:00 -05:00
c29f6e4938 Update Capitalization
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-02 12:04:39 -05:00
57fd287b74 Fix Removal Script
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-01 20:16:19 -05:00
530e31820b Allow Changing Render Distance
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-01 19:35:30 -05:00
04668f223e Fix /root Issue
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-01 15:33:31 -05:00
9666e4c7f6 Force Remove Image
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-02-01 11:32:46 -05:00
26d956da6a Fix Mouse Jump Bug
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-31 21:00:52 -05:00
118bca3fa5 Add Back sg/pkexec Code
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-31 15:33:31 -05:00
77275693de Add Re-Log Note
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-30 21:49:05 -05:00
b92ec85221 Add Docker Troubleshooting Info
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-30 21:45:26 -05:00
f6dd4a17e6 No Longer Run MCPI As Root
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-30 21:32:20 -05:00
b5556e91c3 Attempt To Fix RPI Bug
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-30 00:07:13 -05:00
7b89f7604f Simplify Startup Scripts
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-28 17:04:54 -05:00
d824b0f878 Simplify README
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-27 18:51:31 -05:00
d2fffeafc1 Tweak README
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-27 18:47:35 -05:00
b2f6695cb0 Merge pull request 'Make features window bigger' (#4) from RaspberryPiNews/minecraft-pi-docker:master into master
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
Reviewed-on: TheBrokenRail/minecraft-pi-reborn#4
2021-01-27 22:17:51 +00:00
7c8e9dbe04 Update 'debian/client/common/usr/bin/minecraft-pi' 2021-01-27 22:11:12 +00:00
c664193170 Fix Package Error
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-27 17:05:05 -05:00
0ccc05ad90 Fixes
Some checks failed
minecraft-pi-reborn/pipeline/head There was a failure building this commit
2021-01-27 16:26:19 -05:00
62204aa1bf Project Rename
All checks were successful
minecraft-pi-reborn/pipeline/head This commit looks good
2021-01-27 11:13:06 -05:00
88843f6cbe Move qemu-user-static To Recommended Dependencies
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2021-01-14 17:10:52 -05:00
7a55ac09fa Update 'debian/client/common/usr/bin/minecraft-pi' 2021-01-13 04:32:08 +00:00
565603821e Update README
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-25 13:27:00 -05:00
59ab4a44fe Fix Typo
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-21 04:05:03 +00:00
f4e0861c29 Name Property + VTable Offsets
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-17 22:22:56 -05:00
5ee784a333 Add PinePhone Note In README
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-16 21:04:56 -05:00
fdc547c4bc Fix Launcher On Mobian (PinePhone)
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-16 17:55:06 -05:00
e7b2365a33 Remove Redundant File Post-Install
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-15 17:39:14 -05:00
f1c95b433d Remove Player Data Storage From Dedicated Server Mod
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
It was very complicated and because it lacked proper authentication and inventory saving, it was basically useless.
2020-12-15 14:19:50 -05:00
46cb46d6a1 Show Dialog On Crash + Add Troubleshooting Information To README
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-10 17:16:44 -05:00
c1490a9685 Update README
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-10 14:55:45 -05:00
554fed869e Check If Patch Is Needed
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-09 22:19:18 -05:00
c539c42de2 Improve CLI
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-12-08 18:20:25 -05:00
f81bf3c67f Add --print-features
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-08 16:32:12 -05:00
3533830669 Set Required Docker Version In DEb Files
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-05 17:02:35 -05:00
28bcb0d5b5 Fix Raspbian Buster Script
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-05 13:35:14 -05:00
db6d943bf5 Add Raspbian Note
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-04 21:45:53 -05:00
37a0121f73 Fix Method Signature 2020-12-04 20:58:28 -05:00
e0423c5de3 Use UTC In DEB Versions
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-04 16:32:17 -05:00
0dbb53e0e7 Rework Packaging
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-04 16:27:28 -05:00
4bf4cfee8e Improve Code
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-04 12:23:39 -05:00
f9e893d1c3 Refactor
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-02 18:18:49 -05:00
43b1231153 Fix Bugs When Disabling gui_blocks Atlas; Fix Selected Item Text
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-02 16:29:15 -05:00
6e18ee44fb Reduce Server Patches
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-12-01 12:02:48 -05:00
a83cb6d211 Add Optional Patch To Disable gui_blocks Atlas
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-29 18:59:01 -05:00
5040e28d14 Add Cobwebs To Expanded Creative Inventory
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-29 17:44:46 -05:00
4eb271540c Allow Asset Overriding
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-27 20:49:13 -05:00
0d6db1e606 Simpler Smooth Lighting Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-27 18:21:59 -05:00
0eb10dea7c Switch To 32-Bit Docker Image
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-25 21:17:40 -05:00
02eaf4e9ef Display Smoke From TripodCamera Higher
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-24 18:57:58 -05:00
81f0c6bbc9 Fix TripodCamera
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-24 17:12:23 -05:00
3244b87be0 Select Game-Mode On World Creation
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-23 18:03:37 -05:00
e8b2f1c22f Fix Script Syntax
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-22 17:48:18 -05:00
accf6aebc6 Improve Script
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-11-22 17:30:06 -05:00
2a01a429ef Update
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-22 14:14:47 -05:00
2f5692afc7 Add More Error Detection Code
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-22 13:07:10 -05:00
2e06017429 Fix Attacking Patch Again
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-21 18:32:48 -05:00
f2c2799f7e Perfect Fix Attacking Patch + Seperate Mappings
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-21 16:52:27 -05:00
bc442034e2 Add 3D Anaglyph + More Function Controls
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-21 00:13:25 -05:00
64ced5655f Link To Credits
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 16:39:05 -05:00
1bdb5287e5 Add Smooth Lighting 2020-11-20 16:38:23 -05:00
cdbb6bac21 Add Remove Invalid Item Background Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 14:54:07 -05:00
9bdb12c6ef Fix Segfault
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 14:30:38 -05:00
ab8de4e24d Fix Block Outline Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 14:05:08 -05:00
ffe7b0e363 Fix Typo
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 13:37:54 -05:00
99aac006f4 Add Animated Water
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-20 13:36:03 -05:00
a39476228e Use Better Exit Codes
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-19 14:53:00 -05:00
1d14cc5059 Add Peaceful Mode
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-12 18:28:37 -05:00
107fa29d8d Allow Docker-CE
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-11 23:24:51 -05:00
7e8a74d1b2 Comment Dockerfile
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-11 10:22:14 -05:00
c0b5026221 Rename MineCon Badge Property
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-10 15:16:42 -05:00
054dcba425 Improve Error Reporting 2020-11-10 15:06:29 -05:00
dd539e434a Exit On GLFW Error 2020-11-10 12:46:42 -05:00
c21197324b Fix Sign Without Fix Bow & Arrow 2020-11-10 10:08:42 -05:00
cd911f5635 Fix Default MOTD
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-09 21:31:13 -05:00
50af254e2a Patch Callsites Instead Of Reverting Patches
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-09 19:49:41 -05:00
55feb34251 Use clock_gettime
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-07 22:26:22 -05:00
21c67a2339 Clean Up Code
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-07 17:19:45 -05:00
8e7dfd85b8 Save Player Data
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-05 23:05:48 -05:00
da3f6739eb Add MineCon Icon Option To Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-04 20:12:48 -05:00
fd003d8df2 Improve Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-04 16:05:31 -05:00
39b226685e Improve Commands
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-03 19:31:27 -05:00
10314afdc3 Add Server Commands
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-03 17:40:09 -05:00
9a4efef9f1 Full Touch GUI
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 22:18:18 -05:00
5414913620 Improve Logging
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 15:27:41 -05:00
55c789dab2 Fix Creative Mode In Dedicated Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 15:20:49 -05:00
b762fdadef Fix Bow Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 13:56:20 -05:00
06debcddd2 Add Calm Liquid Variants
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-11-02 13:03:32 -05:00
28335cf82a Fix Typo
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 12:45:16 -05:00
997388d61a Fix Toolbar
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 12:42:06 -05:00
fd12a27a51 Add Expand Creative Inventory
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 12:34:11 -05:00
56d84d0133 Update Global Names
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 09:58:43 -05:00
d1ba4e3cbb Use GameMode VTable For Bow Fix Instead Of Hardcoded Functions
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-02 09:38:40 -05:00
0abe0c2089 Remove Extra Newline
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-11-02 09:23:43 -05:00
ca911dd634 Fix Client Segfault
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-11-01 20:16:30 -05:00
a04cf1e707 Allow Posting Messages In Dedicated Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-30 21:31:55 -04:00
8f1dfecc9a Tweaks
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-30 18:44:47 -04:00
d3e0310a60 Remove XVFB From Dedicated Server
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-10-30 18:25:08 -04:00
151e404aab Fix Server Launch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-30 13:27:50 -04:00
48d796fa46 Clean Up Code
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-29 13:00:52 -04:00
688ce20877 Fix Excessive Hand Swinging Animation When Using Fix Attacking Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-29 12:14:51 -04:00
bd57e4b004 Document Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-27 14:37:29 -04:00
799d3efed9 Attempt To Fix Dockerfile
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-27 11:38:48 -04:00
19e2ded9bf Improve Comments
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-10-26 15:58:28 -04:00
465f3cce81 Fix Build
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-17 17:18:18 -04:00
be9e9efebc Fix More Stuff
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-10-17 16:37:41 -04:00
d098e67ee2 Fix Scripts
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-17 16:23:01 -04:00
6ebdb49df0 Undo Changes
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-16 22:57:42 -04:00
76cb02ef46 Try Different Cache API
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-10-16 22:41:13 -04:00
e501391142 Fix Stuff
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-16 18:23:39 -04:00
27ad6caa3b Fix CI
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-16 16:04:03 -04:00
d602764f38 Mount DRI In Native Mode
Some checks failed
minecraft-pi-docker/pipeline/head There was a failure building this commit
2020-10-16 15:45:00 -04:00
bdb027e1f2 Uncomment Line
Some checks reported errors
minecraft-pi-docker/pipeline/head Something is wrong with the build of this commit
2020-10-16 15:39:54 -04:00
3b886e055d Add Native GL Option
Some checks reported errors
minecraft-pi-docker/pipeline/head Something is wrong with the build of this commit
2020-10-16 15:39:04 -04:00
c513426e05 Fix Typos
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-15 22:24:46 -04:00
b474564647 Update server.properties Comment
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-14 23:23:31 -04:00
cc6f19c836 Improve DEB
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-14 22:51:30 -04:00
adb9d7b08e Update DEB
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-14 22:39:30 -04:00
c70199b355 Fix Default Game Mode Patch
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-14 20:13:06 -04:00
267530e871 Fix Issues & Clean Up Code
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-14 13:40:32 -04:00
e12e8b5c0f Allow Setting Max Players
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-11 15:38:48 -04:00
32debed934 Bug Fix Attempt #1
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-11 14:23:22 -04:00
0936cd4700 DEBUG: Print All IPs Passed To IsBanned
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-11 00:15:44 -04:00
c756153cfb Fix adduser Usage (Thanks @gamercat113)
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-10 20:36:42 -04:00
b607356c86 Use stderr
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-10 19:39:29 -04:00
f588300da2 Add License
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-10 19:06:15 -04:00
84bfd9506c Add Dedicated Server
All checks were successful
minecraft-pi-docker/pipeline/head This commit looks good
2020-10-10 19:02:13 -04:00
471 changed files with 18893 additions and 1424 deletions

View File

@ -1,7 +0,0 @@
.git
.gitignore
Dockerfile
README.md
data
install.sh
build.sh

122
.gitea/workflows/build.yml Normal file
View File

@ -0,0 +1,122 @@
name: 'CI'
on:
push:
branches:
- master
tags:
- '*'
- '!flatpak'
jobs:
# Build Project
build:
strategy:
fail-fast: false
matrix:
mode:
- Client
- Server
arch:
- AMD64
- ARM64
- ARMHF
name: Build
runs-on: ubuntu-latest
container: node:lts-bullseye
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: true
# Dependencies
- name: Install Dependencies
run: ./scripts/install-dependencies.sh ${{ matrix.arch }}
# Build
- name: Build
run: ./scripts/build.mjs appimage ${{ matrix.mode }} ${{ matrix.arch }}
- name: Upload Artifacts
uses: christopherhx/gitea-upload-artifact@v4
with:
name: ${{ matrix.mode }} (${{ matrix.arch }})
path: ./out/*.AppImage*
if-no-files-found: error
# Test Project
test:
strategy:
fail-fast: false
matrix:
mode:
- Client
- Server
name: Test
runs-on: ubuntu-latest
container: node:lts-bullseye
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: true
# Dependencies
- name: Install Dependencies
run: ./scripts/install-dependencies.sh
# Test
- name: Test
run: ./scripts/test.sh ${{ matrix.mode }}
# Example Mods
example-mods:
name: Build Example Mods
runs-on: ubuntu-latest
container: node:lts-bullseye
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: true
# Dependencies
- name: Install Dependencies
run: ./scripts/install-dependencies.sh
- name: Install ARM Toolchain
run: apt-get install --no-install-recommends -y g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf
# Build SDK
- name: Build SDK
run: |
./scripts/build.mjs none client host
export _MCPI_SKIP_ROOT_CHECK=1
export DISPLAY=
./out/client/host/usr/bin/minecraft-pi-reborn-client --copy-sdk
# Build Example Mods
- name: Build Example Mods
run: ./example-mods/build.sh
- name: Upload Artifacts
uses: christopherhx/gitea-upload-artifact@v4
with:
name: Example Mods
path: ./example-mods/out/*
if-no-files-found: error
# Create Release
release:
if: startsWith(github.ref, 'refs/tags/')
needs: build
name: Release
runs-on: ubuntu-latest
container: node:lts-bullseye
steps:
# Dependencies
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: '>=1.20.1'
# Download Artifacts
- name: Download Artifacts
uses: christopherhx/gitea-download-artifact@v4
with:
path: out
# Create Release
- name: Create Release
uses: https://gitea.com/actions/release-action@main
with:
files: ./out/*/*.AppImage*
api_key: ${{ secrets.RELEASE_TOKEN }}
title: v${{ github.ref_name }}
body: "[View Changelog](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/src/branch/master/docs/CHANGELOG.md)"

21
.gitignore vendored
View File

@ -1,5 +1,18 @@
/minecraft-pi
/libpng
/core/build
/mods/build
/out
/debian/tmp
/.vscode
/build*
/CMakeLists.txt.user
*.autosave
/AppImageBuilder.yml
/appimage-builder-cache
/appimage-build
/AppDir
/*.zsync
/*.AppImage
/core*
/qemu_*
/example-mods/out
/.testing-tmp
/cmake-build-*
/.idea

24
.gitmodules vendored Normal file
View File

@ -0,0 +1,24 @@
[submodule "dependencies/glfw/src"]
path = dependencies/glfw/src
url = https://github.com/glfw/glfw.git
[submodule "dependencies/zenity/src"]
path = dependencies/zenity/src
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/zenity.git
[submodule "dependencies/LIEF/src"]
path = dependencies/LIEF/src
url = https://github.com/lief-project/LIEF.git
[submodule "media-layer/core/gles/dependencies/gles-compatibility-layer"]
path = dependencies/gles-compatibility-layer/src
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/gles-compatibility-layer.git
[submodule "dependencies/stb_image/include"]
path = dependencies/stb_image/include
url = https://github.com/nothings/stb.git
[submodule "dependencies/utf8cpp/src"]
path = dependencies/utf8cpp/src
url = https://github.com/nemtrif/utfcpp.git
[submodule "archives"]
path = archives
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/archives.git
[submodule "dependencies/symbol-processor/src"]
path = dependencies/symbol-processor/src
url = https://gitea.thebrokenrail.com/minecraft-pi-reborn/symbol-processor.git

184
CMakeLists.txt Normal file
View File

@ -0,0 +1,184 @@
cmake_minimum_required(VERSION 3.17.0)
# Avoid Warning About DOWNLOAD_EXTRACT_TIMESTAMP
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24.0)
cmake_policy(SET CMP0135 NEW)
endif()
# Core Options
include(cmake/options/core-options.cmake)
# Build Mode
if(NOT DEFINED CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
endif()
# Start Project
project(minecraft-pi-reborn)
# Utility Functions
include(cmake/util/util.cmake)
# Sanity Checks
string(CONCAT ARM_SANITY_CHECK
"include(CheckSymbolExists)\n"
"check_symbol_exists(\"__arm__\" \"\" IS_ARM_TARGETING)"
)
if(BUILD_ARM_COMPONENTS)
string(CONCAT ARM_SANITY_CHECK
"${ARM_SANITY_CHECK}\n"
"if(NOT IS_ARM_TARGETING)\n"
" message(FATAL_ERROR \"ARM-Targeting Compiler Required\")\n"
"endif()"
)
endif()
cmake_language(EVAL CODE "${ARM_SANITY_CHECK}")
# Extra Options
include(cmake/options/extra-options.cmake)
# Paths
include(cmake/options/paths.cmake)
# Required Compile Flags
string(CONCAT COMPILE_FLAGS_SETUP
# Optimizations
"if(CMAKE_BUILD_TYPE STREQUAL \"Release\")\n"
" add_compile_options(-O3)\n"
" add_link_options(-s)\n"
"else()\n"
" add_compile_options(-g)\n"
"endif()\n"
# PIC
"set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)\n"
# Warnings
"add_link_options(-Wl,--no-undefined)\n"
# C Standard
"add_definitions(-D_GNU_SOURCE)\n"
"set(CMAKE_C_STANDARD 99)\n"
"set(CMAKE_CXX_STANDARD 11)\n"
# Skip RPath
"set(CMAKE_SKIP_BUILD_RPATH TRUE)"
)
cmake_language(EVAL CODE "${COMPILE_FLAGS_SETUP}")
# Fast Math
add_compile_options(-ffast-math)
# Warnings
add_compile_options(-Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
# Prevents False Positives
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.0)
add_compile_options(-Wno-stringop-overflow)
endif()
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 11.0)
add_compile_options(-Wno-array-bounds -Wno-stringop-overread)
endif()
endif()
# Buld Dependencies
add_subdirectory(dependencies)
# Version
set_property(
DIRECTORY
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS VERSION
)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION)
file(TIMESTAMP "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MCPI_VERSION_DATE "%Y-%m-%d" UTC)
# Build libreborn
add_subdirectory(libreborn)
# Build Media Layer
add_subdirectory(media-layer)
# Build Launcher
if(BUILD_NATIVE_COMPONENTS)
add_subdirectory(launcher)
endif()
# Include Symbols
if(BUILD_ARM_COMPONENTS)
add_subdirectory(symbols)
endif()
# Build Mods
if(BUILD_ARM_COMPONENTS)
add_subdirectory(mods)
endif()
# Include Images
if(BUILD_NATIVE_COMPONENTS)
add_subdirectory(images)
endif()
# Install Prebuilt ARMHF Toolchain Sysroot
if(BUILD_NATIVE_COMPONENTS AND MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
install_arm_sysroot()
endif()
# Install SDK
if(BUILD_ARM_COMPONENTS)
install(EXPORT sdk DESTINATION "${MCPI_SDK_DIR}" FILE "sdk-targets.cmake" EXPORT_LINK_INTERFACE_LIBRARIES)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake"
# Compile Flags
"${COMPILE_FLAGS_SETUP}\n"
# Snaity Check
"${ARM_SANITY_CHECK}\n"
# Log
"message(STATUS \"Using Reborn SDK v${MCPI_VERSION}\")\n"
# Include Targets
"include(\"\${CMAKE_CURRENT_LIST_DIR}/sdk-targets.cmake\")\n"
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdk.cmake" DESTINATION "${MCPI_SDK_DIR}")
endif()
# Packaging
if(BUILD_NATIVE_COMPONENTS)
include(cmake/cpack/packaging.cmake)
endif()
# Superbuild
if(BUILD_NATIVE_COMPONENTS)
include(ExternalProject)
# Arguments
set(ARM_OPTIONS "${MCPI_OPTIONS}")
list(APPEND ARM_OPTIONS "-DMCPI_BUILD_MODE:STRING=arm")
list(APPEND ARM_OPTIONS "-DCMAKE_INSTALL_MESSAGE:STRING=NEVER")
list(APPEND ARM_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>")
if(NOT MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
if(DEFINED CMAKE_TOOLCHAIN_FILE)
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}")
endif()
else()
list(APPEND ARM_OPTIONS "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${MCPI_CMAKE_TOOLCHAIN_FILE}")
endif()
list(APPEND ARM_OPTIONS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}")
# Build
ExternalProject_Add(arm-components
DOWNLOAD_COMMAND ""
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
CMAKE_CACHE_ARGS ${ARM_OPTIONS}
INSTALL_COMMAND
"${CMAKE_COMMAND}" "-E"
"rm" "-rf" "<INSTALL_DIR>/${MCPI_INSTALL_DIR}"
COMMAND
"${CMAKE_COMMAND}" "-E" "env"
"DESTDIR="
"${CMAKE_COMMAND}" "--install" "<BINARY_DIR>"
USES_TERMINAL_CONFIGURE TRUE
USES_TERMINAL_BUILD TRUE
USES_TERMINAL_INSTALL TRUE
BUILD_ALWAYS TRUE
)
# Install
ExternalProject_Get_Property(arm-components INSTALL_DIR)
install(DIRECTORY "${INSTALL_DIR}/${MCPI_INSTALL_DIR}/" DESTINATION "${MCPI_INSTALL_DIR}")
endif()

View File

@ -1,27 +1,19 @@
FROM arm64v8/debian:bullseye
RUN dpkg --add-architecture armhf
FROM debian:bullseye-slim
# Install
RUN \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y libglvnd-dev:armhf libsdl1.2-dev:armhf libx11-dev:armhf build-essential zlib1g-dev:armhf git cmake curl gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libfreeimage-dev:armhf libglfw3-dev:armhf xinput:armhf libxfixes-dev:armhf
apt-get install -y tini qemu-user && \
apt-get --fix-broken install -y && \
rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/libGLESv2.so
RUN ln -s /usr/lib/arm-linux-gnueabihf/libEGL.so.1 /usr/lib/libEGL.so
# Copy
ADD ./out/server-amd64 /app
ADD ./build /app/build
# Setup Working Directory
RUN mkdir /data
WORKDIR /data
WORKDIR /app
RUN ./build/download-minecraft-pi.sh
RUN ./build/build-libpng12.sh
ADD . /app
RUN ./build/build-mods.sh
WORKDIR ./minecraft-pi
ENTRYPOINT ./launcher
# Setup Entrypoint
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/app/usr/bin/minecraft-pi-reborn-server"]

View File

@ -1,3 +0,0 @@
FROM ubuntu:focal
RUN apt-get update && apt-get install -y docker.io

38
Jenkinsfile vendored
View File

@ -1,38 +0,0 @@
pipeline {
agent {
dockerfile {
filename 'Dockerfile.build'
args '-v /var/run/docker.sock:/var/run/docker.sock'
}
}
stages {
stage('Install QEMU') {
steps {
sh 'docker run --rm --privileged multiarch/qemu-user-static --reset -p yes'
}
}
stage('Build') {
steps {
sh 'DOCKER_BUILD_OPTIONS="--no-cache" ./scripts/build.sh'
}
}
stage('Publish') {
steps {
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'
}
}
stage('Package') {
steps {
sh './scripts/package.sh'
}
post {
success {
archiveArtifacts artifacts: 'out/**', fingerprint: true
}
}
}
}
}

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 TheBrokenRail
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,82 +0,0 @@
# Modding
Modding Minecraft: Pi Edition is possible by patching the binary at runtime. To make this easier ``minecraft-pi-dcoker`` includes a libary 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``.
## ``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).
### ``void *overwrite(void *start, void *target)``
This method replaces a function with another function.
#### Parameters
- **start:** The function you are replacing.
- **target:** The function you are replacing it with.
#### Return Value
The original contents of the function.
#### Warning
This should never be used on functions that are only 1 byte long because it overwrites 2 bytes.
#### Example
```c
static int func_injection(int a, int b) {
return a + 4;
}
__attribute__((constructor)) static void init() {
overwrite((void *) 0xabcde, func_injection);
}
```
### ``void revert_overwrite(void *start, void *original)``
This allows you to revert ``overwrite()``. This can be used to call the original version of a function.
#### Parameters
- **start:** The function that was overwritten.
- **original:** The return value of ``overwrite()``.
#### Return Value
None
#### Example
```c
typedef int (*func_t)(int a, int b);
static func_t func = (func_t) 0xabcde;
static void *func_original = NULL;
static int func_injection(int a, int b) {
revert_overwrite((void *) func, func_original);
(*func)(a, b);
revert_overwrite((void *) func, func_original);
return a + 4;
}
__attribute__((constructor)) static void init() {
func_original = overwrite((void *) func, func_injection);
}
```
### ``void patch(void *start, unsigned char patch[])``
This allows you to replace a specific instruction.
#### Parameters
- **start:** The target instruction.
- **patch:** The new instruction (array length must be 4).
#### Return Value
None
#### Example
```c
__attribute__((constructor)) static void init() {
unsigned char patch_data[4] = {0x00, 0x00, 0x00, 0x00};
patch((void *) 0xabcde, patch_data);
}
```

View File

@ -1,8 +1,15 @@
# Minecraft: Pi Edition For Docker
This is a project allowing Minecraft: Pi Edition to be run without a Raspberry Pi using Docker.
<p align="center">
<img alt="Start Screen" src="images/start.png">
</p>
## Setup
[View Binaries](https://jenkins.thebrokenrail.com/job/minecraft-pi-docker/job/master/lastSuccessfulBuild/artifact/out/)
<p align="center">
<a href="https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/releases/latest"><img height="80" alt="Download as an AppImage" src="https://docs.appimage.org/_images/download-appimage-banner.svg" /></a>
<a href="https://flathub.org/apps/details/com.thebrokenrail.MCPIReborn"><img height="80" alt="Download on Flathub" src="https://flathub.org/assets/badges/flathub-badge-en.svg" /></a>
<a href="https://github.com/Botspot/pi-apps"><img height="80" alt="Get it from Pi-Apps" src="https://github.com/Botspot/pi-apps/blob/master/icons/badge.png?raw=true" /></a>
</p>
## Modding
[View Modding](MODDING.md)
# Minecraft: Pi Edition: Reborn [![Gitea Actions](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/actions/workflows/build.yml/badge.svg)](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/actions)
Minecraft: Pi Edition Modding Project
## Documentation
[View Documentation](docs/README.md)

1
VERSION Normal file
View File

@ -0,0 +1 @@
3.0.0

1
archives Submodule

@ -0,0 +1 @@
Subproject commit 0d7025eb709351d2db51d19a46ff8e2640bd4465

View File

@ -1,15 +0,0 @@
#!/bin/sh
set -e
git clone --depth 1 https://git.code.sf.net/p/libpng/code libpng -b libpng12
cd libpng
./configure --host arm-linux-gnueabihf --prefix /usr/arm-linux-gnueabihf
make -j$(nproc)
make install
cd ../
rm -rf libpng

View File

@ -1,19 +0,0 @@
#!/bin/sh
set -e
cd mods
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain.cmake ..
make -j$(nproc)
cd ../../
mkdir minecraft-pi/mods
cp mods/build/lib*.so minecraft-pi/mods
cp mods/build/core/lib*.so minecraft-pi
cp mods/build/core/launcher minecraft-pi

View File

@ -1,8 +0,0 @@
#!/bin/sh
set -e
URL="https://www.minecraft.net/content/dam/minecraft/edition-pi/minecraft-pi-0.1.1.tar.gz"
mkdir minecraft-pi
curl "${URL}" | tar -xz --strip-components 1 -C minecraft-pi

View File

@ -0,0 +1,62 @@
# Downlaod AppImage Runtime
set(RUNTIME_ARCH "unknown")
if(CPACK_MCPI_ARCH STREQUAL "armhf")
set(RUNTIME_ARCH "armhf")
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
set(RUNTIME_ARCH "aarch64")
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
set(RUNTIME_ARCH "x86_64")
endif()
set(RUNTIME "${CPACK_TOPLEVEL_DIRECTORY}/runtime")
file(DOWNLOAD
"https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-${RUNTIME_ARCH}"
"${RUNTIME}"
STATUS DOWNLOAD_STATUS
)
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
if(NOT STATUS_CODE EQUAL 0)
message(FATAL_ERROR "Unable To Downlopad AppImage Runtime: ${ERROR_MESSAGE}")
else()
message(STATUS "Downloaded AppImage Runtime: ${RUNTIME}")
endif()
# Package
set(APPIMAGE_ARCH "unknown")
if(CPACK_MCPI_ARCH STREQUAL "armhf")
set(APPIMAGE_ARCH "arm")
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
set(APPIMAGE_ARCH "arm_aarch64")
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
set(APPIMAGE_ARCH "x86_64")
endif()
execute_process(
COMMAND
"${CMAKE_COMMAND}" "-E" "env"
"ARCH=${APPIMAGE_ARCH}"
"appimagetool"
"--updateinformation" "zsync|https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/releases/download/latest/${CPACK_PACKAGE_FILE_NAME_ZSYNC}.AppImage.zsync"
"--runtime-file" "${RUNTIME}"
"--comp" "xz"
"${CPACK_TEMPORARY_DIRECTORY}"
"${CPACK_PACKAGE_FILE_NAME}.AppImage"
WORKING_DIRECTORY "${CPACK_PACKAGE_DIRECTORY}"
RESULT_VARIABLE APPIMAGETOOL_RESULT
)
if(NOT APPIMAGETOOL_RESULT EQUAL 0)
message(FATAL_ERROR "Unable Package AppImage")
endif()
# Rename ZSync File
file(RENAME "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}.AppImage.zsync" "${CPACK_PACKAGE_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME_ZSYNC}.AppImage.zsync")
# Summary Message
function(check_file name)
if(EXISTS "${CPACK_PACKAGE_DIRECTORY}/${name}")
message(STATUS "Generated: ${name}")
else()
message(FATAL_ERROR "Missing File: ${name}")
endif()
endfunction()
check_file("${CPACK_PACKAGE_FILE_NAME}.AppImage")
check_file("${CPACK_PACKAGE_FILE_NAME_ZSYNC}.AppImage.zsync")

View File

@ -0,0 +1,38 @@
# Determine Architecture
set(CPACK_MCPI_ARCH "unknown")
include(CheckSymbolExists)
function(check_arch symbol name)
set(CMAKE_REQUIRED_QUIET TRUE)
check_symbol_exists("${symbol}" "" "IS_ARCH_${name}")
unset(CMAKE_REQUIRED_QUIET)
if("${IS_ARCH_${name}}")
set(CPACK_MCPI_ARCH "${name}" PARENT_SCOPE)
endif()
endfunction()
check_arch("__arm__" "armhf")
check_arch("__aarch64__" "arm64")
check_arch("__x86_64__" "amd64")
# CPack
set(CPACK_PACKAGE_NAME "${MCPI_VARIANT_NAME}")
set(CPACK_PACKAGE_VENDOR "TheBrokenRail & Mojang AB")
set(CPACK_VERBATIM_VARIABLES TRUE)
set(CPACK_MONOLITHIC_INSTALL TRUE)
set(CPACK_PACKAGE_FILE_NAME "${MCPI_VARIANT_NAME}-${MCPI_VERSION}-${CPACK_MCPI_ARCH}")
set(CPACK_PACKAGE_FILE_NAME_ZSYNC "${MCPI_VARIANT_NAME}-latest-${CPACK_MCPI_ARCH}")
# Version
string(REPLACE "." ";" VERSION_LIST "${MCPI_VERSION}")
list(GET VERSION_LIST 0 CPACK_PACKAGE_VERSION_MAJOR)
list(GET VERSION_LIST 1 CPACK_PACKAGE_VERSION_MINOR)
list(GET VERSION_LIST 2 CPACK_PACKAGE_VERSION_PATCH)
# AppImage
if(MCPI_IS_APPIMAGE_BUILD)
set(CPACK_GENERATOR "External")
set(CPACK_EXTERNAL_ENABLE_STAGING TRUE)
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/appimage.cmake")
endif()
# Package
include(CPack)

View File

@ -0,0 +1,21 @@
# Build Mode
set(MCPI_BUILD_MODE "native" CACHE STRING "\"arm\" = Build Only Code That Must Be ARM; \"native\" = Build Architecture-Independent Code")
set_property(CACHE MCPI_BUILD_MODE PROPERTY STRINGS "arm" "native")
if(MCPI_BUILD_MODE STREQUAL "arm")
set(BUILD_ARM_COMPONENTS TRUE)
set(BUILD_NATIVE_COMPONENTS FALSE)
elseif(MCPI_BUILD_MODE STREQUAL "native")
set(BUILD_ARM_COMPONENTS FALSE)
set(BUILD_NATIVE_COMPONENTS TRUE)
else()
message(FATAL_ERROR "Invalid Mode")
endif()
# Specify Options
set(MCPI_OPTIONS "")
function(mcpi_option name description type default)
set(full_name "MCPI_${name}")
set("${full_name}" "${default}" CACHE "${type}" "${description}")
list(APPEND MCPI_OPTIONS "-D${full_name}:${type}=${${full_name}}")
set(MCPI_OPTIONS "${MCPI_OPTIONS}" PARENT_SCOPE)
endfunction()

View File

@ -0,0 +1,85 @@
# Specify Options
mcpi_option(OPEN_SOURCE_ONLY "Only Install Open-Source Code (Will Result In Broken Install)" BOOL FALSE)
mcpi_option(IS_APPIMAGE_BUILD "AppImage Build" BOOL FALSE)
mcpi_option(IS_FLATPAK_BUILD "Flatpak Build" BOOL FALSE)
if(MCPI_IS_APPIMAGE_BUILD AND MCPI_IS_FLATPAK_BUILD)
message(FATAL_ERROR "Invalid Build Configuration")
endif()
# Server/Headless Builds
mcpi_option(SERVER_MODE "Server Mode" BOOL FALSE)
mcpi_option(HEADLESS_MODE "Headless Mode" BOOL "${MCPI_SERVER_MODE}")
# Prebuilt ARMHF Toolchain
if(BUILD_NATIVE_COMPONENTS)
set(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN FALSE)
if(NOT IS_ARM_TARGETING)
set(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN TRUE)
endif()
if(MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN)
include("${CMAKE_CURRENT_LIST_DIR}/prebuilt-armhf-toolchain.cmake")
endif()
endif()
# Media Layer
if(NOT MCPI_HEADLESS_MODE)
set(DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE FALSE)
if(BUILD_NATIVE_COMPONENTS AND NOT IS_ARM_TARGETING)
set(DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE TRUE)
endif()
mcpi_option(USE_MEDIA_LAYER_TRAMPOLINE "Whether To Enable The Media Layer Trampoline (Requires QEMU)" BOOL "${DEFAULT_USE_MEDIA_LAYER_TRAMPOLINE}")
mcpi_option(USE_GLES1_COMPATIBILITY_LAYER "Whether To Enable The GLESv1_CM Compatibility Layer" BOOL TRUE)
else()
set(MCPI_USE_MEDIA_LAYER_TRAMPOLINE FALSE)
endif()
if(MCPI_USE_MEDIA_LAYER_TRAMPOLINE)
set(BUILD_MEDIA_LAYER_CORE "${BUILD_NATIVE_COMPONENTS}")
else()
set(BUILD_MEDIA_LAYER_CORE "${BUILD_ARM_COMPONENTS}")
endif()
# QEMU
if(BUILD_NATIVE_COMPONENTS)
include(CheckSymbolExists)
check_symbol_exists("__ARM_ARCH" "" MCPI_IS_ARM32_OR_ARM64_TARGETING)
set(MCPI_USE_QEMU TRUE)
if(MCPI_IS_ARM32_OR_ARM64_TARGETING AND NOT MCPI_USE_MEDIA_LAYER_TRAMPOLINE)
set(MCPI_USE_QEMU FALSE)
endif()
endif()
# Specify Variant Name
set(MCPI_VARIANT_NAME "minecraft-pi-reborn")
if(MCPI_SERVER_MODE)
string(APPEND MCPI_VARIANT_NAME "-server")
else()
string(APPEND MCPI_VARIANT_NAME "-client")
endif()
# App ID
set(DEFAULT_APP_ID "com.thebrokenrail.MCPIReborn")
if(MCPI_SERVER_MODE)
string(APPEND DEFAULT_APP_ID "Server")
else()
string(APPEND DEFAULT_APP_ID "Client")
endif()
mcpi_option(APP_ID "App ID" STRING "${DEFAULT_APP_ID}")
# App Title
mcpi_option(APP_BASE_TITLE "Base App Title" STRING "Minecraft: Pi Edition: Reborn")
set(DEFAULT_APP_TITLE "${MCPI_APP_BASE_TITLE}")
if(MCPI_SERVER_MODE)
string(APPEND DEFAULT_APP_TITLE " (Server)")
else()
string(APPEND DEFAULT_APP_TITLE " (Client)")
endif()
mcpi_option(APP_TITLE "App Title" STRING "${DEFAULT_APP_TITLE}")
# Skin Server
mcpi_option(SKIN_SERVER "Skin Server" STRING "https://raw.githubusercontent.com/MCPI-Revival/Skins/data")
# Discord Invite URL
mcpi_option(DISCORD_INVITE "Discord Invite URL" STRING "https://discord.gg/mcpi-revival-740287937727561779")
# Documentation URL
mcpi_option(DOCUMENTATION "Documentation URL" STRING "https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/src/branch/master/docs/")

33
cmake/options/paths.cmake Normal file
View File

@ -0,0 +1,33 @@
# Specify Installation Paths
set(MCPI_INSTALL_DIR "lib/${MCPI_VARIANT_NAME}")
set(MCPI_BIN_DIR "${MCPI_INSTALL_DIR}/bin")
set(MCPI_LEGAL_DIR "${MCPI_INSTALL_DIR}/legal") # For Software Licenses
set(MCPI_SDK_DIR "${MCPI_INSTALL_DIR}/sdk")
set(MCPI_SDK_LIB_DIR "${MCPI_SDK_DIR}/lib")
set(MCPI_SDK_INCLUDE_DIR "${MCPI_SDK_DIR}/include")
# Library Directory
set(MCPI_LIB_DIR "${MCPI_INSTALL_DIR}/lib")
if(BUILD_ARM_COMPONENTS)
string(APPEND MCPI_LIB_DIR "/arm")
elseif(BUILD_NATIVE_COMPONENTS)
string(APPEND MCPI_LIB_DIR "/native")
endif()
# Share Directory
set(MCPI_SHARE_DIR "share")
if(MCPI_IS_APPIMAGE_BUILD)
string(PREPEND MCPI_SHARE_DIR "usr/")
endif()
# Specify Default Installation Prefix
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(DEFAULT_PREFIX "/usr")
if(MCPI_IS_APPIMAGE_BUILD)
set(DEFAULT_PREFIX "/")
elseif(MCPI_IS_FLATPAK_BUILD)
set(DEFAULT_PREFIX "/app")
endif()
set(CMAKE_INSTALL_PREFIX "${DEFAULT_PREFIX}" CACHE PATH "" FORCE)
set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE)
endif()

View File

@ -0,0 +1,70 @@
# Pick Archive
set(toolchain_version "13.2.rel1")
execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
if(arch STREQUAL "x86_64")
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-x86_64-arm-none-linux-gnueabihf.tar.xz")
elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-aarch64-arm-none-linux-gnueabihf.tar.xz")
else()
message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain")
endif()
# Download If Needed
include(FetchContent)
FetchContent_Declare(
prebuilt-armhf-toolchain
URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}"
)
FetchContent_MakeAvailable(prebuilt-armhf-toolchain)
set(toolchain_dir "${prebuilt-armhf-toolchain_SOURCE_DIR}")
# Force Toolchain
file(WRITE "${toolchain_dir}/toolchain.cmake"
"set(CMAKE_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-gcc\")\n"
"set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/arm-none-linux-gnueabihf-g++\")\n"
"set(CMAKE_SYSTEM_NAME \"Linux\")\n"
"set(CMAKE_SYSTEM_PROCESSOR \"arm\")\n"
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"
)
set(MCPI_CMAKE_TOOLCHAIN_FILE "${toolchain_dir}/toolchain.cmake" CACHE FILEPATH "" FORCE)
# Build Sysroot
set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot")
if("${toolchain_dir}/bin/arm-none-linux-gnueabihf-gcc" IS_NEWER_THAN "${sysroot_dir}")
# Create Directory
file(REMOVE_RECURSE "${sysroot_dir}")
file(MAKE_DIRECTORY "${sysroot_dir}")
# Copy Files From Toolchain
file(
COPY "${toolchain_dir}/arm-none-linux-gnueabihf/libc/"
DESTINATION "${sysroot_dir}"
USE_SOURCE_PERMISSIONS
FILES_MATCHING
PATTERN "*.so*"
)
# Delete Unneeded Files
file(REMOVE_RECURSE "${sysroot_dir}/usr/lib/audit")
file(REMOVE_RECURSE "${sysroot_dir}/usr/lib/gconv")
# Strip Files
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${sysroot_dir}/*")
foreach(file IN LISTS files)
execute_process(COMMAND "${toolchain_dir}/bin/arm-none-linux-gnueabihf-strip" "${file}" RESULT_VARIABLE ret)
# Check Result
if(NOT ret EQUAL 0)
# Delete Invalid Files
file(REMOVE "${file}")
endif()
endforeach()
endif()
# Install Sysroot (Skipping Empty Directories)
function(install_arm_sysroot)
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE RELATIVE "${sysroot_dir}" "${sysroot_dir}/*")
foreach(file IN LISTS files)
get_filename_component(parent "${file}" DIRECTORY)
install(PROGRAMS "${sysroot_dir}/${file}" DESTINATION "${MCPI_INSTALL_DIR}/sysroot/${parent}")
endforeach()
endfunction()

View File

@ -1,5 +0,0 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

View File

@ -0,0 +1,7 @@
# Compile For x86_64
include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake")
# Use x86_64 Cross-Compiler
setup_toolchain("x86_64-linux-gnu")
# Details
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "x86_64")

View File

@ -0,0 +1,7 @@
# Compile For ARM64
include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake")
# Use ARM64 Cross-Compiler
setup_toolchain("aarch64-linux-gnu")
# Details
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "aarch64")

View File

@ -0,0 +1,7 @@
# Compile For ARM
include("${CMAKE_CURRENT_LIST_DIR}/base-toolchain.cmake")
# Use ARM Cross-Compiler
setup_toolchain("arm-linux-gnueabihf")
# Details
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")

View File

@ -0,0 +1,37 @@
# Setup Toolchain
macro(setup_toolchain target)
# Target Variants
set(target_variants "${target}")
macro(add_target_variant value)
string(REPLACE "-linux" "-${value}-linux" target_variant "${target}")
list(APPEND target_variants "${target_variant}")
endmacro()
add_target_variant(unknown)
add_target_variant(none)
add_target_variant(pc)
# Find Compiler
macro(find_compiler output name)
set(possible_names "")
foreach(possible_target IN LISTS target_variants)
list(APPEND possible_names "${possible_target}-${name}")
endforeach()
find_program(
"${output}"
NAMES ${possible_names}
NO_CACHE
)
if("${${output}}" STREQUAL "${output}-NOTFOUND")
message(FATAL_ERROR "Unable To Find ${name}")
endif()
endmacro()
find_compiler(CMAKE_C_COMPILER "gcc")
find_compiler(CMAKE_CXX_COMPILER "g++")
# Extra
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Custom Search Paths
set(CMAKE_FIND_ROOT_PATH "/usr/${target}" "/usr/lib/${target}" "/usr")
# pkg-config
set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/${target}/pkgconfig:/usr/${target}/lib/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig")
endmacro()

View File

@ -0,0 +1,12 @@
# Read Hex Data
file(READ "${EMBED_IN}" data HEX)
# Convert Hex Data For C Compatibility
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," data "${data}")
# Get C Name
get_filename_component(name "${EMBED_IN}" NAME)
string(MAKE_C_IDENTIFIER "${name}" name)
# Write Data
file(WRITE "${EMBED_OUT}" "#include <stddef.h>\nconst unsigned char ${name}[] = {${data}};\nconst size_t ${name}_len = sizeof (${name});\n")

33
cmake/util/util.cmake Normal file
View File

@ -0,0 +1,33 @@
# Symlink Function
function(install_symlink target link)
get_filename_component(parent "${link}" DIRECTORY)
if(parent STREQUAL "")
set(parent ".")
endif()
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/symlink/${parent}")
file(CREATE_LINK "${target}" "${CMAKE_BINARY_DIR}/symlink/${link}" SYMBOLIC)
install(FILES "${CMAKE_BINARY_DIR}/symlink/${link}" DESTINATION "${parent}")
endfunction()
# Embed Resources
set(util_list_dir "${CMAKE_CURRENT_LIST_DIR}")
function(embed_resource target file)
# Get C Name
get_filename_component(name "${file}" NAME)
string(MAKE_C_IDENTIFIER "${name}" name)
# Add Command
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.c"
COMMAND "${CMAKE_COMMAND}"
ARGS "-DEMBED_IN=${CMAKE_CURRENT_SOURCE_DIR}/${file}" "-DEMBED_OUT=${CMAKE_CURRENT_BINARY_DIR}/${name}.c" "-P" "${util_list_dir}/embed-resource.cmake"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${file}" "${util_list_dir}/embed-resource.cmake"
)
# Add To Target
target_sources("${target}" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${name}.c")
endfunction()
# Nicer Output
function(message log_level)
if((NOT MESSAGE_QUIET) OR (NOT (log_level STREQUAL "STATUS" OR log_level MATCHES "^CHECK_")))
_message("${log_level}" ${ARGN})
endif()
endfunction()

View File

@ -1,9 +0,0 @@
cmake_minimum_required(VERSION 3.1.0)
project(core)
add_compile_options(-Wall -Wextra -Werror)
add_library(bcm_host SHARED src/bcm_host.c)
add_executable(launcher src/launcher.c)

View File

@ -1,39 +0,0 @@
#include <stdint.h>
void bcm_host_init(void) {
}
void bcm_host_deinit(void) {
}
int32_t graphics_get_display_size(__attribute__((unused)) const uint16_t display_number, __attribute__((unused)) uint32_t *width, __attribute__((unused)) uint32_t *height) {
return -1;
}
unsigned bcm_host_get_peripheral_address(void) {
return 0x20000000;
}
unsigned bcm_host_get_peripheral_size(void) {
return 0x01000000;
}
unsigned bcm_host_get_sdram_address(void) {
return 0x40000000;
}
uint32_t vc_dispmanx_display_open(__attribute__((unused)) uint32_t device) {
return 0;
}
uint32_t vc_dispmanx_element_add(__attribute__((unused)) uint32_t update, __attribute__((unused)) uint32_t display, __attribute__((unused)) int32_t layer, __attribute__((unused)) const void *dest_rect, __attribute__((unused)) uint32_t src, __attribute__((unused)) const void *src_rect, __attribute__((unused)) uint32_t protection, __attribute__((unused)) void *alpha, __attribute__((unused)) void *clamp, __attribute__((unused)) uint32_t transform) {
return 0;
}
uint32_t vc_dispmanx_update_start(__attribute__((unused)) int32_t priority) {
return 0;
}
int vc_dispmanx_update_submit_sync(__attribute__((unused)) uint32_t update) {
return 0;
}

View File

@ -1,145 +0,0 @@
#define _FILE_OFFSET_BITS 64
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>
static int starts_with(const char *s, const char *t) {
return strncmp(s, t, strlen(t)) == 0;
}
static int ends_with(const char *s, const char *t) {
size_t slen = strlen(s);
size_t tlen = strlen(t);
if (tlen > slen) return 1;
return strcmp(s + slen - tlen, t) == 0;
}
static void trim(char *value) {
// Remove Trailing Colon
int length = strlen(value);
if (value[length - 1] == ':') {
value[length - 1] = '\0';
}
}
static void set_and_print_env(char *name, char *value) {
// Set Variable With Not Trailing Colon
trim(value);
fprintf(stderr, "Set %s = %s\n", name, value);
setenv(name, value, 1);
}
static char *get_env_safe(const char *name) {
// Get Variable Or Blank String If Not Set
char *ret = getenv(name);
return ret != NULL ? ret : "";
}
static void load(char **ld_path, char **ld_preload, char *folder) {
int folder_name_length = strlen(folder);
while (1) {
DIR *dp = opendir(folder);
if (dp != NULL) {
struct dirent *entry = NULL;
errno = 0;
while (1) {
entry = readdir(dp);
if (entry != NULL) {
// Check If File Is A Shared Library
if (entry->d_type == DT_REG && starts_with(entry->d_name, "lib") && ends_with(entry->d_name, ".so")) {
int name_length = strlen(entry->d_name);
int total_length = folder_name_length + name_length;
char name[total_length + 1];
for (int i = 0; i < folder_name_length; i++) {
name[i] = folder[i];
}
for (int i = 0; i < name_length; i++) {
name[folder_name_length + i] = entry->d_name[i];
}
name[total_length] = '\0';
// Add To LD_PRELOAD
asprintf(ld_preload, "%s:%s", name, *ld_preload);
}
} else if (errno != 0) {
// Error Reading Contents Of Folder
fprintf(stderr, "Error Reading Directory: %s\n", strerror(errno));
exit(1);
} else {
break;
}
}
closedir(dp);
// Add To LD_LIBRARY_PATH
asprintf(ld_path, "%s:%s", *ld_path, folder);
return;
} else if (errno == ENOENT) {
// Folder Doesn't Exists, Attempt Creation
char *cmd = NULL;
asprintf(&cmd, "mkdir -p %s", folder);
int ret = system(cmd);
if (ret != 0) {
exit(ret);
}
} else {
// Unable To Open Folder
fprintf(stderr, "Error Opening Directory: %s\n", strerror(errno));
exit(1);
}
}
}
int main(__attribute__((unused)) int argc, char *argv[]) {
fprintf(stderr, "Configuring Game...\n");
// Create Screenshots Folder
char *screenshots_cmd = NULL;
asprintf(&screenshots_cmd, "mkdir -p %s/.minecraft/screenshots", getenv("HOME"));
system(screenshots_cmd);
free(screenshots_cmd);
char *ld_path = NULL;
// Start Configuring LD_LIBRARY_PATH
char *cwd = getcwd(NULL, 0);
asprintf(&ld_path, "%s:/usr/arm-linux-gnueabihf/lib", cwd);
free(cwd);
// Start Configuring LD_PRELOAD
char *ld_preload = NULL;
asprintf(&ld_preload, "%s", get_env_safe("LD_PRELOAD"));
// Load Mods From ./mods
load(&ld_path, &ld_preload, "./mods/");
// Loads Mods From ~/.minecraft/mods
char *home_mods = NULL;
asprintf(&home_mods, "%s/.minecraft/mods/", getenv("HOME"));
load(&ld_path, &ld_preload, home_mods);
free(home_mods);
// Add Existing LD_LIBRARY_PATH
asprintf(&ld_path, "%s:%s", ld_path, get_env_safe("LD_LIBRARY_PATH"));
// Set LD_LIBRARY_PATH
set_and_print_env("LD_LIBRARY_PATH", ld_path);
free(ld_path);
// Set LD_PRELOAD
set_and_print_env("LD_PRELOAD", ld_preload);
free(ld_preload);
// Start Game
fprintf(stderr, "Starting Game...\n");
return execve("./minecraft-pi", argv, environ);
}

View File

@ -1,7 +0,0 @@
Package: minecraft-pi
Version: 1.0.0
Maintainer: TheBrokenRail <connor24nolan@live.com>
Description: Fun with Blocks
Homepage: https://www.minecraft.net/en-us/edition/pi
Architecture: amd64
Depends: docker.io, docker-compose, virgl-server, zenity, policykit-1, adduser, login

View File

@ -1,7 +0,0 @@
#!/bin/sh
set -e
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
MCPI_FEATURES='' docker-compose -f /usr/share/minecraft-pi/docker-compose.yml pull

View File

@ -1,35 +0,0 @@
#!/bin/sh
set -e
# Ensure Features Are Selected
if [ -z "${MCPI_SUBSHELL}" ]; then
MCPI_FEATURES="$(zenity --class 'Minecraft - Pi edition' --list --checklist --column 'Enabled' --column 'Feature' TRUE 'Touch GUI' FALSE 'Survival Mode' TRUE 'Fix Bow & Arrow' TRUE 'Fix Attacking' TRUE 'Mob Spawning' TRUE 'Fancy Graphics' TRUE 'Disable Autojump By Default' TRUE 'Fix Sign Placement' TRUE 'Show Block Outlines')"
MCPI_USERNAME="$(zenity --class 'Minecraft - Pi edition' --entry --text 'Minecraft Username:' --entry-text 'StevePi')"
fi
export MCPI_FEATURES
export MCPI_USERNAME
# Start VirGL
virgl_test_server &
VIRGL_PID="$!"
# Ensure Groups Are Correct
if [ -z "${MCPI_SUBSHELL}" ]; then
if ! id -Gn "$(whoami)" | grep '\bdocker\b' > /dev/null; then
pkexec adduser "$(whoami)" docker
fi
exec sg docker "env MCPI_SUBSHELL=1 \"$(realpath -e "$0")\""
fi
# Allow X11 Connections From Root
xhost local:root
# Launch Minecraft
DOCKER_COMPOSE="docker-compose -f /usr/share/minecraft-pi/docker-compose.yml"
${DOCKER_COMPOSE} pull | zenity --class 'Minecraft - Pi edition' --progress --pulsate --no-cancel --auto-close --text 'Updating Minecraft...'
${DOCKER_COMPOSE} up
${DOCKER_COMPOSE} down
# Kill VirGL
kill "${VIRGL_PID}"

View File

@ -1,10 +0,0 @@
[Desktop Entry]
Name=Minecraft: Pi Edition
Comment=Fun with Blocks
Icon=/usr/share/pixmaps/minecraft-pi.png
StartupNotify=false
StartupWMClass=Minecraft - Pi edition
Exec=/usr/bin/minecraft-pi
Terminal=false
Type=Application
Categories=Application;Game;

View File

@ -1,13 +0,0 @@
version: '3.7'
services:
minecraft-pi:
image: thebrokenrail/minecraft-pi
network_mode: 'host'
volumes:
- '/tmp/.X11-unix:/tmp/.X11-unix'
- '/tmp/.virgl_test:/tmp/.virgl_test'
- '~/.minecraft-pi:/root/.minecraft'
environment:
- 'DISPLAY=unix${DISPLAY}'
- 'MCPI_FEATURES=${MCPI_FEATURES}'
- 'MCPI_USERNAME=${MCPI_USERNAME}'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

36
dependencies/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,36 @@
project(dependencies)
# stb_image
if(BUILD_ARM_COMPONENTS AND NOT MCPI_HEADLESS_MODE)
add_subdirectory(stb_image)
endif()
# Minecraft: Pi Edition
if(BUILD_ARM_COMPONENTS AND NOT MCPI_OPEN_SOURCE_ONLY)
add_subdirectory(minecraft-pi)
endif()
# Zenity (Minimal Build)
if(BUILD_NATIVE_COMPONENTS AND NOT MCPI_SERVER_MODE)
add_subdirectory(zenity)
endif()
# LIEF
if(BUILD_NATIVE_COMPONENTS OR (BUILD_MEDIA_LAYER_CORE AND NOT MCPI_HEADLESS_MODE))
add_subdirectory(LIEF)
endif()
# QEMU
if(BUILD_NATIVE_COMPONENTS AND MCPI_USE_QEMU)
add_subdirectory(qemu)
endif()
# GLFW
if(BUILD_MEDIA_LAYER_CORE AND NOT MCPI_HEADLESS_MODE)
add_subdirectory(glfw)
endif()
# GLES Compatibility Layer
if(BUILD_MEDIA_LAYER_CORE AND NOT MCPI_HEADLESS_MODE AND MCPI_USE_GLES1_COMPATIBILITY_LAYER)
add_subdirectory(gles-compatibility-layer)
endif()
# UTF8-CPP
add_subdirectory(utf8cpp)
# Symbol Prcoessor
if(BUILD_ARM_COMPONENTS)
add_subdirectory(symbol-processor)
endif()

38
dependencies/LIEF/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,38 @@
project(LIEF)
# Silence Warnings
add_compile_options(-w -Wno-psabi)
## LIEF
# Options
set(BUILD_SHARED_LIBS TRUE CACHE BOOL "" FORCE)
set(LIEF_C_API FALSE CACHE BOOL "" FORCE)
set(LIEF_EXAMPLES FALSE CACHE BOOL "" FORCE)
set(LIEF_PYTHON_API FALSE CACHE BOOL "" FORCE)
set(LIEF_TESTS FALSE CACHE BOOL "" FORCE)
set(LIEF_USE_CCACHE FALSE CACHE BOOL "" FORCE)
set(LIEF_LOGGING FALSE CACHE BOOL "" FORCE)
set(LIEF_LOGGING_DEBUG FALSE CACHE BOOL "" FORCE)
set(LIEF_ENABLE_JSON FALSE CACHE BOOL "" FORCE)
set(LIEF_ELF TRUE CACHE BOOL "" FORCE)
set(LIEF_PE FALSE CACHE BOOL "" FORCE)
set(LIEF_MACHO FALSE CACHE BOOL "" FORCE)
set(LIEF_DEX FALSE CACHE BOOL "" FORCE)
set(LIEF_ART FALSE CACHE BOOL "" FORCE)
set(LIEF_OAT FALSE CACHE BOOL "" FORCE)
set(LIEF_VDEX FALSE CACHE BOOL "" FORCE)
# Download
set(MESSAGE_QUIET TRUE)
add_subdirectory(src EXCLUDE_FROM_ALL)
unset(MESSAGE_QUIET)
# Install
install(TARGETS LIB_LIEF DESTINATION "${MCPI_LIB_DIR}")
if(BUILD_ARM_COMPONENTS)
install(TARGETS LIB_LIEF EXPORT sdk DESTINATION "${MCPI_SDK_LIB_DIR}")
endif()
# License
install(FILES src/LICENSE DESTINATION "${MCPI_LEGAL_DIR}/LIEF")

1
dependencies/LIEF/src vendored Submodule

@ -0,0 +1 @@
Subproject commit 16962f2f36a51b2acefad9cec3622f6de5730aa3

View File

@ -0,0 +1,7 @@
project(gles-compatibility-layer)
# GLES Compatibility Layer
set(GLES_COMPATIBILITY_LAYER_USE_ES3 FALSE CACHE BOOL "" FORCE)
set(GLES_COMPATIBILITY_LAYER_USE_SDL FALSE CACHE BOOL "" FORCE)
set(GLES_COMPATIBILITY_LAYER_DEPENDENCY glfw CACHE STRING "" FORCE)
add_subdirectory(src)

@ -0,0 +1 @@
Subproject commit 3ee682f6f26dd4344f0701ae346d10250c040d8e

27
dependencies/glfw/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,27 @@
project(glfw)
# Silence Warnings
add_compile_options(-w)
## GLFW
# Download
set(BUILD_SHARED_LIBS TRUE CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES FALSE CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS FALSE CACHE BOOL "" FORCE)
set(GLFW_BUILD_DOCS FALSE CACHE BOOL "" FORCE)
set(GLFW_INSTALL FALSE CACHE BOOL "" FORCE)
set(GLFW_BUILD_WIN32 FALSE CACHE BOOL "" FORCE)
set(GLFW_BUILD_COCOA FALSE CACHE BOOL "" FORCE)
set(GLFW_BUILD_X11 TRUE CACHE BOOL "" FORCE)
set(GLFW_BUILD_WAYLAND TRUE CACHE BOOL "" FORCE)
set(GLFW_LIBRARY_TYPE "SHARED" CACHE BOOL "" FORCE)
set(MESSAGE_QUIET TRUE)
add_subdirectory(src EXCLUDE_FROM_ALL)
unset(MESSAGE_QUIET)
# Install
install(TARGETS glfw DESTINATION "${MCPI_LIB_DIR}")
# License
install(FILES src/LICENSE.md DESTINATION "${MCPI_LEGAL_DIR}/glfw")

1
dependencies/glfw/src vendored Submodule

@ -0,0 +1 @@
Subproject commit 7b6aead9fb88b3623e3b3725ebb42670cbe4c579

View File

@ -0,0 +1,29 @@
project(minecraft-pi)
include(FetchContent)
## Minecraft: Pi Edition
# Download
FetchContent_Declare(
minecraft-pi
URL "${CMAKE_CURRENT_SOURCE_DIR}/minecraft-pi-0.1.1.tar.gz"
)
FetchContent_Populate(minecraft-pi)
# Install
install(
DIRECTORY "${minecraft-pi_SOURCE_DIR}/"
DESTINATION "${MCPI_INSTALL_DIR}/game"
USE_SOURCE_PERMISSIONS
REGEX "api" EXCLUDE
REGEX "data" EXCLUDE
)
if(NOT MCPI_HEADLESS_MODE)
install(
DIRECTORY "${minecraft-pi_SOURCE_DIR}/data/"
DESTINATION "${MCPI_INSTALL_DIR}/game/data"
USE_SOURCE_PERMISSIONS
)
endif()
install_symlink("game/minecraft-pi" "${MCPI_INSTALL_DIR}/minecraft-pi")

Binary file not shown.

56
dependencies/qemu/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,56 @@
project(qemu)
## QEMU
# Version
set(QEMU_VERSION "9.0.0")
# Flatpak Support
set(QEMU_FLATPAK_PATCH "")
if(MCPI_IS_FLATPAK_BUILD)
set(QEMU_FLATPAK_PATCH "sed" "-i" "s/libdrm/libdrm-dis/g" "<SOURCE_DIR>/meson.build")
endif()
# Build
include(ExternalProject)
set(PKGCONFIG_ENV "")
if(DEFINED ENV{PKG_CONFIG_LIBDIR})
set(PKGCONFIG_ENV "PKG_CONFIG_LIBDIR=$ENV{PKG_CONFIG_LIBDIR}")
endif()
ExternalProject_Add(qemu
URL "${CMAKE_CURRENT_SOURCE_DIR}/../../archives/qemu-${QEMU_VERSION}.tar.xz"
# Configure Build
CONFIGURE_COMMAND
"${CMAKE_COMMAND}" "-E" "env"
${PKGCONFIG_ENV}
"CFLAGS=-s"
"CXXFLAGS=-s"
"<SOURCE_DIR>/configure"
"--prefix=${CMAKE_INSTALL_PREFIX}"
"--cross-prefix="
"--cc=${CMAKE_C_COMPILER}"
"--cxx=${CMAKE_CXX_COMPILER}"
"--extra-ldflags=-ldl -Wl,-rpath=$ORIGIN/../lib/native -Wl,--disable-new-dtags"
"--disable-debug-info"
"--target-list=arm-linux-user"
"--without-default-features"
USES_TERMINAL_CONFIGURE TRUE
# Build Command
BUILD_COMMAND "ninja" "qemu-arm"
BUILD_BYPRODUCTS "<BINARY_DIR>/qemu-arm"
USES_TERMINAL_BUILD TRUE
# Disable Install/Test Commands
INSTALL_COMMAND ""
TEST_COMMAND ""
# Patch Command
PATCH_COMMAND "patch" "-p1" "<" "${CMAKE_CURRENT_SOURCE_DIR}/trampoline.patch"
COMMAND ${QEMU_FLATPAK_PATCH}
)
# Install
ExternalProject_Get_property(qemu BINARY_DIR)
install(PROGRAMS "${BINARY_DIR}/qemu-arm" DESTINATION "${MCPI_BIN_DIR}")
# License
ExternalProject_Get_property(qemu SOURCE_DIR)
install(FILES "${SOURCE_DIR}/COPYING" DESTINATION "${MCPI_LEGAL_DIR}/qemu")

56
dependencies/qemu/trampoline.patch vendored Normal file
View File

@ -0,0 +1,56 @@
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -17,6 +17,7 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#define _ATFILE_SOURCE
+#include <dlfcn.h>
#include "qemu/osdep.h"
#include "qemu/cutils.h"
#include "qemu/path.h"
@@ -9070,6 +9071,17 @@ _syscall5(int, sys_move_mount, int, __from_dfd, const char *, __from_pathname,
int, __to_dfd, const char *, __to_pathname, unsigned int, flag)
#endif
+// g2h For Trampoline
+static CPUState *_trampoline_g2h_cpu = NULL;
+static void *_trampoline_g2h(uint32_t guest_addr) {
+ if (guest_addr == 0) {
+ return NULL;
+ }
+ return g2h(_trampoline_g2h_cpu, guest_addr);
+}
+// Trampoline Function
+typedef void (*_trampoline_t)(typeof(_trampoline_g2h) *g2h, uint32_t id, uint32_t *args);
+
/* This is an internal helper for do_syscall so that it is easier
* to have a single return point, so that actions, such as logging
* of syscall results, can be performed.
@@ -9095,6 +9107,27 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
void *p;
switch(num) {
+ case 0x1337: {
+ // Load Trampoline
+ static _trampoline_t _trampoline = NULL;
+ if (_trampoline == NULL) {
+ // Open Library
+ void *_trampoline_handle = dlopen("libmedia-layer-trampoline.so", RTLD_NOW);
+ // Load Function
+ if (_trampoline_handle != NULL) {
+ _trampoline = dlsym(_trampoline_handle, "trampoline");
+ }
+ }
+ if (_trampoline == NULL) {
+ // Failed To Load
+ qemu_log_mask(LOG_UNIMP, "Unable To Load Media Layer Trampoline: %s\n", dlerror());
+ return -TARGET_ENOSYS;
+ }
+ // Call Trampoline
+ _trampoline_g2h_cpu = cpu;
+ _trampoline(_trampoline_g2h, arg1, g2h(cpu, arg2));
+ return 0;
+ }
case TARGET_NR_exit:
/* In old applications this may be used to implement _exit(2).
However in threaded applications it is used for thread termination,

30
dependencies/stb_image/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,30 @@
project(stb_image)
# Silence Warnings
add_compile_options(-w)
## stb_image
# Build
add_library(stb_image SHARED src/stb_image_impl.c)
target_include_directories(
stb_image
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${MCPI_SDK_INCLUDE_DIR}/stb_image>"
)
target_link_libraries(stb_image PRIVATE m)
target_compile_definitions(stb_image PUBLIC STBI_ONLY_PNG)
# Install
install(TARGETS stb_image DESTINATION "${MCPI_LIB_DIR}")
install(
DIRECTORY "include/"
DESTINATION "${MCPI_SDK_INCLUDE_DIR}/stb_image"
FILES_MATCHING
PATTERN "*.h"
)
install(TARGETS stb_image EXPORT sdk DESTINATION "${MCPI_SDK_LIB_DIR}")
# License
install(FILES include/LICENSE DESTINATION "${MCPI_LEGAL_DIR}/stb_image")

1
dependencies/stb_image/include vendored Submodule

@ -0,0 +1 @@
Subproject commit beebb24b945efdea3b9bba23affb8eb3ba8982e7

View File

@ -0,0 +1,5 @@
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image.h"
#include "stb_image_write.h"

View File

@ -0,0 +1,20 @@
project(symbol-processor)
# Install Dependencies
set(SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(NODE_MODULES "${SRC}/node_modules")
function(npm_run)
execute_process(
COMMAND npm ${ARGV}
WORKING_DIRECTORY "${SRC}"
RESULT_VARIABLE RESULT
)
if(NOT RESULT EQUAL 0)
file(REMOVE_RECURSE "${NODE_MODULES}")
message(FATAL_ERROR "Unable To Run NPM Command")
endif()
endfunction()
if(NOT EXISTS "${NODE_MODULES}")
npm_run(ci --silent)
npm_run(run --silent lint)
endif()

1
dependencies/symbol-processor/src vendored Submodule

@ -0,0 +1 @@
Subproject commit 8249a305df07a0b087b44341afa8c3b27ad7a156

12
dependencies/utf8cpp/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,12 @@
project(utf8cpp)
# Silence Warnings
add_compile_options(-w)
## stb_image
# Build
add_subdirectory(src EXCLUDE_FROM_ALL)
# License
install(FILES src/LICENSE DESTINATION "${MCPI_LEGAL_DIR}/utf8cpp")

1
dependencies/utf8cpp/src vendored Submodule

@ -0,0 +1 @@
Subproject commit f6780f77f6824aa0fbe69f9b97ef7d8aba26ed92

20
dependencies/zenity/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,20 @@
project(zenity)
# Silence Warnings
add_compile_options(-w)
## Zenity
# Download
set(MESSAGE_QUIET TRUE)
add_subdirectory(src EXCLUDE_FROM_ALL)
unset(MESSAGE_QUIET)
# Ensure Build
add_custom_target(zenity-build ALL DEPENDS zenity)
# Install
install(TARGETS zenity DESTINATION "${MCPI_BIN_DIR}")
# License
install(FILES src/COPYING DESTINATION "${MCPI_LEGAL_DIR}/zenity")

1
dependencies/zenity/src vendored Submodule

@ -0,0 +1 @@
Subproject commit a7496461161c917878d58131711425e7c8e59436

342
docs/CHANGELOG.md Normal file
View File

@ -0,0 +1,342 @@
# Changelog
**3.0.0**
* Modding API Revamped
* `*(unsigned char **)` Is Dead!
* Now C++ Only
* Add Peaceful Mode To Options Screen
* Proper Create New World Screen
* Proper Chat Screen
* Add `Animated Lava` Feature Flag (Enabled By Default)
* Add `Animated Fire` Feature Flag (Enabled By Default)
* Add `Use Java Beta 1.3 Light Ramp` Feature Flag (Enabled By Default)
* Add `Send Full Level When Hosting Game` Feature Flag (Enabled By Default)
* Add `Food Overlay` Feature Flag (Disabled By Default)
* Add `Display Date In Select World Screen` Feature Flag (Enabled By Default)
* Add `Optimized Chunk Sorting` Feature Flag (Enabled By Default)
* Add `Add Cake` Feature Flag (Enabled By Default)
* Add `Add Reborn Info To Options` Feature Flag (Enabled By Default)
* Add `Track FPS` Feature Flag (Disabled By Default)
* Split Up `Remove Creative Mode Restrictions` Feature Flag
* `Remove Creative Mode Restrictions` (Disabled By Default)
* `Display Slot Count In Creative Mode` (Disabled By Default)
* `Force Survival Mode Inventory UI` (Disabled By Default)
* `Force Survival Mode Inventory Behavior` (Disabled By Default)
* `Maximize Creative Mode Inventory Stack Size` (Disabled By Default)
* Rename `Disable Buggy Held Item Caching` Feature Flag To `Fix Held Item Caching`
* Add Milk Buckets
* Implement Crafting Remainders
* Improve Death Messages
* Massive Build System Improvements
* Fix Item Dropping When Killing Players From The Server Console
* Fix Furnace Visual Bug When Using Lava Bucket As Fuel
* Add Splash Text To Start Screen
* `overwrite_calls` Now Scans VTables
**2.5.3**
* Add `Replace Block Highlight With Outline` Feature Flag (Enabled By Default)
* By Default, The Outline Width Is Set Using The GUI Scale
* This Can Be Overridden Using The `MCPI_BLOCK_OUTLINE_WIDTH` Environmental Variable
* Added `overwrite_calls_within` Function
**2.5.2**
* Add `3D Chest Model` Feature Flag (Enabled By Default)
* Stop Using Jenkins
* Replace `iconv`
* Replace LibPNG
**2.5.1**
* Allow Overriding Custom Skin Server Using `MCPI_SKIN_SERVER` Environmental Variable
* Fix Bug With SDK Generation
**2.5.0**
* [Custom skin support](CUSTOM_SKINS.md)!
* Add `Load Custom Skins` Feature Flag (Enabled By Default)
**2.4.9**
* Allow Overriding GUI Scale With `MCPI_GUI_SCALE` Environmental Variable
* Add `Disable Block Tinting` Feature Flag (Disabled By Default)
* Add `Disable Hostile AI In Creative Mode` Feature Flag (Enabled By Default)
* Allow Accessing Configuration At Runtime (Useful For Mods That Need To Support Multiple Versions)
**2.4.8**
* Fix Bug In `extract_from_bl_instruction`
* Update LIEF And GLFW
* Allow Mods To Access The Original GLFW Keycode For Key Events (But Better)
* More Accurate Sound
**2.4.7**
* Improve Server Performance
* Add `Add Biome Colors To Grass` Feature Flag (Disabled By Default)
* Add `Generate Caves` Feature Flag (Enabled By Default)
* Allow Mods To Access The Original GLFW Keycode For Key Events
**2.4.6**
* [Minimal Controller Support](CONTROLS.md)
* Fix Holding Left-Click When Attacking
* Fix Crashing On ARMHF
* Heavily Improved Crash Report Dialog
**2.4.5**
* Bundle QEMU
**2.4.4**
* Cache Previous Launcher Configuration
* Add `MCPI_API_PORT` Environmental Variable
* Fix Particles In Front-Facing View
* Fixed Launch Crash On Ubuntu ARM64
* PatchELF Replaced With LIEF
* Moved `3D Anaglyph` Feature Flag To Options Screen
* Add `Improved Classic Title Screen` Feature Flag (Enabled By Default)
* Add Quit button
* Add Options Button (Moved From `Fix Options Screen` Feature Flag)
* Add `Disable Speed Bridging` Feature Flag (Disabled By Default)
* Add `Disable Creative Mode Mining Delay` Feature Flag (Disabled By Default)
* Improved Feature Flag Names
* Miscellaneous Bug Fixes
* Improved Build System
**2.4.3**
* Fix Signs With CP-437
**2.4.2**
* Fix Picking Up Lava
* Fix Wayland App ID
**2.4.1**
* Allow More Characters In Usernames And Chat
* Fix Running On ARMHF Debian Buster
**2.4.0**
* [Modding SDK](../example-mods/README.md)
* Cache Blacklist/Whitelist
* More Reliable AppImages
* CMake Refactors
* Disable Broken Touchscreen-Specific Block Outline Behavior
* Add `Remove Forced GUI Lag (Can Break Joining Servers)` Feature Flag (Disabled By Default)
* Add `Add Buckets` Feature Flag (Enabled By Default)
* Add `Classic HUD` Feature Flag (Enabled By Default)
* Add `Translucent Toolbar` Feature Flag (Enabled By Default)
* Add `Force EGL` Feature Flag (Disabled By Default)
* Fix Sound Pitch/Volume/Attenuation
* Fix Holding Left-Click When Attacking
* Don't Force EGL (Should Fix Some NVIDIA Systems)
* Performance Fixes
**2.3.13**
* Fix Texture Bug
**2.3.12**
* Media Layer Proxy Optimizations
* Bug Fixes
**2.3.11**
* `--version` Command Line Option
* TPS Measured In Benchmark & Server
* Front-Facing Third-Person
* GLESv1 Comparability Layer
* Miscellaneous Bug Fixes
**2.3.10**
* Add Crash Report Dialog
* Disable V-Sync By Default
* Refactor Child Process Management
* Improve Build System
* Support For Building On Ubuntu 22.04
**2.3.9**
* Bundle An ARM Sysroot
* Not Used On ARM32 Systems
* Based On Debian Bullseye
* Colored Log Output
**2.3.8**
* Switch Up Mod Loading Order
**2.3.7**
* Don't Append Hyphens To New World Name, Only Folder Names
**2.3.6**
* Fix `Invert Y-axis` Option Name
* Improve Touch GUI Inventory In Non-Touch GUI
* New Create World Dialog
* Controlled By `Implement Create World Dialog` Feature Flag (Enabled By Default)
* Custom World Names
* Game-Mode Selection
* Custom Seeds
**2.3.5**
* Renamed Some Feature Flags
* Add `Improved Title Background` Feature Flag (Enabled By Default)
* Non-Touch GUI Rework
* Make `Full Touch GUI` Feature Flag Disabled By Default
* Add `Force Touch GUI Button Behavior` Feature Flag (Enabled By Default)
* Add `Improved Button Hover Behavior` Feature Flag (Enabled By Default)
**2.3.4**
* AppImage Fixes
* Make Death Messages Customizable Server-Side
* Fix Q-Key Behavior Behavior When Editing Signs
* Add `Force Touch Inventory` Feature Flag (Disabled By Default)
* Add `Fix Pause Menu` Feature Flag (Enabled By Default)
* Enables Server Visibility Toggle Button
* Options Changes (Not Supported On Legacy)
* Add `Fix Options Screen` Feature Flag (Enabled By Default)
* Adds Options Button To Classic UI Start Screen
* Removes Useless Options Toggles
* Fixes Options Toggles' Default Position
* Store Multiple Settings In `options.txt`
* `Peaceful Mode` Feature Flag Moved To `game_difficulty`
* `Smooth Lighting` Feature Flag Moved To `gfx_ao`
* `Fancy Graphics` Feature Flag Moved To `gfx_fancygraphics`
* `Disable Hosting LAN Worlds` Feature Flag Moved To `mp_server_visible_default`
**2.3.3**
* Add More Blocks To Expanded Creative Inventory
* Add AppStream Metadata
**2.3.2**
* Simplify Launch Sequence
* Add More Blocks To Expanded Creative Inventory
* Fix Nether Reactor With Creative Restrictions Disabled
* Alphabetize Feature Flags
* Add `Disable V-Sync` Feature Flag (Disabled By Default)
**2.3.1**
* Internal Refactor Of `libreborn`
* Remove Use Of `/bin/sh`
* Load Custom Mods First
* Use Zenity Dark Mode
* Add `Improved Cursor Rendering` Feature Flag (Enabled By Default)
**2.3.0**
* Switch To AppImage For Packaging
* Prevent OpenAL From Crashing When Out Of Memory
* Vendor GLFW & Zenity
* Seamless Wayland Support
* Add `MCPI_DEBUG` Environmental Variable
* Add `Disable Hosting LAN Worlds` Feature Flag (Disabled By Default)
* Add `Fix Furnace Not Checking Item Auxiliary` Feature Flag (Enabled By Default)
* Add `Disable Raw Mouse Motion (Not Recommended)` Feature Flag (Disabled By Default) For Broken X11 Setups
* Added Back `~/.minecraft-pi/mods`
* Improve Build System
* Improve Documentation
**2.2.11**
* Add `Close Current Screen On Death` Feature Flag (Enabled By Default) To Prevent Bugs
* Fix More Furnace UI Bugs When Using "Disable 'gui_blocks' Atlas"
**2.2.10**
* Fix Bug With Picking Up Items In "Remove Creative Mode Restrictions" Mode
**2.2.9**
* Fix String Sanitization
* Store Files In `/usr/lib`
**2.2.8**
* Add `Hide Chat Messages` Optional Feature Flag
* Add `Remove Creative Mode Restrictions` Optional Feature Flag
* Improve GLFW->SDL Mouse Motion Event Conversion
* Performance Optimizations
* Make Majority Of Server-Specific Logging Code Also Apply To The Client
* Simple Benchmark Mode
* Fix Typo When Audio Source File Doesn't Exist
* Improve Build System
**2.2.7**
* Fix Crash When OpenAL Is Unavailable
* Fix Command Input In Server
**2.2.5**
* Fix Bug In Texture Scaling Code
**2.2.5**
* Scale Animated Textures
* Add More Blocks To Expanded Creative Inventory
* Reduce Unnecessary Logging
* Log IPs In Server Mode
**2.2.4**
* Instead Of Crashing, Disable Polling Block Hits In Survival Mode Using The API
**2.2.3**
* Fix Crash When Taking Odd-Sized Screenshots
**2.2.2**
* Add More Missing Sound Events
* Make Missing Sound Event Cause Warning Rather Than Crash
**2.2.1**
* Prevent `random.burp` Sound From Crashing Game
* Always Cleanup Media Layer, Even On Crash
* Resolve All Sounds On Startup
**2.2.0**
* Sound Support
* Split Off `Allow Joining Survival Servers` From Game-Mode Mod
* Separate Headless Code From Server Code
* Fix Bug Where `RakNetInstance` Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened
* Clean-Up Code
* Remove Support For Debian Buster
**2.1.8**
* Fix Crash On ARM Systems
**2.1.7**
* Fix On 64-Bit ARM Systems
**2.1.6**
* Optimize Media Layer Proxy
**2.1.5**
* Print Error Message If RakNet Fails To Start
**2.1.4**
* Fix `RakNet::RakString` Security Bug
**2.1.3**
* Workaround Broken Library Search Path On Some ARM 32-Bit Systems
**2.1.2**
* Fix Library Loading On ARM 32-Bit Systems
**2.1.1**
* Fix Symlink Code
**2.1.0**
* Allow Binding `Q` Key To Item Dropping
* Expose More Feature Flags
* Replace `Mob Spawning` Feature Flag With `Force Mob Spawning`
* Fix `ESC` Key In Options Menu When `Miscellaneous Input Fixes` Is Enabled
**2.0.9**
* Fix Translucent Preview Items In Furnace UI Being Fully Opaque When The `gui_blocks` Atlas Is Disabled
**2.0.8**
* Use Default Port In `servers.txt` If Not Specified
**2.0.7**
* Fix Sign Text Not Updating In Multiplayer When Exiting Editing UI Using Escape Button
* Fix Item Dropping Not Working
**2.0.6**
* Fix Toolbar Size In Normal GUI
**2.0.5**
* Show Reborn Version In Start Screen
* External Server Support
**2.0.4**
* Optimize Media Layer Proxy
**2.0.3**
* Make `kill` Admin Command Print Death Message
**2.0.2**
* Fix Mouse Cursor Bugs
**2.0.1**
* Fix Blank Screen On Twister OS
**2.0.0**
* Major Rewrite

45
docs/CONTROLS.md Normal file
View File

@ -0,0 +1,45 @@
# In-Game Controls
## Keyboard & Mouse
| Action | Function |
| --- | --- |
| W | Move Forward |
| A | Move Left |
| S | Move Backward |
| D | Move Right |
| Space | Jump |
| Shift | Sneak |
| E | Open Inventory |
| Q | Drop Item |
| Ctrl+Q | Drop Item Stack |
| 1-9 | Select Item In Toolbar/Hotbar |
| Escape | Pause |
| Tab | Lock/Unlock Mouse |
| F11 | Fullscreen |
| F2 | Screenshot |
| F1 | Hide GUI |
| F5 | Change Perspective |
| T | Open Chat |
| Mouse Movement | Camera Control |
| Scroll Wheel | Cycle Selected Item In Toolbar |
| Left-CLick | Attack/Destroy |
| Right-Click | Use Item/Place Block |
## Game Controller
| Action | Function |
| --- | --- |
| A | Jump |
| Y | Open Inventory |
| B | Sneak[^1] |
| X | Open Crafting |
| D-Pad Up | Change Perspective |
| D-Pad Down | Drop Item |
| D-Pad Right | Open Chat |
| Left/Right Bumper | Cycle Selected Item In Toolbar |
| Left Trigger | Use Item/Place Block |
| Right Trigger | Attack/Destroy |
| Start/Back | Pause |
| Left Stick | Movement |
| Right Stick | Camera Control |
[^1]: Unlike Minecraft: Bedrock Edition, this *is not* a toggle.

10
docs/CREDITS.md Normal file
View File

@ -0,0 +1,10 @@
# Credits
| Project | Reason |
| --- | --- |
| [mhsjlw/mcpilauncher](https://github.com/mhsjlw/mcpilauncher/blob/master/trampoline/trampoline.c) | Information On Getting Minecraft: Pi Eiditon To Run On Desktop Linux |
| [Phirel's Survival Patch](https://www.minecraftforum.net/forums/minecraft-editions/minecraft-pi-edition/1960005-survival-mode-patch) | Information On Survival Mode Support |
| [zhuowei/MinecraftPEModWiki](https://github.com/zhuowei/MinecraftPEModWiki/wiki/How-some-unlocks-are-made) | Information On Smooth Lighting Support |
| [Ghidra](https://ghidra-sre.org) | Used For Decompiling Minecraft: Pi Edition |
| [RetDec](https://retdec.com) | Used For Decompiling Minecraft: Pi Edition |
| [minecraft-linux/mcpelauncher-core](https://github.com/minecraft-linux/mcpelauncher-core/blob/6b5e17b5685a612143297ae4595bdd12327284f3/src/patch_utils.cpp#L42) | Original Function Overwrite Code |
| [Hooking C Functions at Runtime - Thomas Finch](http://thomasfinch.me/blog/2015/07/24/Hooking-C-Functions-At-Runtime.html) | Original Patching Code |

6
docs/CUSTOM_SKINS.md Normal file
View File

@ -0,0 +1,6 @@
# Custom Skins
MCPI-Reborn supports downloading custom skins from [a central skin server](https://github.com/MCPI-Revival/Skins). Skins are downloaded based on the current MCPI username.
This *does not* cache skins and *will not* work without internet access.
Custom skins can be disabled using the `Load Custom Skins` feature flag.

14
docs/DEDICATED_SERVER.md Normal file
View File

@ -0,0 +1,14 @@
# Dedicated Server
The dedicated server is a version of Minecraft: Pi Edition modified to run in a headless environment. It loads settings from a `server.properties` file.
This server is also compatible with MCPE Alpha v0.6.1[^1].
## Setup
To use, install and run the `minecraft-pi-reborn-server` AppImage. It will generate the world and `server.properties` in the current directory.
## Server 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 incompatible with unmodded MCPI
[^1]: The exception to this is buckets, those will crash MCPE players.

70
docs/GETTING_STARTED.md Normal file
View File

@ -0,0 +1,70 @@
---
gitea: none
include_toc: true
---
# Getting Started
Welcome to the official guide for setting up Minecraft: Pi Edition: Reborn (also known as MCPI-Reborn)! This document will help you through the installation and setup process.
## System Requirements
MCPI-Reborn requires support for OpenGL ES v2.0 (unlike the original game, which used OpenGL ES v1.1). It also only supports Linux-based systems.
In addition, while the original game could only be run on the Raspberry Pi, MCPI-Reborn is much more flexible. It supports running on 32-bit ARM (known as `armhf`), 64-bit ARM (known as `arm64`), and 64-bit x86 (known as `amd64`).
## Installation
There are three supported ways to install MCPI-Reborn.
### AppImage
The first supported way to install MCPI-Reborn is with an [AppImage](https://appimage.org). An AppImage is a portable application format that allows users to run software without installation.
To run MCPI-Reborn, all you need to do is [download the latest AppImage](https://gitea.thebrokenrail.com/minecraft-pi-reborn/minecraft-pi-reborn/releases/latest) for your architecture and run it.
More details can be found [here](https://docs.appimage.org/introduction/quickstart.html#how-to-run-an-appimage).
<details>
<summary><b>Additional System Requirements</b></summary>
The AppImage requires Debian Bullseye or higher. This is equivalent to Ubuntu 20.04.
It also requires some additional packages. To install them, run:
```sh
sudo apt install -y libfuse2 libgtk-3-0 libopenal1
```
</details>
### Flatpak
The next method is the official [Flatpak](https://www.flatpak.org/). This method has the additional benefit of built-in sandboxing. Unfortunately, it does not support 32-bit ARM systems.
It can be installed through [Flathub](https://flathub.org/apps/details/com.thebrokenrail.MCPIReborn).
### Pi-Apps
The final supported method is [Pi-Apps](https://github.com/Botspot/pi-apps). It is a ["well-maintained collection of app installation-scripts"](https://github.com/Botspot/pi-apps#:~:text=well-maintained%20collection%20of%20app%20installation-scripts) that includes support for MCPI-Reborn.
The list of systems supported by Pi-Apps can be found [here](https://github.com/Botspot/pi-apps?tab=readme-ov-file#supported-systems).
## Managing Game Data
Just as regular Minecraft stores game data at `~/.minecraft`, MCPI-Reborn uses `~/.minecraft-pi`[^1]. This is the profile directory and is where your worlds, screenshots, and game settings are stored.
The profile directory can easily be accessed by opening MCPI-Reborn and going to `Options -> Reborn -> Profile Directory`.
## Sound
One of MCPI-Reborn's most important modifications is the addition of a sound engine. However, due to copyright limitations, Minecraft's sounds cannot be distributed with MCPI-Reborn and must be installed manually.
Fortunately, installing the sound data is simple:
1. Obtain a valid Minecraft: Pocket Edition v0.6.1[^2] APK file.
2. Extract `lib/*/libminecraftpe.so` from the APK.
3. Create the directory `<Profile Directory>/overrides` if it does not already exist.
4. Copy `libminecraftpe.so` into `<Profile Directory>/overrides`.
5. Sound should now be fully functional!
## Custom Textures
MCPI-Reborn allows users to easily use custom textures through the use of an "overrides directory." Any files placed in this directory will automatically replace their equivalent file in MCPI-Reborn.
For instance, to override `data/images/terrain.png`, you would copy the replacement file to `<Overrides Folder>/images/terrain.png`.
The overrides directory is located at `<Profile Directory>/overrides`.
## Discord
If you have any questions or just want to talk about Minecraft: Pi Edition, there is an [official Discord server](https://discord.com/invite/aDqejQGMMy)!
[^1]: When using the Flatpak, the profile directory is located at `~/.var/app/com.thebrokenrail.MCPIReborn/.minecraft-pi`.
[^2]: This is not a strict requirement; a Minecraft: Pocket Edition v0.8.1 APK would likely work, but it is not guaranteed.

16
docs/MULTIPLAYER.md Normal file
View File

@ -0,0 +1,16 @@
# Multiplayer
MCPI-Reborn supports two ways to play multiplayer.
## Local Network (LAN)
This is also supported by vanilla MCPI. Just load a world in MCPI and other devices on the network can join.
## External Servers
Unlike vanilla MCPI, MCPI-Reborn allows you to natively join a server outside of the local network. Just modify `~/.minecraft-pi/servers.txt` and it should show up in MCPI's server list.
### Example `~/.minecraft-pi/servers.txt`
```
# Default Port Is 19132
example.com
# Custom Port
example.com:19133
```

9
docs/README.md Normal file
View File

@ -0,0 +1,9 @@
# Documentation
* [View Getting Started](GETTING_STARTED.md)
* [View Dedicated Server](DEDICATED_SERVER.md)
* [View Credits](CREDITS.md)
* [View Terminology](TERMINOLOGY.md)
* [View Multiplayer](MULTIPLAYER.md)
* [View In-Game Controls](CONTROLS.md)
* [View Custom Skins](CUSTOM_SKINS.md)
* [View Changelog](CHANGELOG.md)

11
docs/TERMINOLOGY.md Normal file
View File

@ -0,0 +1,11 @@
# Terminology
| Name | Description |
| --- | --- |
| MCPI | Shorthand for Minecraft: Pi Edition |
| MCPE | Shorthand for Minecraft: Pocket Edition |
| Host Architecture | The native architecture of the CPU that MCPi-Reborn will be running on |
| Native Component | A component that *can* be compiled for the host architecture |
| ARM Component | A component that *must* be compiled for ARM |
| Server Mode | A mode where MCPI is patched into behaving like a dedicated server |
| Client Mode | The normal behavior of MCPI |
| Stub | An implementation of a library where all functions either do nothing or error |

19
example-mods/README.md Normal file
View File

@ -0,0 +1,19 @@
# Example Mods
This is an example of a mod that can be built using the modding SDK.
* **Expanded Creative Mod**: This specific mod adds even more items and blocks to the Creative Inventory. It was originally by [@Bigjango13](https://github.com/bigjango13).
* **Chat Commands Mod**: This specific mod makes an chat message starting with a ``/`` handled by the MCPI API.
* **Recipes Mod**: This specific mod demos custom recipes.
## The SDK
The modding SDK is a collection of exported CMake targets that allows anyone to create their own MCPI mod!
The SDK is copied to ``~/.minecraft-pi/sdk/lib/minecraft-pi-reborn-client/sdk/sdk.cmake`` whenever MCPI-Reborn is started.
## How do I use this?
```sh
mkdir build
cd build
cmake ..
cp libexpanded-creative.so ~/.minecraft-pi/mods
```

26
example-mods/build.sh Executable file
View File

@ -0,0 +1,26 @@
#!/bin/sh
set -e
# Create Output Directory
cd "$(dirname "$0")"
ROOT="$(pwd)"
OUT="${ROOT}/out"
rm -rf "${OUT}"
mkdir -p "${OUT}"
# Build
build() {
cd "${ROOT}/$1"
# Build
rm -rf build
mkdir build
cd build
cmake -GNinja ..
cmake --build .
# Copy Result
cp lib*.so "${OUT}"
}
build chat-commands
build expanded-creative
build recipes

15
example-mods/chat-commands/.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
/out
/debian/tmp
/.vscode
/build*
/CMakeLists.txt.user
*.autosave
/AppImageBuilder.yml
/appimage-builder-cache
/appimage-build
/AppDir
/*.zsync
/*.AppImage
/core*
/qemu_*
/cmake/.prebuilt-armhf-toolchain

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.16.0)
# Build For ARM
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")
# Start Project
project(chat-commands)
# Include SDK
include("$ENV{HOME}/.minecraft-pi/sdk/lib/minecraft-pi-reborn-client/sdk/sdk.cmake")
# Build
add_library(chat-commands SHARED chat-commands.cpp)
target_link_libraries(chat-commands mods reborn-patch symbols)

View File

@ -0,0 +1,24 @@
// Headers
#include <libreborn/libreborn.h>
#include <symbols/minecraft.h>
#include <mods/chat/chat.h>
#include <mods/misc/misc.h>
// The Actual Mod
HOOK(chat_handle_packet_send, void, (Minecraft *minecraft, ChatPacket *packet)) {
// Get Message
const char *message = packet->message.c_str();
if (message[0] == '/') {
// API Command
Gui *gui = &minecraft->gui;
std::string out = chat_send_api_command(minecraft, (char *) &message[1]);
if (out.length() > 0 && out[out.length() - 1] == '\n') {
out[out.length() - 1] = '\0';
}
gui->addMessage(&out);
} else {
// Call Original Method
ensure_chat_handle_packet_send();
real_chat_handle_packet_send(minecraft, packet);
}
}

View File

@ -0,0 +1,15 @@
/out
/debian/tmp
/.vscode
/build*
/CMakeLists.txt.user
*.autosave
/AppImageBuilder.yml
/appimage-builder-cache
/appimage-build
/AppDir
/*.zsync
/*.AppImage
/core*
/qemu_*
/cmake/.prebuilt-armhf-toolchain

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.16.0)
# Build For ARM
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")
# Start Project
project(expanded-creative)
# Include SDK
include("$ENV{HOME}/.minecraft-pi/sdk/lib/minecraft-pi-reborn-client/sdk/sdk.cmake")
# Build
add_library(expanded-creative SHARED expanded-creative.cpp)
target_link_libraries(expanded-creative mods reborn-patch symbols)

View File

@ -0,0 +1,636 @@
// Headers
#include <libreborn/libreborn.h>
#include <symbols/minecraft.h>
#include <mods/misc/misc.h>
// The Actual Mod
static void Inventory_setupDefault_FillingContainer_addItem_call_injection(FillingContainer *filling_container) {
ItemInstance *fire_instance = new ItemInstance;
ALLOC_CHECK(fire_instance);
fire_instance->count = 255;
fire_instance->auxiliary = 0;
fire_instance->id = 51;
FillingContainer_addItem(filling_container, fire_instance);
ItemInstance *mushroomStew_instance = new ItemInstance;
ALLOC_CHECK(mushroomStew_instance);
mushroomStew_instance->count = 255;
mushroomStew_instance->auxiliary = 0;
mushroomStew_instance->id = 282;
FillingContainer_addItem(filling_container, mushroomStew_instance);
ItemInstance *steak_instance = new ItemInstance;
ALLOC_CHECK(steak_instance);
steak_instance->count = 255;
steak_instance->auxiliary = 0;
steak_instance->id = 364;
FillingContainer_addItem(filling_container, steak_instance);
ItemInstance *cookedChicken_instance = new ItemInstance;
ALLOC_CHECK(cookedChicken_instance);
cookedChicken_instance->count = 255;
cookedChicken_instance->auxiliary = 0;
cookedChicken_instance->id = 366;
FillingContainer_addItem(filling_container, cookedChicken_instance);
ItemInstance *porkCooked_instance = new ItemInstance;
ALLOC_CHECK(porkCooked_instance);
porkCooked_instance->count = 255;
porkCooked_instance->auxiliary = 0;
porkCooked_instance->id = 320;
FillingContainer_addItem(filling_container, porkCooked_instance);
ItemInstance *apple_instance = new ItemInstance;
ALLOC_CHECK(apple_instance);
apple_instance->count = 255;
apple_instance->auxiliary = 0;
apple_instance->id = 260;
FillingContainer_addItem(filling_container, apple_instance);
ItemInstance *tallGrass_instance = new ItemInstance;
ALLOC_CHECK(tallGrass_instance);
tallGrass_instance->count = 255;
tallGrass_instance->auxiliary = 0;
tallGrass_instance->id = 31;
FillingContainer_addItem(filling_container, tallGrass_instance);
ItemInstance *crops_instance = new ItemInstance;
ALLOC_CHECK(crops_instance);
crops_instance->count = 255;
crops_instance->auxiliary = 0;
crops_instance->id = 59;
FillingContainer_addItem(filling_container, crops_instance);
ItemInstance *farmland_instance = new ItemInstance;
ALLOC_CHECK(farmland_instance);
farmland_instance->count = 255;
farmland_instance->auxiliary = 0;
farmland_instance->id = 60;
FillingContainer_addItem(filling_container, farmland_instance);
ItemInstance *activeFurnace_instance = new ItemInstance;
ALLOC_CHECK(activeFurnace_instance);
activeFurnace_instance->count = 255;
activeFurnace_instance->auxiliary = 0;
activeFurnace_instance->id = 62;
FillingContainer_addItem(filling_container, activeFurnace_instance);
ItemInstance *ironDoor_instance = new ItemInstance;
ALLOC_CHECK(ironDoor_instance);
ironDoor_instance->count = 255;
ironDoor_instance->auxiliary = 0;
ironDoor_instance->id = 330;
FillingContainer_addItem(filling_container, ironDoor_instance);
ItemInstance *activeRedstoneOre_instance = new ItemInstance;
ALLOC_CHECK(activeRedstoneOre_instance);
activeRedstoneOre_instance->count = 255;
activeRedstoneOre_instance->auxiliary = 0;
activeRedstoneOre_instance->id = 74;
FillingContainer_addItem(filling_container, activeRedstoneOre_instance);
ItemInstance *pumkinStem_instance = new ItemInstance;
ALLOC_CHECK(pumkinStem_instance);
pumkinStem_instance->count = 255;
pumkinStem_instance->auxiliary = 0;
pumkinStem_instance->id = 105;
FillingContainer_addItem(filling_container, pumkinStem_instance);
ItemInstance *newGrass_instance = new ItemInstance;
ALLOC_CHECK(newGrass_instance);
newGrass_instance->count = 255;
newGrass_instance->auxiliary = 0;
newGrass_instance->id = 253;
FillingContainer_addItem(filling_container, newGrass_instance);
ItemInstance *reserved6_instance = new ItemInstance;
ALLOC_CHECK(reserved6_instance);
reserved6_instance->count = 255;
reserved6_instance->auxiliary = 0;
reserved6_instance->id = 1;
FillingContainer_addItem(filling_container, reserved6_instance);
ItemInstance *doubleStoneSlab_instance = new ItemInstance;
ALLOC_CHECK(doubleStoneSlab_instance);
doubleStoneSlab_instance->count = 255;
doubleStoneSlab_instance->auxiliary = 0;
doubleStoneSlab_instance->id = 43;
FillingContainer_addItem(filling_container, doubleStoneSlab_instance);
ItemInstance *arrow_instance = new ItemInstance;
ALLOC_CHECK(arrow_instance);
arrow_instance->count = 255;
arrow_instance->auxiliary = 0;
arrow_instance->id = 262;
FillingContainer_addItem(filling_container, arrow_instance);
ItemInstance *coal_instance = new ItemInstance;
ALLOC_CHECK(coal_instance);
coal_instance->count = 255;
coal_instance->auxiliary = 0;
coal_instance->id = 263;
FillingContainer_addItem(filling_container, coal_instance);
ItemInstance *diamond_instance = new ItemInstance;
ALLOC_CHECK(diamond_instance);
diamond_instance->count = 255;
diamond_instance->auxiliary = 0;
diamond_instance->id = 264;
FillingContainer_addItem(filling_container, diamond_instance);
ItemInstance *ironIngot_instance = new ItemInstance;
ALLOC_CHECK(ironIngot_instance);
ironIngot_instance->count = 255;
ironIngot_instance->auxiliary = 0;
ironIngot_instance->id = 265;
FillingContainer_addItem(filling_container, ironIngot_instance);
ItemInstance *goldIngot_instance = new ItemInstance;
ALLOC_CHECK(goldIngot_instance);
goldIngot_instance->count = 255;
goldIngot_instance->auxiliary = 0;
goldIngot_instance->id = 266;
FillingContainer_addItem(filling_container, goldIngot_instance);
ItemInstance *woodSword_instance = new ItemInstance;
ALLOC_CHECK(woodSword_instance);
woodSword_instance->count = 255;
woodSword_instance->auxiliary = 0;
woodSword_instance->id = 268;
FillingContainer_addItem(filling_container, woodSword_instance);
ItemInstance *woodShovel_instance = new ItemInstance;
ALLOC_CHECK(woodShovel_instance);
woodShovel_instance->count = 255;
woodShovel_instance->auxiliary = 0;
woodShovel_instance->id = 269;
FillingContainer_addItem(filling_container, woodShovel_instance);
ItemInstance *woodPickaxe_instance = new ItemInstance;
ALLOC_CHECK(woodPickaxe_instance);
woodPickaxe_instance->count = 255;
woodPickaxe_instance->auxiliary = 0;
woodPickaxe_instance->id = 270;
FillingContainer_addItem(filling_container, woodPickaxe_instance);
ItemInstance *woodAxe_instance = new ItemInstance;
ALLOC_CHECK(woodAxe_instance);
woodAxe_instance->count = 255;
woodAxe_instance->auxiliary = 0;
woodAxe_instance->id = 271;
FillingContainer_addItem(filling_container, woodAxe_instance);
ItemInstance *stoneSword_instance = new ItemInstance;
ALLOC_CHECK(stoneSword_instance);
stoneSword_instance->count = 255;
stoneSword_instance->auxiliary = 0;
stoneSword_instance->id = 272;
FillingContainer_addItem(filling_container, stoneSword_instance);
ItemInstance *stoneShovel_instance = new ItemInstance;
ALLOC_CHECK(stoneShovel_instance);
stoneShovel_instance->count = 255;
stoneShovel_instance->auxiliary = 0;
stoneShovel_instance->id = 273;
FillingContainer_addItem(filling_container, stoneShovel_instance);
ItemInstance *stonePickaxe_instance = new ItemInstance;
ALLOC_CHECK(stonePickaxe_instance);
stonePickaxe_instance->count = 255;
stonePickaxe_instance->auxiliary = 0;
stonePickaxe_instance->id = 274;
FillingContainer_addItem(filling_container, stonePickaxe_instance);
ItemInstance *stoneAxe_instance = new ItemInstance;
ALLOC_CHECK(stoneAxe_instance);
stoneAxe_instance->count = 255;
stoneAxe_instance->auxiliary = 0;
stoneAxe_instance->id = 275;
FillingContainer_addItem(filling_container, stoneAxe_instance);
ItemInstance *shovelIron_instance = new ItemInstance;
ALLOC_CHECK(shovelIron_instance);
shovelIron_instance->count = 255;
shovelIron_instance->auxiliary = 0;
shovelIron_instance->id = 256;
FillingContainer_addItem(filling_container, shovelIron_instance);
ItemInstance *ironPick_instance = new ItemInstance;
ALLOC_CHECK(ironPick_instance);
ironPick_instance->count = 255;
ironPick_instance->auxiliary = 0;
ironPick_instance->id = 257;
FillingContainer_addItem(filling_container, ironPick_instance);
ItemInstance *ironAxe_instance = new ItemInstance;
ALLOC_CHECK(ironAxe_instance);
ironAxe_instance->count = 255;
ironAxe_instance->auxiliary = 0;
ironAxe_instance->id = 258;
FillingContainer_addItem(filling_container, ironAxe_instance);
ItemInstance *diamondSword_instance = new ItemInstance;
ALLOC_CHECK(diamondSword_instance);
diamondSword_instance->count = 255;
diamondSword_instance->auxiliary = 0;
diamondSword_instance->id = 276;
FillingContainer_addItem(filling_container, diamondSword_instance);
ItemInstance *diamondShovel_instance = new ItemInstance;
ALLOC_CHECK(diamondShovel_instance);
diamondShovel_instance->count = 255;
diamondShovel_instance->auxiliary = 0;
diamondShovel_instance->id = 277;
FillingContainer_addItem(filling_container, diamondShovel_instance);
ItemInstance *diamondPickaxe_instance = new ItemInstance;
ALLOC_CHECK(diamondPickaxe_instance);
diamondPickaxe_instance->count = 255;
diamondPickaxe_instance->auxiliary = 0;
diamondPickaxe_instance->id = 278;
FillingContainer_addItem(filling_container, diamondPickaxe_instance);
ItemInstance *diamondAxe_instance = new ItemInstance;
ALLOC_CHECK(diamondAxe_instance);
diamondAxe_instance->count = 255;
diamondAxe_instance->auxiliary = 0;
diamondAxe_instance->id = 279;
FillingContainer_addItem(filling_container, diamondAxe_instance);
ItemInstance *magicWand_instance = new ItemInstance;
ALLOC_CHECK(magicWand_instance);
magicWand_instance->count = 255;
magicWand_instance->auxiliary = 0;
magicWand_instance->id = 280;
FillingContainer_addItem(filling_container, magicWand_instance);
ItemInstance *bowl_instance = new ItemInstance;
ALLOC_CHECK(bowl_instance);
bowl_instance->count = 255;
bowl_instance->auxiliary = 0;
bowl_instance->id = 281;
FillingContainer_addItem(filling_container, bowl_instance);
ItemInstance *goldSword_instance = new ItemInstance;
ALLOC_CHECK(goldSword_instance);
goldSword_instance->count = 255;
goldSword_instance->auxiliary = 0;
goldSword_instance->id = 283;
FillingContainer_addItem(filling_container, goldSword_instance);
ItemInstance *goldShovel_instance = new ItemInstance;
ALLOC_CHECK(goldShovel_instance);
goldShovel_instance->count = 255;
goldShovel_instance->auxiliary = 0;
goldShovel_instance->id = 284;
FillingContainer_addItem(filling_container, goldShovel_instance);
ItemInstance *goldPickaxe_instance = new ItemInstance;
ALLOC_CHECK(goldPickaxe_instance);
goldPickaxe_instance->count = 255;
goldPickaxe_instance->auxiliary = 0;
goldPickaxe_instance->id = 285;
FillingContainer_addItem(filling_container, goldPickaxe_instance);
ItemInstance *goldAxe_instance = new ItemInstance;
ALLOC_CHECK(goldAxe_instance);
goldAxe_instance->count = 255;
goldAxe_instance->auxiliary = 0;
goldAxe_instance->id = 286;
FillingContainer_addItem(filling_container, goldAxe_instance);
ItemInstance *string_instance = new ItemInstance;
ALLOC_CHECK(string_instance);
string_instance->count = 255;
string_instance->auxiliary = 0;
string_instance->id = 287;
FillingContainer_addItem(filling_container, string_instance);
ItemInstance *feather_instance = new ItemInstance;
ALLOC_CHECK(feather_instance);
feather_instance->count = 255;
feather_instance->auxiliary = 0;
feather_instance->id = 288;
FillingContainer_addItem(filling_container, feather_instance);
ItemInstance *gunpowder_instance = new ItemInstance;
ALLOC_CHECK(gunpowder_instance);
gunpowder_instance->count = 255;
gunpowder_instance->auxiliary = 0;
gunpowder_instance->id = 289;
FillingContainer_addItem(filling_container, gunpowder_instance);
ItemInstance *woodHoe_instance = new ItemInstance;
ALLOC_CHECK(woodHoe_instance);
woodHoe_instance->count = 255;
woodHoe_instance->auxiliary = 0;
woodHoe_instance->id = 290;
FillingContainer_addItem(filling_container, woodHoe_instance);
ItemInstance *stoneHoe_instance = new ItemInstance;
ALLOC_CHECK(stoneHoe_instance);
stoneHoe_instance->count = 255;
stoneHoe_instance->auxiliary = 0;
stoneHoe_instance->id = 291;
FillingContainer_addItem(filling_container, stoneHoe_instance);
ItemInstance *flint1_instance = new ItemInstance;
ALLOC_CHECK(flint1_instance);
flint1_instance->count = 255;
flint1_instance->auxiliary = 0;
flint1_instance->id = 292;
FillingContainer_addItem(filling_container, flint1_instance);
ItemInstance *diamondHoe_instance = new ItemInstance;
ALLOC_CHECK(diamondHoe_instance);
diamondHoe_instance->count = 255;
diamondHoe_instance->auxiliary = 0;
diamondHoe_instance->id = 293;
FillingContainer_addItem(filling_container, diamondHoe_instance);
ItemInstance *goldHoe_instance = new ItemInstance;
ALLOC_CHECK(goldHoe_instance);
goldHoe_instance->count = 255;
goldHoe_instance->auxiliary = 0;
goldHoe_instance->id = 294;
FillingContainer_addItem(filling_container, goldHoe_instance);
ItemInstance *seeds_instance = new ItemInstance;
ALLOC_CHECK(seeds_instance);
seeds_instance->count = 255;
seeds_instance->auxiliary = 0;
seeds_instance->id = 295;
FillingContainer_addItem(filling_container, seeds_instance);
ItemInstance *wheat_instance = new ItemInstance;
ALLOC_CHECK(wheat_instance);
wheat_instance->count = 255;
wheat_instance->auxiliary = 0;
wheat_instance->id = 296;
FillingContainer_addItem(filling_container, wheat_instance);
ItemInstance *bread_instance = new ItemInstance;
ALLOC_CHECK(bread_instance);
bread_instance->count = 255;
bread_instance->auxiliary = 0;
bread_instance->id = 297;
FillingContainer_addItem(filling_container, bread_instance);
ItemInstance *diamondHelm_instance = new ItemInstance;
ALLOC_CHECK(diamondHelm_instance);
diamondHelm_instance->count = 255;
diamondHelm_instance->auxiliary = 0;
diamondHelm_instance->id = 310;
FillingContainer_addItem(filling_container, diamondHelm_instance);
ItemInstance *diamondChest_instance = new ItemInstance;
ALLOC_CHECK(diamondChest_instance);
diamondChest_instance->count = 255;
diamondChest_instance->auxiliary = 0;
diamondChest_instance->id = 311;
FillingContainer_addItem(filling_container, diamondChest_instance);
ItemInstance *diamondLeg_instance = new ItemInstance;
ALLOC_CHECK(diamondLeg_instance);
diamondLeg_instance->count = 255;
diamondLeg_instance->auxiliary = 0;
diamondLeg_instance->id = 312;
FillingContainer_addItem(filling_container, diamondLeg_instance);
ItemInstance *diamondBoot_instance = new ItemInstance;
ALLOC_CHECK(diamondBoot_instance);
diamondBoot_instance->count = 255;
diamondBoot_instance->auxiliary = 0;
diamondBoot_instance->id = 313;
FillingContainer_addItem(filling_container, diamondBoot_instance);
ItemInstance *leatherCap_instance = new ItemInstance;
ALLOC_CHECK(leatherCap_instance);
leatherCap_instance->count = 255;
leatherCap_instance->auxiliary = 0;
leatherCap_instance->id = 298;
FillingContainer_addItem(filling_container, leatherCap_instance);
ItemInstance *leatherShirt_instance = new ItemInstance;
ALLOC_CHECK(leatherShirt_instance);
leatherShirt_instance->count = 255;
leatherShirt_instance->auxiliary = 0;
leatherShirt_instance->id = 299;
FillingContainer_addItem(filling_container, leatherShirt_instance);
ItemInstance *leatherPants_instance = new ItemInstance;
ALLOC_CHECK(leatherPants_instance);
leatherPants_instance->count = 255;
leatherPants_instance->auxiliary = 0;
leatherPants_instance->id = 300;
FillingContainer_addItem(filling_container, leatherPants_instance);
ItemInstance *leatherBoots_instance = new ItemInstance;
ALLOC_CHECK(leatherBoots_instance);
leatherBoots_instance->count = 255;
leatherBoots_instance->auxiliary = 0;
leatherBoots_instance->id = 301;
FillingContainer_addItem(filling_container, leatherBoots_instance);
ItemInstance *chainHelm_instance = new ItemInstance;
ALLOC_CHECK(chainHelm_instance);
chainHelm_instance->count = 255;
chainHelm_instance->auxiliary = 0;
chainHelm_instance->id = 302;
FillingContainer_addItem(filling_container, chainHelm_instance);
ItemInstance *chainShirt_instance = new ItemInstance;
ALLOC_CHECK(chainShirt_instance);
chainShirt_instance->count = 255;
chainShirt_instance->auxiliary = 0;
chainShirt_instance->id = 303;
FillingContainer_addItem(filling_container, chainShirt_instance);
ItemInstance *chainLegs_instance = new ItemInstance;
ALLOC_CHECK(chainLegs_instance);
chainLegs_instance->count = 255;
chainLegs_instance->auxiliary = 0;
chainLegs_instance->id = 304;
FillingContainer_addItem(filling_container, chainLegs_instance);
ItemInstance *chainBoots_instance = new ItemInstance;
ALLOC_CHECK(chainBoots_instance);
chainBoots_instance->count = 255;
chainBoots_instance->auxiliary = 0;
chainBoots_instance->id = 305;
FillingContainer_addItem(filling_container, chainBoots_instance);
ItemInstance *goldHelm_instance = new ItemInstance;
ALLOC_CHECK(goldHelm_instance);
goldHelm_instance->count = 255;
goldHelm_instance->auxiliary = 0;
goldHelm_instance->id = 314;
FillingContainer_addItem(filling_container, goldHelm_instance);
ItemInstance *goldChest_instance = new ItemInstance;
ALLOC_CHECK(goldChest_instance);
goldChest_instance->count = 255;
goldChest_instance->auxiliary = 0;
goldChest_instance->id = 315;
FillingContainer_addItem(filling_container, goldChest_instance);
ItemInstance *goldLegs_instance = new ItemInstance;
ALLOC_CHECK(goldLegs_instance);
goldLegs_instance->count = 255;
goldLegs_instance->auxiliary = 0;
goldLegs_instance->id = 316;
FillingContainer_addItem(filling_container, goldLegs_instance);
ItemInstance *goldBoots_instance = new ItemInstance;
ALLOC_CHECK(goldBoots_instance);
goldBoots_instance->count = 255;
goldBoots_instance->auxiliary = 0;
goldBoots_instance->id = 317;
FillingContainer_addItem(filling_container, goldBoots_instance);
ItemInstance *ironHelm_instance = new ItemInstance;
ALLOC_CHECK(ironHelm_instance);
ironHelm_instance->count = 255;
ironHelm_instance->auxiliary = 0;
ironHelm_instance->id = 306;
FillingContainer_addItem(filling_container, ironHelm_instance);
ItemInstance *ironChest_instance = new ItemInstance;
ALLOC_CHECK(ironChest_instance);
ironChest_instance->count = 255;
ironChest_instance->auxiliary = 0;
ironChest_instance->id = 307;
FillingContainer_addItem(filling_container, ironChest_instance);
ItemInstance *ironLegs_instance = new ItemInstance;
ALLOC_CHECK(ironLegs_instance);
ironLegs_instance->count = 255;
ironLegs_instance->auxiliary = 0;
ironLegs_instance->id = 308;
FillingContainer_addItem(filling_container, ironLegs_instance);
ItemInstance *ironBoots_instance = new ItemInstance;
ALLOC_CHECK(ironBoots_instance);
ironBoots_instance->count = 255;
ironBoots_instance->auxiliary = 0;
ironBoots_instance->id = 309;
FillingContainer_addItem(filling_container, ironBoots_instance);
ItemInstance *flint2_instance = new ItemInstance;
ALLOC_CHECK(flint2_instance);
flint2_instance->count = 255;
flint2_instance->auxiliary = 0;
flint2_instance->id = 318;
FillingContainer_addItem(filling_container, flint2_instance);
ItemInstance *porkRaw_instance = new ItemInstance;
ALLOC_CHECK(porkRaw_instance);
porkRaw_instance->count = 255;
porkRaw_instance->auxiliary = 0;
porkRaw_instance->id = 319;
FillingContainer_addItem(filling_container, porkRaw_instance);
ItemInstance *leather_instance = new ItemInstance;
ALLOC_CHECK(leather_instance);
leather_instance->count = 255;
leather_instance->auxiliary = 0;
leather_instance->id = 334;
FillingContainer_addItem(filling_container, leather_instance);
ItemInstance *clayBrick_instance = new ItemInstance;
ALLOC_CHECK(clayBrick_instance);
clayBrick_instance->count = 255;
clayBrick_instance->auxiliary = 0;
clayBrick_instance->id = 336;
FillingContainer_addItem(filling_container, clayBrick_instance);
ItemInstance *clay_instance = new ItemInstance;
ALLOC_CHECK(clay_instance);
clay_instance->count = 255;
clay_instance->auxiliary = 0;
clay_instance->id = 337;
FillingContainer_addItem(filling_container, clay_instance);
ItemInstance *notepad_instance = new ItemInstance;
ALLOC_CHECK(notepad_instance);
notepad_instance->count = 255;
notepad_instance->auxiliary = 0;
notepad_instance->id = 339;
FillingContainer_addItem(filling_container, notepad_instance);
ItemInstance *book_instance = new ItemInstance;
ALLOC_CHECK(book_instance);
book_instance->count = 255;
book_instance->auxiliary = 0;
book_instance->id = 340;
FillingContainer_addItem(filling_container, book_instance);
ItemInstance *slimeball_instance = new ItemInstance;
ALLOC_CHECK(slimeball_instance);
slimeball_instance->count = 255;
slimeball_instance->auxiliary = 0;
slimeball_instance->id = 341;
FillingContainer_addItem(filling_container, slimeball_instance);
ItemInstance *compass_instance = new ItemInstance;
ALLOC_CHECK(compass_instance);
compass_instance->count = 255;
compass_instance->auxiliary = 0;
compass_instance->id = 345;
FillingContainer_addItem(filling_container, compass_instance);
ItemInstance *clock_instance = new ItemInstance;
ALLOC_CHECK(clock_instance);
clock_instance->count = 255;
clock_instance->auxiliary = 0;
clock_instance->id = 347;
FillingContainer_addItem(filling_container, clock_instance);
ItemInstance *glowDust_instance = new ItemInstance;
ALLOC_CHECK(glowDust_instance);
glowDust_instance->count = 255;
glowDust_instance->auxiliary = 0;
glowDust_instance->id = 348;
FillingContainer_addItem(filling_container, glowDust_instance);
ItemInstance *bone_instance = new ItemInstance;
ALLOC_CHECK(bone_instance);
bone_instance->count = 255;
bone_instance->auxiliary = 0;
bone_instance->id = 352;
FillingContainer_addItem(filling_container, bone_instance);
ItemInstance *sugar_instance = new ItemInstance;
ALLOC_CHECK(sugar_instance);
sugar_instance->count = 255;
sugar_instance->auxiliary = 0;
sugar_instance->id = 353;
FillingContainer_addItem(filling_container, sugar_instance);
ItemInstance *melon_instance = new ItemInstance;
ALLOC_CHECK(melon_instance);
melon_instance->count = 255;
melon_instance->auxiliary = 0;
melon_instance->id = 360;
FillingContainer_addItem(filling_container, melon_instance);
ItemInstance *beefRaw_instance = new ItemInstance;
ALLOC_CHECK(beefRaw_instance);
beefRaw_instance->count = 255;
beefRaw_instance->auxiliary = 0;
beefRaw_instance->id = 363;
FillingContainer_addItem(filling_container, beefRaw_instance);
ItemInstance *chickenRaw_instance = new ItemInstance;
ALLOC_CHECK(chickenRaw_instance);
chickenRaw_instance->count = 255;
chickenRaw_instance->auxiliary = 0;
chickenRaw_instance->id = 365;
FillingContainer_addItem(filling_container, chickenRaw_instance);
}
// Init
__attribute__((constructor)) static void init_expanded_creative() {
INFO("Loading Expanded Creative Mod");
misc_run_on_creative_inventory_setup(Inventory_setupDefault_FillingContainer_addItem_call_injection);
}

15
example-mods/recipes/.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
/out
/debian/tmp
/.vscode
/build*
/CMakeLists.txt.user
*.autosave
/AppImageBuilder.yml
/appimage-builder-cache
/appimage-build
/AppDir
/*.zsync
/*.AppImage
/core*
/qemu_*
/cmake/.prebuilt-armhf-toolchain

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.16.0)
# Build For ARM
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "arm")
# Start Project
project(recipes)
# Include SDK
include("$ENV{HOME}/.minecraft-pi/sdk/lib/minecraft-pi-reborn-client/sdk/sdk.cmake")
# Build
add_library(recipes SHARED recipes.cpp)
target_link_libraries(recipes mods reborn-util symbols)

View File

@ -0,0 +1,57 @@
// Headers
#include <libreborn/libreborn.h>
#include <symbols/minecraft.h>
#include <mods/misc/misc.h>
// Custom Crafting Recipes
static void Recipes_injection(Recipes *recipes) {
// Add
Recipes_Type type1 = {
.item = 0,
.tile = 0,
.instance = {
.count = 1,
.id = 12,
.auxiliary = 0
},
.letter = 'a'
};
Recipes_Type type2 = {
.item = 0,
.tile = 0,
.instance = {
.count = 1,
.id = 13,
.auxiliary = 0
},
.letter = 'b'
};
ItemInstance result = {
.count = 1,
.id = 344,
.auxiliary = 0
};
std::vector<Recipes_Type> types = {type1, type2};
Recipes_addShapelessRecipe(recipes, &result, &types);
}
// Custom Furnace Recipes
static void FurnaceRecipes_injection(FurnaceRecipes *recipes) {
// Add
ItemInstance result = {
.count = 1,
.id = 246,
.auxiliary = 0
};
FurnaceRecipes_addFurnaceRecipe(recipes, 49, &result);
}
// Init
__attribute__((constructor)) static void init_recipes() {
// Log
INFO("Loading Custom Recipes");
// Setup
misc_run_on_recipes_setup(Recipes_injection);
misc_run_on_furnace_recipes_setup(FurnaceRecipes_injection);
}

31
images/CMakeLists.txt Normal file
View File

@ -0,0 +1,31 @@
project(images)
# Title Background
if(NOT MCPI_HEADLESS_MODE)
install(
FILES "background.png"
DESTINATION "${MCPI_INSTALL_DIR}/data/images/gui"
RENAME "titleBG.png"
)
endif()
# Chest Model
if(NOT MCPI_HEADLESS_MODE)
install(
FILES "chest.png"
DESTINATION "${MCPI_INSTALL_DIR}/data/images/item"
)
endif()
# Icon
install(
FILES "icon.png"
DESTINATION "${MCPI_SHARE_DIR}/icons/hicolor/scalable/apps"
RENAME "${MCPI_APP_ID}.png"
)
# AppImage
if(MCPI_IS_APPIMAGE_BUILD)
install_symlink("${MCPI_SHARE_DIR}/icons/hicolor/scalable/apps/${MCPI_APP_ID}.png" "${MCPI_APP_ID}.png")
install_symlink("${MCPI_APP_ID}.png" ".DirIcon")
endif()

BIN
images/background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

BIN
images/chest.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
images/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
images/start.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

126
launcher/CMakeLists.txt Normal file
View File

@ -0,0 +1,126 @@
project(launcher)
# Launcher
add_executable(launcher
src/bootstrap.cpp
src/patchelf.cpp
src/util.c
src/crash-report.c
src/sdk.cpp
src/mods.cpp
src/options/parser.cpp
src/main.cpp
)
if(NOT MCPI_SERVER_MODE)
embed_resource(launcher src/client/available-feature-flags)
target_sources(launcher PRIVATE
src/client/configuration.cpp
src/client/cache.cpp
src/client/available-feature-flags # Show In IDE
)
endif()
target_link_libraries(launcher reborn-util LIB_LIEF)
# RPath
set_target_properties(launcher PROPERTIES INSTALL_RPATH "$ORIGIN/lib/native")
target_link_options(launcher PRIVATE "LINKER:--disable-new-dtags")
# Install
install(TARGETS launcher DESTINATION "${MCPI_INSTALL_DIR}")
install_symlink("../${MCPI_INSTALL_DIR}/launcher" "bin/${MCPI_VARIANT_NAME}")
# Install Desktop Entry
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/launcher.desktop"
"[Desktop Entry]\n"
"Name=${MCPI_APP_TITLE}\n"
"Comment=Fun with Blocks\n"
"Icon=${MCPI_APP_ID}\n"
"Exec=${MCPI_VARIANT_NAME}\n"
"Type=Application\n"
"Categories=Game;\n"
)
if(MCPI_HEADLESS_MODE)
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/launcher.desktop"
"Terminal=true\n"
"NoDisplay=true\n"
)
else()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/launcher.desktop"
"Terminal=false\n"
"StartupNotify=false\n"
"StartupWMClass=${MCPI_APP_ID}\n"
)
endif()
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/launcher.desktop"
DESTINATION "${MCPI_SHARE_DIR}/applications"
RENAME "${MCPI_APP_ID}.desktop"
)
# Install AppStream Metadata
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/appstream.xml"
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<component type=\"desktop\">\n"
" <id>${MCPI_APP_ID}</id>\n"
" <name>${MCPI_APP_TITLE}</name>\n"
" <metadata_license>CC0-1.0</metadata_license>\n"
" <summary>Fun with Blocks</summary>\n"
" <description>\n"
" <p>Minecraft: Pi Edition Modding Project.</p>\n"
" <p>NOTE: This is not verified by, affiliated with, or supported by Mojang or Microsoft.</p>\n"
" </description>\n"
" <url type=\"homepage\">https://gitea.thebrokenrail.com/TheBrokenRail/minecraft-pi-reborn</url>\n"
" <launchable type=\"desktop-id\">${MCPI_APP_ID}.desktop</launchable>\n"
" <provides>\n"
" <id>com.thebrokenrail.MCPIRebornClient.desktop</id>\n"
" </provides>\n"
" <project_license>LicenseRef-proprietary</project_license>\n"
" <developer_name>TheBrokenRail &amp; Mojang AB</developer_name>\n"
" <content_rating type=\"oars-1.0\">\n"
" <content_attribute id=\"violence-cartoon\">moderate</content_attribute>\n"
" <content_attribute id=\"violence-fantasy\">none</content_attribute>\n"
" <content_attribute id=\"violence-realistic\">none</content_attribute>\n"
" <content_attribute id=\"violence-bloodshed\">none</content_attribute>\n"
" <content_attribute id=\"violence-sexual\">none</content_attribute>\n"
" <content_attribute id=\"drugs-alcohol\">none</content_attribute>\n"
" <content_attribute id=\"drugs-narcotics\">none</content_attribute>\n"
" <content_attribute id=\"drugs-tobacco\">none</content_attribute>\n"
" <content_attribute id=\"sex-nudity\">none</content_attribute>\n"
" <content_attribute id=\"sex-themes\">none</content_attribute>\n"
" <content_attribute id=\"language-profanity\">none</content_attribute>\n"
" <content_attribute id=\"language-humor\">none</content_attribute>\n"
" <content_attribute id=\"language-discrimination\">none</content_attribute>\n"
" <content_attribute id=\"social-chat\">intense</content_attribute>\n"
" <content_attribute id=\"social-info\">none</content_attribute>\n"
" <content_attribute id=\"social-audio\">none</content_attribute>\n"
" <content_attribute id=\"social-location\">none</content_attribute>\n"
" <content_attribute id=\"social-contacts\">none</content_attribute>\n"
" <content_attribute id=\"money-purchasing\">none</content_attribute>\n"
" <content_attribute id=\"money-gambling\">none</content_attribute>\n"
" </content_rating>\n"
" <releases>\n"
" <release version=\"${MCPI_VERSION}\" date=\"${MCPI_VERSION_DATE}\"></release>\n"
" </releases>\n"
)
if(NOT MCPI_HEADLESS_MODE)
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/appstream.xml"
" <screenshots>\n"
" <screenshot type=\"default\">\n"
" <image>https://gitea.thebrokenrail.com/TheBrokenRail/minecraft-pi-reborn/raw/branch/master/images/start.png</image>\n"
" </screenshot>\n"
" </screenshots>\n"
)
endif()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/appstream.xml"
"</component>\n"
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/appstream.xml"
DESTINATION "${MCPI_SHARE_DIR}/metainfo"
RENAME "${MCPI_APP_ID}.appdata.xml"
)
# AppImage
if(MCPI_IS_APPIMAGE_BUILD)
install_symlink("bin/${MCPI_VARIANT_NAME}" "AppRun")
install_symlink("${MCPI_SHARE_DIR}/applications/${MCPI_APP_ID}.desktop" "${MCPI_APP_ID}.desktop")
endif()

205
launcher/src/bootstrap.cpp Normal file
View File

@ -0,0 +1,205 @@
#define _FILE_OFFSET_BITS 64
#include <string>
#include <vector>
#include <libreborn/libreborn.h>
#include "util.h"
#include "bootstrap.h"
#include "patchelf.h"
#define MCPI_BINARY "minecraft-pi"
#define QEMU_BINARY "qemu-arm"
#define REQUIRED_PAGE_SIZE 4096
// Debug Information
static void run_debug_command(const char *const command[], const char *prefix) {
int status = 0;
char *output = run_command(command, &status, nullptr);
if (output != nullptr) {
// Remove Newline
size_t length = strlen(output);
if (length > 0 && output[length - 1] == '\n') {
output[length - 1] = '\0';
}
// Print
DEBUG("%s: %s", prefix, output);
free(output);
}
if (!is_exit_status_success(status)) {
ERR("Unable To Gather Debug Information");
}
}
static void print_debug_information() {
// System Information
const char *const command[] = {"uname", "-a", nullptr};
run_debug_command(command, "System Information");
// Version
DEBUG("Reborn Version: v%s", MCPI_VERSION);
// Architecture
const char *arch = "Unknown";
#ifdef __x86_64__
arch = "AMD64";
#elif defined(__aarch64__)
arch = "ARM64";
#elif defined(__arm__)
arch = "ARM32";
#endif
DEBUG("Reborn Target Architecture: %s", arch);
}
// Bootstrap
void bootstrap() {
// Debug Information
print_debug_information();
// Check Page Size (Not Needed When Using QEMU)
#ifndef MCPI_USE_QEMU
long page_size = sysconf(_SC_PAGESIZE);
if (page_size != REQUIRED_PAGE_SIZE) {
ERR("Invalid page size! A page size of %ld bytes is required, but the system size is %ld bytes.", (long) REQUIRED_PAGE_SIZE, page_size);
}
#endif
// Get Binary Directory
char *binary_directory_raw = get_binary_directory();
const std::string binary_directory = binary_directory_raw;
free(binary_directory_raw);
DEBUG("Binary Directory: %s", binary_directory.c_str());
// Copy SDK
copy_sdk(binary_directory, true);
// Set MCPI_REBORN_ASSETS_PATH
{
char *assets_path = realpath("/proc/self/exe", nullptr);
ALLOC_CHECK(assets_path);
chop_last_component(&assets_path);
string_append(&assets_path, "/data");
set_and_print_env("MCPI_REBORN_ASSETS_PATH", assets_path);
free(assets_path);
}
// Resolve Binary Path & Set MCPI_DIRECTORY
char *resolved_path = nullptr;
{
// Log
DEBUG("Resolving File Paths...");
// Resolve Full Binary Path
const std::string full_path = binary_directory + ("/" MCPI_BINARY);
resolved_path = realpath(full_path.c_str(), nullptr);
ALLOC_CHECK(resolved_path);
}
// Fix MCPI Dependencies
char new_mcpi_exe_path[] = MCPI_PATCHED_DIR "/XXXXXX";
std::string linker;
{
// Log
DEBUG("Patching ELF Dependencies...");
// Find Linker
linker = "/lib/ld-linux-armhf.so.3";
#ifdef MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN
// Use ARM Sysroot Linker
linker = binary_directory + "/sysroot" + linker;
#endif
// Patch
patch_mcpi_elf_dependencies(resolved_path, new_mcpi_exe_path);
// Verify
if (!starts_with(new_mcpi_exe_path, MCPI_PATCHED_DIR)) {
IMPOSSIBLE();
}
}
// Set MCPI_VANILLA_ASSETS_PATH
{
char *assets_path = strdup(resolved_path);
ALLOC_CHECK(assets_path);
chop_last_component(&assets_path);
string_append(&assets_path, "/data");
set_and_print_env("MCPI_VANILLA_ASSETS_PATH", assets_path);
free(assets_path);
}
// Free Resolved Path
free(resolved_path);
// Configure Library Search Path
std::string mcpi_ld_path = "";
{
// Log
DEBUG("Setting Linker Search Paths...");
// Library Search Path For ARM Components
{
// Add ARM Library Directory
mcpi_ld_path += binary_directory + "/lib/arm:";
// Add ARM Sysroot Libraries (Ensure Priority) (Ignore On Actual ARM System)
#ifdef MCPI_USE_PREBUILT_ARMHF_TOOLCHAIN
mcpi_ld_path += binary_directory + "/sysroot/lib:";
mcpi_ld_path += binary_directory + "/sysroot/lib/arm-linux-gnueabihf:";
mcpi_ld_path += binary_directory + "/sysroot/usr/lib:";
mcpi_ld_path += binary_directory + "/sysroot/usr/lib/arm-linux-gnueabihf:";
#endif
// Add Host LD_LIBRARY_PATH
{
char *value = getenv("LD_LIBRARY_PATH");
if (value != nullptr && strlen(value) > 0) {
mcpi_ld_path += value;
}
}
}
}
// Configure Preloaded Objects
std::string mcpi_ld_preload;
{
// Log
DEBUG("Locating Mods...");
// ARM Components
mcpi_ld_preload = bootstrap_mods(binary_directory);
}
// Start Game
INFO("Starting Game...");
// Arguments
std::vector<std::string> args;
// Non-ARM Systems Need QEMU
#ifdef MCPI_USE_QEMU
args.push_back(QEMU_BINARY);
// Fix Bug
args.push_back("-B");
args.push_back("0x40000"); // Arbitary Value (Aligns To 4k And 16k Page Sizes)
#endif
// Setup Linker
args.push_back(linker);
args.push_back("--library-path");
args.push_back(mcpi_ld_path);
args.push_back("--preload");
args.push_back(mcpi_ld_preload);
// Specify MCPI Binary
args.push_back(new_mcpi_exe_path);
// Run
const char *new_argv[args.size() + 1];
for (std::vector<std::string>::size_type i = 0; i < args.size(); i++) {
new_argv[i] = args[i].c_str();
}
new_argv[args.size()] = nullptr;
safe_execvpe(new_argv, environ);
}

7
launcher/src/bootstrap.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <string>
void bootstrap();
void copy_sdk(const std::string &binary_directory, bool log_with_debug);
std::string bootstrap_mods(const std::string &binary_directory);

View File

@ -0,0 +1,70 @@
FALSE Full Touch GUI
TRUE Fix Bow & Arrow
TRUE Fix Attacking
FALSE Force Mob Spawning
TRUE Disable Autojump By Default
TRUE Display Nametags By Default
TRUE Fix Sign Placement
TRUE Show Block Outlines
FALSE Expand Creative Mode Inventory
FALSE Remove Creative Mode Restrictions
FALSE Display Slot Count In Creative Mode
FALSE Force Survival Mode Inventory UI
FALSE Force Survival Mode Inventory Behavior
FALSE Maximize Creative Mode Inventory Stack Size
TRUE Animated Water
TRUE Animated Lava
TRUE Animated Fire
TRUE Remove Invalid Item Background
TRUE Disable "gui_blocks" Atlas
TRUE Fix Camera Rendering
TRUE Implement Chat
FALSE Hide Chat Messages
TRUE Implement Death Messages
TRUE Implement Game-Mode Switching
TRUE Allow Joining Survival Mode Servers
TRUE Miscellaneous Input Fixes
TRUE Bind "Q" Key To Item Dropping
TRUE Bind Common Toggleable Options To Function Keys
TRUE Render Selected Item Text
TRUE External Server Support
TRUE Load Language Files
TRUE Implement Sound Engine
TRUE Close Current Screen On Death
FALSE Disable Raw Mouse Motion (Not Recommended)
TRUE Fix Furnace Not Checking Item Auxiliary
TRUE Improved Cursor Rendering
TRUE Disable V-Sync
TRUE Fix Options Screen
TRUE Force Touch GUI Inventory
TRUE Fix Pause Menu
TRUE Add Title Screen Background
TRUE Force Touch GUI Button Behavior
TRUE Improved Button Hover Behavior
TRUE Implement Create World Dialog
FALSE Remove Forced GUI Lag (Can Break Joining Servers)
TRUE Add Buckets
TRUE Classic HUD
TRUE Translucent Toolbar
FALSE Force EGL
TRUE Improved Classic Title Screen
FALSE Disable Speed Bridging
FALSE Disable Creative Mode Mining Delay
FALSE Add Biome Colors To Grass
TRUE Generate Caves
FALSE Disable Block Tinting
TRUE Disable Hostile AI In Creative Mode
TRUE Load Custom Skins
TRUE 3D Chest Model
TRUE Replace Block Highlight With Outline
TRUE Add Cake
TRUE Use Java Beta 1.3 Light Ramp
TRUE Send Full Level When Hosting Game
FALSE Food Overlay
TRUE Add Splashes
TRUE Display Date In Select World Screen
TRUE Optimized Chunk Sorting
TRUE Fix Held Item Caching
TRUE Add Reborn Info To Options
FALSE Track FPS
TRUE Add Welcome Screen

View File

@ -0,0 +1,171 @@
#include <cstdlib>
#include <string>
#include <fstream>
#include <unordered_map>
#include <sstream>
#include <sys/stat.h>
#include <unistd.h>
#include <libreborn/libreborn.h>
#include "configuration.h"
#include "cache.h"
// Get Cache Path
static std::string get_cache_path() {
const char *home = getenv("HOME");
if (home == nullptr) {
IMPOSSIBLE();
}
return std::string(home) + HOME_SUBDIRECTORY_FOR_GAME_DATA "/.launcher-cache";
}
// Load
launcher_cache empty_cache = {
.username = DEFAULT_USERNAME,
.render_distance = DEFAULT_RENDER_DISTANCE,
.feature_flags = {}
};
launcher_cache load_cache() {
// Log
DEBUG("Loading Launcher Cache...");
// Return Value
launcher_cache ret = empty_cache;
// Open File
std::ifstream stream(get_cache_path(), std::ios::in | std::ios::binary);
if (!stream) {
// Fail
struct stat s;
// No Warning If File Doesn't Exist
if (stat(get_cache_path().c_str(), &s) == 0) {
WARN("Unable To Open Launcher Cache For Loading");
}
} else {
// Lock File
int lock_fd = lock_file(get_cache_path().c_str());
// Check Version
unsigned char cache_version;
stream.read((char *) &cache_version, 1);
if (stream.eof() || cache_version != (unsigned char) CACHE_VERSION) {
// Fail
if (!stream.eof()) {
WARN("Invalid Launcher Cache Version (Expected: %i, Actual: %i)", (int) CACHE_VERSION, (int) cache_version);
} else {
WARN("Unable To Read Launcher Cache Version");
}
stream.close();
} else {
// Load Username And Render Distance
launcher_cache cache;
std::getline(stream, cache.username, '\0');
std::getline(stream, cache.render_distance, '\0');
// Load Feature Flags
std::string flag;
while (!stream.eof() && std::getline(stream, flag, '\0')) {
if (flag.length() > 0) {
unsigned char is_enabled = 0;
stream.read((char *) &is_enabled, 1);
cache.feature_flags[flag] = is_enabled != (unsigned char) 0;
}
stream.peek();
}
// Finish
stream.close();
if (!stream) {
// Fail
WARN("Failure While Loading Launcher Cache");
} else {
// Success
ret = cache;
}
}
// Unlock File
unlock_file(get_cache_path().c_str(), lock_fd);
}
// Return
return ret;
}
// Save
#define write_env_to_stream(stream, env) \
{ \
const char *env_value = getenv(env); \
if (env == NULL) { \
IMPOSSIBLE(); \
} \
stream.write(env_value, strlen(env_value) + 1); \
}
void save_cache() {
// Log
DEBUG("Saving Launcher Cache...");
// Open File
std::ofstream stream(get_cache_path(), std::ios::out | std::ios::binary);
if (!stream) {
// Fail
WARN("Unable To Open Launcher Cache For Saving");
} else {
// Lock File
int lock_fd = lock_file(get_cache_path().c_str());
// Save Cache Version
unsigned char cache_version = (unsigned char) CACHE_VERSION;
stream.write((const char *) &cache_version, 1);
// Save Username And Render Distance
write_env_to_stream(stream, "MCPI_USERNAME");
write_env_to_stream(stream, "MCPI_RENDER_DISTANCE");
// Save Feature Flags
std::unordered_map<std::string, bool> flags;
load_available_feature_flags([&flags](std::string flag) {
std::string stripped_flag = strip_feature_flag_default(flag, NULL);
flags[stripped_flag] = false;
});
{
const char *enabled_flags = getenv("MCPI_FEATURE_FLAGS");
if (enabled_flags == NULL) {
IMPOSSIBLE();
}
std::istringstream enabled_flags_stream(enabled_flags);
std::string flag;
while (std::getline(enabled_flags_stream, flag, '|')) {
if (flag.length() > 0) {
flags[flag] = true;
}
}
}
for (auto &it : flags) {
stream.write(it.first.c_str(), it.first.size() + 1);
unsigned char val = it.second ? (unsigned char) 1 : (unsigned char) 0;
stream.write((const char *) &val, 1);
}
// Finish
stream.close();
if (!stream.good()) {
WARN("Failure While Saving Launcher Cache");
}
// Unlock File
unlock_file(get_cache_path().c_str(), lock_fd);
}
}
// Wipe Cache
void wipe_cache() {
// Log
INFO("Wiping Launcher Cache...");
// Unlink File
if (unlink(get_cache_path().c_str()) != 0) {
WARN("Failure While Wiping Cache: %s", strerror(errno));
}
}

View File

@ -0,0 +1,22 @@
#pragma once
#include <string>
#include <unordered_map>
// Cache Version
#define CACHE_VERSION 0
// Load Cache
typedef struct {
std::string username;
std::string render_distance;
std::unordered_map<std::string, bool> feature_flags;
} launcher_cache;
extern launcher_cache empty_cache;
launcher_cache load_cache();
// Save Cache
void save_cache();
// Wipe Cache
void wipe_cache();

View File

@ -0,0 +1,283 @@
#include <sstream>
#include <cstring>
#include <cerrno>
#include <sys/wait.h>
#include <sys/stat.h>
#include <vector>
#include <functional>
#include <algorithm>
#include <libreborn/libreborn.h>
#include "../util.h"
#include "configuration.h"
#include "cache.h"
// Strip Feature Flag Default
std::string strip_feature_flag_default(const std::string &flag, bool *default_ret) {
// Valid Values
std::string true_str = "TRUE ";
std::string false_str = "FALSE ";
// Test
if (flag.rfind(true_str, 0) == 0) {
// Enabled By Default
if (default_ret != nullptr) {
*default_ret = true;
}
return flag.substr(true_str.length(), std::string::npos);
} else if (flag.rfind(false_str, 0) == 0) {
// Disabled By Default
if (default_ret != nullptr) {
*default_ret = false;
}
return flag.substr(false_str.length(), std::string::npos);
} else {
// Invalid
ERR("Invalid Feature Flag Default");
}
}
// Load Available Feature Flags
extern unsigned char available_feature_flags[];
extern size_t available_feature_flags_len;
void load_available_feature_flags(const std::function<void(std::string)> &callback) {
// Get Path
char *binary_directory = get_binary_directory();
std::string path = std::string(binary_directory) + "/available-feature-flags";
free(binary_directory);
// Load File
std::string data(available_feature_flags, available_feature_flags + available_feature_flags_len);
std::stringstream stream(data);
// Store Lines
std::vector<std::string> lines;
// Read File
{
std::string line;
while (std::getline(stream, line)) {
if (!line.empty()) {
// Verify Line
if (line.find('|') == std::string::npos) {
lines.push_back(line);
} else {
// Invalid Line
ERR("Feature Flag Contains Invalid '|'");
}
}
}
}
// Sort
std::sort(lines.begin(), lines.end(), [](const std::string &a, const std::string &b) {
// Strip Defaults
std::string stripped_a = strip_feature_flag_default(a, nullptr);
std::string stripped_b = strip_feature_flag_default(b, nullptr);
// Sort
return stripped_a < stripped_b;
});
// Run Callbacks
for (const std::string &line : lines) {
callback(line);
}
}
// Run Command And Set Environmental Variable
static void run_command_and_set_env(const char *env_name, const char *command[]) {
// Only Run If Environmental Variable Is NULL
if (getenv(env_name) == nullptr) {
// Run
int return_code;
char *output = run_command(command, &return_code, nullptr);
if (output != nullptr) {
// Trim
int length = strlen(output);
if (output[length - 1] == '\n') {
output[length - 1] = '\0';
}
// Set
set_and_print_env(env_name, output);
// Free
free(output);
}
// Check Return Code
if (!is_exit_status_success(return_code)) {
// Launch Interrupted
exit(EXIT_SUCCESS);
}
}
}
// Use Zenity To Set Environmental Variable
#define DIALOG_TITLE "Launcher"
static void run_zenity_and_set_env(const char *env_name, std::vector<std::string> command) {
// Create Full Command
std::vector<std::string> full_command;
full_command.push_back("zenity");
full_command.push_back("--title");
full_command.push_back(DIALOG_TITLE);
full_command.push_back("--name");
full_command.push_back(MCPI_APP_ID);
full_command.insert(full_command.end(), command.begin(), command.end());
// Convert To C Array
const char *full_command_array[full_command.size() + 1];
for (std::vector<std::string>::size_type i = 0; i < full_command.size(); i++) {
full_command_array[i] = full_command[i].c_str();
}
full_command_array[full_command.size()] = nullptr;
// Run
run_command_and_set_env(env_name, full_command_array);
}
// Set Variable If Not Already Set
static void set_env_if_unset(const char *env_name, const std::function<std::string()> &callback) {
if (getenv(env_name) == nullptr) {
char *value = strdup(callback().c_str());
ALLOC_CHECK(value);
set_and_print_env(env_name, value);
free(value);
}
}
// Handle Non-Launch Commands
void handle_non_launch_client_only_commands(const options_t &options) {
// Print Available Feature Flags
if (options.print_available_feature_flags) {
load_available_feature_flags([](const std::string &line) {
printf("%s\n", line.c_str());
fflush(stdout);
});
exit(EXIT_SUCCESS);
}
}
// Check Environment
void check_environment_client() {
// Don't Run As Root
if (getenv("_MCPI_SKIP_ROOT_CHECK") == nullptr && (getuid() == 0 || geteuid() == 0)) {
ERR("Don't Run As Root");
}
// Check For Display
#ifndef MCPI_HEADLESS_MODE
if (getenv("DISPLAY") == nullptr && getenv("WAYLAND_DISPLAY") == nullptr) {
ERR("No display attached! Make sure $DISPLAY or $WAYLAND_DISPLAY is set.");
}
#endif
}
// Configure Client Options
#define LIST_DIALOG_SIZE "400"
void configure_client(const options_t &options) {
// Wipe Cache If Needed
if (options.wipe_cache) {
wipe_cache();
}
// Load Cache
launcher_cache cache = options.no_cache ? empty_cache : load_cache();
// --default
if (options.use_default) {
// Use Default Feature Flags
set_env_if_unset("MCPI_FEATURE_FLAGS", [&cache]() {
std::string feature_flags = "";
load_available_feature_flags([&feature_flags, &cache](const std::string &flag) {
bool value;
// Strip Default Value
std::string stripped_flag = strip_feature_flag_default(flag, &value);
// Use Cache
if (cache.feature_flags.count(stripped_flag) > 0) {
value = cache.feature_flags[stripped_flag];
}
// Specify Default Value
if (value) {
// Enabled By Default
feature_flags += stripped_flag + '|';
}
});
if (!feature_flags.empty() && feature_flags[feature_flags.length() - 1] == '|') {
feature_flags.pop_back();
}
return feature_flags;
});
set_env_if_unset("MCPI_RENDER_DISTANCE", [&cache]() {
return cache.render_distance;
});
set_env_if_unset("MCPI_USERNAME", [&cache]() {
return cache.username;
});
}
// Setup MCPI_FEATURE_FLAGS
{
std::vector<std::string> command;
command.push_back("--list");
command.push_back("--checklist");
command.push_back("--width");
command.push_back(LIST_DIALOG_SIZE);
command.push_back("--height");
command.push_back(LIST_DIALOG_SIZE);
command.push_back("--column");
command.push_back("Enabled");
command.push_back("--column");
command.push_back("Feature");
load_available_feature_flags([&command, &cache](const std::string &flag) {
bool value;
// Strip Default Value
std::string stripped_flag = strip_feature_flag_default(flag, &value);
// Use Cache
if (cache.feature_flags.count(stripped_flag) > 0) {
value = cache.feature_flags[stripped_flag];
}
// Specify Default Value
if (value) {
// Enabled By Default
command.push_back("TRUE");
} else {
// Disabled By Default
command.push_back("FALSE");
}
// Specify Name
command.push_back(stripped_flag);
});
// Run
run_zenity_and_set_env("MCPI_FEATURE_FLAGS", command);
}
// Setup MCPI_RENDER_DISTANCE
{
std::vector<std::string> command;
command.push_back("--list");
command.push_back("--radiolist");
command.push_back("--width");
command.push_back(LIST_DIALOG_SIZE);
command.push_back("--height");
command.push_back(LIST_DIALOG_SIZE);
command.push_back("--text");
command.push_back("Select Minecraft Render Distance:");
command.push_back("--column");
command.push_back("Selected");
command.push_back("--column");
command.push_back("Name");
std::string render_distances[] = {"Far", "Normal", "Short", "Tiny"};
for (std::string &render_distance : render_distances) {
command.push_back(render_distance == cache.render_distance ? "TRUE" : "FALSE");
command.push_back(render_distance);
}
// Run
run_zenity_and_set_env("MCPI_RENDER_DISTANCE", command);
}
// Setup MCPI_USERNAME
{
std::vector<std::string> command;
command.push_back("--entry");
command.push_back("--text");
command.push_back("Enter Minecraft Username:");
command.push_back("--entry-text");
command.push_back(cache.username);
// Run
run_zenity_and_set_env("MCPI_USERNAME", command);
}
// Save Cache
if (!options.no_cache) {
save_cache();
}
}

View File

@ -0,0 +1,23 @@
#pragma once
#include <string>
#include <functional>
#include "../options/parser.h"
// Defaults
#define DEFAULT_USERNAME "StevePi"
#define DEFAULT_RENDER_DISTANCE "Short"
// Feature Flags
std::string strip_feature_flag_default(const std::string& flag, bool *default_ret);
void load_available_feature_flags(const std::function<void(std::string)> &callback);
// Handle Non-Launch Commands
void handle_non_launch_client_only_commands(const options_t &options);
// Check Environment
void check_environment_client();
// Configure Client Options
void configure_client(const options_t &options);

256
launcher/src/crash-report.c Normal file
View File

@ -0,0 +1,256 @@
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <signal.h>
#include <poll.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <libreborn/libreborn.h>
#include "crash-report.h"
// Show Crash Report Dialog
#ifndef MCPI_HEADLESS_MODE
#define DIALOG_TITLE "Crash Report"
#define CRASH_REPORT_DIALOG_WIDTH "640"
#define CRASH_REPORT_DIALOG_HEIGHT "480"
static void show_report(const char *log_filename) {
// Fork
pid_t pid = fork();
if (pid == 0) {
// Child
setsid();
ALLOC_CHECK(freopen("/dev/null", "w", stdout));
ALLOC_CHECK(freopen("/dev/null", "w", stderr));
ALLOC_CHECK(freopen("/dev/null", "r", stdin));
const char *command[] = {
"zenity",
"--title", DIALOG_TITLE,
"--name", MCPI_APP_ID,
"--width", CRASH_REPORT_DIALOG_WIDTH,
"--height", CRASH_REPORT_DIALOG_HEIGHT,
"--text-info",
"--text", MCPI_APP_BASE_TITLE " has crashed!\n\nNeed help? Consider asking on the <a href=\"" MCPI_DISCORD_INVITE "\">Discord server</a>! <i>If you believe this is a problem with " MCPI_APP_BASE_TITLE " itself, please upload this crash report to the #bugs Discord channel.</i>",
"--filename", log_filename,
"--no-wrap",
"--font", "Monospace",
"--save-filename", MCPI_VARIANT_NAME "-crash-report.log",
"--ok-label", "Exit",
NULL
};
safe_execvpe(command, (const char *const *) environ);
}
}
#endif
// Exit Handler
static void exit_handler(__attribute__((unused)) int signal) {
// Murder
murder_children();
}
// Setup
#define PIPE_READ 0
#define PIPE_WRITE 1
#define MCPI_LOGS_DIR "/tmp/.minecraft-pi-logs"
static char log_filename[] = MCPI_LOGS_DIR "/XXXXXX";
void setup_log_file() {
// Ensure Temporary Directory
{
// Check If It Exists
struct stat tmp_stat;
int exists = stat(MCPI_LOGS_DIR, &tmp_stat) != 0 ? 0 : S_ISDIR(tmp_stat.st_mode);
if (!exists) {
// Doesn't Exist
if (mkdir(MCPI_LOGS_DIR, S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
ERR("Unable To Create Temporary Folder: %s", strerror(errno));
}
}
}
// Create Temporary File
int log_file_fd = mkstemp(log_filename);
if (log_file_fd == -1) {
ERR("Unable To Create Log File: %s", strerror(errno));
}
close(log_file_fd);
reborn_set_log(log_filename);
}
void setup_crash_report() {
// Store Output
int output_pipe[2];
safe_pipe2(output_pipe, 0);
int error_pipe[2];
safe_pipe2(error_pipe, 0);
int input_pipe[2];
safe_pipe2(input_pipe, 0);
// Fork
pid_t ret = fork();
if (ret == -1) {
ERR("Unable To Fork: %s", strerror(errno));
} else if (ret == 0) {
// Child Process
// Pipe stdio
dup2(output_pipe[PIPE_WRITE], STDOUT_FILENO);
close(output_pipe[PIPE_READ]);
close(output_pipe[PIPE_WRITE]);
dup2(error_pipe[PIPE_WRITE], STDERR_FILENO);
close(error_pipe[PIPE_READ]);
close(error_pipe[PIPE_WRITE]);
dup2(input_pipe[PIPE_READ], STDIN_FILENO);
close(input_pipe[PIPE_READ]);
close(input_pipe[PIPE_WRITE]);
// Create New Process Group
setpgid(0, 0);
// Continue Execution
} else {
// Parent Process
track_child(ret);
// Install Signal Handlers
struct sigaction act_sigint = {0};
act_sigint.sa_flags = SA_RESTART;
act_sigint.sa_handler = &exit_handler;
sigaction(SIGINT, &act_sigint, NULL);
struct sigaction act_sigterm = {0};
act_sigterm.sa_flags = SA_RESTART;
act_sigterm.sa_handler = &exit_handler;
sigaction(SIGTERM, &act_sigterm, NULL);
atexit(murder_children);
// Close Unneeded File Descriptors
close(output_pipe[PIPE_WRITE]);
close(error_pipe[PIPE_WRITE]);
close(input_pipe[PIPE_READ]);
// Set Debug Tag
reborn_debug_tag = "(Crash Reporter) ";
// Setup Logging
#define BUFFER_SIZE 1024
char buf[BUFFER_SIZE];
// Setup Polling
int number_fds = 3;
struct pollfd poll_fds[number_fds];
poll_fds[0].fd = output_pipe[PIPE_READ];
poll_fds[1].fd = error_pipe[PIPE_READ];
poll_fds[2].fd = STDIN_FILENO;
for (int i = 0; i < number_fds; i++) {
poll_fds[i].events = POLLIN;
}
// Poll Data
int status;
while (waitpid(ret, &status, WNOHANG) != ret) {
int poll_ret = poll(poll_fds, number_fds, -1);
if (poll_ret == -1) {
if (errno == EINTR) {
continue;
} else {
ERR("Unable To Poll Data: %s", strerror(errno));
}
}
// Handle Data
for (int i = 0; i < number_fds; i++) {
if (poll_fds[i].revents != 0) {
if (poll_fds[i].revents & POLLIN) {
if (poll_fds[i].fd == STDIN_FILENO) {
// Data Available From stdin
int bytes_available;
if (ioctl(fileno(stdin), FIONREAD, &bytes_available) == -1) {
bytes_available = 0;
}
// Read
ssize_t bytes_read = read(poll_fds[i].fd, buf, BUFFER_SIZE);
if (bytes_read == -1) {
ERR("Unable To Read Input: %s", strerror(errno));
}
// Write To Child
if (write(input_pipe[PIPE_WRITE], buf, bytes_read) == -1) {
ERR("Unable To Write Input To Child: %s", strerror(errno));
}
} else {
// Data Available From Child's stdout/stderr
ssize_t bytes_read = read(poll_fds[i].fd, buf, BUFFER_SIZE - 1 /* Account For NULL-Terminator */);
if (bytes_read == -1) {
ERR("Unable To Read Log Data: %s", strerror(errno));
}
// Print To Terminal
buf[bytes_read] = '\0';
fprintf(poll_fds[i].fd == output_pipe[PIPE_READ] ? stdout : stderr, "%s", buf);
// Write To log
reborn_lock_log();
if (write(reborn_get_log_fd(), buf, bytes_read) == -1) {
ERR("Unable To Write Log Data: %s", strerror(errno));
}
reborn_unlock_log();
}
} else {
// File Descriptor No Longer Accessible
poll_fds[i].events = 0;
}
}
}
}
// Untrack Process
untrack_child(ret);
// Close Pipes
close(output_pipe[PIPE_READ]);
close(error_pipe[PIPE_READ]);
close(input_pipe[PIPE_WRITE]);
// Check If Is Crash
int is_crash = !is_exit_status_success(status);
// Log Exit Code To log If Crash
if (is_crash) {
// Create Exit Code Log Line
char *exit_status = NULL;
get_exit_status_string(status, &exit_status);
char *exit_code_line = NULL;
safe_asprintf(&exit_code_line, "[CRASH]: Terminated%s\n", exit_status);
free(exit_status);
// Print Exit Code Log Line
fprintf(stderr, "%s", exit_code_line);
// Write Exit Code Log Line
reborn_lock_log();
if (write(reborn_get_log_fd(), exit_code_line, strlen(exit_code_line)) == -1) {
ERR("Unable To Write Exit Code To Log: %s", strerror(errno));
}
reborn_unlock_log();
// Free Exit Code Log Line
free(exit_code_line);
}
// Close Log File
reborn_close_log();
unsetenv(MCPI_LOG_ENV);
// Show Crash Log
#ifndef MCPI_HEADLESS_MODE
if (is_crash) {
show_report(log_filename);
}
#endif
// Exit
exit(WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);
}
}

View File

@ -0,0 +1,12 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void setup_log_file();
void setup_crash_report();
#ifdef __cplusplus
}
#endif

155
launcher/src/main.cpp Normal file
View File

@ -0,0 +1,155 @@
#include <cstdlib>
#include <libreborn/libreborn.h>
#include <sys/stat.h>
#include "bootstrap.h"
#include "options/parser.h"
#include "crash-report.h"
#include "util.h"
#ifndef MCPI_SERVER_MODE
#include "client/configuration.h"
#endif
// Bind Options To Environmental Variable
static void bind_to_env(const char *env, const bool value) {
const bool force = env[0] == '_';
if (force || value) {
set_and_print_env(env, value ? "1" : nullptr);
}
}
static void setup_environment(const options_t &options) {
// Passthrough Options To Game
#ifndef MCPI_SERVER_MODE
bind_to_env("_MCPI_BENCHMARK", options.benchmark);
#else
bind_to_env("_MCPI_ONLY_GENERATE", options.only_generate);
#endif
// GTK Dark Mode
#ifndef MCPI_HEADLESS_MODE
set_and_print_env("GTK_THEME", "Adwaita:dark");
#endif
// Configure PATH
{
// Get Binary Directory
char *binary_directory = get_binary_directory();
std::string new_path = std::string(binary_directory) + "/bin";
free(binary_directory);
// Add Existing PATH
{
char *value = getenv("PATH");
if (value != nullptr && strlen(value) > 0) {
new_path += std::string(":") + value;
}
}
// Set And Free
set_and_print_env("PATH", new_path.c_str());
}
}
// Non-Launch Commands
static void handle_non_launch_commands(const options_t &options) {
if (options.copy_sdk) {
char *binary_directory = get_binary_directory();
copy_sdk(binary_directory, false);
free(binary_directory);
fflush(stdout);
exit(EXIT_SUCCESS);
}
}
// Exit Handler
static void exit_handler(__attribute__((unused)) int signal_id) {
// Pass Signal To Child
murder_children();
while (wait(nullptr) > 0) {}
_exit(EXIT_SUCCESS);
}
// Start The Game
static void start_game(const options_t &options) {
// Disable stdout Buffering
setvbuf(stdout, nullptr, _IONBF, 0);
// Environemntal Variable Options
setup_environment(options);
// Setup Crash Reporting
if (!options.disable_crash_report) {
setup_log_file();
setup_crash_report();
}
// Install Signal Handlers
struct sigaction act_sigint = {};
act_sigint.sa_flags = SA_RESTART;
act_sigint.sa_handler = &exit_handler;
sigaction(SIGINT, &act_sigint, nullptr);
struct sigaction act_sigterm = {};
act_sigterm.sa_flags = SA_RESTART;
act_sigterm.sa_handler = &exit_handler;
sigaction(SIGTERM, &act_sigterm, nullptr);
// Setup Home
#ifndef MCPI_SERVER_MODE
// Ensure $HOME
const char *home = getenv("HOME");
if (home == nullptr) {
ERR("$HOME Isn't Set");
}
// Create If Needed
{
std::string minecraft_folder = std::string(home) + HOME_SUBDIRECTORY_FOR_GAME_DATA;
struct stat tmp_stat = {};
bool exists = stat(minecraft_folder.c_str(), &tmp_stat) != 0 ? false : S_ISDIR(tmp_stat.st_mode);
if (!exists) {
// Doesn't Exist
if (mkdir(minecraft_folder.c_str(), S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
ERR("Unable To Create Data Directory: %s", strerror(errno));
}
}
}
#else
// Set Home To Current Directory, So World Data Is Stored There
char *launch_directory = getcwd(NULL, 0);
set_and_print_env("HOME", launch_directory);
free(launch_directory);
#endif
// Configure Client Options
#ifndef MCPI_SERVER_MODE
configure_client(options);
#endif
// Bootstrap
bootstrap();
}
// Main
int main(int argc, char *argv[]) {
// Parse Options
options_t options = parse_options(argc, argv);
// Set Debug Tag
reborn_debug_tag = "(Launcher) ";
// Debug Logging
unsetenv(MCPI_LOG_ENV);
bind_to_env(MCPI_DEBUG_ENV, options.debug);
// Handle Non-Launch Commands (Copy SDK, Print Feature Flags, Etc)
handle_non_launch_commands(options);
#ifndef MCPI_SERVER_MODE
handle_non_launch_client_only_commands(options);
#endif
// Check Environment
#ifndef MCPI_SERVER_MODE
// Code After This Can Safely Open A Window
check_environment_client();
#endif
// Start The Game
start_game(options);
}

86
launcher/src/mods.cpp Normal file
View File

@ -0,0 +1,86 @@
#include <dirent.h>
#include <cerrno>
#include <sys/stat.h>
#include <unistd.h>
#include <libreborn/libreborn.h>
#include "bootstrap.h"
// Get All Mods In Folder
static void load(std::string &ld_preload, const std::string &folder) {
// Open Folder
DIR *dp = opendir(folder.c_str());
if (dp != nullptr) {
// Loop Through Folder
while (true) {
errno = 0;
dirent *entry = readdir(dp);
if (entry != nullptr) {
// Check If File Is Regular
if (entry->d_type == DT_REG) {
// Get Full Name
std::string name = folder + entry->d_name;
// Check If File Is Accessible
int result = access(name.c_str(), R_OK);
if (result == 0) {
// Add To LD_PRELOAD
ld_preload += name + ":";
} else if (result == -1 && errno != 0) {
// Fail
WARN("Unable To Access: %s: %s", name.c_str(), strerror(errno));
errno = 0;
}
}
} else if (errno != 0) {
// Error Reading Contents Of Folder
ERR("Error Reading Directory: %s: %s", folder.c_str(), strerror(errno));
} else {
// Done!
break;
}
}
// Close Folder
closedir(dp);
} else if (errno == ENOENT) {
// Folder Doesn't Exist
} else {
// Unable To Open Folder
ERR("Error Opening Directory: %s: %s", folder.c_str(), strerror(errno));
}
}
// Bootstrap Mods
#define SUBDIRECTORY_FOR_MODS "/mods/"
std::string bootstrap_mods(const std::string &binary_directory) {
// Prepare
std::string preload = "";
// ~/.minecraft-pi/mods
{
// Get Mods Folder
std::string mods_folder = std::string(getenv("HOME")) + HOME_SUBDIRECTORY_FOR_GAME_DATA SUBDIRECTORY_FOR_MODS;
// Load Mods From ./mods
load(preload, mods_folder);
}
// Built-In Mods
{
// Get Mods Folder
std::string mods_folder = binary_directory + SUBDIRECTORY_FOR_MODS;
// Load Mods From ./mods
load(preload, mods_folder);
}
// Add LD_PRELOAD
{
const char *value = getenv("LD_PRELOAD");
if (value != nullptr && strlen(value) > 0) {
preload += value;
}
}
// Return
return preload;
}

View File

@ -0,0 +1,12 @@
OPTION(debug, "debug", 'd', "Enable Debug Logging (" MCPI_DEBUG_ENV ")")
OPTION(copy_sdk, "copy-sdk", -2, "Extract Modding SDK And Exit")
OPTION(disable_crash_report, "disable-crash-report", -1, "Disable Crash Report Dialog")
#ifndef MCPI_SERVER_MODE
OPTION(use_default, "default", -3, "Skip Configuration Dialogs")
OPTION(no_cache, "no-cache", -4, "Disable Configuration Cache")
OPTION(wipe_cache, "wipe-cache", -5, "Wipe Cached Configuration")
OPTION(print_available_feature_flags, "print-available-feature-flags", -6, "Print Available Feature Flags")
OPTION(benchmark, "benchmark", -7, "Run Benchmark")
#else
OPTION(only_generate, "only-generate", -8, "Generate World And Exit")
#endif

View File

@ -0,0 +1,38 @@
#include <argp.h>
#include "parser.h"
// Globals
const char *argp_program_version = "Reborn v" MCPI_VERSION;
const char *argp_program_bug_address = "<" MCPI_DISCORD_INVITE ">";
static char doc[] = "Minecraft: Pi Edition Modding Project";
// Options
#define OPTION(ignored, name, key, doc) {name, key, nullptr, 0, doc, 0},
static argp_option options_data[] = {
#include "option-list.h"
{nullptr, 0, nullptr, 0, nullptr, 0}
};
#undef OPTION
// Parse Options
#define OPTION(name, ignored, key, ...) \
case key: \
options->name = true; \
break;
static error_t parse_opt(int key, __attribute__((unused)) char *arg, argp_state *state) {
options_t *options = (options_t *) state->input;
switch (key) {
#include "option-list.h"
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}
#undef OPTION
static argp argp = {options_data, parse_opt, nullptr, doc, nullptr, nullptr, nullptr};
options_t parse_options(int argc, char *argv[]) {
options_t options = {};
argp_parse(&argp, argc, argv, 0, nullptr, &options);
return options;
}

View File

@ -0,0 +1,10 @@
#pragma once
#include <libreborn/libreborn.h>
#define OPTION(name, ...) bool name;
struct options_t {
#include "option-list.h"
};
#undef OPTION
options_t parse_options(int argc, char *argv[]);

69
launcher/src/patchelf.cpp Normal file
View File

@ -0,0 +1,69 @@
#include <cstdlib>
#include <sys/stat.h>
#include <LIEF/ELF.hpp>
#include <dlfcn.h>
#include <link.h>
#include <libreborn/libreborn.h>
#include "patchelf.h"
// Duplicate MCPI Executable Into /tmp
static void duplicate_mcpi_executable(char *new_path) {
// Ensure Temporary Directory
{
// Check If It Exists
struct stat tmp_stat = {};
int exists = stat(MCPI_PATCHED_DIR, &tmp_stat) != 0 ? 0 : S_ISDIR(tmp_stat.st_mode);
if (!exists) {
// Doesn't Exist
if (mkdir(MCPI_PATCHED_DIR, S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
ERR("Unable To Create Temporary Folder: %s", strerror(errno));
}
}
}
// Generate New File
int new_file_fd = mkstemp(new_path);
if (new_file_fd == -1) {
ERR("Unable To Create Temporary File: %s", strerror(errno));
}
close(new_file_fd);
}
// Fix MCPI Dependencies
static const char *libraries_to_remove[] = {
"libbcm_host.so",
"libX11.so.6",
"libEGL.so",
"libGLESv2.so",
"libSDL-1.2.so.0"
};
static const char *libraries_to_add[] = {
"libmedia-layer-core.so"
};
void patch_mcpi_elf_dependencies(const char *original_path, char *new_path) {
// Duplicate MCPI executable into /tmp so it can be modified.
duplicate_mcpi_executable(new_path);
// Patch File
{
std::unique_ptr<LIEF::ELF::Binary> binary = LIEF::ELF::Parser::parse(original_path);
for (size_t i = 0; i < (sizeof (libraries_to_remove) / sizeof (const char *)); i++) {
binary->remove_library(libraries_to_remove[i]);
}
for (size_t i = 0; i < (sizeof (libraries_to_add) / sizeof (const char *)); i++) {
binary->add_library(libraries_to_add[i]);
}
LIEF::ELF::Builder builder{*binary};
builder.build();
builder.write(new_path);
}
// Fix Permissions
if (chmod(new_path, S_IRUSR | S_IXUSR) != 0) {
ERR("Unable To Set File Permissions: %s: %s", new_path, strerror(errno));
}
}

13
launcher/src/patchelf.h Normal file
View File

@ -0,0 +1,13 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define MCPI_PATCHED_DIR "/tmp/.minecraft-pi-patched"
void patch_mcpi_elf_dependencies(const char *original_path, char *new_path);
#ifdef __cplusplus
}
#endif

Some files were not shown because too many files have changed in this diff Show More