Starting all over again.

backup
LinuxMint4Ever 2019-10-06 19:05:47 +02:00
parent 9c5d5e1618
commit dcad3cdb86
6 changed files with 4 additions and 767 deletions

2
.gitignore vendored
View File

@ -4,6 +4,4 @@ res/objects/
res/skins/
res/log_configs/
lib/*
earlyLauncher/offline.txt
earlyLauncher/logs/
**/*.pyc

4
devtools/rmpyc Normal file
View File

@ -0,0 +1,4 @@
#!/bin/bash
shopt -s globstar
rm -v ./**/*.pyc

View File

@ -1,9 +0,0 @@
ram=8
#The multipiler for RAM amount (nothing, k, M or G)
alignTo=G
#Files
assets=../res/
gameDir=../run/
libs=../lib/
java_executable=/usr/lib/jvm/java-8-openjdk-amd64/bin/java

View File

@ -1,140 +0,0 @@
#!/usr/bin/python2
#why does the bang not work?
import urllib2, json, os, sys
print "LinuxMint4Ever's EarlyLauncher version BETA 2.6"
#globally used variables
config = []
offlineData = []
main = (__name__ == "__main__")
#When run directly, make sure that we are in the correct directory.
if main:
if os.path.isfile(os.path.join(os.getcwd(), "earlylauncher.py")):
pass
else:
print "Error: Not running from the EarlyLauncher Directory"
sys.exit(1)
def readFile(fileName):
fileReader = open(fileName, "r")
fileContents = fileReader.read()
fileReader.close()
return fileContents
def loadConfig(configFile = "config.txt"):
global config
#read the config file and if run directly, do error handling as well
if main:
try:
configRaw=readFile(configFile).split("\n")
except:
print "Error: Could not read config file."
sys.exit(1)
else:
configRaw=readFile(configFile).split("\n")
#TODO: Raise an exception in case of an error
#put config options and values in a two dimensional list
for i in range(len(configRaw)):
#ignore empty lines and comments
if configRaw[i] == "":
pass
elif configRaw[i][0] == '#':
pass
else:
config = config + [configRaw[i].split("=")]
def loadOfflineData(offlineDataFile = "offline.txt"):
global offlineData
#read the config file and if run directly, do error handling as well
if main:
try:
dataRaw=readFile(offlineDataFile).split("\n")
except:
print "Error: Could not read offline data file."
sys.exit(1)
else:
#TODO: Raise an exception in case of an error
dataRaw=readFile(offlineDataFile).split("\n")
#put config options and values in a two dimensional list
for i in range(len(dataRaw)):
#ignore empty lines and comments
if dataRaw[i] == "":
pass
elif dataRaw[i][0] == '#':
pass
else:
offlineData = offlineData + [dataRaw[i].split("=")]
def getDataOff2DArray(key, array):
for i in range(len(array)):
if array[i][0]==key:
return array[i][1]
def getToken(username, password):
data = {
"agent": {
"name": "Minecraft",
"version": 1
},
"username": username,
"password": password
}
try:
request = urllib2.Request(url='https://authserver.mojang.com/authenticate', data=json.dumps(data).encode(), headers={"Content-Type": "application/json"})
answer = json.loads(urllib2.urlopen(request).read().decode())
except urllib2.HTTPError:
if main:
print "Invalid user information! (or something went wrong)"
sys.exit(1)
else:
#TODO: raise an exception
return False, False, False
except urllib2.URLError:
if main:
print "Authentication server not reachable. Re-launching last user session."
loadOfflineData()
return getDataOff2DArray("access_token", offlineData), getDataOff2DArray("profile_id", offlineData), getDataOff2DArray("username", offlineData)
else:
#TODO: raise an exception
return False, False, False
username = answer['selectedProfile']['name']
access_token = answer['accessToken']
profile_id = answer['selectedProfile']['id']
return access_token, profile_id, username
def deRelative(cwd, path):
return os.path.join(cwd, path)
def run(java_executable, ram, alignTo, libs, username, gameDir, assets, uuid, accessToken, width=1366, height=768):
cwd = os.getcwd()
os.chdir(gameDir)
exitCode = os.system(deRelative(cwd, java_executable)+" -Xmx"+ram+alignTo+" -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M -Djava.library.path="+os.path.join(deRelative(cwd, libs), "natives")+" -cp "+os.path.join(deRelative(cwd, libs),"jar")+os.sep+(":"+os.path.join(deRelative(cwd,libs),"jar")+os.sep).join(os.listdir(os.path.join(deRelative(cwd, libs),"jar")))+" net.minecraft.launchwrapper.Launch --username "+username+" --version 1.7.10-Forge10.13.4.1614-1.7.10 --gameDir "+deRelative(cwd,gameDir)+" --assetsDir "+deRelative(cwd, assets)+" --assetIndex 1.7.10 --uuid "+str(uuid)+" --accessToken "+accessToken+" --userProperties {} --userType mojang --width "+str(width)+" --height "+str(height)+" --tweakClass cpw.mods.fml.common.launcher.FMLTweaker")
os.chdir(cwd)
return exitCode
if main:
loadConfig()
ram = getDataOff2DArray("ram", config)
alignTo = getDataOff2DArray("alignTo", config)
assets = getDataOff2DArray("assets", config)
gameDir = getDataOff2DArray("gameDir", config)
libs = getDataOff2DArray("libs", config)
java_executable = getDataOff2DArray("java_executable", config)
#TODO: allow the use of sys.argv to override config
login=raw_input("eMail or username: ")
pw=raw_input("Password: ")
accessToken, uuid, username = getToken(str(login), str(pw))
try:
offlineDataFile = open("offline.txt", "w")
offlineDataFile.write("username="+username+"\naccess_token="+accessToken+"\nprofile_id="+uuid)
offlineDataFile.close()
except:
print "Error creating offline login data. Proceeding with launch anyways."
sys.exit(run(java_executable, ram, alignTo, libs, username, gameDir, assets, uuid, accessToken))

444
main.ui
View File

@ -1,444 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Launcher</class>
<widget class="QWidget" name="Launcher">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>401</width>
<height>302</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>401</width>
<height>302</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>401</width>
<height>302</height>
</size>
</property>
<property name="windowTitle">
<string>Jans Minecraft Mod Pack Launcher</string>
</property>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>401</width>
<height>251</height>
</rect>
</property>
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>3</number>
</property>
<widget class="QWidget" name="tabUpdates">
<attribute name="title">
<string>News &amp;&amp; Updates</string>
</attribute>
<widget class="QWebView" name="webUpdates">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>401</width>
<height>221</height>
</rect>
</property>
<property name="url">
<url>
<string>about:blank</string>
</url>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabMods">
<attribute name="title">
<string>Mod Infos &amp;&amp; Credits</string>
</attribute>
<widget class="QWebView" name="webMods">
<property name="geometry">
<rect>
<x>-1</x>
<y>-1</y>
<width>401</width>
<height>221</height>
</rect>
</property>
<property name="url">
<url>
<string>about:blank</string>
</url>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabServer">
<attribute name="title">
<string>Server Info</string>
</attribute>
<widget class="QWebView" name="webServerInfo">
<property name="geometry">
<rect>
<x>-1</x>
<y>0</y>
<width>401</width>
<height>221</height>
</rect>
</property>
<property name="url">
<url>
<string>about:blank</string>
</url>
</property>
</widget>
</widget>
<widget class="QWidget" name="tabPreferences">
<attribute name="title">
<string>Preferences</string>
</attribute>
<widget class="QGroupBox" name="groupLogin">
<property name="geometry">
<rect>
<x>10</x>
<y>0</y>
<width>381</width>
<height>101</height>
</rect>
</property>
<property name="title">
<string>Login Information</string>
</property>
<widget class="QLineEdit" name="lineUsername">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>381</width>
<height>29</height>
</rect>
</property>
<property name="text">
<string>&lt;previously entered&gt;</string>
</property>
<property name="placeholderText">
<string>e-Mail or username</string>
</property>
</widget>
<widget class="QLineEdit" name="linePassword">
<property name="geometry">
<rect>
<x>0</x>
<y>50</y>
<width>381</width>
<height>29</height>
</rect>
</property>
<property name="text">
<string>You fool!</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
<property name="placeholderText">
<string>Password</string>
</property>
</widget>
<widget class="QPushButton" name="buttonSaveUser">
<property name="geometry">
<rect>
<x>0</x>
<y>80</y>
<width>71</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Save!</string>
</property>
</widget>
<widget class="QPushButton" name="buttonLogout">
<property name="geometry">
<rect>
<x>70</x>
<y>80</y>
<width>71</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Logout :(</string>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupPerformance">
<property name="geometry">
<rect>
<x>10</x>
<y>110</y>
<width>381</width>
<height>71</height>
</rect>
</property>
<property name="title">
<string>Performance Settings</string>
</property>
<widget class="QComboBox" name="dropdownCPU">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>111</width>
<height>25</height>
</rect>
</property>
<item>
<property name="text">
<string>&lt;Type of CPU&gt;</string>
</property>
</item>
<item>
<property name="text">
<string>Daddy's old laptop</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Laptop</string>
</property>
</item>
<item>
<property name="text">
<string>Generic Single Core</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Single Core (Seriously!? Why?)</string>
</property>
</item>
<item>
<property name="text">
<string>Generic Dual Core</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Dual Core or Threaded</string>
</property>
</item>
<item>
<property name="text">
<string>Generic Multi Core</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Multi Core</string>
</property>
</item>
<item>
<property name="text">
<string>Extremely too many cores</string>
</property>
</item>
<item>
<property name="text">
<string>NO LIMITS!</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="dropdownGPU">
<property name="geometry">
<rect>
<x>110</x>
<y>20</y>
<width>111</width>
<height>25</height>
</rect>
</property>
<item>
<property name="text">
<string>&lt;Type of GPU&gt;</string>
</property>
</item>
<item>
<property name="text">
<string>Daddy's old laptop</string>
</property>
</item>
<item>
<property name="text">
<string>Generic laptop dedicated</string>
</property>
</item>
<item>
<property name="text">
<string>Modern laptop integrated</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Laptop dedicated</string>
</property>
</item>
<item>
<property name="text">
<string>Generic Integrated (or low-power office PC graphics card)</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Integrated (or modern office PC ... 1030? I am looking at you.)</string>
</property>
</item>
<item>
<property name="text">
<string>Generic Dedicated</string>
</property>
</item>
<item>
<property name="text">
<string>Modern Dedicated</string>
</property>
</item>
<item>
<property name="text">
<string>GAMING!!!</string>
</property>
</item>
<item>
<property name="text">
<string>When will RayTracing be available?</string>
</property>
</item>
</widget>
<widget class="QComboBox" name="dropdownRAM">
<property name="geometry">
<rect>
<x>220</x>
<y>20</y>
<width>111</width>
<height>25</height>
</rect>
</property>
<item>
<property name="text">
<string>&lt;Ram available&gt;</string>
</property>
</item>
</widget>
<widget class="QPushButton" name="buttonSavePerformance">
<property name="geometry">
<rect>
<x>0</x>
<y>50</y>
<width>71</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Save!</string>
</property>
</widget>
<widget class="QPushButton" name="buttonAutoDetectPerformance">
<property name="geometry">
<rect>
<x>70</x>
<y>50</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Try auto-detect</string>
</property>
</widget>
</widget>
</widget>
</widget>
<widget class="QLabel" name="labelServerStatus">
<property name="geometry">
<rect>
<x>310</x>
<y>260</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Server: Offline</string>
</property>
</widget>
<widget class="QPushButton" name="buttonServerStartup">
<property name="geometry">
<rect>
<x>300</x>
<y>280</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Request Startup</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
<widget class="QProgressBar" name="progressUpdate">
<property name="geometry">
<rect>
<x>0</x>
<y>250</y>
<width>101</width>
<height>51</height>
</rect>
</property>
<property name="value">
<number>24</number>
</property>
<property name="format">
<string>Updating...</string>
</property>
</widget>
<widget class="QPushButton" name="buttonPlay">
<property name="geometry">
<rect>
<x>100</x>
<y>250</y>
<width>201</width>
<height>51</height>
</rect>
</property>
<property name="text">
<string>PLAY! :)</string>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>QWebView</class>
<extends>QWidget</extends>
<header>QtWebKitWidgets/QWebView</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

172
ui.py
View File

@ -1,172 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Launcher(object):
def setupUi(self, Launcher):
Launcher.setObjectName("Launcher")
Launcher.resize(401, 302)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Launcher.sizePolicy().hasHeightForWidth())
Launcher.setSizePolicy(sizePolicy)
Launcher.setMinimumSize(QtCore.QSize(401, 302))
Launcher.setMaximumSize(QtCore.QSize(401, 302))
self.tabWidget = QtWidgets.QTabWidget(Launcher)
self.tabWidget.setGeometry(QtCore.QRect(0, 0, 401, 251))
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
self.tabWidget.setObjectName("tabWidget")
self.tabUpdates = QtWidgets.QWidget()
self.tabUpdates.setObjectName("tabUpdates")
self.webUpdates = QtWebKitWidgets.QWebView(self.tabUpdates)
self.webUpdates.setGeometry(QtCore.QRect(0, 0, 401, 221))
self.webUpdates.setUrl(QtCore.QUrl("about:blank"))
self.webUpdates.setObjectName("webUpdates")
self.tabWidget.addTab(self.tabUpdates, "")
self.tabMods = QtWidgets.QWidget()
self.tabMods.setObjectName("tabMods")
self.webMods = QtWebKitWidgets.QWebView(self.tabMods)
self.webMods.setGeometry(QtCore.QRect(-1, -1, 401, 221))
self.webMods.setUrl(QtCore.QUrl("about:blank"))
self.webMods.setObjectName("webMods")
self.tabWidget.addTab(self.tabMods, "")
self.tabServer = QtWidgets.QWidget()
self.tabServer.setObjectName("tabServer")
self.webServerInfo = QtWebKitWidgets.QWebView(self.tabServer)
self.webServerInfo.setGeometry(QtCore.QRect(-1, 0, 401, 221))
self.webServerInfo.setUrl(QtCore.QUrl("about:blank"))
self.webServerInfo.setObjectName("webServerInfo")
self.tabWidget.addTab(self.tabServer, "")
self.tabPreferences = QtWidgets.QWidget()
self.tabPreferences.setObjectName("tabPreferences")
self.groupLogin = QtWidgets.QGroupBox(self.tabPreferences)
self.groupLogin.setGeometry(QtCore.QRect(10, 0, 381, 101))
self.groupLogin.setObjectName("groupLogin")
self.lineUsername = QtWidgets.QLineEdit(self.groupLogin)
self.lineUsername.setGeometry(QtCore.QRect(0, 20, 381, 29))
self.lineUsername.setObjectName("lineUsername")
self.linePassword = QtWidgets.QLineEdit(self.groupLogin)
self.linePassword.setGeometry(QtCore.QRect(0, 50, 381, 29))
self.linePassword.setEchoMode(QtWidgets.QLineEdit.Password)
self.linePassword.setReadOnly(False)
self.linePassword.setObjectName("linePassword")
self.buttonSaveUser = QtWidgets.QPushButton(self.groupLogin)
self.buttonSaveUser.setGeometry(QtCore.QRect(0, 80, 71, 21))
self.buttonSaveUser.setObjectName("buttonSaveUser")
self.buttonLogout = QtWidgets.QPushButton(self.groupLogin)
self.buttonLogout.setGeometry(QtCore.QRect(70, 80, 71, 21))
self.buttonLogout.setObjectName("buttonLogout")
self.groupPerformance = QtWidgets.QGroupBox(self.tabPreferences)
self.groupPerformance.setGeometry(QtCore.QRect(10, 110, 381, 71))
self.groupPerformance.setObjectName("groupPerformance")
self.dropdownCPU = QtWidgets.QComboBox(self.groupPerformance)
self.dropdownCPU.setGeometry(QtCore.QRect(0, 20, 111, 25))
self.dropdownCPU.setObjectName("dropdownCPU")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownCPU.addItem("")
self.dropdownGPU = QtWidgets.QComboBox(self.groupPerformance)
self.dropdownGPU.setGeometry(QtCore.QRect(110, 20, 111, 25))
self.dropdownGPU.setObjectName("dropdownGPU")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownGPU.addItem("")
self.dropdownRAM = QtWidgets.QComboBox(self.groupPerformance)
self.dropdownRAM.setGeometry(QtCore.QRect(220, 20, 111, 25))
self.dropdownRAM.setObjectName("dropdownRAM")
self.dropdownRAM.addItem("")
self.buttonSavePerformance = QtWidgets.QPushButton(self.groupPerformance)
self.buttonSavePerformance.setGeometry(QtCore.QRect(0, 50, 71, 21))
self.buttonSavePerformance.setObjectName("buttonSavePerformance")
self.buttonAutoDetectPerformance = QtWidgets.QPushButton(self.groupPerformance)
self.buttonAutoDetectPerformance.setGeometry(QtCore.QRect(70, 50, 101, 21))
self.buttonAutoDetectPerformance.setObjectName("buttonAutoDetectPerformance")
self.tabWidget.addTab(self.tabPreferences, "")
self.labelServerStatus = QtWidgets.QLabel(Launcher)
self.labelServerStatus.setGeometry(QtCore.QRect(310, 260, 81, 16))
self.labelServerStatus.setObjectName("labelServerStatus")
self.buttonServerStartup = QtWidgets.QPushButton(Launcher)
self.buttonServerStartup.setGeometry(QtCore.QRect(300, 280, 101, 21))
self.buttonServerStartup.setCheckable(False)
self.buttonServerStartup.setObjectName("buttonServerStartup")
self.progressUpdate = QtWidgets.QProgressBar(Launcher)
self.progressUpdate.setGeometry(QtCore.QRect(0, 250, 101, 51))
self.progressUpdate.setProperty("value", 24)
self.progressUpdate.setObjectName("progressUpdate")
self.buttonPlay = QtWidgets.QPushButton(Launcher)
self.buttonPlay.setGeometry(QtCore.QRect(100, 250, 201, 51))
self.buttonPlay.setObjectName("buttonPlay")
self.retranslateUi(Launcher)
self.tabWidget.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(Launcher)
def retranslateUi(self, Launcher):
_translate = QtCore.QCoreApplication.translate
Launcher.setWindowTitle(_translate("Launcher", "Jans Minecraft Mod Pack Launcher"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabUpdates), _translate("Launcher", "News && Updates"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabMods), _translate("Launcher", "Mod Infos && Credits"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabServer), _translate("Launcher", "Server Info"))
self.groupLogin.setTitle(_translate("Launcher", "Login Information"))
self.lineUsername.setText(_translate("Launcher", "<previously entered>"))
self.lineUsername.setPlaceholderText(_translate("Launcher", "e-Mail or username"))
self.linePassword.setText(_translate("Launcher", "You fool!"))
self.linePassword.setPlaceholderText(_translate("Launcher", "Password"))
self.buttonSaveUser.setText(_translate("Launcher", "Save!"))
self.buttonLogout.setText(_translate("Launcher", "Logout :("))
self.groupPerformance.setTitle(_translate("Launcher", "Performance Settings"))
self.dropdownCPU.setItemText(0, _translate("Launcher", "<Type of CPU>"))
self.dropdownCPU.setItemText(1, _translate("Launcher", "Daddy\'s old laptop"))
self.dropdownCPU.setItemText(2, _translate("Launcher", "Modern Laptop"))
self.dropdownCPU.setItemText(3, _translate("Launcher", "Generic Single Core"))
self.dropdownCPU.setItemText(4, _translate("Launcher", "Modern Single Core (Seriously!? Why?)"))
self.dropdownCPU.setItemText(5, _translate("Launcher", "Generic Dual Core"))
self.dropdownCPU.setItemText(6, _translate("Launcher", "Modern Dual Core or Threaded"))
self.dropdownCPU.setItemText(7, _translate("Launcher", "Generic Multi Core"))
self.dropdownCPU.setItemText(8, _translate("Launcher", "Modern Multi Core"))
self.dropdownCPU.setItemText(9, _translate("Launcher", "Extremely too many cores"))
self.dropdownCPU.setItemText(10, _translate("Launcher", "NO LIMITS!"))
self.dropdownGPU.setItemText(0, _translate("Launcher", "<Type of GPU>"))
self.dropdownGPU.setItemText(1, _translate("Launcher", "Daddy\'s old laptop"))
self.dropdownGPU.setItemText(2, _translate("Launcher", "Generic laptop dedicated"))
self.dropdownGPU.setItemText(3, _translate("Launcher", "Modern laptop integrated"))
self.dropdownGPU.setItemText(4, _translate("Launcher", "Modern Laptop dedicated"))
self.dropdownGPU.setItemText(5, _translate("Launcher", "Generic Integrated (or low-power office PC graphics card)"))
self.dropdownGPU.setItemText(6, _translate("Launcher", "Modern Integrated (or modern office PC ... 1030? I am looking at you.)"))
self.dropdownGPU.setItemText(7, _translate("Launcher", "Generic Dedicated"))
self.dropdownGPU.setItemText(8, _translate("Launcher", "Modern Dedicated"))
self.dropdownGPU.setItemText(9, _translate("Launcher", "GAMING!!!"))
self.dropdownGPU.setItemText(10, _translate("Launcher", "When will RayTracing be available?"))
self.dropdownRAM.setItemText(0, _translate("Launcher", "<Ram available>"))
self.buttonSavePerformance.setText(_translate("Launcher", "Save!"))
self.buttonAutoDetectPerformance.setText(_translate("Launcher", "Try auto-detect"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabPreferences), _translate("Launcher", "Preferences"))
self.labelServerStatus.setText(_translate("Launcher", "Server: Offline"))
self.buttonServerStartup.setText(_translate("Launcher", "Request Startup"))
self.progressUpdate.setFormat(_translate("Launcher", "Updating..."))
self.buttonPlay.setText(_translate("Launcher", "PLAY! :)"))
from PyQt5 import QtWebKitWidgets