From c1b33165377e8ccb97ebb8ae06a63b8b64687d07 Mon Sep 17 00:00:00 2001 From: "Alexey \"LEHAtupointow\" Pavlov" Date: Thu, 21 Apr 2022 21:08:12 -0400 Subject: [PATCH] Website (#16) * Delete planet directory * Delete scripts/package directory * Delete .gitignore * Delete requirements.txt * Delete screenshot.png * changed to website description * Create index.html * Create .gitignore * Add files via upload * Add files via upload * Delete .gitignore * Update index.html Co-authored-by: Grimet <97934952+Grimet14@users.noreply.github.com> --- .gitignore | 6 - README.md | 156 +--- img/favicon.ico | Bin 0 -> 102241 bytes .../full/logo512.png => img/planet-logo.png | Bin index.html | 22 + planet/assets/img/full/git.png | Bin 13631 -> 0 bytes planet/assets/img/full/heart512.png | Bin 6564 -> 0 bytes planet/assets/img/full/mcpiedit.png | Bin 2131 -> 0 bytes planet/assets/img/full/multiplayer512.png | Bin 2255 -> 0 bytes planet/assets/img/full/pi512.png | Bin 3584 -> 0 bytes planet/assets/img/full/portal512.png | Bin 7738 -> 0 bytes planet/assets/img/full/wrench512.png | Bin 1436 -> 0 bytes planet/assets/img/icon/heart.png | Bin 190 -> 0 bytes planet/assets/img/icon/heartempty.png | Bin 136 -> 0 bytes planet/assets/img/icon/logo.png | Bin 380 -> 0 bytes planet/assets/img/icon/multiplayer.png | Bin 527 -> 0 bytes planet/assets/img/icon/pi.png | Bin 1461 -> 0 bytes planet/assets/img/icon/portal.png | Bin 4498 -> 0 bytes planet/assets/img/icon/wrench.png | Bin 255 -> 0 bytes planet/assets/misc/changelog.css | 48 - planet/assets/misc/changelog.html | 3 - planet/assets/misc/planet-launcher.desktop | 9 - .../translations/en/LC_MESSAGES/main.mo | Bin 334 -> 0 bytes .../translations/en/LC_MESSAGES/main.po | 163 ---- .../translations/en/LC_MESSAGES/mcpiedit.mo | Bin 334 -> 0 bytes .../translations/en/LC_MESSAGES/mcpiedit.po | 124 --- .../translations/es_ES/LC_MESSAGES/main.mo | Bin 3130 -> 0 bytes .../translations/es_ES/LC_MESSAGES/main.po | 165 ---- .../es_ES/LC_MESSAGES/mcpiedit.mo | Bin 2647 -> 0 bytes .../es_ES/LC_MESSAGES/mcpiedit.po | 133 --- .../translations/ru_RU/LC_MESSAGES/main.mo | Bin 4082 -> 0 bytes .../translations/ru_RU/LC_MESSAGES/main.po | 165 ---- .../ru_RU/LC_MESSAGES/mcpiedit.mo | Bin 3325 -> 0 bytes .../ru_RU/LC_MESSAGES/mcpiedit.po | 133 --- planet/launcher.py | 83 -- planet/main.py | 843 ------------------ planet/mcpiedit.py | 363 -------- planet/nbt_utils.py | 67 -- planet/splashes.py | 68 -- planet/textures.py | 217 ----- planet/weaving.py | 137 --- planet/web.py | 37 - requirements.txt | 7 - screenshot.png | Bin 58910 -> 0 bytes scripts/package/deb/control | 14 - scripts/package/deb/postinst | 6 - scripts/package/deb/postrm | 4 - scripts/package/debian.sh | 24 - styles.css | 15 + 49 files changed, 39 insertions(+), 2973 deletions(-) delete mode 100644 .gitignore create mode 100644 img/favicon.ico rename planet/assets/img/full/logo512.png => img/planet-logo.png (100%) create mode 100644 index.html delete mode 100644 planet/assets/img/full/git.png delete mode 100644 planet/assets/img/full/heart512.png delete mode 100644 planet/assets/img/full/mcpiedit.png delete mode 100644 planet/assets/img/full/multiplayer512.png delete mode 100644 planet/assets/img/full/pi512.png delete mode 100644 planet/assets/img/full/portal512.png delete mode 100644 planet/assets/img/full/wrench512.png delete mode 100644 planet/assets/img/icon/heart.png delete mode 100644 planet/assets/img/icon/heartempty.png delete mode 100644 planet/assets/img/icon/logo.png delete mode 100644 planet/assets/img/icon/multiplayer.png delete mode 100644 planet/assets/img/icon/pi.png delete mode 100644 planet/assets/img/icon/portal.png delete mode 100644 planet/assets/img/icon/wrench.png delete mode 100644 planet/assets/misc/changelog.css delete mode 100644 planet/assets/misc/changelog.html delete mode 100644 planet/assets/misc/planet-launcher.desktop delete mode 100644 planet/assets/translations/en/LC_MESSAGES/main.mo delete mode 100644 planet/assets/translations/en/LC_MESSAGES/main.po delete mode 100644 planet/assets/translations/en/LC_MESSAGES/mcpiedit.mo delete mode 100644 planet/assets/translations/en/LC_MESSAGES/mcpiedit.po delete mode 100644 planet/assets/translations/es_ES/LC_MESSAGES/main.mo delete mode 100644 planet/assets/translations/es_ES/LC_MESSAGES/main.po delete mode 100644 planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.mo delete mode 100644 planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.po delete mode 100644 planet/assets/translations/ru_RU/LC_MESSAGES/main.mo delete mode 100644 planet/assets/translations/ru_RU/LC_MESSAGES/main.po delete mode 100644 planet/assets/translations/ru_RU/LC_MESSAGES/mcpiedit.mo delete mode 100644 planet/assets/translations/ru_RU/LC_MESSAGES/mcpiedit.po delete mode 100644 planet/launcher.py delete mode 100644 planet/main.py delete mode 100644 planet/mcpiedit.py delete mode 100644 planet/nbt_utils.py delete mode 100644 planet/splashes.py delete mode 100755 planet/textures.py delete mode 100644 planet/weaving.py delete mode 100644 planet/web.py delete mode 100644 requirements.txt delete mode 100644 screenshot.png delete mode 100755 scripts/package/deb/control delete mode 100755 scripts/package/deb/postinst delete mode 100755 scripts/package/deb/postrm delete mode 100755 scripts/package/debian.sh create mode 100644 styles.css diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 49a16c1..0000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -**/__pycache__ -__pycache__ -*.pyc -**/build -*.deb -build diff --git a/README.md b/README.md index 56f610c..e02b3e9 100644 --- a/README.md +++ b/README.md @@ -4,158 +4,6 @@ Logo -

Planet Launcher

+

Planet Launcher Website

-

- An interactive launcher for MCPi-Reborn -
-
- Try Planet now ยป -
-
- Report Bug - | - Request Feature -

-

- -![Downloads](https://img.shields.io/github/downloads/mcpiscript/Planet/total) ![Contributors](https://img.shields.io/github/contributors/mcpiscript/Planet?color=dark-green) ![Issues](https://img.shields.io/github/issues/mcpiscript/Planet) ![License](https://img.shields.io/github/license/mcpiscript/Planet) [![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fmcpiscript%2FPlanet&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com) ![Discord](https://img.shields.io/discord/936428193521487953?color=blue&label=Discord%20server&logo=Discord&logoColor=blue) ![GitHub commit activity](https://img.shields.io/github/commit-activity/w/mcpiscript/planet?label=Commits) ![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/mcpiscript/planet/latest/master) ![GitHub last commit](https://img.shields.io/github/last-commit/mcpiscript/planet) ![GitHub Release Date](https://img.shields.io/github/release-date/mcpiscript/planet?label=Latest%20release%20date) ![GitHub repo size](https://img.shields.io/github/repo-size/mcpiscript/planet) [![Crowdin](https://badges.crowdin.net/planet-launcher/localized.svg)](https://crowdin.com/project/planet-launcher)![Lines of code](https://img.shields.io/tokei/lines/github/mcpiscript/planet) - -## Table Of Contents - -* [About the Project](#about-the-project) -* [Built With](#built-with) -* [Getting Started](#installation) -* [Roadmap](#roadmap) -* [Contributing](#contributing) -* [License](#license) -* [Acknowledgements](#acknowledgements) - -## About The Project - -![Screen Shot](https://github.com/mcpiscript/Planet/raw/master/screenshot.png) - -The Minecraft Pi: Reborn mod is a great addition to the game. However, as fun as it can be, there is a big problem. The built-in launcher is too annoying. You have to type in every single field to just remember that you forgot to turn on a teeny little flag. **Planet fixes that.** -Instead of making you type in every single field, Planet lets you write it one time, auto-save, and forget for the rest of your life. With Planet you can even edit the world names and it supports the newly-introduced Reborn AppImages. It is also maintained unlike the other launchers. - - -## Built With - -* The GUI is made using the PyQt5 Qt binding for Python, and additional widgets from qtwidgets. -* Big thanks to `pypresence` developers, for making such a good interface to Discord RPC. -* Thanks to `pyqtdarktheme` and `darkdetect` for awesome Qt theming tools. -* Pillow was used for skin manipulation -* PyNBT is used for the built-in MCPIedit -* `click` is an awesome interface, unfortunately, not to handle autoclickers, but for CLI interfaces used in the texture pack tool. - - -## Installation -#### Prerequisites -* [Minecraft Pi: Reborn](https://jenkins.thebrokenrail.com) AppImage or DEB install -* PyQt5 -* Python 3 -* `pypresence` -* `qtdarktheme` -* Pillow -* `qtwidgets` -* `darkdetect` -* PyNBT -* `click` - -If you're installing a DEB, all of them with the exception of Minecraft: Pi Edition: Reborn will be automatically installed. Please install an AppImage for the latest build. If you want a DEB, please consider checking out [MCPI++](https://github.com/mobilegmyt/mcpi-reborn-extended). -#### Installation -###### Option A (Raspberry Pi Only) -[![badge](https://github.com/Botspot/pi-apps/blob/master/icons/badge.png?raw=true)](https://github.com/Botspot/pi-apps) -###### Option B (Raspberry Pi Only) -[Logo](https://raspbian-addons.org) - - -Install the `planet-launcher` package through APT. -###### Option C (Any Debian-Based) -Use [our PPA](https://github.com/mcpiscript/ppa) -###### Option D (Manual Installation) -1. Download the DEB from the releases section. -2. Install the DEB using `apt` -3. Follow the on-screen instructions - - - -## Alternatives -### gMCPIL vs jMCPIL vs pipan vs Planet -| Feature | Planet | [gMCPIL](https://github.com/mcpi-revival/gmcpil) | [jMCPIL](https://github.com/mcpi-revival/jmcpil) | [pipan](https://github.com/randomsoup/pipan) | Built-in launcher | -|---------|--------|--------|--------|-------|------| -| Profile & feature saving | Yes | Bullseye only | Yes | No | No | -| AppImage support | Yes | No | No | No | Yes | -| Legacy DEB support | Yes | Yes | Yes | Yes | Yes | -| Official MCPi-Revival | No | Yes | Yes | No | Yes | -| Tab icons | Yes | No | No | No | No | -| Maintained | Yes | No | No | No | Yes | -| Supported on Debian Buster | Yes, some bugs exist | No | Yes | Yes | Yes | -| Discord RPC | Yes | No | No | No | No | -| External server support | Yes | Yes | Yes | No | No | -| Flatpak support | Not tested | No | No | No | Yes | -| Pre-made profiles | Yes | Yes | Yes | Yes | No | -| Easy GUI navigation | Yes | Yes | Yes | No | Yes | -| Skin support | Yes | No | No | No | No | -| Built-in NBT editor | Yes | No | No | No | No | -###### Conclusion -- Use Planet if you want a maintained and a feature-rich launcher. -- Use gMCPIL if you are on Debian Bullseye, using a DEB install OR want a basic experience -- Use jMCPIL if you're using a DEB install on a distro other than Debian Bullseye -- Use the built-in launcher if you like to fill in things constantly -- Don't use pipan, it's a dirty prototype, not a working launcher - -## Roadmap - -- [x] AppImage support -- [x] Skin support -- [x] NBT editor -- [x] Localization system [![Crowdin](https://badges.crowdin.net/planet-launcher/localized.svg)](https://crowdin.com/project/planet-launcher) -- [ ] Texture packs (In progress) -- [ ] Mods -- [ ] Chat logging -- [ ] MarketPi -- [ ] World generation from seed - -## Contributing - -### Creating A Pull Request - -1. Fork the Project -2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -4. Push to the Branch (`git push origin feature/AmazingFeature`) -5. Open a Pull Request - -### Adding a translation -[![Crowdin](https://badges.crowdin.net/planet-launcher/localized.svg)](https://crowdin.com/project/planet-launcher) - -1. Register an account on [Crowdin](https://crowdin.com) -2. Go to our [project page](https://crowdin.com/project/planet-launcher) -3. Start translating. If the desired langauge is not available, start a new thread. -4. Patiently wait until your translation is reviewed and added. - -Please don't add fake translations, invalid or rude translations. - -## License - -Planet is licensed under the [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.en.html) - - -![Logo](https://www.gnu.org/graphics/agplv3-with-text-162x68.png) - - - -## Acknowledgements - -- [Leha-code](https://github.com/leha-code) - Creator and maintainer -- [Red-exe-engineer](https://github.com/red-exe-engineer) - Active contributor -- [Bigjango13](https://github.com/bigjango13) - Multiple fixes - -### Translations -- Spanish translation by [BasedSkeleton](https://github.com/basedskeleton) -- Russian translation by [Leha-code](https://github.com/leha-code) - -### Additional Credits -- Heart, Planet, Pi, Steve and Portal icons by LEHAtupointow. -- Wrench by [Santoniche on OpenGameArt.org](https://opengameart.org/content/wrench-0). +

The website for the planet launcher project. (Under development)

diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..85d4804546040bc14b0bffc3786a58d19c18dd58 GIT binary patch literal 102241 zcmeHQ30zf07oW#2q?ov*l%Tm{rLu?$D&~^7Z{)t@0)nQdBIdr7h6ecVeel#uD>W5G zEVs{nNxPWm8P%JLkcD+;{K8H|Qh8=Kg+v?t8qsb7$r(bLPyM8A3F~ zf#9Vfo+P6jA))Yj?%e$E4V*M&fHNUMK?UDmCuCkF4QbLO|NHv7gly;wPkI)7uSiI* z=^9cI?wH>gJ3{U+){y9)-QOthTmy0<<%2u5?~T7Aobc6yC#{Efmis2SecQg%Qg5am zUGhoTONZ`UpZ&}7<@Lniddc0E)>#wcRerns+T-&+= z-zBw$Z7!b$Tu<{ zo8^*K-}VYlzJ6y;t>13bo-P>~Eib>A+GSu;Ui}+;^VVHizW0|?_Ct~$Z0d9U;`>{( zVn&8#-rFC#WR089eL`m2nmvEXxgyCO$vw{4_Laz0-B=bQ=j#@A~u zojo|ci>-6eN2k(460aP&_3nvOmyKz+CS7$nm*6vK@HY=OR}IPd`NZXq$M!onqQQR6 z6OfZs+;pmQligDr?MR)Ne8?-&EB$7G=3&&-F~@Y5hxn#WX}BV7xXqUBgHFx6lQ=6a zb=TQ|X?{%ifXFupN^>b~+o!PryNk4TeIx;lmc*dnR zN2<^5y*Tgekd$uMgU?j&N*0c~c`|kXxUWtPrdh5TGv?-0c+U38%fF?b`)31_lJ9=B z{_yT`6K9>Bn9%LurXw>VUb&`w@aehSc~!4m+1oD6f5PdtM_Omh`ZMcv?#SyOC9XgH zeqM*PU%Ow=YCKk~x_$K#n;tnoH~Z+FB?B)fpPY65kAX|}-MQO->#*#V8HYZvI{RUx zPo|uE@5?o}-;MJ+dbCTA8TyNzSEMAhtRF@ePk*>`&M$#m)8|)+*f4(Q&{@Me4ouk= z`NbNCu^kt!>9peTgOy&Xdv~AiK4)WvR@3_5aeqP?1fm^$^Ze)TS);oh+3l8`(lBeq z_Ep&lQ;+PO7&+jh-}KtZ(B$szQp??F9lmbp$J+?qIM@c0ci+Bj}pd}!eD!!vF7 zB!97}hTW&>3vw6l$UHV+-PzMsha}H9+IUl9qtr|LZPy-kIP+Qm-IFHtUAOJ?qXUJ= z1<7l|hX@%m7 zz160_GM=!SD>m6pPQDr8@7C_lU%%(vvYT@3#TE55_tx+8Jf&}zn_9Emt;y$p?$jv# zw?Sd!8`Bh@>1Vz<*v~6<(CqO2d9|;tyq^)V>-g1St0xeFx_uNCv7 zI>qho_0qKs-u18QQxZSl<*=$x$cb4QU32zC#_ZEb4nFs@Uw-h$ zTm2RvTCrn-{mMHYAt5Ic-~A%$$Gh#Gu&`K3_b$^<25wFHA+Fl=YfC5pdE-j;qqomS z?APS{=VbQssOy{F{Mn`JjL3oE+YW5|p=-_`iQV_ks{g5P#Fl+`((9i{3pl&nziQ;0 zC#o;6);+fF-t>K%hwjOr=vt67`*QcRo^zv7@5s#)H+}QP$ZUOj{M`X*n=?{2G+L38 zxTAmA=1)@gSKgj@^8414JG&hn@LlhaZNX>Pe!8~PoSFTm-yV`tzWMDk+>v4GviMVC#xwvv=M-e_{6i3fGoj z^e3J#XvqBMAM>_-V7ZjgM!mzgjM?}@@b%oU8eZyDCFFYU360kedk$>BH>}Uim7mrV z2ic#0Z%x$4wiAYY^y2-D2@^b`e%U0124uW>xaIM!!)6TIx;r#!WWVdr-)ykxsEhx` zUrs;FuDf!3=Ua{S{%v+8Zk^Not;X56-S;F_O-`>Sob``ub-PXYZu0R|*FBj#s{}Vn zA=|#9YhAY;4V;`fv!hSsk^S%N+}zkZD*cAr?X$a92dtYDw$f|Jjvl&g*;nRlJvyfG zY}?1LaY0LMPc8S~Z{H1`aAg01Uy{!5+iV}a=;L;`f9sI8$s;$)Ci~1y|833s4#_Gyg6s@`!As;#fF+qnLHe%js|3_AG0;ar&1vidnb3oc`8r&$5;q zr+-2KZkENi)O`j<6|S+~5L{?={JlFY3IWRCQ*9vZqwlYn}Z1-=39G&rD& zMRbBRqgrZ;0Rm|)qhkXSZPmKxwo?ZZ(SbX`k(86M)h0j$+-TvuI!^OEp7Qn|09;cBAokrUoIcfhO)qUTu;h^ zx-vbhw%|nn27et3s6Z$S z&<1<}{$Cax5?-Yn#WqYJ`WVWDaigC}`m@j;(;N}Km}rkY!s%ajq^Ru{l_Bvy#I$jg4=)G{wpK%|HT>qarx)=9}5p~`;Xgy-2N*O`wwkJi+H_( zCVFT~8_I$Yrq!V<1aFI24rz{wb(xSV)}(iY3QV{!I26Qn;=Jvn!Q%VFG?-5=#DB5i zTj4djR&2|FAn^S~vti~$N&#i7JMT#rOU!PjpS;HgwKc_#Je=h$lJizro*Z;i# z=lwqm4{-aB+kY%P!0mr-|ChwLjx|p{{^R3+ma#vk;p2bq|9RH@KOi8I19_to?LJr8D&Z475l7*bK4Ci(n557LfSyKz{}#ybH9CV?$sIPJb)&6{kO& z?4yogmVHcXWjd8qew_ZC{w#ez*Z*ApdH-Jw9^m?)+ka(%2YCO_`+wg5v+)48|M~cz znFq>%?#D6Zzg_=#Z&`_cCp2b4sCCl_|2n4^fmE%8)L;o|J{uXI3@kcnPKhvJdc=j5roR(BNYs)|K z0H;6Op4y!LT>qDpT(joO<)6*|TS+)N;{W<-){m1P;79Ri~|MT%* zY5ISfw{)i;iXEBoiO`CEA+%t^Rc&Q@Ra?a(ZfRX%KTn7$WdPdgtTugd(y`kAnSwLD z1$z}(0{RK3>iWRB29^;L9}d1h9UB4ztnU9K0k2S^gFOfsP#@AXV}Ku|*(dli;kZzb zW@*bY;elYs6jNMMe1i5W+gVXIG*0ZwgfQI*i2Y>TD=4rzr$2LCx%FcZIsLi(bNRQ- z16==e{m=V<-v6`k0Js0R{m1QpZvV6J03ZMH@gJ+Nra1l|*0g;5XW8~g{}8wTp9=fm z;@+=@{b3t=L>qj7=m)d_*BNiqDhVH0L}f_RH9mp~lXZjWRxywXDMDR(RjAGc7Jo9P z!T8_e$UnmrnzomTsC*l1+*Z(ZGAEx2@pWA;7Jiz;Z-v9Id zpZEVPJiy2QrF;H!$=H99OuirFkMBhv@cqpailcF!lm%i~wKC)XbBYLI zqCN5m8|{%l*y-OE=syT(YYE6Boc_#iVrKs@r$3kf($xQ4{!7>Xb#Tj@ z{44b9v7kc(O>x%Wv$j!b`*cfNr(io-*QPAF{IIP2vTh4-`dha>%UW)n{$-6~)-5lm zzjfQQtmVe(U)CsQ-STq!Tem&ST5g>FWsPFiEib3Pb=$M7<;Lk>)+lD(@^boHw>=HH zQM?Y|N7&y|x}K`<_posJmj@Q`DgS;zDlFciP5F0OgA~6#WDoO?yamc!3vl_DldSmi zuWG-iUH_}f2VK?yY=ft>e{BFI3j)jqXox5Lg)4}VN-p^@d@s2_8z5_I&*@>FW#!`a z=k(|NZ(SZJZTW8j$_L9}8NK~3kTLD49IuUON#}&sQz3b@4OL>xXbn|jNl$Wt>D~F| z!?IfY>IWIJ@if*w9?mtBp)Ks+w?p(-!Q6S8xE52n9~-s@^ZNhi2eoh3K!uvqy3t1QLrw6Ot~>1C*;oaZb=R2Y+ejxG*|xpbkj3H}l)z+TI+&xQi#&ffYP_D{ky)a1Azyg)aKZB!t7GiRqZ^Rc@AD^C4? z=k+(CJ@NvlKj(j??Bn;RK>k(Z`FTBUF02`COXb)S`5Zkgyr{wz;B6)D3NG}X;Anze z!JeA4^~}{DZNK|kdlQ@yYS2~U>ne~0*gr{$cgIo^G1wG+Iu+$VQ0YpncRIXZj$2v> znxl180ng7=0_$n6UabGi)!NZ}@IE5BT! z>(A*g=Y9PAZ{q*;;FG)qI!KO8kjY$V2PIf_8msJMIy{#{F8lcTH0VE33{rt4%mDdU zz##u0fc(o4F^pOMzZ^~AoCh^1{7(hOvqOtre*yHL3@3$ZbdlIX1rk3V#{UW=pzez^ zMZ_pxe@6Y!>96K}lm`{>gnghexiC)M8MhQjPlRx&*?Acef-S%|KB73O~cyI zj^ZE_^c4rt@nT;UP6~BEH=E*ywxY^@MV)R=ud()@4+LA9rFBwazSx5muiQ)G+v8xI`aQ>Id zFB~zF*PpTf#BM<@M+ESH?ec{{KhiUlspqQ_FoR>HsB(e*jfsI*z}=|0u(AdM&L5^D=UH z!uJhgOS)cx^FmdV*e8sG`YFW||7y-oWRHJGUxU*BppOMR zS$%eoxifnHD^yq6y0}IH3dIU6tF5IY0C`%8}{9i_TPEb{Qx$ow9iA)_kvw~Jgj{$U2+!x?bfcplpj5S zWhuJ-jlbi56_284!SA?FL=(VpfN`IQI#%B&!Wpv91SoYH>vwz>^C+#0m%rrOAKTbG z>})F&NBc|wMQ8x!9BobToFkz{p}Zr>bhIOti_HJY>jt~3kaPg@sTx@J*dcjD3o)nw zXYEkBG0vZU8Rut2Rt(JV%a9$Tp%VUDtjWVVn9V!?efVxH!{c7~Y!<-0JYu_J*$dY5 zJI4>FTObxyzMfw>H!t^JVLgyGMdqLX?tfePvA+4Rx2>vivd;q0LO8(Z0=PO;2WWo> zXn#aSX#X$8=CJOrnGu%SzpAS(b#^KQfxKnNBKCGwjpeb-ODLzvbI3DT?yO4Dy=kS` z5F;vR$5IKEv=MY7#OX~gKosl+@w-r)rU{-#C}Tt9^|=Re=UZZYXi|)y5oGBkYQ&Q9 zSQkTC3d)3K!!j0i;cqBU2A;$=$Fj@UcgxpwyCsaLQ=sh9n(i68KJ<)G%VaJ0qs#9= zcL;taYqw3-Y-3%J9)l~b%9-Du7`PJ(XOQ8Kxo((`-1p32F z$zFNh)sBY82GO_0c1G+Ly{Uw~VpDnz_y_q$LUH*g3HT=w)=x`N@sDc-;2}o|nZ(Yn zvQ*xJyV3r@vY%UQpLaRNo+ADSxT|$GL4HgNtQUfHkLF?@mHe*!E?@tHv4ktdwiNf! zkU$b3#@h&3|0l|@bXFeJ#aLb_KYljK2evzwTUz6F9po!pv9?jUrcqfwOW&2{{{+@< z%GWQd*DT7`D`H)c7P2zSKR*lQN1nlUm!Mo*YR&e~1pfIL_-7gLPd?fK@60uYe7z_` z`{%?Eh*2nnYHf^}7&c2hBmZ5#_A66xq94NESs#GSErG;O0DD{l#OfOMK`2=BB`$d+ z|G-#+V)^B3-2RF3%h#`&u33Y6;QXMpW{sC$75^va4VKSJ{#gS2W3BdgcC?}UVqY_^ z5Bgqsjs8#TZn8E=xh{yM%aZ-naJ`RC1pYU%hfH)S zFTdq=dnMWa<$!;7#x|jQAWj&uPiRWhv^D8j?Mp`7hxNu1a6bSnkDNa&eO8t~9ry=% zNWxec&y6d<7+rthADx1Kitc~W|Kz-MEOpV1H=sP+Tk77XfdvSF`$4GJLBYp>@1TAe zU>`|qBC=r}hrE0&b;C9&ge{GMbq}!xh=v$!Cq3wVX)hcR;w&CvKM+S4Yc74;xW2;{ z)^YeM)^^C(bsT`YWN2NC<;QvyxBT+)Jbsq1+gPkBfAq6h{z7}y(IJz>MC2K00Ccbg z_~_mN8cZ@`m*7t&>=v5Q+u91S9{)K5?!x_V7(YIg!IC^Yy8XLTCvg$j(9rIPr3=m3 z&&Kf!G5BMl4#-Cc*Yeaxh^4lA(TH*h3#f#O3G*Nxz7LJp^)g_Yt_MwpHB)H@9}xP1 zYO7-4mGx1^zAux-y^FD(sFN$id_H>o0w%Qa!nzcW39zpa&~^eHAVC(>?+9^PF`z57 z;I~5PbiKiURo5hzUm3%1sr>S|eO>Gu)CqhDP$mgjHY{UN7cc)))c)wFb%~v15+ALO zi~a)omwebSTSNONOgF|uE90O~!CGsSSGf;e8T%}cdp@+-gSt4G#K#qjf1b4b$~b0T zeuHkYB){n(-1$Ch@LfAcgDrtPQ~)Bb1YIm)74XhlBkY&0rXj#T{S)3b;<(^Ne=WcX zp`nU@vOd&MIgn>0>|ayQglzJ8Gg7ug5ujw88 z74btT`_e)vVp-*Jta>p>Reto@6q$eiyRi(9dp!%~M|mi;k>sDzm$x)J&p-pD1400M zMOavXMKmrh$Otj6HT^5bfg;}^ZY{Pg>G@Nn8_K(Rpf45cAlWC5z)uP|!hE&_C-{u~ zBHcV;z+Dk>rNzwne)E_$oB;rPbK>w%bi|H1cn9M#wun;^v{ z91$BD;}No9eo2Z&ko*?d4$>U>A)%2m_Q2?43>(f||9|-X1{wGD)Wr1mv7v~0Q)zkI)igTkwHEsRePL=XNkMASG+{9emPt(WBb z!O$-FUTJfxk zARkGxEXkMD&PCk~^@n}$a31SRu@U&YTNyy&r@*`?AYmrdAAQ~czox4C4*;Dh&2O5_ zZ8FZw%HN+PHZabe8Rsow>}{N{^z(k|-rwG*qH%sMRa?tAHz&~n`<9~GUi!a8tJ|<| zi?sKiH1F0a9{69{W6uxvMp5uzX}|w9pBG?Xnhpl66ar}?_|p+rwQdI70)IOC&=Ez+ zqE!D(p&Y#hdIB*O{Md+|@nfL=IA;X#^HtTK_|`Yhuhf;ztw{4Kze1lP%?CXY3ik$+ z+FpJ~nn`_;G;i{jZUpdO!Py69_`ek2Z_vM_R&}tipbY@!r-oCvgbxgOJ$@`jgzE;; ztzv)yDKHms70!1+NHjtDliC35FZqHJV80(kXe7jNV7(EwJmmUU>W7W}FA0OShzh^H zPkf}&pZ^`4VIl3yBl+>M9Om9H`R&JyGLdlYb)(b9et7odNX>`%GxS@JtCd8?|N=O0=BQhLA9{&eWt>JpX#LBb%`1Tk$c)F1t- ztEdvmHM)-p* zXYy?E$6xTc>ME2^b=xZ2+8lqYGA!mlO62|Y0Im(QHLUKs2P?o32VlXN62&YlQ9h5~ zrTpDvW*#J7zycB0Q>Wd;H&{t`_hkrb#4Sy)Sx=YEEasSaHJ$8=5#m zL+5uU7mdHG*M+yRt63@5!Mi54_o+u;itIv%6r58h$^O1cjtj6bG_O50ao8h<&&kd5!$-%w{ z&p|p5`@ZA3M~1%M2V|u1`NV0RZ7yz_^c?*WboCX84aRdvq;p2_d9)eMz+M`7ZiwNG zkf~s^bZalQ2mKt{NZQxmoDGD1VM@Wi`-VOCabNw=!gDk>j>xyM4feGeyBeQA0p-WI zGlSin05Ptih2zHeMtU0e)y1|_mI1#@`#z)HSw|0Xv0J{LKd)`5Ku=fdw_gWf+2=ZxS!g*g7heF!lx zY)9N<&^vMfv|lHw{g8%<#0T{_*nki(Faq}dllJ+;a!6xJ)Z=J3_pAC~rk!u}Wg-HuHm#-Wh@_ljfj7g_aXT6qsKs)1} zGUp*?{D(<4^v$Nk@T^x&M + + + + + + + + + + + Planet Launcher + + +
+ Planet Launcher Logo +
+
+

Coming Soon!

+
+ + diff --git a/planet/assets/img/full/git.png b/planet/assets/img/full/git.png deleted file mode 100644 index 8d5d2a0843d61176e7adef8301f5d8a745c28273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13631 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

+;PvkBzwfNymNXd^w5^%d8+ts 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 ti@yT$rw*oojn=P5`0c;9 zq)$RZwm}|^r8k~O*#`gd{>%67{m#AjoO{mi{LXj3@7xqC3loTtq!0iAfRIT<8_phd zEI@wF`fh&93;^H_kG8uKYU37x2nr6Q`uKYyLZgB_5uTAgQ~)4ys?NbF_ieQ>`wNOH zh}aPM@HJ|X(dBXo6K9SwazaPG^-ORRtOFU&H*C7S zyrFA)5D6szt~%On;u6uv=Xs>1s`7dAQ$j?Wb_+1KppV!+)0^rTp}+T@-FSWU1_LQG zp8iS{rOeF6y=VM2IQ7tp#v&OMFJ~Qm_{_6g^wQ;Y3%C%e7c=d8u)T;*4OGYl$#n#h zmLyS`@|mAP({Ddjdj&9ln{k$)s2c*tidm`oUBRX7MCtX}i>4O%qvQiC3urb0O<;R| zN3X(<;S(LJzRCzJ3vB+dwMnHAU)BScbo5Si7ce1@5KA4GEacQT`O;iAE43;AO3g1c za(EF$&0}AL?LB)p2a_zbNPYSVKCg^;G8U|1d|!zQ4_nptwi_$Ia8q;d%xP&n>mSEpYUnsPQI;9tM6fqusK4e%dOQY#CRh3JR67al`N3Kh`=BM@NbJ}jQe#tk%vGE36Zdj#krT0X z)bUHs*tKftJab=fezta{PdIGMInhI+H738hmyxk}E*rTmn_Uc*U18P4@IJ6I2~8>$ zaCj5CZtzr5a`1l137xsSPEkx zJw_&$z_-zt^hHNjeQo^h+v+=!iud`@j!)LOS0K zG8<0%wqX!Ve_|_AxJ+uJ{0B8+G~mN~t&_+fL9WY=1*QR2NJX9%h)M@Z?!Zt>O>{*m z4V_IwH}578qx%=q?VP7ZRq}4k&35U}c=%rXk5%|qf z6s#0q4Zj+u-ns=U(2`eD%b@vnb!GO}#-}yc3)j;SJ6sFPi{;C5XAaRy&yzRiTV&Q* z`m9+ld~?5+vX-!STL9IDtdU27-=aYA;yAEjzT>+h`HHW)9W3blnhVWqw|GBf>j_^P z7gttfu0*BzYeT(uAE~14l(MHPPkNX=9ttk>ovgLgzQ7_gHIN?0mx|f!v3749?KM5w z+*AX#g!b8+SH;LO8~dZunlINi|J2_FA^BoG^VhVJvbyDR5rzpgEULQOn0EOQ3?wmS zxwqp{Pm#;R*9(bX5VMNspZpPj)U|%2ZecMY4@TzJM`vtmaBs1=>k@yDk#?i*+B6Lezkhtf+hiH7Jy)x=-*!tD_4T0b?!^V+MX7F&9^uHdUk4G zCl=5&YQM*?qr+=#_Mn}$$qI@HJo?RNdz)vhD%ks5$#XZ(zrgQqW^BHX~Sz-`#L| z>8=iPFSyOc=+tSP?s0GSf#w*h@Jl4SCG&rLa#gh-7q0*Zi^V73acxnDJnm-mn#_2n zGuGB?(9CNsC)VSV8qZEkekcivu~cP*?d7-T^pm{DnK_D5+=9Gu2s%zayU23bVEWV6 z?Vu~Hp$Lq*e~B`TmxkjuM6_8heo6jm>*f}Ih#4pJp~d2x_rIG2h3_9;=W!`Th#Y&# zBBN;^tF1vFbH5~+HJ*;PWk3cqI)009Ze6pN_$tH~$8i${N@UI2wfJ}RU?XB0evyP1 zR{T2ry;fVt^&c=Jg+gBU=Ud&|wIvnd|K%V;LPV$auzU9|R?#4#_h>i~Ah%#bI$h}8 zF(`*&935)Y#s4>1Aa9%|9<^nMn!q`nHbj z0jk$fcBp?Ktb9zKP#ltxp*5%E|JhpC?oi{(!^v`7Lo(5esJ&?qgskOMC6!JZU!bIK v;{Sh5>n#5Tu1N@F#FQRqp&v6fbRF5{A`CP*r3-dE0&oV|$bwjpccuLs+d;~8 diff --git a/planet/assets/img/full/multiplayer512.png b/planet/assets/img/full/multiplayer512.png deleted file mode 100644 index cf67fac5606b3c8f13a545a1a095a17704c2e0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2255 zcmcguYfM{Z82(@k$dtsm8H`iZIE~Yg9YBE%!%Vlf` zi&G+Q7RO~>Td}sX4Gt?D%7&vbejiOj247wWTCuv6dhF@P|L?`{()IFYo(4 z@9j&zy0}=1&w)1%004Zb(WC?b+?_{v;JwcYgR&#TPVmSl(ue?be)H0cto=^?ot)?d z8UXwc01(#z@Z5PNUIm~O0>H=sfN%`}-{NLXd^iAZb#bSY$mQ9IB34=%Glh3HrkZ|6 zkQ|vuJjS9D3W-N^$OHzNkQw&jcbrslCi&_Y372!CFJ+MH(#iE1WO35*OPSGZYG^(s zwCHqLEi0|Psz_eVY7^zPia64mQh9ZeOq4A>PjCG)Sri|V8}ZRaHhp10x$(zs+f=V* zMrWKHT%XWvj3}*>eXG4U<`fOglhEj`tJX&<>#)Ky++iA0Z|FKr+IH*xX6r+#Np*3l zt?XVU!}##_g0{mvuEF|$Uh0!?J-V~pB{2`Q*+&$ZqH6v|>8iXEpBQl1)|}-Zas#@X zjVs+P7F}n*Z}g0K&`CUr3)Tr{6zEAFa=r zX-FRB(^i^FR+_j|U$Z;&;zzhidOo9*8TUYxtglbieHGJlj@rdJsmLe7CDg$(^4;8U zhr44p!sqBH0`I*p>}9J&xT8J4=U`K}O8 zw?E^|#dtJcfT!X*%z~XkS_C&k*GM?i#})iej@LcJiCxpkd$=?Rq4Tx&iZw*yHEyp^ zyY4j@Y|(!I|kr}CItyj(&~Nv;z>AQTwr4}Ibv2qgs^Cjo&W#< diff --git a/planet/assets/img/full/pi512.png b/planet/assets/img/full/pi512.png deleted file mode 100644 index 7bb4eaaa6db6be192d8a8ca83bea97d9897e0ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmcImc{tQtAODRsLs^m#NrT+%WQ37SvNdFz7!8KG#AL}fvd@gAxKXz3dz-Rk&6c%` zglUF1Ya4}`iWW1WVen4(eeZqVe{TQ0?s=Z`obTD5bH3m6`F=jL@Ak>hq{v-?=mYAqs2d6H@xE9 z)MX|_E7Hv3cYnCFWz4^&^Btx@nL;Nit`({D_W5GvubKLf5-|Cvq6T~TJA2P&m;WqZ3Oqy{P5fCTe%0*^snR@8R&5eNW%LQlm zLio~@!*~afyo~fZ7V|p(+KLOB+D_3c08S|+$6BTDI;W&Go~qCZ`e*%mvq3Kbj(@t;_lwZ6vlVk<)kYe*Fb15%XE4IpF^C@`(wZI)X%Xq1ofl zJ>S1dO)jjVD!X2EUU_pW;AZo%^Lw>#;%kTatT^G_C6ixuKXw;|R7O&E0{}?g+t}C^ zX>9x_;<-34EJ~}h=&{|G(Dm?^+$EHBuWWq5J{JK#bq85KG50E5h{X-@WTXJnVo5Ms zl$a|NHzWTY*hSsc)z{1I+nu;I8%W)nj=Jf2#Lh{5@l?LUm4(%~p_xI~$lF$sN&Jy( zgYAq6q7;pxl0A}Bz2sB8&Qg7HTPuU=fXS2)I|p&cqvsPGs-}fF@=NiPDbH2K5m%dM zwRQYLH?;H25XE$zBD>Ha|FsG=7i+z~9NTw0WcocHgiJMz4g z{Y~x`x(J!>NcVr9){J39SV#_f$Z6aNG*`B{k;tC@(wN#1`TRvL<5!XK2Tc{nWO~-+ ztH8A@0xA=Nn4zxean0FL*jDtc#2#nc2=84!LOm}0va9-_qvVsfVJj4Pf4@#0wij&v zdp2}$dWQXP`%Yh0nGwIRC*)+$PLS9wGi~qFu{@`gX0 zcg`?hh)|z-{=#>hCjI)9J1+GsIylho1 zjx2U$T?d0&KKRw~cyyl88imZD*(ePrnpAXT-sYq8GU5<=Zb&=;SZ8{wPtm=Lv$`Cm z8IzKw&II}z&4J8ws-Jgz?)|_1gKBpU*C;XOVH)*ALF!5OsPNF%_mj^S7Y&49MyqDHO~V0(Ni0SNJc zYTjVUm`6(fVs}dha1HMAtXzLEvz#LsNU_~~_<0kdN#=?BL#F^J5VK7N6lmgx^!@PY zh0kd>qvaOrs&I11vi6rV58eg6aeF4zUQA?vA!plYg+^CY(;K553LdVi7) zK&!a4sLU14zrWB=Cx5b!53u#{NsF;s#bBf;(pn)M5X%I=`c@$~KiG=L)2CNNK6nGT_SXT!KI zlFqrRxP8hzI#lr{j<@t>YSMW{L`8wa!A+e*XzdHfwhs~iMb>}bCIlbEhxVx5Iac;L zY^D(mqcIOpB;)-X7C3gxdRtUQr8j@iCI4qQzmu(+O0UWqvrQI_CO|DOaEuZqle4fDLtLVKkSbCv$?u!NmM;3}L z*v6fGIz)uvs4km(TeO`o(##tjcvi4m_(oc%A+X7NIfegc3HZ|-`&-oT;C7d~Js%uz zYoB3l;sa}?7C&U%9a(mweQ+BWi8;Ww4()@L(EHh>_(qZ~sZEA%l)*|7{um)czY|W^ z31C>S%wyOK7QrVNq|T;n;9=C-1Ok*GcIM8MXyCCg`z#A|pO_BB&9fKP~CAG$S6mnKT1R19eAWUVntE z0ZXp!%zSE=>@*e$JTVxIUu$gQ@784vF$-`7QONk@`G*;zt@YQTl;AK(Hn_$;7k{I0;Mf;yxMx#zKQN@*V zg6I*p-G+A8vmc)aSL(u)m<^U`7SAE(BeD>@DJ=g@2XYrT1{gzi@(w*3zI7Z5kTrz6 zZDqO|;X_9R%SgH92Ef2;)%n%Y9!@KVI1f#ADy-B2?U!n=x;AzGEU7Nxj3AF@f;j$? zPcV9+X6u(k_=T^a;W=Ny_u1PfW`Bv|pQ=U%8PzCtAk0@E0NjE!wKl0fg^T+)sp21A diff --git a/planet/assets/img/full/portal512.png b/planet/assets/img/full/portal512.png deleted file mode 100644 index 60f8d3b4049a0d029cf155d7c5f273a91fb4ee7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7738 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 diff --git a/planet/assets/img/full/wrench512.png b/planet/assets/img/full/wrench512.png deleted file mode 100644 index 34bf0e9324088faf30d538fade318b1e4c5d158f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1436 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&w3=!$sk4H6X>3?&#~tz_78O`%fY(NVX)% zFPMR$Z1PzP5HHEw-G$+Qd;gjJKpuOEr>`sfGZqnH6`8xcr+f$MKIG}*7*cWT?cI%n z%?1Llj#a^eC6DiX4d7?J(E8ci4eRUQ6dbCDE@(S9y{LQ^~3Nk zl5Gxk3+^RseDxr`egP<^2!neTKg_rAu48Azqm%^_vOf<#Zmf5@%5JrZSy~3Saz?Og zFZ?+8`0KT#wUcrBmdCE{L)e)n4BtRKJ1f7Sn*r`|R8=P)Fkz1~27?_3amN^vn-4r- zV@KlRW;O%8%81<=Y~l<|*qw2ZmydxMz-A80B7}j&od-Zgi1dx@p14bYmdKI;Vst06|66od5s; diff --git a/planet/assets/img/icon/heart.png b/planet/assets/img/icon/heart.png deleted file mode 100644 index 75cab5ce1fe71d8ce31b14ab112568625d3c432e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}6`n4RAsQ36 z_TS}gFyLsh-__l`BhozEs{Q@CMt-N}Ef>{2XMHL@F8iUp)@9|v<($i9%s892 iJ?0MEGi!qu8$*P*Aj9lCwHtw^F?hQAxvXPx$Hc3Q5R49>kkugg`VHAd+^WA$Zv>`O4C4+*7hK7O`A!=yq2Q;)r5KY?B)L#%1 zE64sov=u>6M5`nPO+{D@71n5odcV`4*1bw+JMf(Ed!KWJ-qNmK{%aIqw*Ym8Ge6Ij z-M~-xg;=)(Z|9>-dsPf@r>nf_0u~3!S;lOM^46>Z(itG>R(Y{-V{?@3GS4JYF*w>_ z$}LiEa|Y1N9z6PU95*jG@z;4`oF?9H62mvyLMw?2aA~ip=mhU1u;K&+l_B{eA`e8` zwl2V}rdm#+eSk-uNjYRh4yfs0Bs@Opr-s4yEI3MxxIi`FAdPf_d6QvA&KahH!3Us; zLxUKD0y~?nl&14ooFh`s3X3MoD6a^L05u)pBk*z0;nw!y-kwslOIQq=c0z2I=HFnT aLd*|)?qkmNs8>Y*0000Px$$w@>(R49>M&AUz%Q2>D9e`e0?EHJxrTO!e9ff!?B(8?I2#>N*=U%=iT6B-Lk zDjRBJX=f;X1R6s^5D-{gG|ui^cIR?t=A1bec78ALS=+B)7{_ZP>l&SBTyq67pAwA5 zIPE!X86m|28ffwmvEsXg@gG*Z9i-8is-o*T%->ugD^k2(pUWUdH_%#GLZr3B#;rTJ zmZDM`LmT0GI7VVrMpJ55mpYuC54Z{=gs}vVpFCy3Zz0?nwD2iwg)jwnHNo-b$$|mV zIAmw{6XN-!`z+7epmMa5)J;muvQaX@wJT5(G5y6{IpNi_d)WQ84Mv%wYArI(4S6o{ z9GfC9sf>#w1d~cr>xRwS>j-zY%i88cEWgLH1z$dXz^)|S#TE7s4te=zi%^0|t~mL+ zhsc5fouwWCBLikSLYt5{9V2u_C;=cH4v?b(*5&6ND{www1)_Fd#ZTX8Y}XhDXQDyEF8cuk-uI1zYcSxi~wgu4}4FVN+(v zI3SOLfAu6L%O$$8h?4|>B9$29pj3l6I6Xwy1=G?3VDH;G|I4N+mQ*BB!Cx@e_8KZZ R$ZG%q002ovPDHLkV1jL0 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KZlG`8*hW~Sl9sx-RiQ`}cGrd8N-xo}>$?o=R z+FzZRF%Th3vK~Q_(7$~h;R`M*nL|?ZTyl=MQb~m?CLXV=te#?8{dJvtq-S}!FEB)c zQLc|xw|<3O-yXR6pyOE{e6O%?LpRUcpiIw7WGk*v z_ARzdN7`2B=kO>lF7u6A{(OP-^W?7-KRA|qMEty9ax?WY$zwDhqhD`VQ$|Mf zuBaGp*_qEk@j%LDJ(kf7w_M&M1X@vgH4JwagaN?2cS&C_gHB8Ez93Y4$qCC$^>Jy@c*ENpDq4L3uDa9 zMil*?E5yaKauLQPH+yIS2#w86SAuVCfGQ$qNqm3+sd7V*oJ4RQ89Ptkc*bbyvU27r z#@PfA*hgYuQ=|e`N{afioqt+d)Hbet4Db?v!Z_g;D(sI?&@4IO#d@KHv+Q`=NOv_GImn;I`tQ_t?yAPr_W z6Eu$#oy2T%xM(tKCE}IfxXTzwfeW?%h1cv%h1cv%h1cv z%g}#dXyC^K{#}OelCGWPm^(YL0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmP!xqv zQ>CI62Rn#3WT;LSL`58J6^c+H)C#RSn7s54nlvOSE{=k0!NH%!s)LKOt`4q(Aov5~ z=;Wm6A|>9J6k5di;PF1rd*^W9y@1fDFwN?k05sh;)5(OG&8>=|R|F9TFpEB!Sw>uv zQt(}0_XzOwF2=L`-~GAz)x5=kfJi*Y4AUmwAfDN@4bJ<-5mu5_;&bA0lL{n$zBx-kgE(vjs;YqL3aJ%Gx*(Gt1va`C500} z_lx6vi~^xupjmgE?_mpj1FlOdb3 zD+Or_g#z$?Mq|nWgSSBMn%B41Jx(8h4D~8?0~{OzV@1kd_xX2EXW#yP)9T+3JO^@- zdaP(L00006VoOIv0RI600RN!9r;`8x010qNS#tmY2;2Yw2;2dm=wCbl000McNliru z<^v1>I4ioG((C{L0J=#;K~yNujnT1613(PM@n3BP-L-2chuXoRFW{pH?pDNCa1|E^ z-$d6sS-Q63Aaro-P)Y^2I+#L;R1AdVySslbcWL;s4sIj>AU2#SVtJ3*9R%9ARF8r=<6=Ncv#YcLuWU<2~tLpHP8gtjgMK8*mcwtpJN{z*)pe z0lFzaZAH?@ARhRY4t(GoqY6L9VD3xxi!!)wGd4cajzKLG@Pb`5aE0e@vEeGD0;R&> P00000NkvXXu0mjfRPCyx diff --git a/planet/assets/img/icon/portal.png b/planet/assets/img/icon/portal.png deleted file mode 100644 index 214dcaf5dc212435df03c17a5ade92b2ecd59b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4498 zcmV;D5pC{?P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3&cvgEoAME|)8FM%_`<#3Gf4!nFHkgDN!x9#^L z+!a-&E2%gjfy{*3tbhG;n}6^xlq4pmBDv;l`4?-fzHuP-{;TKH*?2zhzwvy#pXbf{ zg6CA=JKR4@d+u+XPoE#W=5YPzc_YsiFV8^kJ@EM#bY?xC-;3nDzvo?i2CC~GD9yw~!TS|lu;)|m3WC0UXncqBS-H=J%5e(8@a2Mk z1|uLpw)gtB_B%j7gZ~_vU!(s%`X%_jJ?FzOvCJ>j@}Dob^vn71p2mMq9NsJPKQEN> z!squO?>%Mjb$8cdCZhSts1t1W8ipG?ArI$gnOEVRI4W){m(BbHq^qsIhV% zqVFK!Qu32U`WQm?rg-r>H@_+F-0PFiUQfeK0Fgot1#GA(z=|=EKP3t|)KW+>rIeEr zTdJw$kYi3c=aQA=S_vhVRB|arN-a%-L`jmRh)9)IeGPD6s=1abwbs_WX-w1@t8sth zO!qzX*i+BFbm_IXLHdk1(#WF>8FjSjXPD5$%(G0Hb++Zqf+<#9Y2{Uxth(AJ*LK)( zr=54%vg>Yd)E-oSd;Ja6+=H4wNa=m$jT&bSMfwcklunXj24X%s5HE@V3GEd#D=tQ_ z$SG#FdWs@>7MTq~J6>3avp!&A=&5LQiug;IyD&LD`?bJ#NzFK0jxv}(Zo5rf_KDQ)ax{W=%9+M+p zRmCScBs&9^l$I!sx~j^y5aiLPuU!{f;|g8u{auz|nV)dP9MWz&s* z0Iv}vs3yldm@JJrl+4P;S_?wzaY8|CYUb*SW>e^P&X()2MVBV6OPdj4$X+U4;bmub@hLJK<(k5eSa9!2}Yy>eChR&pYUV|7(_pT8Dzbn;3 ziG*r1#c6kJeX+Ee7(a{d6;;kzR*n&|hOjm^j|J*ZO=s_+F-pbly+Ns@LKHSL#>}XG z>v#o{ttTJLzUkXT+|)_W0v#j+Hk&eIy2{STEwYCqWJG36VKY9s1#tmim zUSi9W;}KhH2Ei+2R}e63k+6cx@S1fhlgmS&nn5ILM0VKQu9M%0R$g@^6cZ~inZq3u zQm_`@?8Fpmo0LS=M9?C0NyL%9dNer$E$=ck;JFD2(4jH57E*@8GC+3-$b~YIqu8J~ zTl<366o`;*rFzR{5}WfK7XguZ*(RHliBj{@lHZX(2aL=1nQg&ScTKIvB$r2^caj+T zu)C3OY&+~ZoB<>_aX`?^D@l?1upEr+9n2(9p^xznfljS^M8bblVe-QoJ)Bx5x|)>i z9QhB+XjnJA=SEwm7D>$!5)6j~VM=_V@sQsk=U=H=uV=5xc!q-XFEL_HA;d#_&_aSz z7S^(vtSnJ3VEzlKYF&7c8p*DBM`s%jqFQ@E+Gh;tNXU_D%GyLNX$vy?Mh*|G1?$Nj z`3_1B{(-jUo)shq^-ftBU}uYm4=Sr-J1yaPAuLE$E2&W`P+^})FRQ3n=`Kan4@OF( z5KEcco5UT=6Z=(JCMwmjdjV3$bfd7qpB@F>-~@5LLFHmSPN-m;qTpjFb)G z4JZj?f=@r^Deqm~E3>Nf;tSd6!r8(7EYJWIh|#jX)O^_BL;;0NY4;#RGG@F>g#?}m zg>ivOXl8Z|5xF7DJ({ePM|g2A+!I=%>L{-MHK#^)6pbtt7mj${Pg&B^f-HTnCJZW} z7p*&=b0cGyx(0=@Pb^Uu1=%lJ)zy-$$Yj)fFI<8C5V5W#T+G>(3Lc7szaxLxS_s9p z^9I-i*Pe=Wj75b)S&=pru4kihS}F}~H&mKl0dI&*luNK;iYign0s-w%(PxmweKo77 zPFKbdVP(h;?2GshQ#l2%3XwmBPq&MtAqQ}KK_I)_GK?g6s0AOnknwDFgYn4s#I~wG z>Liihq)-@=w$@4kDohpuxYbl4O0;(+!J zGFsMm=vXdsw*Yd;pTmU;0!S(HPGhfu^&@~^Kw;)OcS2d{%9u-hk7xv$1<}+gn)*`4 zf>l+EBbtH*02Q`|n4(ktqnTGS5hPK}>ZR8h<;|)eQni$l76o}?Ai6+Z*oWO|eH9I_ zW{2hvk~o5nMdHgb5-vn}IK9na60#&Fnq!(I799Z>>Q#C4t-$+-lcOqdxfD#W5)`?i zNC!6l`o!pg)6GHScUBT%4|lmx&53J2_CZ>Z2BP>Y(Hy5Lh=X_Y?z{!_9AZhsr6Xdj zVGnPj0U`^WT2ZuGQ=P}s00I~T@Aa_~xg)}RhV>*pQ>ham6 z4Lv;ms15Z35gW1PU&~fo6?g^8NKZ;$G208}{wFI(F`9ymankk2amUV$t^kyi5QcyYv z&-}p}dQw3->Q@HrCAMG=I1con*Nv-$m zfX{Acxy>8C2)i;T=}R#x$5mL<fB>Gt)E=tC*OGwk=IXxMR!^yHzcxT$ zwdu1p`j0;z)bay@=+myJJsJ%0EZ^u53+3GU%z@~)ZwH@6&Hs@Ue*S*yps9?n#pzTG zY_HwoM&KhlR+jvU3z^+?%?*#%Be5gF#~Aud^jy!%A_zS{gKFqL0Su${(7HdgUNk=H z0X+l?Ka+R*KJEou!En%NwO$`e1kEJuoLcdeOw`9vjdCD=la?2Zk69vHP!Q$`RV^cQJCKNJ!wKhs&2hmv2Dq~MvcuGMuxTdB zHs(UG^}z={Eab|VDQD-^6Q2(M7;Kn~ZFRcqy;`SVt8_Eu8~%~RT7zzy3KzrDMIWP( z-MDq!IYV44lHz$D=xsj|1_dnZ77egg&rLtpKdYs9qca#?y;`aS!X5OtT&(+MxeAp8fs1s?NPzjYA^*a!}*kWAdTyZ{{WmegMYQB4OfTem^MC-W!Z?|kE~Mzwa`u-X(Lf-tGrLktjE@RwZhkO zBR(56a2WpvzILNXL56Am0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ>7{u z2MZQ)$WWauh!%0wDionYs1;guFuC*#nlvOWE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6 zA|?JWDYS_3;J6>}?mh0_0Yan9G^=X@(DbUAO2oxXc2x|#!jE1IA%?KbEMrcRlJFc~ z_we!cF3PjK&;2?2)ttoupGZ8*46{nSK|H-#H8}4RhgeZoiO-40O}ZfQBi9v|-#8Z> z7Ix1kia6A zAVGwJ8cHamiYTo*DHc++ANTMNJAR2=3b{&P0{s+IiwenMwZc;D~bidg4 z$0!ik1)6o+{yw(t<_X|`2CnqBztR9^K1r{)wa5`Lunk;Xw>4!CxZDB4PljyDj^w8) zcj#mFDJ%6Nm5M|wC=DofW8-DUbND{_%D1tM z{%hG%4tU2QgpQ}2%Rt|73n6JKdrc#4;9tf9Y%bHCGG^THBq$u)*Q^4u=PqS6lZ%RN zNA0NuH<$BgN~N%CzC@l=mdCO#^moVIKyMiL{PB#AWaVj-2^Tf{nXDf5rsKh}cD!<= z9cjaD#)q6YcFCuKs%2<+6b`_?weKr!7G__LBQ zbu*VMkF}VL!+YHrWG>g82D{|*#7rIeo|}%K$bhf;>*>zTM^D(XO(IPlTaPB3MNES8 kv;%P_@Ag_1`YYmI0L(w6^MY^?H~;_u07*qoM6N<$f^X=CmjD0& diff --git a/planet/assets/img/icon/wrench.png b/planet/assets/img/icon/wrench.png deleted file mode 100644 index cc3f7283ca30f4c270b5c22298b031a0fa5a7536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmV5u=!!%sl>M2=ZDh_Zs+>4t|xeH(T!vBk7+N9%p-NxcU#j#IAVI`yD zdf||J2|(%d))pG=(*samH+_)MV}N$D(csi$Rci}nX&xYL1%T}wX>0%h002ovPDHLk FV1j=NZ4dwe diff --git a/planet/assets/misc/changelog.css b/planet/assets/misc/changelog.css deleted file mode 100644 index adc29ee..0000000 --- a/planet/assets/misc/changelog.css +++ /dev/null @@ -1,48 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Droid+Sans+Mono'); - -body .gist .gist-file { - margin-bottom: 0; - border: 1px dashed #adb5bd; - border-radius: 0; -} - -body .gist .gist-data { - border-bottom: none; - border-radius: 0; - background-color: #f1f3f5; -} - -body .gist .blob-wrapper { - border-radius: 0; -} - -body .gist .highlight { - background-color: transparent; - font-family: 'Droid Sans Mono', monospace; - font-size: 14px; -} - -body .gist .highlight td { - padding: 5px 15px !important; - line-height: 1; - font-family: inherit; - font-size: inherit; -} - -body .gist tr:first-child td { - padding-top: 15px !important; -} - -body .gist tr:last-child td { - padding-bottom: 15px !important; -} - -body .gist .blob-num { - color: #ced4da; - background-color: #495057; - pointer-events: none; -} - -body .gist .gist-meta { - display: none; - diff --git a/planet/assets/misc/changelog.html b/planet/assets/misc/changelog.html deleted file mode 100644 index c1751f8..0000000 --- a/planet/assets/misc/changelog.html +++ /dev/null @@ -1,3 +0,0 @@ - - -

diff --git a/planet/assets/misc/planet-launcher.desktop b/planet/assets/misc/planet-launcher.desktop deleted file mode 100644 index d46c9ae..0000000 --- a/planet/assets/misc/planet-launcher.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Name=Planet Launcher -Exec=/usr/bin/planet-launcher -Icon=/usr/lib/planet-launcher/assets/img/full/logo512.png -Type=Application -Comment=A better launcher -GenericName=Minecraft Pi Launcher -Categories=games, minecraft -Keywords=Minecraft, MCPIL, gMCPIL, jMCPIL, Minecraft Pi, Minecraft launcher, MCPI, MCPI-Revival, mcpiscript diff --git a/planet/assets/translations/en/LC_MESSAGES/main.mo b/planet/assets/translations/en/LC_MESSAGES/main.mo deleted file mode 100644 index 9f2e039f71ba6c7dad3f1903b0947d20e58ba4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmYL^y-vh15QGmwl@d`>xS#_Eu0RUrIGwrpLWJ|9{G0@xNtO_FIFVxzc@SQYXJOND zBYoOpM!U1W$45Ui)B$peoFRwE1v1G)PSCu;Ic5Hpn(iGcOT(IO!3=Gu8AMIM3JPDrBD4{+l4+)FH^XDWMj#PuCg;9FgDcc!FHl>s#=8+%^ z5%Ey2xbJ5o&zBh0&8KRB7N9;DkvtB{>EuGn)vk3r(=44RjKsdw+`V$vowlIy#@J&C z3*Yv#->FvLlIl&F0qk8_Y^b--ODpv%Uclu diff --git a/planet/assets/translations/en/LC_MESSAGES/main.po b/planet/assets/translations/en/LC_MESSAGES/main.po deleted file mode 100644 index e6deb5f..0000000 --- a/planet/assets/translations/en/LC_MESSAGES/main.po +++ /dev/null @@ -1,163 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-04-15 19:08-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: main.py:134 -msgid "" -"Please select the executable you downloaded.\n" -"If you installed a DEB, please select the \"Link\" option" -msgstr "" - -#: main.py:138 main.py:182 -msgid "Select executable" -msgstr "" - -#: main.py:143 -msgid "Link /usr/bin/minecraft-pi-reborn-client" -msgstr "" - -#: main.py:148 -msgid "Link flatpak" -msgstr "" - -#: main.py:227 -msgid "Launched with Planet Launcher" -msgstr "" - -#: main.py:228 -msgid "Minecraft Pi Edition: Reborn" -msgstr "" - -#: main.py:238 -msgid "Unable to initalize Discord RPC. Skipping." -msgstr "" - -#: main.py:269 -msgid "Planet" -msgstr "" - -#: main.py:283 -msgid "Play" -msgstr "" - -#: main.py:288 -msgid "Features" -msgstr "" - -#: main.py:293 -msgid "Servers" -msgstr "" - -#: main.py:299 -msgid "Settings" -msgstr "" - -#: main.py:359 -msgid "Banana Launcher" -msgstr "" - -#: main.py:363 -msgid "Pluto Launcher" -msgstr "" - -#: main.py:365 -msgid "Planet Launcher" -msgstr "" - -#: main.py:378 -msgid "Username" -msgstr "" - -#: main.py:381 -msgid "StevePi" -msgstr "" - -#: main.py:384 -msgid "Render Distance" -msgstr "" - -#: main.py:391 -msgid "Profile" -msgstr "" - -#: main.py:406 -msgid "Hide Launcher" -msgstr "" - -#: main.py:535 -msgid "Servers are stored in the format of IP: Port" -msgstr "" - -#: main.py:588 -msgid "Set the skin" -msgstr "" - -#: main.py:590 -msgid "Select Skin" -msgstr "" - -#: main.py:593 -msgid "Reset config" -msgstr "" - -#: main.py:595 -msgid "Delete config" -msgstr "" - -#: main.py:598 -msgid "Delete executable" -msgstr "" - -#: main.py:600 -msgid "Delete" -msgstr "" - -#: main.py:603 -msgid "Import settings" -msgstr "" - -#: main.py:623 -msgid "General" -msgstr "" - -#: main.py:624 -msgid "Changelog" -msgstr "" - -#: main.py:625 -msgid "MCPIEdit" -msgstr "" - -#: main.py:705 -msgid "Select skin file" -msgstr "" - -#: main.py:719 main.py:736 -msgid "Are you sure you want to reset?" -msgstr "" - -#: main.py:721 -msgid "Are you sure you want to delete the config? This action is unrecoverable." -msgstr "" - -#: main.py:738 -msgid "Are you sure you want to delete the AppImage? This action is unrecoverable." -msgstr "" - -#: main.py:812 -msgid "Using /usr/bin as an executable." -msgstr "" - diff --git a/planet/assets/translations/en/LC_MESSAGES/mcpiedit.mo b/planet/assets/translations/en/LC_MESSAGES/mcpiedit.mo deleted file mode 100644 index 9f2e039f71ba6c7dad3f1903b0947d20e58ba4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmYL^y-vh15QGmwl@d`>xS#_Eu0RUrIGwrpLWJ|9{G0@xNtO_FIFVxzc@SQYXJOND zBYoOpM!U1W$45Ui)B$peoFRwE1v1G)PSCu;Ic5Hpn(iGcOT(IO!3=Gu8AMIM3JPDrBD4{+l4+)FH^XDWMj#PuCg;9FgDcc!FHl>s#=8+%^ z5%Ey2xbJ5o&zBh0&8KRB7N9;DkvtB{>EuGn)vk3r(=44RjKsdw+`V$vowlIy#@J&C z3*Yv#->FvLlIl&F0qk8_Y^b--ODpv%Uclu diff --git a/planet/assets/translations/en/LC_MESSAGES/mcpiedit.po b/planet/assets/translations/en/LC_MESSAGES/mcpiedit.po deleted file mode 100644 index 972e9bb..0000000 --- a/planet/assets/translations/en/LC_MESSAGES/mcpiedit.po +++ /dev/null @@ -1,124 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2022-04-15 19:08-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: mcpiedit.py:74 -msgid "" -"The default built-in NBT editor for Planet.\n" -"\n" -"MCPIedit makes use of Pi-NBT\n" -" from the original MCPIedit project\n" -"by TheBrokenRail, which is\n" -"licensed under the MIT license." -msgstr "" - -#: mcpiedit.py:91 -msgid "" -"NBT editors allow you to edit your world\n" -"files to change game modes, time,\n" -"and even the world name. Select an NBT\n" -"file to edit using the button below." -msgstr "" - -#: mcpiedit.py:95 -msgid "Select NBT File" -msgstr "" - -#: mcpiedit.py:97 -msgid "About" -msgstr "" - -#: mcpiedit.py:125 -msgid "General" -msgstr "" - -#: mcpiedit.py:126 -msgid "World" -msgstr "" - -#: mcpiedit.py:155 -msgid "World name" -msgstr "" - -#: mcpiedit.py:158 -msgid "OneChunk" -msgstr "" - -#: mcpiedit.py:166 -msgid "Last Played Timestamp" -msgstr "" - -#: mcpiedit.py:171 -msgid "Game mode" -msgstr "" - -#: mcpiedit.py:181 -msgid "Time (In Ticks)" -msgstr "" - -#: mcpiedit.py:187 -msgid "Back" -msgstr "" - -#: mcpiedit.py:189 -msgid "Save" -msgstr "" - -#: mcpiedit.py:218 -msgid "Spawnpoint X" -msgstr "" - -#: mcpiedit.py:224 -msgid "Spawnpoint Y" -msgstr "" - -#: mcpiedit.py:230 -msgid "Spawnpoint Z" -msgstr "" - -#: mcpiedit.py:236 -msgid "Player Spawnpoint X" -msgstr "" - -#: mcpiedit.py:242 -msgid "Player Spawnpoint Y" -msgstr "" - -#: mcpiedit.py:248 -msgid "Player Spawnpoint Z" -msgstr "" - -#: mcpiedit.py:263 -msgid "" -"Note:\n" -"Player spawnpoints are very buggy!\n" -"You might spawn in the wrong\n" -"place or even outside the world!\n" -"Do not use on valuable worlds." -msgstr "" - -#: mcpiedit.py:328 -msgid "Open NBT File" -msgstr "" - -#: mcpiedit.py:330 -msgid "Minecraft Pi Level NBT (level.dat)" -msgstr "" - -#: mcpiedit.py:349 -msgid "MCPIEdit" -msgstr "" - diff --git a/planet/assets/translations/es_ES/LC_MESSAGES/main.mo b/planet/assets/translations/es_ES/LC_MESSAGES/main.mo deleted file mode 100644 index 38e4f74656aa5b5d19b804d1c866cf7063ac6d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3130 zcmbW2%WoVt9LEhU6qZ713#Gi>g`!e*HV>LA+B6M$Y+xa2S4mp9fp^BcaWiXAJ)WfL z2?=pPh$Ea3Qn?~HP;MMRq#O|93b#r~2=NDi;DX@$^UP$ERGg8Lt6&TLc`UjBeh3}|e+LhMPasHi-VlhXYzlk`Y=UHu0Lk7Ir1RbcY5qF}KL8&^ z{}Yhx_!cC8e*=zAjCCAmIiq0 zfA*ZxD|{eJ?Lb@Ufu7Pbw4&pJLm?!&XB3Thd!y1S<|r*k&J4UX2%aHojMW6GU9^I zG^S4QLXZXyccte7FU#J#e3hf zawNr9?)O@h7B!UOgC`d##nc%KBQb^i>KNM-j++iY-7%=o(8R`$SGy*Ts%M(5IzK%? z<7c*gZO56co@pVG#aA4Vhl!4+PM+LFCs$=lvGbZrgKA%Cg&?UblKcyejrc-qy2jy8 zlAs=H?0hP%7Cng<^fzlCmaNbzs>j$m$B6D`xRk+?6umlMOoUeHa%H|b z-{_w-R2!^JBQPkwU}-(U&Q4x-12918F&-`pi>!^GUz!a@`}63OjRhHlV{yxuSrloV_uywOF+0Zn zUc;Laq{XjcG5h+o2}$E#Bc-qtkS%>hM8=XUxnx3u$Yk_G(Q7M{ zvMFP&u&hz~mrG`8OYxaY6mcn?&|Fk1?neY==_}~DFpC`mgiQKFSuUa&5f`)6VP;_t zxyvD7+cdPHV-d>DoAh5QT1@?S9jzBa>Z3_Ys-`&X)xd3ftYdR;w&3Xax!C#x?vH=7Q?wIA4p@nj|ldYHoFP$MMis){+)7 z$OIP: Port" -msgstr "Los servidores se almacenan en el formato de IP: Puerto" - -#: main.py:588 -msgid "Set the skin" -msgstr "Establecer el aspecto" - -#: main.py:590 -msgid "Select Skin" -msgstr "Seleccionar aspecto" - -#: main.py:593 -msgid "Reset config" -msgstr "Restablecer configuraciรณn" - -#: main.py:595 -msgid "Delete config" -msgstr "Eliminar configuraciรณn" - -#: main.py:598 -msgid "Delete executable" -msgstr "Borrar ejecutable" - -#: main.py:600 -msgid "Delete" -msgstr "Borrar" - -#: main.py:603 -msgid "Import settings" -msgstr "Importar ajustes" - -#: main.py:623 -msgid "General" -msgstr "General" - -#: main.py:624 -msgid "Changelog" -msgstr "Lista de cambios" - -#: main.py:625 -msgid "MCPIEdit" -msgstr "MCPIEdit" - -#: main.py:705 -msgid "Select skin file" -msgstr "Seleccionar archivo de aspecto" - -#: main.py:719 main.py:736 -msgid "Are you sure you want to reset?" -msgstr "ยฟEstรกs seguro de que quieres resetear?" - -#: main.py:721 -msgid "Are you sure you want to delete the config? This action is unrecoverable." -msgstr "ยฟEstรก seguro de que desea eliminar la configuraciรณn? Esta acciรณn es irrecuperable." - -#: main.py:738 -msgid "Are you sure you want to delete the AppImage? This action is unrecoverable." -msgstr "ยฟEstรก seguro de que desea eliminar el AppImage? Esta acciรณn es irrecuperable." - -#: main.py:812 -msgid "Using /usr/bin as an executable." -msgstr "Usando /usr/bin como un ejecutable." - diff --git a/planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.mo b/planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.mo deleted file mode 100644 index 94a9e541cee2e1862a058dff5ed2b3dde1054945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2647 zcma)7J!~9B6kZ?+u>6OFfRy4n62g(Z7oX*X=n_lBjvZObIaYiD+YOrAo!gsucV?NL zwYe5Vp9Ts<6GTA)qCiSTg%P5q0|})=qCiL#R5W~VZhdDbvBXHb-|oztdEfilZ|@&J z@^OIiDz4MGe#7-TuFoFB4P*N8AUFza0*?US1U?PC415x}1Uv~`0X_vxfM?B_VH6Sz26TnD7fk7sa42!3!J%;lBgtFL=-rE4k| z%!_y{xF&K*xk+SjO=@XH7F-vlqt#3dWI`R4%hHLw2-*v)%ZrI}L0f4VThW7!qU&;7 zX0$Tjp~;LN8;Njd1AdpVHMS&?WoCy4rXpwjBtKi)F*ZxWp2}p&3vplQR8qP}rko-N z*HfX;3E^N(t}ln1NW-W>Yci9uBca*5KWOBjDwR(ChHmAY(bSdT&zY#eGs`n5kIm5Zdsf;>OZsrog<(0WfO%rp}JbNizj~1-i z!O>BjorhEMkV&+BwMFNf)3X;Z?AyPWgciv%T3p+=!tL9lJT4TsMx!tftoideufr_z z0q^2~V9j)`46Zo4d$$bQCNbzkx?RcCjHGDy(+n~oFq?`*j5TOQ?a2Q)br(|B3 zsZc^6;;bqmZyCP)98rx=s)Z^>!%1}Zo-Z$2-U;UnKB^K*=TGPwxBIQ;T!^l?ZMBI_aZ{!=P_i&b`isKKqS zip7ZSO_}87yXX zr};kfDJ_f@s3-uudOp9t;17#wpMNOaKdAYhmU1gXGzWg)NJjUBHH75@I{IEE@nN~$ oyF($36+7n!qD%}$6jKC6WhLdtrAgEgS_&y`b2agMJlMLyf09%BsQ>@~ diff --git a/planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.po b/planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.po deleted file mode 100644 index 76ae0d5..0000000 --- a/planet/assets/translations/es_ES/LC_MESSAGES/mcpiedit.po +++ /dev/null @@ -1,133 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: planet-launcher\n" -"POT-Creation-Date: 2022-04-15 18:43-0400\n" -"PO-Revision-Date: 2022-04-16 21:54\n" -"Last-Translator: \n" -"Language-Team: Spanish\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Crowdin-Project: planet-launcher\n" -"X-Crowdin-Project-ID: 510486\n" -"X-Crowdin-Language: es-ES\n" -"X-Crowdin-File: mcpiedit.po\n" -"X-Crowdin-File-ID: 4\n" -"Language: es_ES\n" - -#: mcpiedit.py:69 -msgid "The default built-in NBT editor for Planet.\n\n" -"MCPIedit makes use of Pi-NBT\n" -" from the original MCPIedit project\n" -"by TheBrokenRail, which is\n" -"licensed under the MIT license." -msgstr "El editor NBT incorporado por defecto para Planet.\n\n" -"MCPIedit hace uso de Pi-NBT\n" -" del proyecto MCPIedit original\n" -"de TheBrokenRail, que estรก\n" -"licenciado bajo la licencia MIT." - -#: mcpiedit.py:86 -msgid "NBT editors allow you to edit your world\n" -"files to change game modes, time,\n" -"and even the world name. Select an NBT\n" -"file to edit using the button below." -msgstr "Los editores NBT te permiten editar los archivos del mundo\n" -"para cambiar los modos de juego, el tiempo,\n" -"e incluso el nombre del mundo. Seleccione un archivo NBT\n" -"para editar usando el botรณn de abajo." - -#: mcpiedit.py:90 -msgid "Select NBT File" -msgstr "Seleccionar archivo NBT" - -#: mcpiedit.py:92 -msgid "About" -msgstr "Sobre" - -#: mcpiedit.py:120 -msgid "General" -msgstr "General" - -#: mcpiedit.py:121 -msgid "World" -msgstr "Mundo" - -#: mcpiedit.py:150 -msgid "World name" -msgstr "Nombre del mundo" - -#: mcpiedit.py:153 -msgid "OneChunk" -msgstr "UnoFragmento" - -#: mcpiedit.py:161 -msgid "Last Played Timestamp" -msgstr "รšltima jugada" - -#: mcpiedit.py:166 -msgid "Game mode" -msgstr "Modo de juego" - -#: mcpiedit.py:176 -msgid "Time (In Ticks)" -msgstr "Tiempo (en Tics)" - -#: mcpiedit.py:182 -msgid "Back" -msgstr "Atrรกs" - -#: mcpiedit.py:184 -msgid "Save" -msgstr "Guardar" - -#: mcpiedit.py:213 -msgid "Spawnpoint X" -msgstr "Ubicaciรณn de Regenerar X" - -#: mcpiedit.py:219 -msgid "Spawnpoint Y" -msgstr "Ubicaciรณn de Regenerar Y" - -#: mcpiedit.py:225 -msgid "Spawnpoint Z" -msgstr "Ubicaciรณn de Regenerar Z" - -#: mcpiedit.py:231 -msgid "Player Spawnpoint X" -msgstr "Ubicaciรณn de Regenerar X del jugador" - -#: mcpiedit.py:237 -msgid "Player Spawnpoint Y" -msgstr "Ubicaciรณn de Regenerar Y del jugador" - -#: mcpiedit.py:243 -msgid "Player Spawnpoint Z" -msgstr "Ubicaciรณn de Regenerar Z del jugador" - -#: mcpiedit.py:258 -msgid "Note:\n" -"Player spawnpoints are very buggy!\n" -"You might spawn in the wrong\n" -"place or even outside the world!\n" -"Do not use on valuable worlds." -msgstr "Nota:\n" -"ยกLos puntos de apariciรณn de jugadores son muy errรณneos!\n" -"ยกPuedes aparecer en el lugar\n" -"incorrecto o incluso fuera del mundo!\n" -"No utilices en mundos valiosos." - -#: mcpiedit.py:323 -msgid "Open NBT File" -msgstr "Abrir archivo NBT" - -#: mcpiedit.py:325 -msgid "Minecraft Pi Level NBT (level.dat)" -msgstr "Nivel NBT de Minecraft Pi (level.dat)" - -#: mcpiedit.py:344 -msgid "MCPIEdit" -msgstr "MCPIEdit" - diff --git a/planet/assets/translations/ru_RU/LC_MESSAGES/main.mo b/planet/assets/translations/ru_RU/LC_MESSAGES/main.mo deleted file mode 100644 index 4527fbfea6a1f42735cc0283ab4153d4983c7d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4082 zcmcJRTW}j!8OIkW6a*!-+{*pb5EGZIEEy*gl*nn~3uuT3kK>fS!CE?&m&m(fwTf$+ z2fIngWD=SwGY#!PO9Rg^j#Cp~YV`%)VCL)-FAOsbFYv?*OyPln-*+TglFg+su=ei% zT)*!-|L=d!(XSu6?>UF(An!+c$KK>PN5IOP`S3jU7RUJ_cnU0l-vU1Y{t`R@z7Dy|7GxFU>Q6FUIE_){uq>b+n~htQ&8;x z29$Zf1NnFU%%=qY6?`{1`_`tPuY)pf2^4$Rz;}YTK#A)I;CsMVK#A*T;8($4fHFRf zGx2{Ml>RaBQSeNweGydDm%&N6x(!~W{s$)A04tCpy!{1y1RPH_c`Jhw=T-32;4Sb` zumSS#{Jw>M1pBG~4RpbNf*%5Bz%lSDD17}K{1EsjZ~{C)@Sg%72j34q1@iAa%jZ|% zOQ7)m6iE_%0sIVj4;%o03w{uMfFKWp2SKqv4N7|jjKIsS`s?6B)DJ+m_~`=+;2Y-Z^%|L4Cegu ze{Ct!H65RHPJ01=>Wo(pit{>hM(4ettSe#J8M9%xKsCL!Yx+rDtj7|oGoihh71x~4 z>wxep&KLZW?$|3VRKqA%_=^3YTyt8EN@~%M=halj3v}EWeZ~*YtHF9L8l3fm!396i z#mJkB-Ky_KdNzy#w^;FY5Ic6@T*Zs4-g#$obgD33@?&SRJwZ+RN?Kqyr>5;pr|GK& z9hWpO(Wt$eCd!H~k~1>ZS)om8DO?OHp;ywSbgD3CoBW^_dzFeVDNl`!pFXUr`;7ES zn0+d&N+39?qlR6kr=oDqhrnqalys!Ve9Q$!sY6zq@3YN_&Yt%Jr&aDm)^4fMtE{cF zIzmG=IxH#=Dc0gJB1neFy5_=Y!HZQmr%ud;=(8AB!YJQY4lAX;k-}6?ofwq%k)Gb! zN?rGjOp(Y|FAkbCiEF7elY2JS7xa|xoC`!6qJ2N`A<6%Smh~0GsHCQ+M$?M*RIBJA z?VPLWDDW0E1?s!GS01|~=*mLcfv>NT9k)<&A7_m=wNq*jB<*Wpj>BDx-;5aKrZ!K&G&-TWMOi= z<0+fYq(&hI@wqcgRV>H)$#{?e{NT7M&U+DA%b%N>aF2DyiI+JYx#K}GEU~Gmqr6*#UJ@WmHZzd(}u@4Ym8#iTtpX?YxXSp|V5j;>G4vHKMY^12Q?=nVipK ziV=2#m^#vB>T`^4_hqCr+X)0uZF57I`|QBL@zfLUXcR88ez%oE*1RWg`-ZrMv79=R z%?uwq+BLtOsho=HUCk40qnuhG6X|NWr`;MF+Rd@d{L1vXlw-b~Tvz55vu-w%mE>u& zW;Xb)o9*O=*)a{3TrmwAY@=*xOEtNnlFL*!&34yuZhpkz#vX%aU14k8G|Zi3 z*{q5=^Qvj2|2NLf7KV3-Wy9P}E?EcPq`Yxb{Xc_Qv1@50D=jW8F+0R@-K?K<%(F1F zW8a2Zqis`}@3Qhs47h66lV!);va!mTZAG~EU}W90v_oyvF+c34dQVmDTk~4Nnv-Yt zjk|~a*YLE$4AMy)?W8&8C3-AVQoNH~!~eQtZkw%SIk|2VY+fVzE99F5c3WC?%=5%6 zy~|b{%a~r1%%Tcew@8Uh;19nWj`>b24Dn%AwW4IUs35tP+(@2LTt7WGAaOMCiQJk} zTfyXYBH2nVSr5A>6_$TwM5yH~0C9<7@M4J*WQ zIeEJ0PBq_`Y}&VBeu4>EpAc|UK?q&Yw~^dz-?oPszl}k51BQAfG0+~=+bmSywZ0+O zVZQi5G-#>0V^{G6HFsa)1A)=L|t99zYn&d{3K@f5fb#2~%c!bDyf}QrEWd$U1Hao5MH^%t>!Io}o z=CCSVx=Y97@e|#-kYw|=f5`mP zmA+_s?b*$@aY@oK!Pb5e@4NQ`l=h@X2HHgT{OW0Da`#+Xg@9Mn_DGSn$+;l6&poR) ryFBV-?Rj|H)7i>%`0 diff --git a/planet/assets/translations/ru_RU/LC_MESSAGES/main.po b/planet/assets/translations/ru_RU/LC_MESSAGES/main.po deleted file mode 100644 index a0b81c2..0000000 --- a/planet/assets/translations/ru_RU/LC_MESSAGES/main.po +++ /dev/null @@ -1,165 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: planet-launcher\n" -"POT-Creation-Date: 2022-04-15 16:48-0400\n" -"PO-Revision-Date: 2022-04-16 00:26\n" -"Last-Translator: \n" -"Language-Team: Russian\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Crowdin-Project: planet-launcher\n" -"X-Crowdin-Project-ID: 510486\n" -"X-Crowdin-Language: ru\n" -"X-Crowdin-File: main.po\n" -"X-Crowdin-File-ID: 2\n" -"Language: ru_RU\n" - -#: main.py:134 -msgid "Please select the executable you downloaded.\n" -"If you installed a DEB, please select the \"Link\" option" -msgstr "ะŸะพะถะฐะปัƒะนัั‚ะฐ ะฒั‹ะฑะตั€ะธั‚ะต ะทะฐะฟัƒัะบะฝะพะน ั„ะฐะนะป ะบะพั‚ะพั€ั‹ะน ะ’ั‹ ัะบะฐั‡ะฐะปะธ.\n" -"ะ•ัะปะธ ะ’ั‹ ัƒัั‚ะฐะฝะพะฒะธะปะธ DEB-ะฐั€ั…ะธะฒ, ะฟะพะถะฐะปัƒะนัั‚ะฐ ะฒั‹ะฑะตั€ะธั‚ะต \"ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ\"" - -#: main.py:138 main.py:182 -msgid "Select executable" -msgstr "ะ’ั‹ะฑะตั€ะธั‚ะต ะทะฐะฟัƒัะบะฝะพะน ั„ะฐะนะป" - -#: main.py:143 -msgid "Link /usr/bin/minecraft-pi-reborn-client" -msgstr "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ ะฝะฐ /usr/bin/minecraft-pi-reborn-client" - -#: main.py:148 -msgid "Link flatpak" -msgstr "ะกะพะทะดะฐะธัŒ ััั‹ะปะบัƒ ะฝะฐ FlatPak" - -#: main.py:227 -msgid "Launched with Planet Launcher" -msgstr "ะ—ะฐะฟัƒั‰ะตะฝะพ ั ะฟะพะผะพั‰ัŒัŽ Planet Launcher" - -#: main.py:228 -msgid "Minecraft Pi Edition: Reborn" -msgstr "ะœะฐะนะฝะบั€ะฐั„ั‚ Pi Edition: ะŸะตั€ะตั€ะพะถะดะตะฝะฝะฐั ะฒะตั€ัะธั" - -#: main.py:238 -msgid "Unable to initalize Discord RPC. Skipping." -msgstr "ะะต ัƒะดะฐะปะพััŒ ะทะฐะฟัƒัั‚ะธั‚ัŒ Discord RPC. ะŸั€ะพะฟัƒัะบะฐะตะผ." - -#: main.py:269 -msgid "Planet" -msgstr "Planet (ะŸะปะฐะฝะตั‚ ะ›ะฐัƒะฝั‡ะตั€)" - -#: main.py:283 -msgid "Play" -msgstr "ะ˜ะณั€ะฐั‚ัŒ" - -#: main.py:288 -msgid "Features" -msgstr "ะžะฟั†ะธะธ" - -#: main.py:293 -msgid "Servers" -msgstr "ะกะตั‚ะตะฒะฐั ะธะณั€ะฐ" - -#: main.py:299 -msgid "Settings" -msgstr "ะะฐัั‚ั€ะพะนะบะธ" - -#: main.py:359 -msgid "Banana Launcher" -msgstr "ะ‘ะฐะฝะฐะฝะพะฒั‹ะน ะ›ะฐัƒะฝั‡ะตั€" - -#: main.py:363 -msgid "Pluto Launcher" -msgstr "ะ›ะฐัƒะฝั‡ะตั€ ะŸะปัƒั‚ะพะฝะฐ" - -#: main.py:365 -msgid "Planet Launcher" -msgstr "Planet ะ›ะฐัƒะฝั‡ะตั€" - -#: main.py:378 -msgid "Username" -msgstr "ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั" - -#: main.py:381 -msgid "StevePi" -msgstr "ะกั‚ะธะฒะŸะธ" - -#: main.py:384 -msgid "Render Distance" -msgstr "ะ ะฐััั‚ะพัะฝะธะต ะพั‚ะพะฑั€ะฐะถะตะฝะธั" - -#: main.py:391 -msgid "Profile" -msgstr "ะŸั€ะพั„ะธะปัŒ ะทะฐะฟัƒัะบะฐ" - -#: main.py:406 -msgid "Hide Launcher" -msgstr "ะกะบั€ั‹ั‚ัŒ ะฟะพัะปะต ะทะฐะฟัƒัะบะฐ" - -#: main.py:535 -msgid "Servers are stored in the format of IP: Port" -msgstr "ะกะตั€ะฒะตั€ั‹ ั…ั€ะฐะฝัั‚ัั ะฒ ั„ะพั€ะผะฐั‚ะต IP: ะŸะพั€ั‚" - -#: main.py:588 -msgid "Set the skin" -msgstr "ะ’ั‹ะฑั€ะฐั‚ัŒ ัะบะธะฝ" - -#: main.py:590 -msgid "Select Skin" -msgstr "ะ’ั‹ะฑั€ะฐั‚ัŒ ัะบะธะฝ" - -#: main.py:593 -msgid "Reset config" -msgstr "ะกะฑั€ะพัะธั‚ัŒ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธัŽ" - -#: main.py:595 -msgid "Delete config" -msgstr "ะฃะดะฐะปะธั‚ัŒ ะบะพะฝั„ะธะณัƒั€ะฒั†ะธัŽ" - -#: main.py:598 -msgid "Delete executable" -msgstr "ะฃะดะฐะปะธั‚ัŒ ะทะฐะฟัƒัะบะฝะพะน ั„ะฐะนะป" - -#: main.py:600 -msgid "Delete" -msgstr "ะฃะดะฐะปะธั‚ัŒ" - -#: main.py:603 -msgid "Import settings" -msgstr "ะ˜ะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ" - -#: main.py:623 -msgid "General" -msgstr "ะžะฑั‰ะตะต" - -#: main.py:624 -msgid "Changelog" -msgstr "ะ–ัƒั€ะฝะฐะป ะธะทะผะตะฝะตะฝะธะน" - -#: main.py:625 -msgid "MCPIEdit" -msgstr "ะ ะตะดะฐะบั‚ะพั€ MCPIEdit" - -#: main.py:705 -msgid "Select skin file" -msgstr "ะ’ั‹ะฑะตั€ะธั‚ะต ัะบะธะฝ" - -#: main.py:719 main.py:736 -msgid "Are you sure you want to reset?" -msgstr "ะ’ั‹ ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝะพ ั…ะพั‚ะธั‚ะต ัะฑั€ะพัะธั‚ัŒ ะดะฐะฝะฝั‹ะต?" - -#: main.py:721 -msgid "Are you sure you want to delete the config? This action is unrecoverable." -msgstr "ะ’ั‹ ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ ั„ะฐะนะป ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ? ะญั‚ะพ ะดะตะนัั‚ะฒะธะต ะฝะตะพะฑั€ะฐั‚ะธะผะพ." - -#: main.py:738 -msgid "Are you sure you want to delete the AppImage? This action is unrecoverable." -msgstr "ะ’ั‹ ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ ั„ะฐะนะป AppImage? ะญั‚ะพ ะดะตะนัั‚ะฒะธะต ะฝะตะพะฑั€ะฐั‚ะธะผะพ." - -#: main.py:812 -msgid "Using /usr/bin as an executable." -msgstr "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะธะต /usr/bin ะฒ ะบะฐั‡ะตัั‚ะฒะต ะทะฐะฟัƒัะบะฝะพะณะพ ั„ะฐะนะปะฐ." - diff --git a/planet/assets/translations/ru_RU/LC_MESSAGES/mcpiedit.mo b/planet/assets/translations/ru_RU/LC_MESSAGES/mcpiedit.mo deleted file mode 100644 index 4d47464ed0f000a6027808a5199ec46b2836b0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3325 zcmb7FTWl0n7(ObXjCT~p3-N~pXp_#eTMOdCV&qcNgaSfQ;KfXLPq$-d&unI9TQ|W# z!AeLG3<+WkiV}^!Xv(Fu+-gkp{mh#W#24cmiBCT9;`g7K-L_C4n9b}r=Rg1D`!8qa z&qedj2wY2Wzl!@d?iIMtJ%m48*@uOg56l7Q0p9>F1a1I63hV?f2JQep1}p)W11rGK zfu8|KfU6!!_J0CCiSgN0myoP1DWT) zKnr*m_zq$(fROp^1KFp53iuN6BOvRY1#SmkNag$PdBj z72tVb7I-7YJ1H)GT!=-G?*J|ZI=~l!hk!2t&!+e@@GjQB178OIiX;~RZv&a%UqEgF z_XUsU;(gAA>&LmERI@IQ!`HL8k-Di1ukXFMPR#Ln+@NjxfO44&bW9(4fl`QPa5Hbd zxbNcaUcVNJO-^w@Y;!7-Dt<|dZBog=@x*o~jA)nV)Mbf!+=>h%r&1N&n|F0>ExD2C zc9kp!P9Jn!+AasBM>{t4P>aWpnUWK=3SLX-`awvJ=lMfa_iGgSM##?r4f%mrvie+4 zhP+YicT`zYxj`muqX?nfEJu|Hjul1yGBF|rr3~$no-9V>D2{F%H3QT_SCx%HZ!L;^ zMZFRnGGd1x$-HGU3n;8QL#pb#Dgwtq(x43L)LSc;>&vYDU|Vs^{ZXPtZW=!DRoSX~ zPEnE{B(zY+&@IVnddsXWJ}EzqAKQ3a9G z+S8;(`{t1CpF?&)>~RLANDI<*ILp(F#eOkkaX|E-t|i&$)Vv7kyIy1?+vx^UA2J0u zC8LaG@epuhsp1TvaVEt+%z@24puWJbm_qo0TXvP>QB%Jf_#dEMR&SjUa8uw9NVVH> zy*3)^cZ>bxhL-0Rr3x`~HC2*<@zdSaL#a3;coeCnOJOF917WLpk0&VkHzOf-B{A%- zlKrj>Lf2P$LbJf!_MDn3_RGN9wbR}$2VLH@w>TIFYR|T}+u05~x0bTmeEV99$KUP= z92I&FCOA)!sB+CIOS?xpl|1dPg`w*xtGlav>vW`CCTnf>RU{Rx>s5G;SU_-poxCL8OMecDQ@J zwROF<&)yvPL&)DwTX=up?o+Y5w&ZC|F59tg?F{=yr}7lkW{CNK<*8Dvx;(s@s(;U( zan{l7Gh4sEd#@$**Q9@m59=v?8UJJYCVu0P>WjRLkLX)^O6V`l?v%a+y=#P>aeY-! z>YIt;aV*&e+Azldbv;J#_;5T5oQzKq>?b*{ z(BBxvG3*|J)?stZ%)42C2bS0Ljd;`?;rJ-@nb<9u&w6jS%y?Vh>n=5BQhLHOiIB!mq^;p2Qgke0Y$7fV49&Kxu zB|g<=aalOjRcOI_%upF)KP*T~ks*B=elDW0hdBUyOo^D!0z82G|L``PusLk%50_K% z@%Ti1lF%YF7WrRi5*!gEGD4r{Ae>En415feyrnO|?pUJAZ9IjNa3eWk^sJGt={hT7 zhs%I2bCDpp6^|~nI1SEfibI(^OyMU?sjeioi-+0aC1Y#Gatu0?Nbm%_P3fDKp*EaY zLq4m56FhZ1%RFM^*yL$Oc4;BO;47|cGVK@Rqxzch6MxDqO#>+Y#H0nj@krA!9zkKw z@YsUh5fI|cp@Ng3e=t?Lo(z9F$;f?XhlFmFj}Ha1NHV@^NX}8heGh7||3M872>mVk zGJ;Z>9`n?S`=*RPkc~Wq{u0D-4ncYn+4F%wGryl(4nlLOBkXCeplSGY4bz5AA9W6l zI6T$&f0Z#O!{*rXOiZAO7^TM78Pq2Dox&r0IpNtH9rL= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" -"X-Crowdin-Project: planet-launcher\n" -"X-Crowdin-Project-ID: 510486\n" -"X-Crowdin-Language: ru\n" -"X-Crowdin-File: mcpiedit.po\n" -"X-Crowdin-File-ID: 4\n" -"Language: ru_RU\n" - -#: mcpiedit.py:69 -msgid "The default built-in NBT editor for Planet.\n\n" -"MCPIedit makes use of Pi-NBT\n" -" from the original MCPIedit project\n" -"by TheBrokenRail, which is\n" -"licensed under the MIT license." -msgstr "ะ’ัั‚ั€ะพะตะฝะฝั‹ะน ั€ะตะดะฐะบั‚ะพั€ NBT ะดะปั Planet.\n\n" -"MCPIedit ะธัะฟะพะปัŒะทัƒะตั‚ Pi-NBT\n" -"ะธะท ะพั€ะธะณะธะฝะฐะปัŒะฝะพะณะพ ะฟั€ะพะตะบั‚ะฐ MCPIedit, ะบะพั‚ะพั€ั‹ะน ัะพะทะดะฐะฝ\n" -"TheBrokenRail, \n" -"ะปะธั†ะตะฝะทะธั€ะพะฒะฐะฝ ะฟะพะด ะปะธั†ะตะฝะทะธะตะน MIT." - -#: mcpiedit.py:86 -msgid "NBT editors allow you to edit your world\n" -"files to change game modes, time,\n" -"and even the world name. Select an NBT\n" -"file to edit using the button below." -msgstr "ะ ะตะดะฐะบั‚ะพั€ั‹ NBT ะฟะพะทะฒะพะปััŽั‚ ั€ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ\n" -"ั„ะฐะนะปั‹, ั‡ั‚ะพะฑั‹ ะธะทะผะตะฝะธั‚ัŒ ะธะณั€ะพะฒั‹ะต ั€ะตะถะธะผั‹, ะฒั€ะตะผั,\n" -"ะธ ะดะฐะถะต ะฝะฐะทะฒะฐะฝะธะต ะผะธั€ะฐ. ะ’ั‹ะฑะตั€ะธั‚ะต ั„ะฐะนะป NBT\n" -"ะดะปั ั€ะตะดะฐะบั‚ะธั€ะพะฒะฐะฝะธั ั ะฟะพะผะพั‰ัŒัŽ ะบะฝะพะฟะบะธ ะฝะธะถะต." - -#: mcpiedit.py:90 -msgid "Select NBT File" -msgstr "ะ’ั‹ะฑะตั€ะธั‚ะต NBT ั„ะฐะนะป" - -#: mcpiedit.py:92 -msgid "About" -msgstr "ะž ะฟั€ะพะณั€ะฐะผะผะต" - -#: mcpiedit.py:120 -msgid "General" -msgstr "ะžะฑั‰ะตะต" - -#: mcpiedit.py:121 -msgid "World" -msgstr "ะœะธั€" - -#: mcpiedit.py:150 -msgid "World name" -msgstr "ะะฐะทะฒะฐะฝะธะต ะผะธั€ะฐ" - -#: mcpiedit.py:153 -msgid "OneChunk" -msgstr "ะ•ะดะฝัั‚ะฒะตะฝะฝั‹ะน ะงะฐะฝะบ" - -#: mcpiedit.py:161 -msgid "Last Played Timestamp" -msgstr "ะžั‚ะผะตั‚ะบะฐ ะฒั€ะตะผะตะฝะธ ะฟะพัะปะตะดะฝะตะณะพ ะพั‚ะบั€ั‹ั‚ะธั ะผะธั€ะฐ" - -#: mcpiedit.py:166 -msgid "Game mode" -msgstr "ะ˜ะณั€ะพะฒะพะน ั€ะตะถะธะผ" - -#: mcpiedit.py:176 -msgid "Time (In Ticks)" -msgstr "ะ’ั€ะตะผั (ะฒ ั‚ะธะบะฐั…)" - -#: mcpiedit.py:182 -msgid "Back" -msgstr "ะžะฑั€ะฐั‚ะฝะพ" - -#: mcpiedit.py:184 -msgid "Save" -msgstr "ะกะพั…ั€ะฐะฝะธั‚ัŒ" - -#: mcpiedit.py:213 -msgid "Spawnpoint X" -msgstr "ะšะพะพั€ะดะธะฝะฐั‚ั‹ ะฅ" - -#: mcpiedit.py:219 -msgid "Spawnpoint Y" -msgstr "ะšะพะพั€ะดะธะฝะฐั‚ั‹ Y" - -#: mcpiedit.py:225 -msgid "Spawnpoint Z" -msgstr "ะšะพะพั€ะดะธะฝะฐั‚ั‹ Z" - -#: mcpiedit.py:231 -msgid "Player Spawnpoint X" -msgstr "ะขะพั‡ะบะฐ ะฒะพะทั€ะพะถะดะตะฝะธั ะธะณั€ะพะบะฐ X" - -#: mcpiedit.py:237 -msgid "Player Spawnpoint Y" -msgstr "ะขะพั‡ะบะฐ ะฒะพะทั€ะพะถะดะตะฝะธั ะธะณั€ะพะบะฐ Y" - -#: mcpiedit.py:243 -msgid "Player Spawnpoint Z" -msgstr "ะขะพั‡ะบะฐ ะฒะพะทั€ะพะถะดะตะฝะธั ะธะณั€ะพะบะฐ Z" - -#: mcpiedit.py:258 -msgid "Note:\n" -"Player spawnpoints are very buggy!\n" -"You might spawn in the wrong\n" -"place or even outside the world!\n" -"Do not use on valuable worlds." -msgstr "ะŸั€ะธะผะตั‡ะฐะฝะธะต:\n" -"ะขะพั‡ะบะธ ะฟะพัะฒะปะตะฝะธั ะธะณั€ะพะบะฐ ะพั‡ะตะฝัŒ ะฝะตั‚ะพั‡ะฝั‹!\n" -"ะ’ั‹ ะผะพะถะตั‚ะต ะฒะพะทั€ะพะดะธั‚ัŒัั ะฒ ะฝะตะฟั€ะฐะฒะธะปัŒะฝะพะผ\n" -"ะผะตัั‚ะต ะธะปะธ ะดะฐะถะต ะทะฐ ะฟั€ะตะดะตะปะฐะผะธ ะผะธั€ะฐ!\n" -"ะะต ะฟั€ะพะฑัƒะนั‚ะต ัั‚ะพ ะฝะฐ ั†ะตะฝะฝั‹ั… ะผะธั€ะฐั…." - -#: mcpiedit.py:323 -msgid "Open NBT File" -msgstr "ะžั‚ะบั€ั‹ั‚ัŒ ั„ะฐะนะป NBT" - -#: mcpiedit.py:325 -msgid "Minecraft Pi Level NBT (level.dat)" -msgstr "ะคะฐะนะปั‹ NBT ัƒั€ะพะฒะฝั Minecraft Pi (level.dat)" - -#: mcpiedit.py:344 -msgid "MCPIEdit" -msgstr "ะ ะตะดะฐะบั‚ะพั€ MCPIEdit" - diff --git a/planet/launcher.py b/planet/launcher.py deleted file mode 100644 index 135a17a..0000000 --- a/planet/launcher.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Copyright (C) 2022 Alexey Pavlov - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -""" -import subprocess -import os - - -def get_features_list(path_: str) -> list: - features = subprocess.run( - [path_, "--print-available-feature-flags"], stdout=subprocess.PIPE - ).stdout.decode("utf-8") - features = features.split("\n") - returnlist = list() - for feature in features: - if feature.startswith("TRUE"): - feature = feature[5:] - if feature.startswith("FALSE"): - feature = feature[6:] - returnlist.append(feature) - - return returnlist - - -def get_features_dict(path_: str) -> dict: - features = subprocess.run( - [path_, "--print-available-feature-flags"], stdout=subprocess.PIPE - ).stdout.decode("utf-8") - features = features.split("\n") - returndict = dict() - for feature in features: - if feature.startswith("TRUE"): - feature = feature[5:] - returndict[feature] = True - if feature.startswith("FALSE"): - feature = feature[6:] - returndict[feature] = False - return returndict - - -def set_username(env, username: str = "StevePi"): - env["MCPI_USERNAME"] = username - return env - - -def set_render_distance(env, distance: str = "SHORT"): - if distance.upper() not in ["TINY", "SHORT", "NORMAL", "FAR"]: - raise Exception("Invalid render distance") - else: - env["MCPI_RENDER_DISTANCE"] = distance - return env - - -def set_hud(env, options: str = "fps,simple"): - env["GALLIUM_HUD"] = options - return env - - -def set_options(env, options: dict): - output = str() - for option in options: - if options[option]: - output += f"{option}|" - - env["MCPI_FEATURE_FLAGS"] = output - return env - - -def run(env, path_: str): - return subprocess.Popen([path_], env=env, preexec_fn=os.setsid) diff --git a/planet/main.py b/planet/main.py deleted file mode 100644 index f2a9bed..0000000 --- a/planet/main.py +++ /dev/null @@ -1,843 +0,0 @@ -#!/usr/bin/python3 -""" - -Planet is an improved launcher for Minecraft Pi Edition: Reborn, inspired by gMCPIL, jMCPIL, MCPIL and MCPIL-R. - -Copyright (C) 2022 Alexey Pavlov -Copyright (C) 2022 Red-Exe-Engineer -Copyright (C) 2022 Bigjango13 - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - - -""" - - -# Built-in modules import - -import sys -import os -import random -from datetime import date -import json -import pathlib -import gettext - -LOCALE = os.getenv("LANG", "en") - -# Define the path used for later -absolute_path = pathlib.Path(__file__).parent.absolute() - -# ran only if it's in a deb file -if str(absolute_path).startswith("/usr/bin"): - absolute_path = "/usr/lib/planet-launcher/" - -# Make the launcher import local files -sys.path.append(absolute_path) -if os.path.exists("/usr/lib/planet-launcher/"): - sys.path.append("/usr/lib/planet-launcher/") - - -_ = gettext.translation( - "main", localedir=str(absolute_path) + "/assets/translations/", languages=[LOCALE] -).gettext - -# Local imports -import launcher -from splashes import SPLASHES -import web -import mcpiedit - -# PyQt5 imports -from PyQt5.QtCore import * -from PyQt5.QtWidgets import * -from PyQt5.QtGui import * -from PyQt5.QtWebKit import * -from PyQt5.QtWebKitWidgets import * - -from qtwidgets import AnimatedToggle - -# Additional imports -import qdarktheme # Dark style for PyQt5 -import pypresence # Discord RPC -from PIL import Image -import darkdetect - -# Load dark theme -dark_stylesheet = qdarktheme.load_stylesheet() - -USER = os.getenv("USER") # Get the username, used for later - -# Create the mods directory if it does not exist -if not os.path.exists(f"/home/{USER}/.planet-launcher/mods"): - os.makedirs(f"/home/{USER}/.planet-launcher/mods") - -if not os.path.exists(f"/home/{USER}/.minecraft-pi/overrides/images/mob/"): - os.makedirs(f"/home/{USER}/.minecraft-pi/overrides/images/mob/") - -# if os.path.exists(f"/home/{USER}/.gmcpil.json"): -# with open(f"/home/{USER}/.gmcpil.json") as f: -# DEFAULT_FEATURES = json.loads(f.read())["features"] -# else: -# TODO: Add a tab with a button to import features from gMCPIL - -if darkdetect.isDark(): - theme = "dark" -else: - theme = "light" - - -class ConfigPluto(QDialog): - """Startup configurator for Planet. Based on QDialog.""" - - def __init__(self): - super().__init__() - # Remove the window bar - self.setWindowFlag(Qt.FramelessWindowHint) - - layout = QVBoxLayout() # Real layout used by the widger - titlelayout = QGridLayout() # Layout for the title - - # Load the logo pixmap - logopixmap = QPixmap(f"{absolute_path}/assets/img/full/logo512.png").scaled( - 100, 100, Qt.KeepAspectRatio - ) - - # Create the name label - namelabel = QLabel("Pluto Wizard") - - logolabel = QLabel() # label used for the logo - logolabel.setPixmap(logopixmap) # Load the pixmap into the label - logolabel.setAlignment(Qt.AlignRight) # Align right - - font = namelabel.font() # This font is just used to set the size - font.setPointSize(30) - namelabel.setFont(font) # Apply the font to the label - namelabel.setAlignment(Qt.AlignLeft) # Align left - - titlelayout.addWidget(logolabel, 0, 0) # Add the logo into the layout - titlelayout.addWidget(namelabel, 0, 1) # Add the name into the layout - - titlewidget = QWidget() # Fake widget that takes the title layout - titlewidget.setLayout(titlelayout) # Set the layout - - # Label with information - info_label = QLabel( - _( - 'Please select the executable you downloaded.\nIf you installed a DEB, please select the "Link" option' - ) - ) - - self.executable_btn = QPushButton(_("Select executable")) # Button for AppImage - self.executable_btn.clicked.connect( - self.get_appimage - ) # Connect to the function - - self.premade_btn = QPushButton( - _("Link /usr/bin/minecraft-pi-reborn-client") - ) # Button for Pre-installed debs - self.premade_btn.clicked.connect(self.link_appimage) # Connect to the function - - self.flatpak_btn = QPushButton(_("Link flatpak")) # Button for linking flatpak - self.flatpak_btn.clicked.connect(self.link_flatpak) # Connect to the function - - # Adding things to widgets - layout.addWidget(titlewidget) - layout.addWidget(info_label) - layout.addWidget(self.executable_btn) - layout.addWidget(self.premade_btn) - layout.addWidget(self.flatpak_btn) - - self.setLayout(layout) - - # Functions below are related to window movement - - def mousePressEvent(self, event): - if event.button() == Qt.LeftButton: - self.moveFlag = True - self.movePosition = event.globalPos() - self.pos() - self.setCursor(QCursor(Qt.OpenHandCursor)) - event.accept() - - def mouseMoveEvent(self, event): - if Qt.LeftButton and self.moveFlag: - self.move(event.globalPos() - self.movePosition) - event.accept() - - def mouseReleaseEvent(self, event): - self.moveFlag = False - self.setCursor(Qt.ArrowCursor) - - def get_appimage(self): - self.hide() # Hide the dialog - # Open the file dialog - self.filename = QFileDialog.getOpenFileName( - self, - _("Select executable"), - "/", - "Executable files (*.AppImage *.bin *.sh *)", - ) - - def link_appimage(self): - self.hide() # hide the dialog - # Link the executable with the AppImage - os.symlink( - "/usr/bin/minecraft-pi-reborn-client", - f"/home/{USER}/.planet-launcher/minecraft.AppImage", - ) - self.filename = list() # Make a fake list - self.filename.append( - False - ) # Append False to the fake list. See end of file for more info - - def link_flatpak(self): - script_text = ( - "#!/bin/bash\nflatpak run com.thebrokenrail.MCPIReborn $1" - ) # Script contents - with open( - f"/home/{USER}/.planet-launcher/minecraft.AppImage", "w" - ) as file: # Open the file - file.write(script_text) # Write the script text - - self.filename = list() # Fake list. See function above for more info - self.filename.append(False) - - -class Planet(QMainWindow): - """Main window class. Contains tabs and everything""" - - launchfeatures = dict() # Dictionary for custom features - env = os.environ.copy() # ENV variables - - def __init__(self): - super().__init__() - self.center() - - try: - RPC = pypresence.Presence( - 787496148763541505 - ) # Try to initialize pypresence and find Discord - RPC.connect() # Connect to Discord - # Set the RPC Status - RPC.update( - state=_("Launched with Planet Launcher"), - details=_("Minecraft Pi Edition: Reborn"), - large_image=random.choice( - ["revival", "logo"] - ), # Randomly select the logo - small_image=random.choice( - ["heart", "portal", "multiplayer", "logo", "revival"] - ), # Randomly select the tiny image - ) - except: - print( - _("Unable to initalize Discord RPC. Skipping.") - ) # If it fails, e.g Discord is not found, skip. This doesn't matter much. - - if not os.path.exists( - f"/home/{USER}/.planet-launcher/config.json" - ): # Config file does not exist. - - # Set the configuration variable - self.conf = { - "username": "StevePi", - "options": launcher.get_features_dict( - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ), - "hidelauncher": True, - "profile": "Modded MCPE", - "render_distance": "Short", - "theme": theme, - "discord_rpc": True, - "version": "extended_2.3.2", - } - - with open( - f"/home/{USER}/.planet-launcher/config.json", "w" - ) as file: # Write it to the configuration file - file.write(json.dumps(self.conf)) - else: - with open( - f"/home/{USER}/.planet-launcher/config.json" - ) as file: # Else, it exists: Read from it. - self.conf = json.loads(file.read()) - - self.setWindowTitle(_("Planet")) # Set the window title - - self.setWindowIcon( - QIcon(f"{absolute_path}/assets/img/full/logo512.png") - ) # Set the window icon - - self.widget = QWidget() - self.layout = QStackedLayout() - - tabs = QTabWidget() # Create the tabs - tabs.setTabPosition(QTabWidget.North) # Select the tab position. - tabs.setMovable(True) # Allow tab movement. - - # Tab part. Please check every function for more info - play_tab = tabs.addTab(self.play_tab(), _("Play")) # Add the play tab - tabs.setTabIcon( - play_tab, QIcon(f"{absolute_path}/assets/img/full/logo512.png") - ) # Set the icon for the tab - features_tab = tabs.addTab( - self.features_tab(), _("Features") - ) # Add the features tab - tabs.setTabIcon( - features_tab, QIcon(f"{absolute_path}/assets/img/full/heart512.png") - ) # set the icon for the tab - servers_tab = tabs.addTab(self.servers_tab(), _("Servers")) # Servers tab - tabs.setTabIcon( - servers_tab, QIcon(f"{absolute_path}/assets/img/full/portal512.png") - ) # Set the icon - # mods_tab = tabs.addTab(self.custom_mods_tab(), "Mods") - # tabs.setTabIcon(mods_tab, QIcon(f"{absolute_path}/assets/portal512.png")) - settings_tab = tabs.addTab(self.settings_tab(), _("Settings")) # Changelog tab - tabs.setTabIcon( - settings_tab, QIcon(f"{absolute_path}/assets/img/full/wrench512.png") - ) - - self.layout.addWidget(tabs) - - self.widget.setLayout(self.layout) - - self.setCentralWidget(self.widget) # Set the central widget to the tabs - - self.setGeometry( - 600, 900, 200, 200 - ) # Set the window geometry. Doesn't do much effect from my observations, unfortunartely - - self.usernameedit.setText( - self.conf["username"] - ) # Set the username text to the configuration's variant - self.profilebox.setCurrentText(self.conf["profile"]) # See top comment - self.distancebox.setCurrentText( - self.conf["render_distance"] - ) # See top comments - - for feature in self.features: - try: - if self.conf["options"][feature]: - self.features[feature].setCheckState( - Qt.Checked - ) # Set to checked if the configuration has it to true - else: - self.features[feature].setCheckState( - Qt.Unchecked - ) # Else, set it unchecked - except KeyError: # May happen on downgrades or upgrades of the Reborn version - pass - - # Hide launcher/Show it depending on the config - self.showlauncher.setChecked(self.conf["hidelauncher"]) - - # Set the features - self.set_features() - - def play_tab(self) -> QWidget: - """The main tab, with the main functionality""" - layout = QGridLayout() # The layout - - titlelayout = QGridLayout() # The layout for the title - - # Load the logo pixmap - logopixmap = QPixmap(f"{absolute_path}/assets/img/full/logo512.png").scaled( - 100, 100, Qt.KeepAspectRatio # Scale it, but keep the aspect ratio - ) - - logolabel = QLabel() # Label for the pixmap - logolabel.setPixmap(logopixmap) # apply the pixmap onto the label - logolabel.setAlignment(Qt.AlignRight) # Align the label - - namelabel = QLabel() # Label for the title - - # Ester eggs - if date.today().month == 4 and date.today().day == 1: - namelabel.setText( - _("Banana Launcher") - ) # If the date is april fish, show the banana easter egg - else: - if random.randint(1, 100) == 1: - namelabel.setText(_("Pluto Launcher")) # a 1/100, Pluto launcher - else: - namelabel.setText(_("Planet Launcher")) # Else, just set it normal - - font = namelabel.font() # Font used - font.setPointSize(30) # Set the font size - namelabel.setFont(font) # Aplly the font onto the label - namelabel.setAlignment(Qt.AlignLeft) # Align the label - - splashlabel = QLabel( - f'{random.choice(SPLASHES)}' - ) # Label for splash. Uses QSS for color - splashlabel.adjustSize() # Adjust the size just in case - splashlabel.setAlignment(Qt.AlignHCenter) # Align the label - - usernamelabel = QLabel( - _("Username") - ) # Label that is used to direct the line edit - - self.usernameedit = QLineEdit() # Line Edit for username - self.usernameedit.setPlaceholderText(_("StevePi")) # Set ghost value - - distancelabel = QLabel( - _("Render Distance") - ) # Label that is used to direct the combo box - - self.distancebox = QComboBox() - self.distancebox.addItems(["Far", "Normal", "Short", "Tiny"]) # Set the values - self.distancebox.setCurrentText("Short") # Set the default option - - profilelabel = QLabel( - _("Profile") - ) # Label that is used to direct the combo box - - self.profilebox = QComboBox() - self.profilebox.addItems( - [ - "Vanilla MCPi", - "Modded MCPi", - "Modded MCPE", - "Optimized MCPE", - "Custom", - ] # Add items into the combo box - ) - self.profilebox.setCurrentText("Modded MCPE") # Set the current selection - - self.showlauncher = QRadioButton( - _("Hide Launcher") - ) # RadioButton used for hiding the launcher - - self.versionbox = QComboBox() - - # versions = json.loads(web.get_versions())["versions"] - - # version_list = list() - - # for version in versions: - # version_list.append(versions[version]) - - # version_name_list = list() - - # for version in version_list: - # version_name_list.append(version["name"]) - - # self.versionbox.addItems(version_name_list) # Set the values - # self.versionbox.setCurrentText("Short") # Set the default option - - self.playbutton = QPushButton("Play") # The most powerful button - - self.playbutton.setCheckable(True) # Allow checking it - self.playbutton.clicked.connect( - self.launch - ) # Connect it to the executing function - - # Add widgets into the title layout - titlelayout.addWidget(logolabel, 0, 0) - titlelayout.addWidget(namelabel, 0, 1) - - titlewidget = QWidget() - titlewidget.setLayout(titlelayout) # Apply the layout onto a fake widget - - layout.addWidget( - titlewidget, 0, 0, 2, 5 - ) # Apply that widget onto the main layout - - # All other widgets are applied here - layout.addWidget(splashlabel, 2, 0, 1, 6) - - layout.addWidget(usernamelabel, 3, 0) - layout.addWidget(self.usernameedit, 3, 4, 1, 2) - - layout.addWidget(distancelabel, 4, 0) - layout.addWidget(self.distancebox, 4, 4, 1, 2) - - layout.addWidget(profilelabel, 5, 0) - layout.addWidget(self.profilebox, 5, 4, 1, 2) - - layout.addWidget(self.showlauncher, 6, 4) - - # layout.addWidget(self.versionbox, 8, 0, 1, 3) - - layout.addWidget(self.playbutton, 8, 4, 1, 2) - - widget = QWidget() - - widget.setLayout(layout) # Apply the layout onto the main widget - - return widget - - def features_tab(self) -> QWidget: - - layout = QVBoxLayout() - - self.features = dict() # Dictionary used for storing checkboxes for features - default_features = launcher.get_features_dict( # Get default feature list - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ) - - for feature in default_features: # Loop in default features - checkbox = QCheckBox(feature) # For each feature, create a checkbox - # TODO: Fix the error if newer features are added here, or check for them in self.conf - if default_features[feature]: # Check if it's checked. If so, check it - checkbox.setCheckState(Qt.Checked) - else: - checkbox.setCheckState(Qt.Unchecked) - - checkbox.clicked.connect(self.set_features) # Connect saving function - - self.features[feature] = checkbox # Add the checkbox into the list - - layout.addWidget(checkbox) # Add the checkbox into the layout - - fakewidget = QWidget() # Create a fake widget to apply the layout on - fakewidget.setLayout(layout) # Apply the layoutonto - - scroll = QScrollArea() # Add a scoll area - - scroll.setVerticalScrollBarPolicy( - Qt.ScrollBarAlwaysOn - ) # Shoe the vertical scroll bar - scroll.setHorizontalScrollBarPolicy( - Qt.ScrollBarAlwaysOff - ) # Hide the horizontak scroll bar - scroll.setWidgetResizable( - True - ) # Allow window resizing and fix itt with the scrollbar - scroll.setWidget(fakewidget) # Set the main widget into the scrollbar - - fakelayout = QGridLayout() - fakelayout.addWidget(scroll, 0, 0) # Apply the scrollbar onto the layout - - widget = QWidget() - - widget.setLayout(fakelayout) - - return widget - - def servers_tab(self) -> QWidget: - widget = QWidget() - layout = QGridLayout() - - self.serversedit = QTextEdit() # Create a text editing area - - if not os.path.exists(f"/home/{USER}/.minecraft-pi/servers.txt"): - with open(f"/home/{USER}/.minecraft-pi/servers.txt") as servers: - servers.write("pbptanarchy.tk") - - self.serversedit.textChanged.connect( - self.save_servers - ) # Connect on change to the save function - with open(f"/home/{USER}/.minecraft-pi/servers.txt") as servers: - self.serversedit.setPlainText( - servers.read() - ) # Set the text of the text editing area - - infolabel = QLabel( # Label with information about the server format - _( - 'Servers are stored in the format of IP: Port' - ) - ) - - layout.addWidget(self.serversedit, 0, 0) # Add the widgets - layout.addWidget(infolabel, 6, 0) - - widget.setLayout(layout) - return widget - - def custom_mods_tab(self) -> QWidget: - layout = QVBoxLayout() - - for mod in os.listdir( - f"/home/{USER}/.planet-launcher/mods/" - ): # Loop in every mod in the mod directory - checkbox = QCheckBox(mod) # Create a checkbox with the mod name - checkbox.setCheckState(Qt.Unchecked) # Set it to unchecked - - layout.addWidget(checkbox) - - fakewidget = QWidget() - fakewidget.setLayout(layout) - - scroll = QScrollArea() - - scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) - scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - scroll.setWidgetResizable(True) - scroll.setWidget(fakewidget) - - fakelayout = QGridLayout() - fakelayout.addWidget(scroll, 0, 0) - - widget = QWidget() - - widget.setLayout(fakelayout) - - return widget - - def changelog_widget(self): - web_engine = QWebView() # Create a webview object - web_engine.load( - QUrl().fromLocalFile(f"{absolute_path}/assets/misc/changelog.html") - ) # Load the local file - # TODO: Use two different tabs for the webview - - return web_engine - - def settings_widget(self): - widget = QWidget() - - layout = QGridLayout() - - skin_label = QLabel(_("Set the skin")) - - self.skin_button = QPushButton(_("Select Skin")) - self.skin_button.clicked.connect(self.select_skin) - - config_label = QLabel(_("Reset config")) - - self.delete_config_button = QPushButton(_("Delete config")) - self.delete_config_button.clicked.connect(self.delete_config) - - appimage_label = QLabel(_("Delete executable")) - - self.delete_appimage_button = QPushButton(_("Delete")) - self.delete_appimage_button.clicked.connect(self.delete_appimage) - - self.import_gmcpil_button = QPushButton(_("Import settings")) - self.import_gmcpil_button.clicked.connect(self.import_gmcpil) - - layout.addWidget(skin_label, 0, 0) - layout.addWidget(self.skin_button, 0, 1) - - layout.addWidget(config_label, 1, 0) - layout.addWidget(self.delete_config_button, 1, 1) - - layout.addWidget(appimage_label, 2, 0) - layout.addWidget(self.delete_appimage_button, 2, 1) - - widget.setLayout(layout) - - return widget - - def settings_tab(self): - tabs = QTabWidget() - tabs.setTabPosition(QTabWidget.South) - - settings_tab = tabs.addTab(self.settings_widget(), _("General")) - changelog_tab = tabs.addTab(self.changelog_widget(), _("Changelog")) - editor_tab = tabs.addTab(mcpiedit.NBTEditor(), _("MCPIEdit")) - - tabs.setTabIcon( - settings_tab, QIcon(f"{absolute_path}/assets/img/full/wrench512.png") - ) # Set the icon - - tabs.setTabIcon( - changelog_tab, QIcon(f"{absolute_path}/assets/img/full/git.png") - ) # Set the icon - - tabs.setTabIcon( - editor_tab, QIcon(f"{absolute_path}/assets/img/full/mcpiedit.png") - ) # Set the icon - - return tabs - - def import_gmcpil(self): - with open(f"/home/{USER}/.gmcpil.json") as f: - gmcpil_features = json.loads(f.read())["features"] - for feature in gmcpil_features: - try: - if gmcpil_features[feature]: - self.features[feature].setCheckState( - Qt.Checked - ) # Set to checked if the configuration has it to true - self.conf["options"][feature] = True - else: - self.features[feature].setCheckState( - Qt.Unchecked - ) # Else, set it unchecked - self.conf["options"][feature] = False - except KeyError: # May happen on downgrades or upgrades of the Reborn version - pass - - def mousePressEvent(self, event): - if event.button() == Qt.LeftButton: - self.moveFlag = True - self.movePosition = event.globalPos() - self.pos() - self.setCursor(QCursor(Qt.OpenHandCursor)) - event.accept() - - def mouseMoveEvent(self, event): - if Qt.LeftButton and self.moveFlag: - self.move(event.globalPos() - self.movePosition) - event.accept() - - def mouseReleaseEvent(self, event): - self.moveFlag = False - self.setCursor(Qt.ArrowCursor) - - def center(self): - qr = self.frameGeometry() - cp = QDesktopWidget().availableGeometry().center() - qr.moveCenter(cp) - self.move(qr.topLeft()) - - def set_features(self): - for feature in self.features: - if self.features[feature].isChecked(): - self.launchfeatures[feature] = True - else: - self.launchfeatures[feature] = False - - def save_profile(self): - self.set_features() - self.conf["username"] = self.usernameedit.text() - self.conf["options"] = self.launchfeatures - self.conf["render_distance"] = self.distancebox.currentText() - self.conf["profile"] = self.profilebox.currentText() - self.conf["hidelauncher"] = self.showlauncher.isChecked() - - with open(f"/home/{USER}/.planet-launcher/config.json", "w") as file: - file.write(json.dumps(self.conf)) - - def save_servers(self): - with open(f"/home/{USER}/.minecraft-pi/servers.txt", "w") as file: - file.write(self.serversedit.toPlainText()) - - def select_skin(self): - filename = QFileDialog.getOpenFileName( - self, _("Select skin file"), "/", "PNG files (*.png)" - ) - if not filename == "": - with open( - f"/home/{USER}/.minecraft-pi/overrides/images/mob/char.png", "w" - ) as skin: - skin.write("quick placeholder") - - Image.open(filename[0]).crop((0, 0, 64, 32)).convert("RGBA").save( - f"/home/{USER}/.minecraft-pi/overrides/images/mob/char.png" - ) - - def delete_config(self): - dialog = QMessageBox() - dialog.setWindowTitle(_("Are you sure you want to reset?")) - dialog.setText( - _( - "Are you sure you want to delete the config? This action is unrecoverable." - ) - ) - dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort) - dialog.setIcon(QMessageBox.Warning) - - button = dialog.exec() - - if button == QMessageBox.Ok: - - os.remove(f"/home/{USER}/.planet-launcher/config.json") - self.hide() - sys.exit() - - def delete_appimage(self): - dialog = QMessageBox() - dialog.setWindowTitle(_("Are you sure you want to reset?")) - dialog.setText( - _( - "Are you sure you want to delete the AppImage? This action is unrecoverable." - ) - ) - dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort) - dialog.setIcon(QMessageBox.Warning) - - button = dialog.exec() - - if button == QMessageBox.Ok: - - os.remove(f"/home/{USER}/.planet-launcher/minecraft.AppImage") - self.hide() - sys.exit() - - def launch(self): - self.save_profile() - - if self.profilebox.currentText().lower() == "vanilla mcpi": - self.launchfeatures = launcher.get_features_dict( - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ) - for feature in self.launchfeatures: - self.launchfeatures[feature] = False - elif self.profilebox.currentText().lower() == "modded mcpi": - self.launchfeatures = launcher.get_features_dict( - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ) - self.launchfeatures["Touch GUI"] = False - elif self.profilebox.currentText().lower() == "modded mcpe": - self.launchfeatures = launcher.get_features_dict( - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ) - elif self.profilebox.currentText().lower() == "optimized mcpe": - self.launchfeatures = launcher.get_features_dict( - f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ) - self.launchfeatures["Fancy Graphics"] = False - self.launchfeatures["Smooth Lightning"] = False - self.launchfeatures["Animated Water"] = False - self.launchfeatures['Disable "gui_blocks" Atlas'] = False - - self.env = launcher.set_username(self.env, self.usernameedit.text()) - self.env = launcher.set_options(self.env, self.launchfeatures) - self.env = launcher.set_render_distance( - self.env, self.distancebox.currentText() - ) - - if self.showlauncher.isChecked() == True: - self.hide() - launcher.run( - self.env, f"/home/{USER}/.planet-launcher/minecraft.AppImage" - ).wait() - else: - launcher.run(self.env, f"/home/{USER}/.planet-launcher/minecraft.AppImage") - self.show() - - -if __name__ == "__main__": - - apppath = str() - - app = QApplication(sys.argv) - if os.path.exists(f"/home/{USER}/.planet-launcher/config.json"): - with open(f"/home/{USER}/.planet-launcher/config.json") as file: - app.setPalette(qdarktheme.load_palette(json.loads(file.read())["theme"])) - else: - app.setPalette(qdarktheme.load_palette(theme)) - - if not os.path.exists(f"/home/{USER}/.planet-launcher/minecraft.AppImage"): - pluto = ConfigPluto() - pluto.show() - pluto.exec() - if pluto.filename[0] == "": - sys.exit(-1) - elif pluto.filename[0] == False: - print(_("Using /usr/bin as an executable.")) - else: - with open(pluto.filename[0], "rb") as appimage: - with open( - f"/home/{USER}/.planet-launcher/minecraft.AppImage", "wb" - ) as out: - out.write(appimage.read()) - os.chmod(f"/home/{USER}/.planet-launcher/minecraft.AppImage", 0o755) - - window = Planet() - window.show() - - app.exec() diff --git a/planet/mcpiedit.py b/planet/mcpiedit.py deleted file mode 100644 index ad7ff12..0000000 --- a/planet/mcpiedit.py +++ /dev/null @@ -1,363 +0,0 @@ -""" -Copyright (C) 2022 Alexey Pavlov - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - - -""" - -# MCPIEdit -# This is a different editor from revival's MCPIedit! -# This one is intended to work with Planet but it can work on its own - -import sys -import os -import pathlib -import gettext - -LOCALE = os.getenv("LANG") - -from PyQt5.QtCore import * -from PyQt5.QtWidgets import * -from PyQt5.QtGui import * - -import nbt_utils as nbt - -USER = os.getenv("USER") # Get the username, used for later - -absolute_path = pathlib.Path(__file__).parent.absolute() - -if str(absolute_path).startswith("/usr/bin"): - absolute_path = "/usr/lib/planet-launcher/" - -sys.path.append(absolute_path) -if os.path.exists("/usr/lib/planet-launcher/"): - sys.path.append("/usr/lib/planet-launcher/") - -if not os.path.exists(f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/"): - os.makedirs(f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/") - -_ = gettext.translation( - "mcpiedit", - localedir=str(absolute_path) + "/assets/translations/", - languages=[LOCALE], -).gettext - -GAME_TYPES = {"Survival": nbt.pynbt.TAG_Int(0), "Creative": nbt.pynbt.TAG_Int(1)} - -GAME_INTREGERS = {"0": "Survival", "1": "Creative"} - -BOOLEAN_INTREGERS = {0: False, 1: True} -BOOLEAN_INTREGERS_REVERSED = {False: 0, True: 1} - - -class AboutWindow(QWidget): - def __init__(self): - super().__init__() - - layout = QVBoxLayout() - - label = QLabel("About MCPIedit") - label.setAlignment(Qt.AlignHCenter) - font = label.font() # Font used - font.setPointSize(15) # Set the font size - label.setFont(font) # Aplly the font onto the label - - desc_label = QLabel( - _( - "The default built-in NBT editor for Planet.\n\nMCPIedit makes use of Pi-NBT\n from the original MCPIedit project\nby TheBrokenRail, which is\nlicensed under the MIT license." - ) - ) - desc_label.setAlignment(Qt.AlignHCenter) - - layout.addWidget(label) - layout.addWidget(desc_label) - - self.setLayout(layout) - - -class FileSelectorTab(QWidget): - def __init__(self): - super().__init__() - - layout = QVBoxLayout() - - info_label = QLabel( - _( - "NBT editors allow you to edit your world\nfiles to change game modes, time,\nand even the world name. Select an NBT\nfile to edit using the button below." - ) - ) - info_label.setAlignment(Qt.AlignHCenter) - - self.load_button = QPushButton(_("Select NBT File")) - - self.about_button = QPushButton(_("About")) - self.about_button.clicked.connect(self.about_window) - - layout.addWidget(info_label) - layout.addWidget(self.load_button) - layout.addWidget(self.about_button) - - self.setLayout(layout) - - def about_window(self): - self.window = AboutWindow() - self.window.show() - - -class EditorTab(QWidget): - def __init__(self, filename): - super().__init__() - - layout = QVBoxLayout() - - self.nbt = nbt.load_nbt(filename, True) - - self.filename = filename - - self.tabs = QTabWidget() - self.tabs.setTabPosition(QTabWidget.West) - self.tabs.setMovable(True) - - self.tabs.addTab(self.main_tab(), _("General")) - self.tabs.addTab(self.world_tab(), _("World")) - - self.name_edit.setText(str(self.nbt["LevelName"].value)) - self.timestamp_box.setValue(int(self.nbt["LastPlayed"].value)) - self.game_box.setCurrentText( - GAME_INTREGERS[str(int(self.nbt["GameType"].value))] - ) - self.seed_edit.setText(str(int(self.nbt["RandomSeed"].value))) - self.time_edit.setText(str(int(self.nbt["Time"].value))) - # self.mobs_toggle.setChecked(BOOLEAN_INTREGERS[int(self.nbt["SpawnMobs"])]) # REMOVED BECAUSE DOES NOT WORK - - self.spawn_x_box.setValue(int(self.nbt["SpawnX"].value)) - self.spawn_y_box.setValue(int(self.nbt["SpawnY"].value)) - self.spawn_z_box.setValue(int(self.nbt["SpawnZ"].value)) - - self.player_spawn_x_box.setValue(int(self.nbt["Player"]["SpawnX"].value)) - self.player_spawn_y_box.setValue(int(self.nbt["Player"]["SpawnY"].value)) - self.player_spawn_z_box.setValue(int(self.nbt["Player"]["SpawnZ"].value)) - - layout.addWidget(self.tabs) - - self.setLayout(layout) - - def main_tab(self): - - widget = QWidget() - - layout = QGridLayout() - - self.name_label = QLabel(_("World name")) - - self.name_edit = QLineEdit() - self.name_edit.setPlaceholderText(_("OneChunk")) - - self.seed_label = QLabel("World Seed") - - self.seed_edit = QLineEdit() - self.seed_edit.setPlaceholderText("-121542953") - self.seed_edit.setValidator(QIntValidator()) - - self.timestamp_label = QLabel(_("Last Played Timestamp")) - - self.timestamp_box = QSpinBox() - self.timestamp_box.setMaximum(2147483647) - - self.game_label = QLabel(_("Game mode")) - - self.game_box = QComboBox() - self.game_box.addItems(["Survival", "Creative"]) - - # self.mobs_toggle = AnimatedToggle( - # checked_color="#59b8e0", - # pulse_checked_color="#92cee8" - # ) - - self.time_label = QLabel(_("Time (In Ticks)")) - - self.time_edit = QLineEdit() - self.time_edit.setPlaceholderText("1770") - self.time_edit.setValidator(QIntValidator()) - - self.back_button = QPushButton(_("Back")) - - self.save_button = QPushButton(_("Save")) - self.save_button.clicked.connect(self.save) - - layout.addWidget(self.name_label, 0, 0) - layout.addWidget(self.name_edit, 0, 1) - - layout.addWidget(self.seed_label, 1, 0) - layout.addWidget(self.seed_edit, 1, 1) - - layout.addWidget(self.timestamp_label, 2, 0) - layout.addWidget(self.timestamp_box, 2, 1) - - layout.addWidget(self.game_label, 3, 0) - layout.addWidget(self.game_box, 3, 1) - - layout.addWidget(self.time_label, 4, 0) - layout.addWidget(self.time_edit, 4, 1) - - layout.addWidget(self.back_button, 5, 0) - layout.addWidget(self.save_button, 5, 1) - - widget.setLayout(layout) - - return widget - - def world_tab(self): - - layout = QGridLayout() - - x_label = QLabel(_("Spawnpoint X")) - - self.spawn_x_box = QSpinBox() - self.spawn_x_box.setMinimum(-128) - self.spawn_x_box.setMaximum(128) - - y_label = QLabel(_("Spawnpoint Y")) - - self.spawn_y_box = QSpinBox() - self.spawn_y_box.setMinimum(-64) - self.spawn_y_box.setMaximum(64) - - z_label = QLabel(_("Spawnpoint Z")) - - self.spawn_z_box = QSpinBox() - self.spawn_z_box.setMinimum(-128) - self.spawn_z_box.setMaximum(128) - - player_x_label = QLabel(_("Player Spawnpoint X")) - - self.player_spawn_x_box = QSpinBox() - self.player_spawn_x_box.setMinimum(-128) - self.player_spawn_x_box.setMaximum(128) - - player_y_label = QLabel(_("Player Spawnpoint Y")) - - self.player_spawn_y_box = QSpinBox() - self.player_spawn_y_box.setMinimum(-64) - self.player_spawn_y_box.setMaximum(64) - - player_z_label = QLabel(_("Player Spawnpoint Z")) - - self.player_spawn_z_box = QSpinBox() - self.player_spawn_z_box.setMinimum(-128) - self.player_spawn_z_box.setMaximum(128) - - layout.addWidget(x_label, 0, 0) - layout.addWidget(y_label, 1, 0) - layout.addWidget(z_label, 2, 0) - - layout.addWidget(player_x_label, 3, 0) - layout.addWidget(player_y_label, 4, 0) - layout.addWidget(player_z_label, 5, 0) - - note_label = QLabel( - _( - "Note:\nPlayer spawnpoints are very buggy!\nYou might spawn in the wrong\nplace or even outside the world!\nDo not use on valuable worlds." - ) - ) - - layout.addWidget(self.spawn_x_box, 0, 1) - layout.addWidget(self.spawn_y_box, 1, 1) - layout.addWidget(self.spawn_z_box, 2, 1) - - layout.addWidget(self.player_spawn_x_box, 3, 1) - layout.addWidget(self.player_spawn_y_box, 4, 1) - layout.addWidget(self.player_spawn_z_box, 5, 1) - - layout.addWidget(note_label, 6, 0, 1, 2) - - widget = QWidget() - widget.setLayout(layout) - - self.scroll = QScrollArea() - - self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) - self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) - self.scroll.setWidgetResizable(True) - self.scroll.setWidget(widget) - - return self.scroll - - def save(self): - self.nbt["LevelName"] = nbt.pynbt.TAG_String(self.name_edit.text()) - self.nbt["LastPlayed"] = nbt.pynbt.TAG_Long(self.timestamp_box.value()) - self.nbt["GameType"] = GAME_TYPES[self.game_box.currentText()] - self.nbt["RandomSeed"] = nbt.pynbt.TAG_Long(int(self.seed_edit.text())) - self.nbt["Time"] = nbt.pynbt.TAG_Long(int(self.time_edit.text())) - - self.nbt["SpawnX"] = nbt.pynbt.TAG_Int(self.spawn_x_box.value()) - self.nbt["SpawnY"] = nbt.pynbt.TAG_Int(self.spawn_y_box.value()) - self.nbt["SpawnZ"] = nbt.pynbt.TAG_Int(self.spawn_z_box.value()) - - self.nbt["Player"]["SpawnX"] = nbt.pynbt.TAG_Int( - self.player_spawn_x_box.value() - ) - self.nbt["Player"]["SpawnY"] = nbt.pynbt.TAG_Int( - self.player_spawn_y_box.value() - ) - self.nbt["Player"]["SpawnZ"] = nbt.pynbt.TAG_Int( - self.player_spawn_z_box.value() - ) - - nbt.save_nbt(self.nbt, self.filename) - - -class NBTEditor(QWidget): - def __init__(self): - super().__init__() - - self.layout = QStackedLayout() - - selector = FileSelectorTab() - selector.load_button.clicked.connect(self.load_nbt) - - self.layout.addWidget(selector) - - self.setLayout(self.layout) - - def load_nbt(self): - fname = QFileDialog.getOpenFileName( - self, - _("Open NBT File"), - f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/", - _("Minecraft Pi Level NBT (level.dat)"), - ) - - if fname[0] == "": - return - - editor = EditorTab(fname[0]) - editor.back_button.clicked.connect(lambda: self.layout.setCurrentIndex(0)) - - self.layout.insertWidget(1, editor) - self.layout.setCurrentIndex(1) - self.setLayout(self.layout) - - -if __name__ == "__main__": - app = QApplication(sys.argv) - - window = QMainWindow() - window.setCentralWidget(NBTEditor()) - window.setWindowTitle(_("MCPIEdit")) - window.setWindowIcon(QIcon(f"{absolute_path}/assets/img/full/mcpiedit.png")) - - window.show() - app.exec() diff --git a/planet/nbt_utils.py b/planet/nbt_utils.py deleted file mode 100644 index 4b61b53..0000000 --- a/planet/nbt_utils.py +++ /dev/null @@ -1,67 +0,0 @@ -""" - -This file is uniquely licensed under the MIT license because it may be useful in other applications an utilites. - -MIT License - -Copyright (c) 2022 Alexey Pavlov - -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. - - -""" - -import pynbt -import subprocess - - -def remove_header(filename: str): - # with open(filename, "rb") as file: - # data = file.read() - # with open(filename, "wb") as write_file: - # write_file.write(data[8:]) - # This is WIP code! Do not use! - - return subprocess.Popen( - ["pi-nbt", "remove-header", filename, filename + "_temp.dat"] - ).wait() - - -def add_header(filename: str): - return subprocess.Popen( - ["pi-nbt", "add-header", filename + "_temp.dat", filename] - ).wait() - - -def load_nbt(filename: str, header=False): - if header: - remove_header(filename) - - with open(filename + "_temp.dat", "rb") as nbt: - nbt = pynbt.NBTFile(io=nbt, little_endian=True) - return nbt - - -def save_nbt(nbt: pynbt.NBTFile, filename: str, header=True): - - with open(filename + "_temp.dat", "wb") as writefile: - nbt.save(io=writefile, little_endian=True) - - if header: - add_header(filename) diff --git a/planet/splashes.py b/planet/splashes.py deleted file mode 100644 index 9503b1d..0000000 --- a/planet/splashes.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Copyright (C) 2022 Alexey Pavlov - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -""" - -SPLASHES = [ - "The moon is not a planet", - "Pluto = Planet", - "Ayy Yep!", - "What's my purpose?", - "MCPI_SPEEDHACK", - "MCPIL-Revival", - "Minescripters", - "I use Planet BTW", - "Snowball", - "Robo", - "If I could, I would. But I can't, so I shan't.", - "SyntaxError: invalid syntax", - "We Fixed The Rail!", - "The World Of Notch!", - "github.com/mcpiscript/Planet!", - "Now with fly-hacks!", - "Now with custom skins!", - "Now with *fancy icons*!", - "@Banana", - "BANANA!", - 'To "Na" Or Not To "Na", that is the question!', - "Not Minecraft Java!", - "Oh yeah, that version...", - "Segmentation fault (core dumped)", - "It's the Segment's Fault!", - "Who is StevePi?", - "(Not) Made by Notch!", - "Open-Source!", - "RIP all MCPILs, 2020-2022", - "StevePi = Leha confirmed?", - "Watch out for StevePi!", - "Didn't remove Herobrine!", - "Check out PBPT Anarchy!", - "ไฝ ๅฅฝไธญๅ›ฝ", - "ํ•œ๊ตญ ์•ˆ๋…•ํ•˜์„ธ์š”!", - "ๆ—ฅๆœฌใƒใƒญใƒผ๏ผ", - "ะŸั€ะธะฒะตั‚ ะ ะพััะธั!", - "ะŸั–ะดั‚ั€ะธะผะฐะน ะฃะบั€ะฐั—ะฝัƒ!", - "Supercalifragilisticexpialidocious!", - "Now with multiplayer!", - "RED EXE ENGINEER GAMING", - "Play Minecraft Pi Edition, watch Red-Exe-Engineer, get PIG!", - "Wat", - "About the same size as Earth", - "Now with translations!", - "Now with dynamic building!", - "Now with more surprises!", - "Now with more confusion!", -] diff --git a/planet/textures.py b/planet/textures.py deleted file mode 100755 index 406e454..0000000 --- a/planet/textures.py +++ /dev/null @@ -1,217 +0,0 @@ -#!/usr/bin/env python3 -""" -MCPiT: Minecraft Pi Edition Texturepack Tool v.1.1 - -Copyright (C) 2022 Alexey Pavlov - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - - -""" - -from zipfile import * -import os -import shutil - - -import click - -USER = os.getenv("USER") - -INDEX = [ - # Armor - "chain_1.png", - "chain_2.png", - "cloth_1.png", - "cloth_2.png", - "diamond_1.png", - "diamond_2.png", - "gold_1.png", - "gold_2.png", - "iron_1.png", - "iron_2.png", - # Miscelannous - "kz.png", - "clouds.png", - # Font and GUI - "default8.png", - "background.png", - "bg32.png", - "cursor.png", - "default_world.png", - "gui.png", - "gui2.png", - "gui_blocks.png", - "icons.png", - "itemframe.png", - "items.png", # Items - "pi_title.png", - "spritesheet.png", - "title.png", - "touchgui.png", - "minecon140.png", - "raknet_high_72.png", - "raknet_low_18.png", - # Item entitites - "arrows.png", - "camera.png", - "sign.png", - # Mobs - "chicken.png", - "cow.png", - "creeper.png", - "pig.png", - "pigzombie.png", - "sheep.png", - "sheep_fur.png", - "skeleton.png", - "spider.png", - "zombie.png", - # Misc entities - "particles.png", - # Blocks - "terrain.png", -] - -TEXTURE_PATHS = [ - "armor/chain_1.png", - "armor/chain_2.png", - "armor/cloth_1.png", - "armor/cloth_2.png", - "armor/diamond_1.png", - "armor/diamond_2.png", - "armor/gold_1.png", - "armor/gold_2.png", - "armor/iron_1.png", - "armor/iron_2.png", - "art/kz.png", - "environment/clouds.png", - "font/default8.png", - "gui/background.png", - "gui/bg32.png", - "gui/cursor.png", - "gui/default_world.png", - "gui/gui.png", - "gui/gui2.png", - "gui/gui_blocks.png", - "gui/icons.png", - "gui/itemframe.png", - "gui/items.png", - "gui/pi_title.png", - "gui/spritesheet.png", - "gui/title.png", - "gui/touchgui.png", - "gui/badge/minecon140.png", - "gui/logo/raknet_high_72.png", - "gui/logo/raknet_low_18.png", - "item/arrows.png", - "item/camera.png", - "item/sign.png", - "mob/chicken.png", - "mob/cow.png", - "mob/creeper.png", - "mob/pig.png", - "mob/pigzombie.png", - "mob/sheep.png", - "mob/sheep_fur.png", - "mob/skeleton.png", - "mob/spider.png", - "mob/zombie.png", - "particles.png", - "terrain.png", -] - - -def pepack_install(zip_path): - with ZipFile(zip_path) as zip_file: - zip_file.extractall(path=f"/home/{USER}/.minecraft-pi/overrides/") - - -def mcpit_install(zip_path): - not_found = list() - found = list() - with ZipFile(zip_path) as zip_file: - for file in zip_file.namelist(): - if file in INDEX: - found.append(file) - else: - not_found.append(file) - - for file in found: - zip_file.extract( - file, - path=f"/home/{USER}/.minecraft-pi/overrides/images/" - + TEXTURE_PATHS[INDEX.index(file)][: -len(INDEX[INDEX.index(file)])], - ) - - if "changelog" in zip_file.namelist(): - with zip_file.open("changelog") as file: - click.echo(file.read()) - if "credits" in zip_file.namelist(): - with zip_file.open("credits") as file: - click.echo(file.read()) - - -def install_pack(zip_path, pack_format): - if pack_format == "mcpit": - mcpit_install(zip_path) - elif pack_format == "pepack": - pepack_install(zip_path) - - -def erase_pack(): - shutil.rmtree(f"/home/{USER}/.minecraft-pi/overrides/images") - - -@click.group() -def main(): - pass - - -@main.command(help="Install a texture pack") -@click.argument("pack_path", type=click.Path(exists=True)) -@click.option( - "--mcpit", - "-m", - "pack_format", - is_flag=True, - default=True, - help="Use MCPiT format.", - flag_value="mcpit", -) -@click.option( - "--pepack", - "-p", - "pack_format", - is_flag=True, - default=False, - help="Use PEPack format.", - flag_value="pepack", -) -def install(pack_path, pack_format): - install_pack(pack_path, pack_format) - - -@main.command(help="Erase the pack files") -def erase(): - erase_pack() - - -@main.command(help="Show version and license") -def version(): - click.echo(__doc__) - - -if __name__ == "__main__": - main() diff --git a/planet/weaving.py b/planet/weaving.py deleted file mode 100644 index a8feec6..0000000 --- a/planet/weaving.py +++ /dev/null @@ -1,137 +0,0 @@ -""" -This file is part of mcpit/Planet. - -mcpit/Planet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - -mcpit/Planet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License along with mcpit/Planet. If not, see . -""" -from PIL import Image - -POSITIONS = { - # Row 1 - "grass_carried": (0, 0, 16, 16), - "stone": (16, 0, 32, 16), - "dirt": (32, 0, 48, 16), - "grass_side_carried": (48, 0, 64, 16), - "planks_oak": (64, 0, 80, 16), - "stone_slab_side": (80, 0, 96, 16), - "stone_slab_top": (96, 0, 112, 16), - "brick": (112, 0, 128, 16), - "tnt_side": (128, 0, 144, 16), - "tnt_top": (144, 0, 160, 16), - "tnt_bottom": (160, 0, 176, 16), - "web": (176, 0, 192, 16), - "flower_rose": (192, 0, 208, 16), - "flower_dandelion": (208, 0, 224, 16), - "sapling_oak": (240, 0, 256, 16), - # Row 2 - "cobblestone": (0, 16, 16, 32), - "bedrock": (16, 16, 32, 32), - "sand": (32, 16, 48, 32), # I love these blocks - "gravel": (48, 16, 64, 32), - "oak_log": (64, 16, 80, 32), - "oak_log_top": (80, 16, 96, 32), - "iron_block": (96, 16, 112, 32), - "gold_block": (112, 16, 128, 32), - "diamond_block": (128, 16, 144, 32), - "chest_top": (144, 16, 160, 32), - "chest_side": (160, 16, 176, 32), - "chest_front": (176, 16, 192, 32), - "mushroom_red": (192, 16, 208, 32), - "mushroom_brown": (208, 16, 224, 32), - "fire_0_placeholder": (240, 16, 256, 32), - # Row 3 - "gold_ore": (0, 32, 16, 48), - "iron_ore": (16, 32, 32, 48), - "coal_ore": (32, 32, 48, 48), - "bookshelf": (48, 32, 64, 48), - "cobblestone_mossy": (64, 32, 80, 48), - "obsidian": (80, 32, 96, 48), - "grass_side": (96, 32, 112, 48), - "tallgrass": (112, 32, 128, 48), - "grass_top": (128, 32, 144, 48), - "crafting_table_top": (176, 32, 192, 48), - "furnace_front": (192, 32, 208, 48), - "furnace_side": (208, 32, 224, 48), - "fire_1_placeholder": (240, 32, 256, 48), - # Row 4 - "glass": (16, 48, 32, 64), - "diamond_ore": (32, 48, 48, 64), - "redstone_ore": (48, 48, 64, 64), - "leaves_oak_carried": (64, 48, 80, 64), - "leaves_big_oak_carried": (80, 48, 96, 64), - "stonebrick": (96, 48, 112, 64), - "deadbush": (112, 48, 128, 64), - "shrub": (128, 48, 144, 64), - "crafting_table_side": (176, 48, 192, 64), - "crafting_table_front": (192, 48, 208, 64), - "furnace_front_on": (208, 48, 224, 64), - "furnace_top": (224, 48, 240, 64), - "spruce_sapling": (240, 48, 256, 64), - # Row 5 - "white_wool": (0, 64, 16, 80), - "snow": (32, 64, 48, 80), - "ice": (48, 64, 64, 80), - "grass_block_snow": (64, 64, 80, 80), - "cactus_top": (80, 64, 96, 80), - "cactus_side": (96, 64, 112, 80), - "cactus_bottom": (112, 64, 128, 80), - "clay": (128, 64, 144, 80), - "sugarcane_extracted": (144, 64, 160, 80), - "birch_sapling": (240, 64, 256, 80), - # Row 6 - "torch": (0, 80, 16, 96), - "oak_door_top": (16, 80, 32, 96), - "iron_door_top": (32, 80, 48, 96), - "ladder": (48, 80, 64, 96), - "oak_trapdoor": (64, 80, 80, 96), - "farmland_moist": (96, 80, 112, 96), - "farmland": (112, 80, 128, 96), - "wheat_stage0": (128, 80, 144, 96), - "wheat_stage1": (144, 80, 160, 96), - "wheat_stage2": (160, 80, 176, 96), - "wheat_stage3": (176, 80, 192, 96), - "wheat_stage4": (192, 80, 208, 96), - "wheat_stage5": (208, 80, 224, 96), - "wheat_stage6": (224, 80, 240, 96), - "wheat_stage7": (240, 80, 256, 96), - # Row 7 - "oak_door_bottom": (16, 96, 32, 112), - "iron_door_bottom": (32, 96, 48, 112), - "mossy_stone_bricks": (48, 96, 64, 112), - "cracked_stone_bricks": (64, 96, 80, 112), - "netherrack": (96, 96, 112, 112), - "soul_sand": (112, 96, 128, 112), - "glowstone": (128, 96, 144, 112), - "melon_stem": (240, 96, 256, 112), - # Row 8 - "black_wool": (16, 112, 32, 128), - "gray_wool": (32, 112, 48, 128), - "dark_oak_log": (64, 112, 80, 128), - "birch_log": (80, 112, 96, 128), - "attached_melon_stem": (240, 112, 256, 128), - # Row 9 - "red_wool": (16, 128, 32, 144), - "pink_wool": (32, 128, 48, 144), - "birch_leaves": (48, 128, 64, 144), - "dark_oak_leaves": (32, 128, 48, 144), - "bed1": (48, 128, 64, 144), - "bed2": (64, 128, 80, 144), - "melon_side": (80, 128, 96, 144), - "melon_top": (96, 128, 112, 144), - "lapis_block": (112, 128, 128, 144), -} - - -def extract_fire(): - pass - - -if __name__ == "__main__": - with Image.open( - "/usr/lib/minecraft-pi-reborn-client/data/images/terrain.png" - ) as img: - region = img.crop(POSITIONS["black_wool"]) - region.show() diff --git a/planet/web.py b/planet/web.py deleted file mode 100644 index e10473d..0000000 --- a/planet/web.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Copyright (C) 2022 Alexey Pavlov - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -""" - -from urllib.request import urlopen -import requests - - -def get_versions() -> str: - return str( - urlopen( - "https://gist.github.com/leha-code/3e8fea40346536b451e45fc1728ed250/raw/versions.json" - ).read(), - "UTF-8", - ) - - -def check_internet() -> bool: - try: - requests.head("http://www.google.com/") - return True - except requests.ConnectionError: - return False diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c83f11c..0000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -pyqt5 -pyqtdarktheme -pypresence -pillow -qtwidgets -darkdetect -pynbt diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 84df824ae79dbcdf81dc820b445d56e82b01cf1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58910 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%0A(3SxcjL{j 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⁡&c+b>)u#pwMB}c9{QwMSjt@5 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 diff --git a/scripts/package/deb/control b/scripts/package/deb/control deleted file mode 100755 index 73b6146..0000000 --- a/scripts/package/deb/control +++ /dev/null @@ -1,14 +0,0 @@ -Package: planet-launcher -Version: 1.2.0pre1 -Architecture: all -Maintainer: mcpiscript -Depends: python3-pyqt5, python3:any, python3-pyqt5.qtwebkit, python3-pyqt5.qtsvg, python3-pyqt5.qtwebkit, python3-pyqt5.qtmultimedia, gcc -Replaces: mcpil, mcpil-r, gmcpil, jmcpil -Recommends: python3-pyqtdarkmode, python3-minecraftpi -Provides: pi-nbt, mcpiedit, mcpit -Section: games -Priority: optional -Homepage: https://github.com/mcpiscript/Planet -Description: A better launcher for Minecraft: Pi Edition - A better launcher. - This launcher requires you to download an AppImage file from the official Jenkins. diff --git a/scripts/package/deb/postinst b/scripts/package/deb/postinst deleted file mode 100755 index 312d2f6..0000000 --- a/scripts/package/deb/postinst +++ /dev/null @@ -1,6 +0,0 @@ -pip3 install pyqtdarktheme pypresence pillow darkdetect qtwidgets pynbt -link /usr/lib/planet-launcher/main.py /usr/bin/planet-launcher -chmod 755 /usr/lib/planet-launcher/main.py -link /usr/lib/planet-launcher/assets/misc/planet-launcher.desktop /usr/share/applications/planet-launcher.desktop -link /usr/lib/planet-launcher/textures.py /usr/bin/mcpit -gcc /usr/lib/planet-launcher/pi-nbt.c -o /usr/bin/pi-nbt diff --git a/scripts/package/deb/postrm b/scripts/package/deb/postrm deleted file mode 100755 index 5e0b949..0000000 --- a/scripts/package/deb/postrm +++ /dev/null @@ -1,4 +0,0 @@ -rm -rf /usr/bin/planet-launcher -rm -rf /usr/share/applications/planet-launcher.desktop -rm -rf /usr/bin/pi-nbt -rm -rf /usr/bin/mcpit diff --git a/scripts/package/debian.sh b/scripts/package/debian.sh deleted file mode 100755 index 1dfa104..0000000 --- a/scripts/package/debian.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -rm -r planet/__pycache__ - -mkdir build -mkdir build/planet -mkdir build/planet/usr -mkdir build/planet/usr/lib - -cp -r ./planet/ ./build/planet/usr/lib/planet-launcher - -mkdir build/planet/DEBIAN - -cp ./LICENSE ./build/planet/DEBIAN/license - -cp ./scripts/package/deb/control ./build/planet/DEBIAN/control -cp ./scripts/package/deb/postinst ./build/planet/DEBIAN/postinst -cp ./scripts/package/deb/postrm ./build/planet/DEBIAN/postrm -wget https://github.com/MCPI-Revival/MCPIedit/raw/master/pi-nbt.c -O ./build/planet/usr/lib/planet-launcher/pi-nbt.c -q - -dpkg-deb --build ./build/planet -mkdir dist -cp ./build/planet.deb ./dist/planet.deb -rm -r build diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..f3c1889 --- /dev/null +++ b/styles.css @@ -0,0 +1,15 @@ +body { + background-color: black; +} + +.mainimage { + text-align: center; + padding-top: 30px; +} + +.mainheader { + font-family: 'IBM Plex Sans Hebrew', sans-serif; + font-size: 1.5em; + text-align: center; + color: white; +} \ No newline at end of file