+
    Ij1                         R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t
^ RIt
^ RIt^ RIHt RtRtRtR tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR t ]!R8X  d
   ] ! 4        R# R# )zMinimal headless launcher for a NeoForge client with a packwiz pack.

Resolves the vanilla client, installs NeoForge, installs the pack with
packwiz-installer, then execs the game with --quickPlaySingleplayer.
N)ThreadPoolExecutorz?https://piston-meta.mojang.com/mc/game/version_manifest_v2.jsonz;https://maven.neoforged.net/releases/net/neoforged/neoforgezohttps://github.com/packwiz/packwiz-installer-bootstrap/releases/download/v0.0.3/packwiz-installer-bootstrap.jarc                 &    \        R V  2RR7       R# )z[launcher] T)flushN)print)msgs   &scripts/launch-client.pylogr      s    	Ku
T*    c           
      d   VR ,           p\         P                  ! \         P                  P                  V4      ;'       g    RRR7       Rp\	        ^4       F  p \
        P                  P                  V RR/R7      p\
        P                  P                  V^xR7      ;_uu_ 4       p\        VR	4      ;_uu_ 4       p\        P                  ! Wg4       RRR4       RRR4       \         P                  ! W!4        R# 	  Vh  + '       g   i     L5; i  + '       g   i     L@; i  \
        P                  P                   d   pTP                  R
9   d   h Tp Rp?M<Rp?i\
        P                  P                   \"        \$        3 d   pTp Rp?MRp?ii ; i\&        P(                  ! ^4       EK\  )z.part.Texist_okN
User-Agentaeroslop-pack-testheaderstimeoutwb)i  i  )osmakedirspathdirnamerangeurllibrequestRequesturlopenopenshutilcopyfileobjreplaceerror	HTTPErrorcodeURLErrorTimeoutErrorOSErrortimesleep)	urldesttmplast_errattemptreqrfes	   &&       r   fetchr3   !   s&   
.CKK%,,t<H8	..((|EY6Z([C''S'99QS$ST""1( AP9JJs!  N AP99 ||%% 	vv#H%%|W= 	H	

1s[   AD%&D;C?DD%?D
DD"D%%FE+F	F
FFc                    \         P                  P                  V R R/R7      p\         P                  P                  V^xR7      ;_uu_ 4       p\        P
                  ! V4      uuRRR4       #   + '       g   i     R# ; i)r   r   r   r   N)r   r   r   r   jsonload)r*   r/   r0   s   &  r   get_jsonr7   6   sW    
..
 
 |=Q.R
 
SC			S		1	1Qyy| 
2	1	1	1s   A..A?	c                   a \         P                  ! 4       p\        V R 4      ;_uu_ 4       o\        V3R lR4       F  pVP	                  V4       K  	  RRR4       VP                  4       #   + '       g   i     TP                  4       # ; i)rbc                  &   < S P                  R 4      # )i   )read)r1   s   r   <lambda>sha1_file.<locals>.<lambda>?   s    !&&-r	   r	   N)hashlibsha1r   iterupdate	hexdigest)r   hchunkr1   s   &  @r   	sha1_filerE   <   sd    A	dD		Q/5EHHUO 6 
 ;;= 
	 ;;=s   )A,,B	c                 6   R pT ;'       g    .  F  pVP                  R4      ;'       g    / pVP                  R4      pVRJ ;'       g    WQ8H  pVP                  R4      R8X  d   V'       d   RpKa  VP                  RR4      R8X  g   Kz  V'       d   K  RpK  	  V# )Tr   nameNactiondisallowFallow)get)rulesos_nameallowedruleos_rulerG   matchess   &&     r   rule_allowsrR   D   s    G((4.&&B{{6"$,11$/88H+GXXh(G3GGG  Nr	   c                 0   \         P                  P                  V R VR,          4      p\         P                  P                  V4      '       d   V# \	        VR,          V4       RV9   d-   \        V4      VR,          8w  d   \        RVR,           24      hV# )	librariesr   r*   r?   zsha1 mismatch for )r   r   joinexistsr3   rE   RuntimeError)gameartifactr   s   && r   ensure_artifactrZ   Q   sy    77<<k8F+;<D	ww~~d	(5/4 io&1AA/0@/ABCCKr	   c                   a \         P                  P                  V R S4      p\         P                  P                  VS R24      p\         P                  P                  VS R24      p\        \        4      p\        V3R lVR ,           4       4      p\        VR,          4      p\         P                  P                  V4      '       gL   \         P                  ! VRR7       \        VR4      ;_uu_ 4       p\        P                  ! Wx4       RRR4       \         P                  P                  V R	4      p	\         P                  P                  V	4      '       gE   \        V	R4      ;_uu_ 4       p\        P                  ! R
RRRRSRRRR//RRR//V4       RRR4       \         P                  P                  V4      '       gF   VR,          R,          p
\        V
R,          V4       \        V4      V
R,          8w  d   \        R4      h\         P                  P                  VR4      p\         P                  P                  V4      '       g   \        P                  ! WK4       V#   + '       g   i     ELa; i  + '       g   i     L; i)versions.json.jarc              3   F   <"   T F  qR ,          S8X  g   K  Vx  K  	  R# 5i)idN ).0v
mc_versions   & r   	<genexpr>!ensure_vanilla.<locals>.<genexpr>a   s     J0qdGz4I0s   !
!r*   Tr   wNzlauncher_profiles.jsonprofilestestcreatedz2020-01-01T00:00:00.000ZlastVersionIdrG   typecustomsettingsenableSnapshotsF	downloadsclientr?   zsha1 mismatch for client jarclient-extra)r   r   rU   r7   MOJANG_MANIFESTnextrV   r   r   r5   dumpr3   rE   rW   r   copyfile)rX   rd   versions_dir	json_pathjar_pathmanifestentryvanillar1   launcher_profilesrq   client_extras   &f          r   ensure_vanillar   [   s   77<<j*=L\j\+?@Iww||LZL*=>H(HJHZ0JJEuU|$G77>>)$$
L40)S!!QIIg! "T+CD77>>+,,#S))QII%'A+Z"F"H	!! !2E :
  * 77>>(##%h/fUmX&X&.0=>>77<<n=L77>>,''/N7 "!! *)s   7I&/(I:&I7	:J
	c                    \         P                  P                  V R V R24      p\         P                  P                  V4      '       g   \	        \
         RV RV R2V4       \        P                  ! VRVRV .R\        P                  \        P                  R7       \         P                  P                  V RR V 2R V R	24      p\        V4      ;_uu_ 4       p\        P                  ! V4      uuR
R
R
4       #   + '       g   i     R
# ; i)	neoforge-z-installer.jar/z
/neoforge--jarz--installClientT)checkstdoutstderrr\   r]   N)r   r   rU   rV   r3   NEOFORGE_MAVEN
subprocessrunPIPESTDOUTr   r5   r6   )rX   javard   neoforge_version	installerprofiler1   s   &&&&   r   install_neoforger      s    TY/?.@#OPI77>>)$$ "2!3:>N=O~^`ijNN	vy"3T:  	 ggll4y9I8J-KyYiXjjoMpqG	g!yy| 
s   C;;D	c                    . pV EFm  p\        VP                  R 4      R4      '       g   K'  VP                  RR4      pVP                  R4      ;'       g    / pVP                  R4      pVP                  R/ 4      P                  R4      pV'       g	   V'       d   V'       d   VP                  R4      MTpV'       d|   \        W4      p	\        P
                  P                  V R	4      p
\        P                  ! V
R
R7       \        P                  ! V	4      ;_uu_ 4       pVP                  V
4       RRR4       EK7  VP                  R4      pV'       g   EKS  VP                  \        W4      4       EKp  	  V#   + '       g   i     LP; i)rL   linuxrG    rp   z:natives-linuxclassifiersznatives-linuxrY   nativesTr   N)rR   rK   endswithrZ   r   r   rU   r   zipfileZipFile
extractallappend)rX   rT   	artifactslibrG   rp   is_native_entryclassifier_nativesjarry   out_dirzrY   s   &&           r   resolve_librariesr      s   I3777+W55wwvr"GGK(..B	--(89&]]="=AA/R0/>)--
+DVC*45'',,tY7Gd3__X..!LL) /==,8_T<=% &  /.s   E99F	c                    VR ,          R,          p \        \        P                  P                  V RV R24      4      ;_uu_ 4       p\        P
                  ! V4      pRRR4       \        P                  P                  V R4      pXR,          P                  4        F  w  rg\        P                  P                  WWR,          R,          VR,          4      p\        P                  P                  V4      '       d.   \        P                  P                  V4      VR,          8w  g   K   R	# 	  R
#   + '       g   i     L; i  \         d     R	# i ; i)
assetIndexr`   indexesr]   NobjectshashN   NsizeFT)
r   r   r   rU   r5   r6   itemsrV   getsizer'   )	sourcer|   index_idr1   indexobjects_dirpr2   r   s	   &&       r   assets_source_okr      s    |$T*H
"'',,vyXJe2DEFF!IIaLE Gggll695)$**,DA77<<vYr]AfIFD77>>$''277??4+@AfI+M -  GF  s6   5E D0CE )E ,E 0E 	;E EEc                   a \        VR ,          R,          4      p\        P                  P                  V RR4      p\        P                  ! VRR7       \        P                  P                  W1R ,          R,           R24      p\        P                  P                  V4      '       g4   \        VR4      ;_uu_ 4       p\        P                  ! W%4       R	R	R	4       VR
,          p\        P                  P                  V RR
4      oV3R lp\        R\        V4       R24       ^ p\        ^R7      ;_uu_ 4       p	VP                  4        U
Uu. uF  w  rV	P                  WzV4      NK  	  pp
pV FF  pVP                  4        V^,          pVR,          ^ 8X  g   K,  \        RV R\        V4       24       KH  	  R	R	R	4       R	#   + '       g   i     L; iu upp
i   + '       g   i     R	# ; i)r   r*   assetsr   Tr   r`   r]   rg   Nr   c                   < VR ,          p\         P                  P                  SVR,          V4      p\         P                  P                  V4      '       d.   \         P                  P	                  V4      VR,          8X  d   R# \         P
                  ! \         P                  P                  V4      RR7       \        RVR,           RV 2V4       R# )r   r   r   NTr   z)https://resources.download.minecraft.net/r   )r   r   rU   rV   r   r   r   r3   )obj_pathr{   rC   r+   r   s   &&  r   ensuredownload_assets.<locals>.ensure   s    &Mww||K2277>>$BGGOOD$9U6]$J
BGGOOD)D99!B%!EtLr	   zdownloading z assets)max_workersi  zassets: r   )r7   r   r   rU   r   rV   r   r5   ru   r   lenr   r   submitresult)rX   r|   r   indexes_dir
index_pathr1   r   r   donepoolr   r2   futuresr   s   &&           @r   download_assetsr      sj   W\*512E'',,tXy9KKKd+kl.CD.I-J%+PQJ77>>*%%*c""aIIe #IG'',,tXy9KM ,s7|nG,-D		*	*d9@I4;;v!,IAHHJAIDczQhtfAc'l^45	  
+	* #"  J 
+	*	*s0   =G:GG
+,GGG	GG.	c                     \         P                  P                  V R 4      p\         P                  P                  V4      '       g   \	        \
        V4       \        P                  ! VRVRRV.V RR7       R# )zpackwiz-installer-bootstrap.jarr   z--siderq   T)cwdr   N)r   r   rU   rV   r3   PACKWIZ_BOOTSTRAPr   r   )rX   r   pack_url	bootstraps   &&& r   install_packwizr      sW    T#DEI77>>)$$+NN	vy(Hh?r	   c                 x    VP                  4        F%  w  r#V P                  R V,           R,           V4      p K'  	  V # )z${})r   r!   )svars_mapkrc   s   &&  r   
substituter      s2     IIdQhna( !Hr	   c	                    R V 2p	Rp
V P                  RVP                  R/ 4      4      p\        VP                  R. 4      4      p\        VP                  R. 4      4      p/ RVbRRbR\        P                  P	                  VR	4      bR
\        P                  P	                  VR4      bRVbRVbRVbRVR,          R,          bRRbRV
P                  RR4      bRRbRRV
P                  RR4      ,           bRRbRRbRRbR V	bR!R"bR#R$R%R&R'R$R(R)R*R+/CpR,\        P                  P	                  VR	4       2R-\        P                  P	                  VR.4       2.VOpV Uu. uF  p\        W4      NK  	  ppV Uu. uF  p\        W4      NK  	  ppVR/RR0V	R1VR2VR3VR,          R,          R4V
P                  RR4      R5RR6RR7R"R8R)R9R+.,          pV P                  R:4      ;'       g
    VR:,          pVR;R<V.VOVNVO# u upi u upi )=r    f6d2cd16c9b74c9b9a16e8e8b1c0e3d4	argumentsjvmrX   	classpathclasspath_separator:natives_directoryr   library_directoryrT   game_directorygame_assetsassets_rootassets_index_namer   r`   auth_player_namePlayer	auth_uuid-r   auth_access_token0auth_sessionztoken:0:	auth_xuid	user_typelegacyuser_propertiesz{}version_nameversion_typereleaselauncher_namer   launcher_versionz0.1.0clientidresolution_width640resolution_height480z-Djava.library.path=z-XX:ErrorFile=zhs_err_pid%p.logz
--usernamez	--versionz	--gameDirz--assetsDirz--assetIndexz--uuidz--accessTokenz
--userTypez--versionTypez--widthz--height	mainClassz-Xmx4Gz-cp)rK   listr   r   rU   r!   r   )r   r|   rX   r   rd   r   worldr   
assets_dirr   uuidargsjvm_args	game_argsr   a
main_classs   &&&&&&&&&        r   build_launchr      s   /01L-D;;{GKKR$@ADDHHUB'(HTXXfb)*IYs 	RWW\\$	: 	RWW\\$<	
 	$ 	z 	z 	W\248 	H 	T\\#r* 	S 	
T\\#r%:: 	S 	X 	4  	!" 		#$ 	-G(EU-H4 rww||D)<=>
d,>?@A 
H
 2::A
1'H:2;<)QA()I<d#S"- I2 [)AAW[-AJ(E9PxPPiPP9 ;<s   G98G>c                  	   \         P                  ! 4       p V P                  R RR7       V P                  RRR7       V P                  RRR7       V P                  RRR7       V P                  RRR7       V P                  R	RR7       V P                  R
RR7       V P                  RRR7       V P                  4       p\        P
                  P                  VP                  4      p\        P                  ! VRR7       \        P                  ! V4       \        RVP                   24       \        W!P                  4      p\        RVP                   24       \        W!P                  VP                  VP                  4      pVP!                  R4      ;'       g    . VP!                  R4      ;'       g    . ,           p\        R\#        V4       R24       \%        \&        P)                  \+        W%4      4      4      p\        P
                  P-                  VR4      pVP.                  '       dB   \1        VP.                  V4      '       d&   VP.                  p\        RVP.                   24       M\        R4       \3        W#4       \        P4                  ! \        P
                  P-                  VR4      4       F  w  rp
V\        P
                  P-                  VR4      8X  d   K-  V
 F  pVP7                  R4      '       g   K  \        P
                  P-                  W4      p\        P
                  P-                  VRV4      p\        P
                  P9                  V4      '       d   K  \:        P<                  ! W4       K  	  K  	  \        R4       \?        W!P                  VP@                  4       RP-                  V\        P
                  P-                  VRVP                  R4      \        P
                  P-                  VRRVP                   2RVP                   R24      .,           4      p\C        WCW.VP                  VP                  VPD                  VP                  V4	      pVPF                  PI                  R4      '       d   VPF                  MRVPF                   2V^&   \        R 4       \        PJ                  ! V^ ,          V4       R# )!z
--game-dirT)requiredz--assets-sourceN)defaultz--mc-versionz--neoforge-versionz
--pack-urlz--worldz--javar   z--memory4Gr   zensuring vanilla zinstalling neoforge rT   z
resolving z
 librariesr   zreusing assets from zdownloading assetsr   z.soz%installing pack via packwiz-installerr   r\   rr   r   r^   z-Xmxzlaunching game)&argparseArgumentParseradd_argument
parse_argsr   r   abspathgame_dirr   chdirr   rd   r   r   r   r   rK   r   r   dictfromkeysr   rU   assets_sourcer   r   walkr   rV   r   mover   r   r   r   memory
startswithexecvp)apr   rX   r|   r   rT   r   r   root_dirsfilesr1   srcdstr   cmds                   r   mainr  -  s   		 	 	"BOOL4O0OO%tO4OONTO2OO(4O8OOL4O0OOIO-OOHfO-OOJO-==?D77??4==)DKKt$HHTN
DOO,-.T??3G
t44567tYYAVAVWG[)//RGKK4L4R4RPRSI*S^$J/0T]]#4T#EFGIdH-J.t/A/A7KK''
"4#5#5"678 !& ggbggll4&CDU277<<i00Azz%  ggll4+ggll4A6ww~~c**KK)  E /0D))T]]3GGLLz4??NKGGLLjId.C.C-D"ESWShShRiimGn
	
I $4??D<Q<QSWS]S]_c_h_hjtC !KK226::T[[$t{{m@TCFIIc!fcr	   __main__)"__doc__r   r>   r5   r   r   r   sysr(   urllib.errorr   urllib.requestr   concurrent.futuresr   rs   r   r   r   r3   r7   rE   rR   rZ   r   r   r   r   r   r   r   r   r  __name__ra   r	   r   <module>r     s       	   
     1SN6 +*
&R06<AQH=@ zF r	   