1+ from colorama import init , Fore , Style
2+ from urllib .request import urlopen
3+ from shutil import copyfileobj
4+ from subprocess import call
5+ from tqdm .auto import tqdm
6+ from requests import get
7+ from time import sleep
8+ from json import loads
9+ from art import tprint
10+
11+ from os .path import basename
12+ from os import system
13+
14+ ram = 4
15+
16+ paperv = {
17+ "latest" : "1.20.1" ,
18+ "versions" : {
19+ "1.20.1" : "https://api.papermc.io/v2/projects/paper/versions/1.20.1/builds/172/downloads/paper-1.20.1-172.jar" ,
20+ "1.20" : "https://api.papermc.io/v2/projects/paper/versions/1.20/builds/17/downloads/paper-1.20-17.jar" ,
21+ "1.19.4" : "https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/550/downloads/paper-1.19.4-550.jar" ,
22+ "1.19.3" : "https://api.papermc.io/v2/projects/paper/versions/1.19.3/builds/448/downloads/paper-1.19.3-448.jar" ,
23+ "1.19.2" : "https://api.papermc.io/v2/projects/paper/versions/1.19.2/builds/307/downloads/paper-1.19.2-307.jar" ,
24+ "1.19.1" : "https://api.papermc.io/v2/projects/paper/versions/1.19.1/builds/111/downloads/paper-1.19.1-111.jar" ,
25+ "1.19" : "https://api.papermc.io/v2/projects/paper/versions/1.19/builds/81/downloads/paper-1.19-81.jar" ,
26+ "1.18.2" : "https://api.papermc.io/v2/projects/paper/versions/1.18.2/builds/388/downloads/paper-1.18.2-388.jar" ,
27+ "1.18.1" : "https://api.papermc.io/v2/projects/paper/versions/1.18.1/builds/216/downloads/paper-1.18.1-216.jar" ,
28+ "1.18" : "https://api.papermc.io/v2/projects/paper/versions/1.18/builds/66/downloads/paper-1.18-66.jar" ,
29+ "1.17.1" : "https://api.papermc.io/v2/projects/paper/versions/1.17.1/builds/411/downloads/paper-1.17.1-411.jar" ,
30+ "1.17" : "https://api.papermc.io/v2/projects/paper/versions/1.17/builds/79/downloads/paper-1.17-79.jar" ,
31+ "1.16.5" : "https://api.papermc.io/v2/projects/paper/versions/1.16.5/builds/794/downloads/paper-1.16.5-794.jar" ,
32+ "1.16.4" : "https://api.papermc.io/v2/projects/paper/versions/1.16.4/builds/416/downloads/paper-1.16.4-416.jar" ,
33+ "1.16.3" : "https://api.papermc.io/v2/projects/paper/versions/1.16.3/builds/253/downloads/paper-1.16.3-253.jar" ,
34+ "1.16.2" : "https://api.papermc.io/v2/projects/paper/versions/1.16.2/builds/189/downloads/paper-1.16.2-189.jar" ,
35+ "1.16.1" : "https://api.papermc.io/v2/projects/paper/versions/1.16.1/builds/138/downloads/paper-1.16.1-138.jar" ,
36+ "1.15.2" : "https://api.papermc.io/v2/projects/paper/versions/1.15.2/builds/393/downloads/paper-1.15.2-393.jar" ,
37+ "1.14.4" : "https://api.papermc.io/v2/projects/paper/versions/1.14.4/builds/245/downloads/paper-1.14.4-245.jar" ,
38+ "1.13.2" : "https://api.papermc.io/v2/projects/paper/versions/1.13.2/builds/657/downloads/paper-1.13.2-657.jar" ,
39+ "1.12.2" : "https://api.papermc.io/v2/projects/paper/versions/1.12.2/builds/1620/downloads/paper-1.12.2-1620.jar" ,
40+ "1.11.2" : "https://api.papermc.io/v2/projects/paper/versions/1.11.2/builds/1106/downloads/paper-1.11.2-1106.jar" ,
41+ "1.10.2" : "https://api.papermc.io/v2/projects/paper/versions/1.10.2/builds/918/downloads/paper-1.10.2-918.jar" ,
42+ "1.9.4" : "https://api.papermc.io/v2/projects/paper/versions/1.9.4/builds/775/downloads/paper-1.9.4-775.jar" ,
43+ "1.8.8" : "https://api.papermc.io/v2/projects/paper/versions/1.8.8/builds/445/downloads/paper-1.8.8-445.jar"
44+ }
45+ }
46+
47+ init ()
48+
49+
50+ def setupServer ():
51+ print (f"{ Fore .CYAN } Running server setup...{ Style .RESET_ALL } " )
52+ call ([r"run.bat" ])
53+ with open ("eula.txt" ,"w" ) as f :
54+ f .write ("eula=true" )
55+ i = input (f"{ Fore .CYAN } Run server? (y/n) { Style .RESET_ALL } " )
56+ if i .lower () == "y" :
57+ system ("run.bat" )
58+ else :
59+ i = input (f"{ Fore .CYAN } Start server by running file run.bat, you can now delete main.py and setup.py\n Enter to continue... { Style .RESET_ALL } " )
60+ exit ()
61+
62+ def setup ():
63+ system ("cls" )
64+ print (Fore .CYAN )
65+ tprint ("Settings" )
66+ sleep (.1 )
67+ print (Style .RESET_ALL ,"\n " )
68+ passed = None
69+ global ram
70+ while True :
71+ print (f"{ Fore .GREEN } Choose the amount of ram your server can use. Between 1 and 64. default=4{ Style .RESET_ALL } " )
72+ i = input (f"{ Fore .CYAN } Server_ram{ Style .RESET_ALL } =" )
73+ try :
74+ i = int (i )
75+ if i > 0 and i < 65 :
76+ passed = True
77+ except :
78+ print (f"n{ Fore .RED } Not a valid number{ Style .RESET_ALL } " )
79+ passed = False
80+
81+ if passed :
82+ ram = i
83+ break
84+ else :
85+ print (f"{ Fore .RED } Not a valid number{ Style .RESET_ALL } " )
86+
87+ while True :
88+ i = input (f"""
89+ { Fore .CYAN } What type of server do you want?{ Style .RESET_ALL }
90+
91+ { Fore .CYAN } [0] { Fore .GREEN } Vanilla
92+ { Fore .CYAN } [1] { Fore .GREEN } Plugins(PaperMC)
93+ { Style .RESET_ALL }
94+ """ )
95+ try :
96+ i = int (i )
97+ if i >= 0 and i <= 3 :
98+ break
99+ else :
100+ print (f"{ Fore .RED } Not a valid number{ Style .RESET_ALL } " )
101+ except :
102+ print (f"{ Fore .RED } Not a valid number{ Style .RESET_ALL } " )
103+
104+ while True :
105+ match i :
106+ case 0 :
107+ vanilla ()
108+ break
109+ case 1 :
110+ paper ()
111+ break
112+ case _:
113+ print (f"{ Fore .RED } Invalid server type{ Style .RESET_ALL } " )
114+
115+
116+
117+ def download (url ):
118+ with get (url , stream = True ) as r :
119+ total_length = int (r .headers .get ("Content-Length" ))
120+ print ("\n " )
121+ with tqdm .wrapattr (r .raw , "read" , total = total_length , desc = f"{ Fore .CYAN } Downloading server.jar...{ Fore .BLUE } " , )as raw :
122+ with open ("server.jar" , 'wb' ) as output :
123+ copyfileobj (raw , output )
124+ print (Style .RESET_ALL )
125+
126+ with open ("run.bat" ,"w" ) as f :
127+ text = f"java -Xmx{ ram } G -jar server.jar -nogui"
128+ f .writelines (text )
129+
130+ i = input (f"{ Fore .CYAN } Run automatic server setup? (y/n) { Style .RESET_ALL } " )
131+ if i .lower () == "y" :
132+ setupServer ()
133+ exit ()
134+ else :
135+ i = input (f"{ Fore .CYAN } Start your server by running run.bat\n You can now delete the files main.py and setup.py, Press Enter to exit...\n { Style .RESET_ALL } " )
136+ exit ()
137+
138+
139+ def paper ():
140+ system ("cls" )
141+ print (Fore .CYAN )
142+ tprint ("Version" )
143+ sleep (.1 )
144+ print (Style .RESET_ALL )
145+ count = - 1
146+ ver = []
147+ for line in paperv ["versions" ]:
148+ ver .append (line )
149+ count += 1
150+ print (f"{ Fore .CYAN } [{ count } ] { Fore .BLUE } { line } " )
151+
152+ i = input (f"{ Fore .GREEN } \n Choose a version number. Example: version=0 for [0] 1.20.1\n { Fore .CYAN } version{ Style .RESET_ALL } =" )
153+ download_link = paperv ["versions" ][ver [int (i )]]
154+ download (download_link )
155+
156+ def vanilla ():
157+ with urlopen ("https://launchermeta.mojang.com/mc/game/version_manifest.json" ) as url :
158+ data = loads (url .read ())
159+ versions = {}
160+ count = - 1
161+ system ("cls" )
162+ print (Fore .CYAN )
163+ tprint ("Version" )
164+ print ("\n " )
165+ for line in data ["versions" ]:
166+ string = str (line ["id" ])
167+ result = '' .join ([i for i in string if not i .isalpha ()])
168+ if not result .isdigit ():
169+ if not "-" in result :
170+ if not "_" in result :
171+ if not " " in result :
172+ count += 1
173+ versions [count ] = result
174+
175+ for x in versions :
176+ print (f"{ Fore .CYAN } [{ x } ] { Fore .BLUE } { versions [x ]} { Style .RESET_ALL } " )
177+
178+ print (f"{ Fore .GREEN } Choose a version number. Example: version=0 for [0] 1.20.1" )
179+ i = input (f"{ Fore .CYAN } version{ Style .RESET_ALL } =" )
180+ downloadd = data ["versions" ][int (i )]["url" ]
181+ with urlopen (downloadd ) as url :
182+ data = loads (url .read ().decode ())
183+ download_link = data ["downloads" ]["server" ]["url" ]
184+ download (download_link )
185+
186+ if __name__ == "__main__" :
187+ setup ()
0 commit comments