因为我和朋友经常一起玩Minecraft,但是只有我会开服,为了让他也可以开服,所以我无聊写了开服器。
现在只保留了Delta到最新的Eta版本
不说了,上Eta版本的代码!
sgmain.py
class Main():
def __init__():
pass
def true_main():
import os
import requests
import psutil
import time
def checkprocess(processname):
pl = psutil.pids()
for pid in pl:
if psutil.Process(pid).name() == processname:
return pid
def check(task):
if isinstance(checkprocess(task),int):
return 'True'
else:
return 'False'
#----------------------------------------------
def find_java8():
javalist=os.listdir('C:\\Program Files\Java')
for i in javalist:
if '1.8.0' in i:
javapath8=('C:\\Program Files\Java\\{}\\bin\\java.exe'.format(i))
try:
return javapath8
except:
print('没有找到Java8')
else:
pass
def find_java17():
javalist=os.listdir('C:\\Program Files\Java')
for i in javalist:
if '17' in i:
javapath17=('C:\\Program Files\Java\\{}\\bin\\java.exe'.format(i))
try:
return javapath17
except:
print('没有找到Java17')
else:
pass
#------------------------------------------------------------------------
mcversion={'1.7.2':'https://launcher.mojang.com/v1/objects/3716cac82982e7c2eb09f83028b555e9ea606002/server.jar',
'1.7.10':'https://launcher.mojang.com/v1/objects/952438ac4e01b4d115c5fc38f891710c4941df29/server.jar',
'1.7.3':'https://launcher.mojang.com/v1/objects/707857a7bc7bf54fe60d557cca71004c34aa07bb/server.jar',
'1.7.4':'https://launcher.mojang.com/v1/objects/61220311cef80aecc4cd8afecd5f18ca6b9461ff/server.jar',
'1.7.5':'https://launcher.mojang.com/v1/objects/707857a7bc7bf54fe60d557cca71004c34aa07bb/server.jar',
'1.7.6':'https://launcher.mojang.com/v1/objects/41ea7757d4d7f74b95fc1ac20f919a8e521e910c/server.jar',
'1.7.7':'https://launcher.mojang.com/v1/objects/41ea7757d4d7f74b95fc1ac20f919a8e521e910c/server.jar',
'1.7.8':'https://launcher.mojang.com/v1/objects/41ea7757d4d7f74b95fc1ac20f919a8e521e910c/server.jar',
'1.7.9':'https://launcher.mojang.com/v1/objects/41ea7757d4d7f74b95fc1ac20f919a8e521e910c/server.jar',
'1.8':'https://launcher.mojang.com/v1/objects/a028f00e678ee5c6aef0e29656dca091b5df11c7/server.jar',
'1.8.1':'https://launcher.mojang.com/v1/objects/a028f00e678ee5c6aef0e29656dca091b5df11c7/server.jar',
'1.8.2':'https://launcher.mojang.com/v1/objects/a028f00e678ee5c6aef0e29656dca091b5df11c7/server.jar',
'1.8.3':'https://launcher.mojang.com/v1/objects/a028f00e678ee5c6aef0e29656dca091b5df11c7/server.jar',
'1.8.4':'https://launcher.mojang.com/v1/objects/a028f00e678ee5c6aef0e29656dca091b5df11c7/server.jar',
'1.8.5':'https://launcher.mojang.com/v1/objects/ea6dd23658b167dbc0877015d1072cac21ab6eee/server.jar',
'1.8.6':'https://launcher.mojang.com/v1/objects/ea6dd23658b167dbc0877015d1072cac21ab6eee/server.jar',
'1.8.7':'https://launcher.mojang.com/v1/objects/35c59e16d1f3b751cd20b76b9b8a19045de363a9/server.jar',
'1.8.8':'https://launcher.mojang.com/v1/objects/5fafba3f58c40dc51b5c3ca72a98f62dfdae1db7/server.jar',
'1.8.9':'https://launcher.mojang.com/v1/objects/b58b2ceb36e01bcd8dbf49c8fb66c55a9f0676cd/server.jar',
'1.9':'https://launcher.mojang.com/v1/objects/b4d449cf2918e0f3bd8aa18954b916a4d1880f0d/server.jar',
'1.9.1':'https://launcher.mojang.com/v1/objects/bf95d9118d9b4b827f524c878efd275125b56181/server.jar',
'1.9.2':'https://launcher.mojang.com/v1/objects/2b95cc7b136017e064c46d04a5825fe4cfa1be30/server.jar',
'1.9.3':'https://launcher.mojang.com/v1/objects/8e897b6b6d784f745332644f4d104f7a6e737ccf/server.jar',
'1.9.4':'https://launcher.mojang.com/v1/objects/edbb7b1758af33d365bf835eb9d13de005b1e274/server.jar',
'1.10':'https://launcher.mojang.com/v1/objects/a96617ffdf5dabbb718ab11a9a68e50545fc5bee/server.jar',
'1.10.1':'https://launcher.mojang.com/v1/objects/cb4c6f9f51a845b09a8861cdbe0eea3ff6996dee/server.jar',
'1.10.2':'https://launcher.mojang.com/v1/objects/3d501b23df53c548254f5e3f66492d178a48db63/server.jar',
'1.11':'https://launcher.mojang.com/v1/objects/48820c84cb1ed502cb5b2fe23b8153d5e4fa61c0/server.jar',
'1.11.1':'https://launcher.mojang.com/v1/objects/1f97bd101e508d7b52b3d6a7879223b000b5eba0/server.jar',
'1.11.2':'https://launcher.mojang.com/v1/objects/f00c294a1576e03fddcac777c3cf4c7d404c4ba4/server.jar',
'1.12':'https://launcher.mojang.com/v1/objects/8494e844e911ea0d63878f64da9dcc21f53a3463/server.jar',
'1.12.1':'https://launcher.mojang.com/v1/objects/561c7b2d54bae80cc06b05d950633a9ac95da816/server.jar',
'1.12.2':'https://launcher.mojang.com/v1/objects/886945bfb2b978778c3a0288fd7fab09d315b25f/server.jar',
'1.13':'https://launcher.mojang.com/v1/objects/d0caafb8438ebd206f99930cfaecfa6c9a13dca0/server.jar',
'1.13.1':'https://launcher.mojang.com/v1/objects/fe123682e9cb30031eae351764f653500b7396c9/server.jar',
'1.13.2':'https://launcher.mojang.com/v1/objects/3737db93722a9e39eeada7c27e7aca28b144ffa7/server.jar',
'1.14':'https://launcher.mojang.com/v1/objects/f1a0073671057f01aa843443fef34330281333ce/server.jar',
'1.14.1':'https://launcher.mojang.com/v1/objects/ed76d597a44c5266be2a7fcd77a8270f1f0bc118/server.jar',
'1.14.2':'https://launcher.mojang.com/v1/objects/808be3869e2ca6b62378f9f4b33c946621620019/server.jar',
'1.14.3':'https://launcher.mojang.com/v1/objects/d0d0fe2b1dc6ab4c65554cb734270872b72dadd6/server.jar',
'1.14.4':'https://launcher.mojang.com/v1/objects/3dc3d84a581f14691199cf6831b71ed1296a9fdf/server.jar',
'1.15':'https://launcher.mojang.com/v1/objects/e9f105b3c5c7e85c7b445249a93362a22f62442d/server.jar',
'1.15.1':'https://launcher.mojang.com/v1/objects/4d1826eebac84847c71a77f9349cc22afd0cf0a1/server.jar',
'1.15.2':'https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar',
'1.16':'https://launcher.mojang.com/v1/objects/a0d03225615ba897619220e256a266cb33a44b6b/server.jar',
'1.16,1':'https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar',
'1.16.2':'https://launcher.mojang.com/v1/objects/c5f6fb23c3876461d46ec380421e42b289789530/server.jar',
'1.16.3':'https://launcher.mojang.com/v1/objects/f02f4473dbf152c23d7d484952121db0b36698cb/server.jar',
'1.16.4':'https://launcher.mojang.com/v1/objects/35139deedbd5182953cf1caa23835da59ca3d7cd/server.jar',
'1.16.5':'https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar',
'1.17':'https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar',
'1.17.1':'https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar',
'1.18':'https://launcher.mojang.com/v1/objects/3cf24a8694aca6267883b17d934efacc5e44440d/server.jar',
'1.18.1':'https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar',
'1.19':'https://launcher.mojang.com/v1/objects/e00c4052dac1d59a1188b2aa9d5a87113aaf1122/server.jar'}
#----------------------------------------------------------------------------------------------------------------------------------------
def pachong(wangzhi,lujin):
try:
url=wangzhi
myfile=requests.get(url)
open(lujin+'server.jar','wb').write(myfile.content)
except:
print('无法连接至Mojang的服务器,下载失败,请检查网络,如果还是没用,请等待网络低峰期或手动下载服务器核心')
else:
pass
disk=''
RAM=0
try:
op=open('setEta.jar')
except:
print('未找到Eta配置文件,请配置')
disk=input('服务器存档储存的盘符(如 C D E,默认C)')
RAM=input('服务器所占用的运行内存?(后面无需加单位)(建议不低于2048MB)')
cwdpath=os.getcwd()
ttff=input('是否寻找Java8和Java17?')
if ttff=='是':
jv8=find_java8()
jv17=find_java17()
if disk=='':
disk='C'
op=open('setEta.jar','w')
op.write(disk+'\n')
op.write(RAM+'\n')
op.write(jv8+'\n')
op.write(jv17+'\n')
op.write(cwdpath+'\n')
op.close()
try:
os.makedirs('{}:/MinecraftServers'.format(disk))
except:
pass
else:
pass
print('成功!请重启开服器')
else:
print('程序启动成功!')
opp=op.readlines()
for i in range(2):
temp=opp[i].strip()
opp[i]=temp
disk=opp[0]
RAM=opp[1]
readjava=open('setEta.jar')
while True:
s=input('''请选择操作(1:开新的服务器)
(2:启动服务器)
(3:退出开服器)
(4:打开某个服务器的文件夹)
(5:销毁某个服务器)
(6:自定义服务器核心)
(7:重置配置文件)
(8:重写某个服务器的启动脚本)
(9:打开服务器根文件夹)''')
try:
open(linesss[2].strip('\n'))
except:
pass
else:
pass
try:
open(linesss[3].strip('\n'))
except:
pass
else:
pass
if s=='1':
newservername=input('请输入新服务器的名字')
newserverversion=input('请输入新服务器的Minecaft版本')
javaversion=input('用哪个Java版本启动服务器?输入8或者17')
print('正在获取服务器文件...')
os.makedirs('{}:/MinecraftServers/{}'.format(disk,newservername))
try:
pachong(mcversion[newserverversion],'{}:/MinecraftServers/{}/'.format(disk,newservername))
except TimeoutError:
print('无法连接至Mojang服务器,下载失败,请检查网络,如果还是没用,请等待网络低峰期或手动下载服务器核心')
except KeyError:
zdy=newserverversion+'.jar'
awa=os.listdir('{}\zdyserver'.format(os.getcwd()))
if zdy in awa:
os.system('copy "{}\zdyserver\{}" "{}:\MinecraftServers\{}"'.format(os.getcwd(),zdy,disk,newservername))
os.system('rename "{}:\MinecraftServers\{}\{}" server.jar'.format(disk,newservername,zdy))
else:
print('未找到此版本')
else:
pass
print('完成')
print('启动脚本生成中')
zhinan=open(disk+':/MinecraftServers/'+newservername+'/请读我.txt','w')
zhinan.write('server.properties:服务器各项配置文件(要了解每个选项的用法,请参照https://www.bilibili.com/read/cv11505225)\n')
zhinan.write('world文件夹:存档文件夹\n')
zhinan.write('logs文件夹:日志\n')
zhinan.write('server.jar:服务器核心\n')
zhinan.write('其他的文件你暂时用不上(但是不要删!!!)')
zhinan.close()
sp=open(disk+':/MinecraftServers/'+newservername+'/startserver.bat','a')
fff=open(disk+':/MinecraftServers/'+newservername+'/el.data','w')
fff.write('EULA False')
fff.close()
jkjfvhdf=open('setEta.jar')
BlueGS=jkjfvhdf.readlines()
if disk==BlueGS[4][0]:
sp.write('cd {}:/MinecraftServers/{}'.format(disk,newservername))
sp.write('\n')
linesss=BlueGS
jv8=linesss[2].strip('\n')
jv17=linesss[3].strip('\n')
if javaversion=='8':
sp.write('"'+jv8+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,newservername))
elif javaversion=='17':
sp.write('"'+jv17+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,newservername))
else:
sp.write('java -Xmx'+RAM+'M -jar server.jar nogui')
sp.close()
jkjfvhdf.close()
else:
sp.write(disk+':'+'\n')
sp.write('cd MinecraftServers/'+newservername+'\n')
linesss=readjava.readlines()
jv8=linesss[2].strip('\n')
jv17=linesss[3].strip('\n')
if javaversion=='8':
sp.write('"'+jv8+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,newservername))
elif javaversion=='17':
sp.write('"'+jv17+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,newservername))
else:
sp.write('java -Xmx'+RAM+'M -jar server.jar nogui')
sp.write('\n')
sp.write('pause')
sp.close()
print('生成成功')
elif s=='2':
startservername=input('要启动的服务器名称')
try:
os.makedirs('{}:/MinecraftServers/{}'.format(disk,startservername))
except:
euladata=open(disk+':/MinecraftServers/'+startservername+'/el.data')
euladatalist=euladata.readlines()
data=euladatalist[0]
if data=='EULA False':
print('已经检测到此名称服务器(没有同意EULA,程序将在服务器停止后修改(可能服务器本身已经同意EULA)。注意:请自行关闭cmd窗口),正在启动中')
os.system('start {}:/MinecraftServers/{}/startserver.bat'.format(disk,startservername))
print('服务器已开启')
while True:
try:
if check('cmd.exe')=='False':
print('服务器已关闭')
break
except:
continue
else:
continue
print('正在修改EULA文件...')
try:
eula2333=open(disk+':/MinecraftServers/'+startservername+'/eula.txt')
eula=eula2333.readlines()
eula[2]='eula=false\n'
eula2333.close()
eula2=open(disk+':/MinecraftServers/'+startservername+'/eula.txt','w')
eula2.write('eula=true')
eula2.close()
eldata=open(disk+':/MinecraftServers/'+startservername+'/el.data','w')
eldata.write('EULA True')
eldata.close()
print('修改成功!')
except:
print('我怀疑你把开服器和服务器放在同一个硬盘里,这样会错误')
else:
pass
else:
print('已经检测到此名称服务器,正在启动中(输入stop后等10秒关闭cmd窗口)')
os.system('start {}:/MinecraftServers/{}/startserver.bat'.format(disk,startservername))
print('服务器已开启')
while True:
try:
if check('cmd.exe')=='False':
print('服务器已关闭')
break
except:
continue
else:
continue
time.sleep(1)
try:
eldata.close()
except:
pass
else:
pass
else:
print('没有此名称的服务器')
os.system('rd {}:\MinecraftServers\{}'.format(disk,startservername))
elif s=='3':
print('已关闭')
break
elif s=='4':
seeservername=input('请输入要浏览文件的服务器名称')
try:
os.makedirs('{}:\MinecraftServers\{}'.format(disk,seeservername))
except:
os.system('start {}:\MinecraftServers\{}'.format(disk,seeservername))
print('已成功打开')
else:
print('没有此名称的服务器')
os.system('rd {}:\MinecraftServers\{}'.format(disk,seeservername))
elif s=='5':
delservername=input('请输入要销毁的服务器名称:')
try:
os.makedirs('{}:\MinecraftServers\{}'.format(disk,delservername))
except:
qd=input('此操作会销毁服务器并删除服务器文件,你确定吗?(是/否)')
if qd=='是':
qd=input('这是最后的警告!!!(继续/停止)')
try:
op.close()
except:
pass
else:
pass
try:
readjava.close()
except:
pass
else:
pass
try:
jkjfvhdf.close()
except:
pass
else:
pass
try:
zdy.close()
except:
pass
else:
pass
try:
sp.close()
except:
pass
else:
pass
try:
fff.close()
except:
pass
else:
pass
try:
euladata.close()
except:
pass
else:
pass
try:
eula2333.close()
except:
pass
else:
pass
try:
elua2.close()
except:
pass
else:
pass
try:
eldata.close()
except:
pass
else:
pass
try:
f.close()
except:
pass
else:
pass
if qd=='继续':
try:
eldata.close()
except:
print('请在cmd窗口输入2次Y,每一次输入完按Enter(有可能不用)')
os.system('del /s /q {}:\MinecraftServers\{}\*.*'.format(disk,delservername))
os.system('rd /s /q {}:\MinecraftServers\{}'.format(disk,delservername))
print('已成功销毁')
else:
print('请在cmd窗口输入2次Y,每一次输入完按Enter(有可能不用)')
os.system('del /s /q {}:\MinecraftServers\{}\*.*'.format(disk,delservername))
os.system('rd /s /q {}:\MinecraftServers\{}'.format(disk,delservername))
print('已成功销毁')
else:
print('没有此名称的服务器')
os.system('rd {}:\MinecraftServers\{}'.format(disk,delservername))
elif s=='6':
print('此方法可以解决下载过服务器核心但是想开同版本新服无法下载核心的错误')
print('认真填写,如果填错会无法使用自定义核心')
selfserverpath=input('服务器核心路径?')
ssn=input('服务器核心的文件名?')
selfservername=input('给服务器核心取个“版本号”(注意,不要和原版版本号一样,如果有一个1.12.2的核心,请不要取1.12.2这个名字,可以取这些,例如:self1.12.2)')
try:
os.mkdir('zdyserver')
except:
os.system('copy "{}" "{}\\zdyserver"'.format(selfserverpath,os.getcwd()))
os.system('rename "{}\zdyserver\{}" {}'.format(os.getcwd(),ssn,selfservername+'.jar'))
print('rename "{}\zdyserver\{}" {}'.format(os.getcwd(),ssn,selfservername+'.jar'))
else:
os.system('copy "{}" "{}\\zdyserver"'.format(selfserverpath,os.getcwd()))
os.system('rename "{}\zdyserver\{}" {}'.format(os.getcwd(),ssn,selfservername+'.jar'))
print('rename "{}\zdyserver\{}" {}'.format(os.getcwd(),ssn,selfservername+'.jar'))
print('自定义服务器核心会存在zdyserver文件夹里面,不要删除,否则重新配置')
elif s=='7':
try:
op.close()
except:
pass
else:
pass
try:
readjava.close()
except:
pass
else:
pass
try:
jkjfvhdf.close()
except:
pass
else:
pass
try:
zdy.close()
except:
pass
else:
pass
try:
sp.close()
except:
pass
else:
pass
try:
fff.close()
except:
pass
else:
pass
try:
euladata.close()
except:
pass
else:
pass
try:
eula2333.close()
except:
pass
else:
pass
try:
elua2.close()
except:
pass
else:
pass
try:
eldata.close()
except:
pass
else:
pass
try:
f.close()
except:
pass
else:
pass
os.system('del {}\setEta.jar'.format(os.getcwd()))
print('成功删除,请重启开服器')
break
elif s=='8':
print('此功能针对于修改配置文件之后对服务器生效')
gname=input('要重写脚本的服务器名称')
javaversion=input('启动服务器的Java版本?输入8或者17')
os.system('del {}:\MinecraftServers\{}\startserver.bat'.format(disk,gname))
sp=open('{}:\MinecraftServers\{}\startserver.bat'.format(disk,gname),'w')
jkjfvhdf=open('setEta.jar')
BlueGS=jkjfvhdf.readlines()
if disk==BlueGS[4][0]:
sp.write('cd {}:/MinecraftServers/{}'.format(disk,gname))
sp.write('\n')
linesss=readjava.readlines()
jv8=linesss[2].strip('\n')
jv17=linesss[3].strip('\n')
if javaversion=='8':
sp.write('"'+jv8+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,gname))
elif javaversion=='17':
sp.write('"'+jv17+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,gname))
else:
sp.write('java -Xmx'+RAM+'M -jar server.jar nogui')
sp.close()
jkjfvhdf.close()
else:
sp.write(disk+':'+'\n')
sp.write('cd MinecraftServers/'+gname+'\n')
linesss=readjava.readlines()
jv8=linesss[2].strip('\n')
jv17=linesss[3].strip('\n')
if javaversion=='8':
sp.write('"'+jv8+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,gname))
elif javaversion=='17':
sp.write('"'+jv17+'"'+' -Xmx'+RAM+'M -jar {}:/MinecraftServers/{}/server.jar nogui'.format(disk,gname))
else:
sp.write('java -Xmx'+RAM+'M -jar server.jar nogui')
sp.write('\n')
sp.write('pause')
sp.close()
print('重写成功')
elif s=='9':
os.system('start {}:/MinecraftServers'.format(disk))
print('OK')
try:
op.close()
except:
pass
else:
pass
try:
readjava.close()
except:
pass
else:
pass
try:
jkjfvhdf.close()
except:
pass
else:
pass
try:
zdy.close()
except:
pass
else:
pass
try:
sp.close()
except:
pass
else:
pass
try:
fff.close()
except:
pass
else:
pass
try:
euladata.close()
except:
pass
else:
pass
try:
eula2333.close()
except:
pass
else:
pass
try:
elua2.close()
except:
pass
else:
pass
try:
eldata.close()
except:
pass
else:
pass
try:
f.close()
except:
pass
else:
pass
os.system('pause')
傻瓜式开服器Eta.py
import sgmain
print('成功通过反盗版功能!!!')
sgmain.Main.true_main()
因为我刚上初中,算法也肯有些笨拙,就比如在try中关闭文件用了很多行,其实可以用def调用
这些代码除了网址其他都是手敲
欢迎改编,但是需注明QQ号2017410474
否则追究著作权
exe版下载链接:Minecraft开服器-Python文档类资源-CSDN下载
版权声明:本文为BlueGS原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。