diff --git a/planet/mcpiedit.py b/planet/mcpiedit.py index dc29824..557871e 100644 --- a/planet/mcpiedit.py +++ b/planet/mcpiedit.py @@ -10,7 +10,7 @@ from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * -import nbt +import nbt_utils as nbt USER = os.getenv("USER") # Get the username, used for later @@ -103,7 +103,9 @@ class EditorTab(QWidget): 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.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 @@ -270,12 +272,17 @@ class EditorTab(QWidget): 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()) + 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): diff --git a/planet/nbt.py b/planet/nbt_utils.py similarity index 89% rename from planet/nbt.py rename to planet/nbt_utils.py index a20ed66..4b61b53 100644 --- a/planet/nbt.py +++ b/planet/nbt_utils.py @@ -53,15 +53,15 @@ 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) + 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) - + + with open(filename + "_temp.dat", "wb") as writefile: + nbt.save(io=writefile, little_endian=True) + if header: add_header(filename) diff --git a/planet/texturepack.py b/planet/texturepack.py new file mode 100644 index 0000000..2c1c2f1 --- /dev/null +++ b/planet/texturepack.py @@ -0,0 +1,123 @@ +# MCPIL texturepack code +# Coded by NikZapp for the MCPIL project by Alvarito050506 +# This program is sadly not protected in any way. +import os +import shutil +import zipfile +from pathlib import Path + + +def loadTextures(filename): + print("Loading the following textures into the game files:") + global foundInTexturepack + zipObj = zipfile.ZipFile(filename, "r") + zipObj.extractall() + for i in foundInTexturepack: + # i = i[:-2] + print(i[:-2]) + tempFiles = zipObj.namelist() + for t in tempFiles: + if t == i[-int(i[-2:]) - 2 : -2]: + if True: + Path(t).rename(i[:-2]) + print("from", t) + print("to ", i[:-2]) + + # print('Permission error. Run this in a terminal using sudo.') + zipObj.close() + for t in tempFiles: + try: + Path(t).unlink() + except: + pass # print('Permission error. Run this in a terminal using sudo.') + + +print( + """ +Input texturepack file path (.zip) +Leave blank to recover textures:""" +) +filePath = input() +if filePath == "": + filePath = "recoveryPack.zip" + archive = zipfile.ZipFile("recoveryPack.zip", "r") + print("Recovering textures to an old state") +else: + try: + archive = zipfile.ZipFile(filePath, "r") + except: + print("Error while accessing texturepack file") + +texturePaths = [ + "~/.minecraft-pi/overrides/images/armor/chain_1.png11", + "~/.minecraft-pi/overrides/images/armor/chain_2.png11", + "~/.minecraft-pi/overrides/images/armor/cloth_1.png11", + "~/.minecraft-pi/overrides/images/armor/cloth_2.png11", + "~/.minecraft-pi/overrides/images/armor/diamond_1.png13", + "~/.minecraft-pi/overrides/images/armor/diamond_2.png13", + "~/.minecraft-pi/overrides/images/armor/gold_1.png10", + "~/.minecraft-pi/overrides/images/armor/gold_2.png10", + "~/.minecraft-pi/overrides/images/armor/iron_1.png10", + "~/.minecraft-pi/overrides/images/armor/iron_2.png10", + "~/.minecraft-pi/overrides/images/art/kz.png06", + "~/.minecraft-pi/overrides/images/environment/clouds.png10", + "~/.minecraft-pi/overrides/images/font/default8.png12", + "~/.minecraft-pi/overrides/images/gui/background.png14", + "~/.minecraft-pi/overrides/images/gui/bg32.png08", + "~/.minecraft-pi/overrides/images/gui/cursor.png10", + "~/.minecraft-pi/overrides/images/gui/default_world.png17", + "~/.minecraft-pi/overrides/images/gui/gui.png07", + "~/.minecraft-pi/overrides/images/gui/gui2.png08", + "~/.minecraft-pi/overrides/images/gui/gui_blocks.png14", + "~/.minecraft-pi/overrides/images/gui/icons.png09", + "~/.minecraft-pi/overrides/images/gui/itemframe.png13", + "~/.minecraft-pi/overrides/images/gui/items.png09", + "~/.minecraft-pi/overrides/images/gui/pi_title.png12", + "~/.minecraft-pi/overrides/images/gui/spritesheet.png15", + "~/.minecraft-pi/overrides/images/gui/title.png09", + "~/.minecraft-pi/overrides/images/gui/touchgui.png12", + "~/.minecraft-pi/overrides/images/gui/badge/minecon140.png14", + "~/.minecraft-pi/overrides/images/gui/logo/raknet_high_72.png18", + "~/.minecraft-pi/overrides/images/gui/logo/raknet_low_18.png17", + "~/.minecraft-pi/overrides/images/item/arrows.png10", + "~/.minecraft-pi/overrides/images/item/camera.png10", + "~/.minecraft-pi/overrides/images/item/sign.png08", + "~/.minecraft-pi/overrides/images/mob/char.png08", + "~/.minecraft-pi/overrides/images/mob/chicken.png11", + "~/.minecraft-pi/overrides/images/mob/cow.png07", + "~/.minecraft-pi/overrides/images/mob/creeper.png11", + "~/.minecraft-pi/overrides/images/mob/pig.png07", + "~/.minecraft-pi/overrides/images/mob/pigzombie.png13", + "~/.minecraft-pi/overrides/images/mob/sheep.png09", + "~/.minecraft-pi/overrides/images/mob/sheep_fur.png13", + "~/.minecraft-pi/overrides/images/mob/skeleton.png12", + "~/.minecraft-pi/overrides/images/mob/spider.png10", + "~/.minecraft-pi/overrides/images/mob/zombie.png10", + "~/.minecraft-pi/overrides/images/particles.png13", + "~/.minecraft-pi/overrides/images/terrain.png11", +] + +foundInSystem = [] +notFoundInSystem = [] +foundInTexturepack = [] +notFoundInTexturepack = [] + +for fn in texturePaths: + if Path(fn[:-2]).is_file(): + foundInSystem.append(fn) + else: + notFoundInSystem.append(fn) + + try: + imgdata = archive.read(fn[-int(fn[-2:]) - 2 : -2]) + print("Found", fn[-int(fn[-2:]) - 2 : -2], "in tp") + foundInTexturepack.append(fn) + except: + notFoundInTexturepack.append(fn) + +print("MCPI Texture check:", str(len(foundInSystem)), "out of", str(len(texturePaths))) +if len(foundInSystem) < len(texturePaths): + print("The following textures were not found:") + for i in notFoundInSystem: + print(i[-int(i[-2:]) - 2 : -2]) +loadTextures(filePath)