Forget `nbtlib` return to `PyNBT`

This commit is contained in:
leha-code 2022-04-13 21:16:27 -04:00
parent 35ab69994a
commit 22126c576e
No known key found for this signature in database
GPG Key ID: 15227A6455DDF7EE
5 changed files with 116 additions and 114 deletions

View File

@ -594,10 +594,9 @@ class Planet(QMainWindow):
self.delete_appimage_button = QPushButton("Delete") self.delete_appimage_button = QPushButton("Delete")
self.delete_appimage_button.clicked.connect(self.delete_appimage) self.delete_appimage_button.clicked.connect(self.delete_appimage)
self.import_gmcpil_button = QPushButton("Import settings")
self.import_gmcpil_button.clicked.connect(self.import_gmpil)
self.import_gmcpil_button = QPushButton("Import settings")
self.import_gmcpil_button.clicked.connect(self.import_gmcpil)
layout.addWidget(skin_label, 0, 0) layout.addWidget(skin_label, 0, 0)
layout.addWidget(self.skin_button, 0, 1) layout.addWidget(self.skin_button, 0, 1)
@ -633,8 +632,7 @@ class Planet(QMainWindow):
) # Set the icon ) # Set the icon
return tabs return tabs
def import_gmcpil(self): def import_gmcpil(self):
with open(f"/home/{USER}/.gmcpil.json") as f: with open(f"/home/{USER}/.gmcpil.json") as f:
gmcpil_features = json.loads(f.read())["features"] gmcpil_features = json.loads(f.read())["features"]
@ -714,14 +712,16 @@ class Planet(QMainWindow):
def delete_config(self): def delete_config(self):
dialog = QMessageBox() dialog = QMessageBox()
dialog.setWindowTitle("Are you sure you want to reset?") 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.setText(
"Are you sure you want to delete the config? This action is unrecoverable."
)
dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort) dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort)
dialog.setIcon(QMessageBox.Warning) dialog.setIcon(QMessageBox.Warning)
button = dialog.exec() button = dialog.exec()
if button == QMessageBox.Ok: if button == QMessageBox.Ok:
os.remove(f"/home/{USER}/.planet-launcher/config.json") os.remove(f"/home/{USER}/.planet-launcher/config.json")
self.hide() self.hide()
sys.exit() sys.exit()
@ -729,14 +729,16 @@ class Planet(QMainWindow):
def delete_appimage(self): def delete_appimage(self):
dialog = QMessageBox() dialog = QMessageBox()
dialog.setWindowTitle("Are you sure you want to reset?") 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.setText(
"Are you sure you want to delete the AppImage? This action is unrecoverable."
)
dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort) dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Abort)
dialog.setIcon(QMessageBox.Warning) dialog.setIcon(QMessageBox.Warning)
button = dialog.exec() button = dialog.exec()
if button == QMessageBox.Ok: if button == QMessageBox.Ok:
os.remove(f"/home/{USER}/.planet-launcher/minecraft.AppImage") os.remove(f"/home/{USER}/.planet-launcher/minecraft.AppImage")
self.hide() self.hide()
sys.exit() sys.exit()

View File

@ -26,31 +26,34 @@ if os.path.exists("/usr/lib/planet-launcher/"):
if not os.path.exists(f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/"): 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/") os.makedirs(f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/")
GAME_TYPES = {"Survival": nbt.nbtlib.Int(0), "Creative": nbt.nbtlib.Int(1)} GAME_TYPES = {"Survival": nbt.pynbt.TAG_Int(0), "Creative": nbt.pynbt.TAG_Int(1)}
GAME_INTREGERS = {"0": "Survival", "1": "Creative"} GAME_INTREGERS = {"0": "Survival", "1": "Creative"}
BOOLEAN_INTREGERS = {0: False, 1: True} BOOLEAN_INTREGERS = {0: False, 1: True}
BOOLEAN_INTREGERS_REVERSED = {False: 0, True: 1} BOOLEAN_INTREGERS_REVERSED = {False: 0, True: 1}
class AboutWindow(QWidget): class AboutWindow(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
layout = QVBoxLayout() layout = QVBoxLayout()
label = QLabel("About MCPIedit") label = QLabel("About MCPIedit")
label.setAlignment(Qt.AlignHCenter) label.setAlignment(Qt.AlignHCenter)
font = label.font() # Font used font = label.font() # Font used
font.setPointSize(15) # Set the font size font.setPointSize(15) # Set the font size
label.setFont(font) # Aplly the font onto the label 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 = 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) desc_label.setAlignment(Qt.AlignHCenter)
layout.addWidget(label) layout.addWidget(label)
layout.addWidget(desc_label) layout.addWidget(desc_label)
self.setLayout(layout) self.setLayout(layout)
@ -59,12 +62,14 @@ class FileSelectorTab(QWidget):
super().__init__() super().__init__()
layout = QVBoxLayout() 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 = 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) info_label.setAlignment(Qt.AlignHCenter)
self.load_button = QPushButton("Select NBT File") self.load_button = QPushButton("Select NBT File")
self.about_button = QPushButton("About") self.about_button = QPushButton("About")
self.about_button.clicked.connect(self.about_window) self.about_button.clicked.connect(self.about_window)
@ -73,7 +78,7 @@ class FileSelectorTab(QWidget):
layout.addWidget(self.about_button) layout.addWidget(self.about_button)
self.setLayout(layout) self.setLayout(layout)
def about_window(self): def about_window(self):
self.window = AboutWindow() self.window = AboutWindow()
self.window.show() self.window.show()
@ -96,21 +101,20 @@ class EditorTab(QWidget):
self.tabs.addTab(self.main_tab(), "General") self.tabs.addTab(self.main_tab(), "General")
self.tabs.addTab(self.world_tab(), "World") self.tabs.addTab(self.world_tab(), "World")
self.name_edit.setText(str(self.nbt["LevelName"])) self.name_edit.setText(str(self.nbt["LevelName"].value))
self.timestamp_box.setValue(int(self.nbt["LastPlayed"])) self.timestamp_box.setValue(int(self.nbt["LastPlayed"].value))
self.game_box.setCurrentText(GAME_INTREGERS[str(int(self.nbt["GameType"]))]) self.game_box.setCurrentText(GAME_INTREGERS[str(int(self.nbt["GameType"].value))])
self.seed_edit.setText(str(int(self.nbt["RandomSeed"]))) self.seed_edit.setText(str(int(self.nbt["RandomSeed"].value)))
self.time_edit.setText(str(int(self.nbt["Time"]))) 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.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_x_box.setValue(int(self.nbt["SpawnX"])) self.spawn_y_box.setValue(int(self.nbt["SpawnY"].value))
self.spawn_y_box.setValue(int(self.nbt["SpawnY"])) self.spawn_z_box.setValue(int(self.nbt["SpawnZ"].value))
self.spawn_z_box.setValue(int(self.nbt["SpawnZ"]))
self.player_spawn_x_box.setValue(int(self.nbt["Player"]["SpawnX"].value))
self.player_spawn_x_box.setValue(int(self.nbt["Player"]["SpawnX"])) self.player_spawn_y_box.setValue(int(self.nbt["Player"]["SpawnY"].value))
self.player_spawn_y_box.setValue(int(self.nbt["Player"]["SpawnY"])) self.player_spawn_z_box.setValue(int(self.nbt["Player"]["SpawnZ"].value))
self.player_spawn_z_box.setValue(int(self.nbt["Player"]["SpawnZ"]))
layout.addWidget(self.tabs) layout.addWidget(self.tabs)
@ -142,18 +146,18 @@ class EditorTab(QWidget):
self.game_box = QComboBox() self.game_box = QComboBox()
self.game_box.addItems(["Survival", "Creative"]) self.game_box.addItems(["Survival", "Creative"])
#self.mobs_toggle = AnimatedToggle( # self.mobs_toggle = AnimatedToggle(
# checked_color="#59b8e0", # checked_color="#59b8e0",
# pulse_checked_color="#92cee8" # pulse_checked_color="#92cee8"
#) # )
self.time_label = QLabel("Time (In Ticks)") self.time_label = QLabel("Time (In Ticks)")
self.time_edit = QLineEdit() self.time_edit = QLineEdit()
self.time_edit.setPlaceholderText("1770") self.time_edit.setPlaceholderText("1770")
self.time_edit.setValidator(QIntValidator()) self.time_edit.setValidator(QIntValidator())
self.back_button = QPushButton("Back") self.back_button = QPushButton("Back")
self.save_button = QPushButton("Save") self.save_button = QPushButton("Save")
@ -170,9 +174,9 @@ class EditorTab(QWidget):
layout.addWidget(self.game_label, 3, 0) layout.addWidget(self.game_label, 3, 0)
layout.addWidget(self.game_box, 3, 1) layout.addWidget(self.game_box, 3, 1)
layout.addWidget(self.time_label, 4, 0) layout.addWidget(self.time_label, 4, 0)
layout.addWidget(self.time_edit, 4, 1) layout.addWidget(self.time_edit, 4, 1)
layout.addWidget(self.back_button, 5, 0) layout.addWidget(self.back_button, 5, 0)
layout.addWidget(self.save_button, 5, 1) layout.addWidget(self.save_button, 5, 1)
@ -180,105 +184,98 @@ class EditorTab(QWidget):
widget.setLayout(layout) widget.setLayout(layout)
return widget return widget
def world_tab(self): def world_tab(self):
layout = QGridLayout() layout = QGridLayout()
x_label = QLabel("Spawnpoint X") x_label = QLabel("Spawnpoint X")
self.spawn_x_box = QSpinBox() self.spawn_x_box = QSpinBox()
self.spawn_x_box.setMinimum(-128) self.spawn_x_box.setMinimum(-128)
self.spawn_x_box.setMaximum(128) self.spawn_x_box.setMaximum(128)
y_label = QLabel("Spawnpoint Y") y_label = QLabel("Spawnpoint Y")
self.spawn_y_box = QSpinBox() self.spawn_y_box = QSpinBox()
self.spawn_y_box.setMinimum(-64) self.spawn_y_box.setMinimum(-64)
self.spawn_y_box.setMaximum(64) self.spawn_y_box.setMaximum(64)
z_label = QLabel("Spawnpoint Z") z_label = QLabel("Spawnpoint Z")
self.spawn_z_box = QSpinBox() self.spawn_z_box = QSpinBox()
self.spawn_z_box.setMinimum(-128) self.spawn_z_box.setMinimum(-128)
self.spawn_z_box.setMaximum(128) self.spawn_z_box.setMaximum(128)
player_x_label = QLabel("Player Spawnpoint X") player_x_label = QLabel("Player Spawnpoint X")
self.player_spawn_x_box = QSpinBox() self.player_spawn_x_box = QSpinBox()
self.player_spawn_x_box.setMinimum(-128) self.player_spawn_x_box.setMinimum(-128)
self.player_spawn_x_box.setMaximum(128) self.player_spawn_x_box.setMaximum(128)
player_y_label = QLabel("Player Spawnpoint Y") player_y_label = QLabel("Player Spawnpoint Y")
self.player_spawn_y_box = QSpinBox() self.player_spawn_y_box = QSpinBox()
self.player_spawn_y_box.setMinimum(-64) self.player_spawn_y_box.setMinimum(-64)
self.player_spawn_y_box.setMaximum(64) self.player_spawn_y_box.setMaximum(64)
player_z_label = QLabel("Player Spawnpoint Z") player_z_label = QLabel("Player Spawnpoint Z")
self.player_spawn_z_box = QSpinBox() self.player_spawn_z_box = QSpinBox()
self.player_spawn_z_box.setMinimum(-128) self.player_spawn_z_box.setMinimum(-128)
self.player_spawn_z_box.setMaximum(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(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(self.spawn_x_box, 0, 1) layout.addWidget(player_y_label, 4, 0)
layout.addWidget(self.spawn_y_box, 1, 1) layout.addWidget(player_z_label, 5, 0)
layout.addWidget(self.spawn_z_box, 2, 1)
note_label = QLabel(
layout.addWidget(self.player_spawn_x_box, 3, 1) "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.player_spawn_y_box, 4, 1) )
layout.addWidget(self.player_spawn_z_box, 5, 1)
layout.addWidget(self.spawn_x_box, 0, 1)
layout.addWidget(note_label, 6, 0, 1, 2) 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 = QWidget()
widget.setLayout(layout) widget.setLayout(layout)
self.scroll = QScrollArea() self.scroll = QScrollArea()
self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll.setWidgetResizable(True) self.scroll.setWidgetResizable(True)
self.scroll.setWidget(widget) self.scroll.setWidget(widget)
return self.scroll return self.scroll
def save(self): def save(self):
self.nbt["LevelName"] = nbt.nbtlib.String(self.name_edit.text()) self.nbt["LevelName"] = nbt.pynbt.TAG_String(self.name_edit.text())
self.nbt["LastPlayed"] = nbt.nbtlib.Long(self.timestamp_box.value()) self.nbt["LastPlayed"] = nbt.pynbt.TAG_Long(self.timestamp_box.value())
self.nbt["GameType"] = GAME_TYPES[self.game_box.currentText()] self.nbt["GameType"] = GAME_TYPES[self.game_box.currentText()]
self.nbt["RandomSeed"] = nbt.nbtlib.Long(int(self.seed_edit.text())) self.nbt["RandomSeed"] = nbt.pynbt.TAG_Long(int(self.seed_edit.text()))
self.nbt["Time"] = nbt.nbtlib.Long(int(self.time_edit.text())) self.nbt["Time"] = nbt.pynbt.TAG_Long(int(self.time_edit.text()))
self.nbt["SpawnX"] = nbt.nbtlib.Int(self.spawn_x_box.value()) self.nbt["SpawnX"] = nbt.pynbt.TAG_Int(self.spawn_x_box.value())
self.nbt["SpawnY"] = nbt.nbtlib.Int(self.spawn_y_box.value()) self.nbt["SpawnY"] = nbt.pynbt.TAG_Int(self.spawn_y_box.value())
self.nbt["SpawnZ"] = nbt.nbtlib.Int(self.spawn_z_box.value()) self.nbt["SpawnZ"] = nbt.pynbt.TAG_Int(self.spawn_z_box.value())
self.nbt["Player"]["SpawnX"] = nbt.nbtlib.Int(self.player_spawn_x_box.value()) self.nbt["Player"]["SpawnX"] = nbt.pynbt.TAG_Int(self.player_spawn_x_box.value())
self.nbt["Player"]["SpawnY"] = nbt.nbtlib.Int(self.player_spawn_y_box.value()) self.nbt["Player"]["SpawnY"] = nbt.pynbt.TAG_Int(self.player_spawn_y_box.value())
self.nbt["Player"]["SpawnZ"] = nbt.nbtlib.Int(self.player_spawn_z_box.value()) self.nbt["Player"]["SpawnZ"] = nbt.pynbt.TAG_Int(self.player_spawn_z_box.value())
nbt.save_nbt(self.nbt, self.filename) nbt.save_nbt(self.nbt, self.filename)
class NBTEditor(QWidget): class NBTEditor(QWidget):
@ -302,14 +299,14 @@ class NBTEditor(QWidget):
f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/", f"/home/{USER}/.minecraft-pi/games/com.mojang/minecraftWorlds/",
"Minecraft Pi Level NBT (level.dat)", "Minecraft Pi Level NBT (level.dat)",
) )
if fname[0] == '': if fname[0] == "":
return return
editor = EditorTab(fname[0]) editor = EditorTab(fname[0])
editor.back_button.clicked.connect(lambda: self.layout.setCurrentIndex(0)) editor.back_button.clicked.connect(lambda: self.layout.setCurrentIndex(0))
self.layout.insertWidget(1, editor) self.layout.insertWidget(1, editor)
self.layout.setCurrentIndex(1) self.layout.setCurrentIndex(1)
self.setLayout(self.layout) self.setLayout(self.layout)

View File

@ -27,7 +27,7 @@ SOFTWARE.
""" """
import nbtlib import pynbt
import subprocess import subprocess
@ -53,13 +53,15 @@ def load_nbt(filename: str, header=False):
if header: if header:
remove_header(filename) remove_header(filename)
with nbtlib.load( with open(filename+"_temp.dat", "rb") as nbt:
filename=filename + "_temp.dat", gzipped=False, byteorder="little" nbt = pynbt.NBTFile(io=nbt, little_endian=True)
) as nbt:
return nbt return nbt
def save_nbt(nbt: nbtlib.File, filename: str, header=True): def save_nbt(nbt: pynbt.NBTFile, filename: str, header=True):
nbt.save(filename + "_temp.dat")
with open(filename+"_temp.dat", "wb") as writefile:
nbt.save(io=writefile, little_endian = True)
if header: if header:
add_header(filename) add_header(filename)

View File

@ -4,3 +4,4 @@ pypresence
pillow pillow
qtwidgets qtwidgets
darkdetect darkdetect
pynbt

View File

@ -1,4 +1,4 @@
pip3 install pyqtdarktheme pypresence pillow darkdetect qtwidgets pip3 install pyqtdarktheme pypresence pillow darkdetect qtwidgets pynbt
link /usr/lib/planet-launcher/main.py /usr/bin/planet-launcher link /usr/lib/planet-launcher/main.py /usr/bin/planet-launcher
chmod 755 /usr/lib/planet-launcher/main.py chmod 755 /usr/lib/planet-launcher/main.py
link /usr/lib/planet-launcher/assets/planet-launcher.desktop /usr/share/applications/planet-launcher.desktop link /usr/lib/planet-launcher/assets/planet-launcher.desktop /usr/share/applications/planet-launcher.desktop