From b442bc02e77eabd2200e4e092d08b610c6ae3a36 Mon Sep 17 00:00:00 2001 From: astatin3 Date: Mon, 22 Jul 2024 14:52:25 -0600 Subject: [PATCH] Some needed features --- .gradle/8.8/checksums/checksums.lock | Bin 40 -> 17 bytes .gradle/8.8/checksums/md5-checksums.bin | Bin 25747 -> 25797 bytes .gradle/8.8/checksums/sha1-checksums.bin | Bin 43877 -> 44201 bytes .../8.8/executionHistory/executionHistory.bin | Bin 836711 -> 836711 bytes .../executionHistory/executionHistory.lock | Bin 40 -> 17 bytes .gradle/8.8/fileHashes/fileHashes.bin | Bin 27647 -> 28547 bytes .gradle/8.8/fileHashes/fileHashes.lock | Bin 40 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 23495 -> 24175 bytes .../buildOutputCleanup.lock | Bin 40 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 20279 -> 20405 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .gradle/loom-cache/launch.cfg | 6 +- .idea/modules.xml | 1 + .idea/modules/no-more-render.main.iml | 7 +-- .idea/modules/no-more-render.test.iml | 3 +- .idea/runConfigurations/Minecraft_Client.xml | 20 +++--- .idea/runConfigurations/Minecraft_Server.xml | 2 +- README.md | 19 ++++++ .../mixin/client/HeadlessMinecraftClient.java | 59 +++++++++++++++--- 19 files changed, 89 insertions(+), 28 deletions(-) diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock index d707e6571d93f6e208afb6b786cb432a597bd442..f26bc97196d7fd0b30eacac70d1e123693ef41d1 100644 GIT binary patch literal 17 VcmZR+a;!=`ZUc`Y0~jzf0{|~41AqVk literal 40 scmZR+a;!=`ZUc`Y0~j#%Ff%Y56v)2*-%+@7+C2s~Lla9w14{-50OcGCoB#j- diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin index 6612955c63e46663003a2a94b0b2a03a9b7fd8f1..92c1a3d832c284ab7267f33054ac2d1106b5f014 100644 GIT binary patch delta 129 zcmbPylJV$C#tkMCjFUE-O8j6K5Q_dbg)4P}BLf(uOx~=ju$h(d;6}wC;u{SjxHda_ z2*|M9zVhMe$Q@r`B1|tW*$-3#wZQC^?SM!l_(|MxwoSsf@^Fy z_u3dR3B>)fy^(j4X+2bwee+hk*{qBkH!3DDZ+7&!m&9`W%7>?ul~)^C-M;dr52A{3 zJCHUq1`@hJtO~*+nq2&I57mV|xD&kkSnJFG*S4<>l4f9FoN)Wf-QdZI{!%i86sWMc zp5EAc^QRKux}2&9FP?VK$@KtQ0W#r%I?xIR2C-oM$+ye2fG+wmd-B97Qj=$|l3=;R ds^vKOZ>7}ai>o9A?y%~Cy~o_n6A08`1OQL?eF6Xg delta 83 zcmZ2^lj-R-rVS<%jMp}sN}LebEUNjFeY2Y3d8W<0CXCFR)yyxjZsxO9XWHy*Kbe(L laiih~=FN^C_mWsvSibx)S$VaQzzWL`EDT`4xE)9t0RSFe92Wop diff --git a/.gradle/8.8/executionHistory/executionHistory.bin b/.gradle/8.8/executionHistory/executionHistory.bin index fdf434f674ce650cc662ddd30be17516261d5ff6..631a88e6355a86455c6f52af5baf87ae03099503 100644 GIT binary patch delta 2012 zcmaKsdsI~Q7RULWIp+*Ihw0294WdgxMXn>y;UyRkv9uwLLGo&@MFImeI5?v)@(|=z zp@}F>1UrO?=z)H6*8FMB26rna4ipHeS^$v1Dozq$Z&s3oW=-U4RI~Y{*fHP8>-QKbQ*k9u>f$M!boVVMlxckvUhMF+^a^b zZ3j6iJ57M;0CELw4HCOPLQ{xmL*I<|j5Kaayn6`07Ut1ik&h!A8=@8pH)8HgK@BQ= z!Atg}$(LOayqNR*b!A;f|7@?B0k zj-&O&_g1=noTZ1X@&rfAtN{)aEd98Si`_WE(#CpDe$Gm!s|GEOni=q%VISA1Le3Zt z;5t5YBpkct>2<4mTY@eiJ=;HBo2kmo)}`vRwCWu?KTUdI25oz_{i97`{n@3ne7n)Q z*rH&#pvBIj$=$^|j5Qu>I8&@6Bum1Zo;2}Xm3uy+NMGob-QIq2%eUuk=*LO9S>D1_ z9UwBpL@CN0ee$~vU-<7n>=GVP^%Me>Lz*i4i62FFe7{sezfkkJqe zw?xl;`tdZ*C88hCC^w$lUJ**t!gApLaA_!aC8{&cF=XV<$ev428sh%F-ur#$`pAtQ zX_l-3;T%5wII(Gg<)cUfp?PEwEXX5Iq1#|NjV*%02bcsF<&!i-q_S^Y!>KwI`y}J< zU?d9p>mf3~=95S~+i5gmdKlO{S-XuEp&wvwwW}zIDuDTW-vrJ}^eIr#0>1Q@al;_^jEo zHiNa9%t3`9DQ&sFq*|NfuTf@bRS7vMiK=9szki}ONuQOGlaxl^xz{z!oDnX$viH@W z=8X+$%gFyj<*iqok9D43g`=NA*u#^9DW5L{hl_$(WGp{**$YfPyjU>x69jnpPy(i} zfDagogtps)w~rNeO5K=^W`PQWRwbsQr@|k)*EuD&)aS1qDe0d*3>F183p%4QAvh;t z1e$<0C8mI~K->`uk}+Zyk4_dW-4&wvt#;+V_t#hshWDZ-I2(vdt!^+UV`}kaO~{=P zWvI3zZ@{&-FK!SufMq?;6%;DAqWMupg__+7hnM0Gm2L!A6@R%aZD-x`U?3T6-SF&Hr&_h&oX<`V)~ zv+}`ZGtU{`lTr?lCZ$%OU;pMZOQ|UO$OK=y;_9K3CvGkILUlaI5o%L-E785bg|QXn z;NU^6W3Tv$(VLP+fK6`)a#!I6X7X6U^ zc8O84%24>}yq7=8Q^v5UA?|}8K9s_MNqtmNr}?=9uh4GJhT%3!jQ$Ist;0OP>`loX zFRoj2t$*A*&)fb`|HAzRGpz&5x)Av0qQz){i(C&ke5hb#U2_VfP$ Dc-2fF delta 3803 zcmaKvX;f5K632P3H-sK-jf!yzxW%}#sF6_&%lg6gCvpP&3y+hyqnuFswPY>NPJPbL zV;B7-DmEmA8^I>7fPaRja4xa~r;Rs%VmT??{MVA($GtB^?BgOooisBgY}4d5n|*x0 z`R;3m6HHKW3IVOUSYYTcHPo-HtZYkf?Zc%Pdokwul3C+uPY zZJf8vxceN)D{Y*ctg{>Gpg*`}vMMdo&3^zj?n0T5)YyrJ0T!Sp1JV^1poXI;e?gg5 zgNE9DV9@`FbZ{!r)J&AYsX#OKpe#VzcnGE4exRaZ<$i9dtaLk4VLuqmBt0L4YQEi%Rs|#X|T+Yj#8xqT1e7g$IX&m_z7u_4h-4`BghUNw_Ikvh7sbPpjU^6Y(3{L zjYH-1C%_om#G(TrE&GukCHW_=QXGU>g||@7N2#XfXb*z7>M3Th9OT?(mIgEgb^tXT z#0YVRK&mNO8_Hycbe;iZR3|QLdIp8HzJO&(hu>^x&SChzk$SF2*`dc(U1-R?f*B(I z0$SRGa{m#KT}ROH;s_Wzs5i6HfodpO3d&@n&(op1snqkh7eLjt;p_~M?KB^oOlY2l z=Cd#pX)4CeMA=O3mmfvB18LeT$RM>h5L?z{1Dh|Ux1k$pVjHH2w8a#7V%g3!khm}r z;|^Csgw8ui-3ox_Kf(6xD}ZHUw&nuJmQ{s@nPEQDp^ znNBPOgNBCHjxv`@Ur+=S5(l6y0V6QRmF|kJ^bLK5Qaqf?%OF_38aJO>2Gnv6Yv@E7LkDI_ zIT*x?x3?T+TF_f> zgk@QjBFGMk6pvhd1+>IMar+Jenne$}(|PpLhGJ2g{=^9P&%@?(>Ghsd3FXw%vENk* z5zKT5E>?m!gI=(4RUoUVvK=VZ^#0oqfpVg#hB3ba6-zG}0tZHXfNmnqeU7D1{|%&x zTAhSa9IWFojPMc-)2g9{E_$4|RfEAm+3KtDz|aT--vMt1%`M~t7&O$$zV<-#=~;UF zBG5!?)Rv17tb;DY8Kn8Uu+;-=K(N6L}U z`cb&~4m4z3fn|EiCc6qU%Z!PAuEMg!I*eO{w3$jDTnlldsK`~dKwGKw0;C4)PEs8x zBi)5Lb@083=BlrQx#kmXMcPg`#Qhr97=_7pTmza&v$7uxg*8&s$JArk|DeIY9t`4< ztgMG%YKp6D0E4*|H{sO)2Jw(&5v7OAaXfa94&TD-U@%j;nb$EcMR0leBC z%ocwGXzD|ZTYCfAAYP%36Zu)MU*h23A(;5q_n8FCx_-cAlNy0WwPMS5q14l#4tE)JBIst>P+#P)Z-%q{s$ z9nCT02EI5tDu9QN1U^zBDnMp8o;#BeXdF7iWA3Yf`L4RD@x>ai@TrHtuu}bw7#qnPepU%)dFD%dVl7F;~ zzd8})kE&Kw8%`TNZhgio^xGdgcgj?MCssww{XS>MJ_wgjVAKOw4QTfkzKqU z8~VLm#p0jx?=lBJzBgO?`k((~iEqA$@8(s4>3exK$AZ>KoSD-~?yZDv9=%voq=u4ewMa3Q`G+bzqtiVV@UezZ zFZkF9>7KU#4ss8)OZjHQw}GK9>$ZfgUFYKKyJqv0kSW1F-vtD@_^4XSgM!nBjF=s{ ztt7mf3zTqo;&MdE-PTfsDErPGD!5sJwY;bF0KlZ<)SS$`rN zHA;C0VeVtwwLIsR;J(#WXtI}#lL>(zDGv;1CxAii z9%EhnI^mdu^0{0H53rsp=cSLBbCGg3i*r;CWIfOLzU=r~iJZAlQo8fyJmZ3`KV*SL zN*Nl)vrE2`{{1DYCpxQ}<{cgLf`!~v#8-n_^oGf>h0%{xSzWJ27$8}tH-HM9DZB2m6 ze~s0}y=>{%@WX!d^VMU&1avnmZNuw1Kz!M@UP0a6aF&> ztz5rti9@Qm@mrIX6NKX-*72PE)2U_Jw#Bm0l-Te^>Cz1&k5fC+wYE~u$|`Uat0`B8 z+VALd)BgHfTSlAKJa}*G1ixo{;7;vwiGOW6%e3Cy+sylZFB!}6;XDQFHbrKP&~R3{ GTk&77UINbm diff --git a/.gradle/8.8/executionHistory/executionHistory.lock b/.gradle/8.8/executionHistory/executionHistory.lock index c3af91f11692c44c76f9c50a4b719169a39549c9..be3ec1869c713572f2988b83fa6a74dbbb295715 100644 GIT binary patch literal 17 UcmZQpDEaML5?SC!j3he%V=u!k{Nge~6p^2rTfh7Y20P>#-`v3p{ diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin index c6651b4b0278f167dc85ab9238a3e0068340c993..d6089bb03116fa675c0bd55745c7b4fd06a03bec 100644 GIT binary patch delta 906 zcmex=ow4~o;|3E6$&(FXVfsHL>v9>uAZO}-D41+2VIa_?;kvYm=ereD^7!OfiJ$x@ zBcAmIR~&*(w^EJN-5zG(Vtg7t5D4@K=Z+YJJ z2k}r*`N^>=8#K($R%(9gsE&pR=7qy7Gkf=|zc_@U5Nhth&8(^si~>H{oS^|qs_USt z-%buy3lIp-V7AP9wtsg{hsm{pB6hd0a!-b+k?R4{dd5IP6NnW-SfI^8-bpF` zff%1+>!E#;uYh(iP5|my2$Tc@mekFcJ#>^Oi)SdYtXs(7HQ6>pYVzlF5eSDH$mvfP zu>;9K)H7ZO(r7lAW&bz-7?pVK-;;_a5o6x~kPUbEUs^zP7+sirJ44OxjsPnU)QAI^ zMyTk!um5Cr1tc&zALvH; zOcAp?0xZ8FvTR#0EjS+Pd;QiM{aStDHMdmy>bW2mu>79fn=GZ!UmdZtQTO7av$5yi zs4Gr2fZBclY#h^x-;>X0sqrAffN9U@>^wt z&88|AjFVecS8R?|3t*glRNZ5;s>Y4YqM8kilhcIZC?7^wUKQhLTfLKBD;L0DjM&mzx&slnA{hd#ZE VNcV#3ILrf-1Omp+&6hoNlmTenKx+U1 diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock index 4db083b84d8769d66040e2a3e463d0ba18b9c792..14072efccccd98bedea571da4eef35c0da4ffc0f 100644 GIT binary patch literal 17 VcmZQxx?g0E*Oubx3}C>@1OPR51V;b> literal 40 tcmZQxx?g0E*Oubx3}C<_#LU2OP+;PM=?gA9cv~~D8Jbuc8dx$g008YE3TXfU diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin index cc403ae38731b806bfdbc75c6c819ff8af1c8917..de90632e5f649fb2a352ae0bca557fb0311bb03e 100644 GIT binary patch delta 1145 zcmX@Uo$>u1#tkMClFJ+BT^CcZw-U7Q{1vOWol7*9FC1war zx*C&od`3zYL@@g0A@=SOYG!^D*yLqp`yN%m&yeQ z{GZ2uVrN|cV~Aj^^yIg483G)7$6cOSzix&adVI34yduAI`L5=zM#@ly@sm^KE&0XX zG;F_X#s?K^oIF+DLV#b-iskWqh8T!o%+JY31w)ZJo@kFhf9HeM8_K zoi9C5-L{kGDp&|;n!8L$7W3wXs^p%0R$+#QA=56cw@ZvOp@NfP!D94gib>syf{joU zo^Os-e8DK-cU-w)TEf!BP|>5CZIyR0YGhBaFv$7-Tn1{!b(k61XLm8y`m;j=Fiv~& zTa^ZZV%7f@8=pMOf-2UXoT_TcuXTDlLsiK`sIiMDPgN~q;@`PZ@rU?Eg9MJvjvj5o z^~OM1Ngx&kVF6j?H7;uuI~RWFeOcTtk+cRVD2J-zxBWl$1yV`-7S#nk@46-V6jMbi zw?&&(z@K?;hx_JyTwxE2eKa$^&9VAwm28`Pw)Sql;=F6I_b`>PL|!PYS>R|X_0c2M z?sZQwrV4HcZZ9F{B2`b-t;_eBvw(sL&6>uiwgSs8)?GgMNP3^>%&qyDDq=s>8`Nf9 zTy&|-d~>1CvKc9uO7s#?0SSB9!m^NA41)iam>7v_4;*$dvmtR(`8QMJoeCJ$j(| z?)Hq){aL1|FSPLXm&JKkF%9`}(CWzd^#{s~&AcT`HtA?!s+ci?}PBZ7P{u`5vhFRrmh;s$yLP_R-jTM&Tmqy501~)O AG5`Po delta 102 zcmV-s0Ga>qyaC6z0kAX}0h5zW7%-ES7?6`a8F;hJ89)V-B_BwWg&$y({T~^VE+8uu`oai Ivq4CP6Zcmq9{>OV diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a9f5f70b36922c30214d048346504fd5e73424ca..b9de57ef5a248ffcfcda2aa70ba0c82aac29304f 100644 GIT binary patch literal 17 VcmZSn1la%p literal 40 scmZSnDaQTAz`pHM;b&8#v4i~{T?p6WWE{U;*;vvv-*L1ZpO>Ipn7Q(twIiob0OT#Kgt8QSpcPMgs}H&5j=5 S*e1XC^O$_zSAKGUk2nD5Cp$d= delta 64 zcmV-G0KfmWp8>a?0kAX}0b{c@7*GMTof((`lT91&vsD}j0h4tdFtfcK$N{sRA3y?= W^&vU}30bir_!qG-zz(xPNcIN(uovP0 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 553cc357bb3ba7ba43a252c093c52866586c5e5d..c8183455565e0a897cbcfbc6bd47149cee7ef9a0 100644 GIT binary patch literal 8 PcmZQzV4QG=@zW&$2?ql+ literal 8 PcmZQzV4Se~^w)g=3eyA2 diff --git a/.gradle/loom-cache/launch.cfg b/.gradle/loom-cache/launch.cfg index 2b92f91..d703da8 100644 --- a/.gradle/loom-cache/launch.cfg +++ b/.gradle/loom-cache/launch.cfg @@ -1,10 +1,10 @@ commonProperties fabric.development=true - fabric.remapClasspathFile=/home/astatin3/Documents/GitHub/no-more-render/.gradle/loom-cache/remapClasspath.txt - log4j.configurationFile=/home/astatin3/Documents/GitHub/no-more-render/.gradle/loom-cache/log4j.xml + fabric.remapClasspathFile=/home/astatin3/GitHub/no-more-render/.gradle/loom-cache/remapClasspath.txt + log4j.configurationFile=/home/astatin3/GitHub/no-more-render/.gradle/loom-cache/log4j.xml log4j2.formatMsgNoLookups=true fabric.gameJarPath=/home/astatin3/.gradle/caches/fabric-loom/minecraftMaven/net/minecraft/minecraft-common/1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2/minecraft-common-1.21-net.fabricmc.yarn.1_21.1.21+build.2-v2.jar - fabric.classPathGroups=/home/astatin3/Documents/GitHub/no-more-render/build/classes/java/main:/home/astatin3/Documents/GitHub/no-more-render/build/resources/main:/home/astatin3/Documents/GitHub/no-more-render/build/classes/java/client:/home/astatin3/Documents/GitHub/no-more-render/build/resources/client + fabric.classPathGroups=/home/astatin3/GitHub/no-more-render/build/classes/java/main:/home/astatin3/GitHub/no-more-render/build/resources/main:/home/astatin3/GitHub/no-more-render/build/classes/java/client:/home/astatin3/GitHub/no-more-render/build/resources/client fabric.log.disableAnsi=false clientArgs --assetIndex diff --git a/.idea/modules.xml b/.idea/modules.xml index 0e2509d..87936d8 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,6 +2,7 @@ + diff --git a/.idea/modules/no-more-render.main.iml b/.idea/modules/no-more-render.main.iml index e7cab93..01580e3 100644 --- a/.idea/modules/no-more-render.main.iml +++ b/.idea/modules/no-more-render.main.iml @@ -6,16 +6,13 @@ FABRIC MIXIN + MCP 1 - - - - + \ No newline at end of file diff --git a/.idea/modules/no-more-render.test.iml b/.idea/modules/no-more-render.test.iml index bf0cfc1..01580e3 100644 --- a/.idea/modules/no-more-render.test.iml +++ b/.idea/modules/no-more-render.test.iml @@ -6,12 +6,13 @@ FABRIC MIXIN + MCP 1 - \ No newline at end of file diff --git a/.idea/runConfigurations/Minecraft_Client.xml b/.idea/runConfigurations/Minecraft_Client.xml index 8032c16..f5242d4 100644 --- a/.idea/runConfigurations/Minecraft_Client.xml +++ b/.idea/runConfigurations/Minecraft_Client.xml @@ -1,14 +1,14 @@ - - \ No newline at end of file diff --git a/.idea/runConfigurations/Minecraft_Server.xml b/.idea/runConfigurations/Minecraft_Server.xml index 9432063..e305f57 100644 --- a/.idea/runConfigurations/Minecraft_Server.xml +++ b/.idea/runConfigurations/Minecraft_Server.xml @@ -12,5 +12,5 @@ - + \ No newline at end of file diff --git a/README.md b/README.md index cc1d6c4..f417bd2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ # no-more-render A Fabric mod that removes Minecraft's window rendering code, to create a headless CLI version + +## Usage +This mod runs a tcp server locally that allows for a command line interface +The mod runs on the port 65000, and increments this value by 1 if it cannot access that port. +You can connect to it via running `ncat localhost 65000` or other similar command +### Comamnds: +``` +listelements/elems - List widgets on the screen +clickelement/celem - Click an element on the screen +writeelement/welem - Write text into a compatable element + +key - Press and release a key +keydown - Press a key +keyup - Release a key + +connect :[Port] - Forcibly connect to a server + +quit/exit - Close the game +``` diff --git a/src/client/java/com/astatin3/nomorerender/mixin/client/HeadlessMinecraftClient.java b/src/client/java/com/astatin3/nomorerender/mixin/client/HeadlessMinecraftClient.java index 68baa33..980fa49 100644 --- a/src/client/java/com/astatin3/nomorerender/mixin/client/HeadlessMinecraftClient.java +++ b/src/client/java/com/astatin3/nomorerender/mixin/client/HeadlessMinecraftClient.java @@ -7,10 +7,14 @@ import net.minecraft.client.gl.WindowFramebuffer; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.multiplayer.ConnectScreen; import net.minecraft.client.gui.screen.world.WorldListWidget; import net.minecraft.client.gui.widget.*; +import net.minecraft.client.render.GameRenderer; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; +import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.network.ServerInfo; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -20,6 +24,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.io.*; +import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; @@ -41,11 +46,20 @@ public class HeadlessMinecraftClient { @Shadow private Thread thread; + + @Unique final MinecraftClient self = (MinecraftClient)(Object)this; + @Inject(method = "", at = @At("TAIL")) private void onGameLoaded(RunArgs args, CallbackInfo ci) { // AddonTemplate.LOG.info("Hello from ExampleMixin!"); System.out.println("#########################################"); + System.out.println("#########################################"); + System.out.println("(no-more-render) This client is running a mod that disables Minecraft from opening a window!"); + System.out.println("#########################################"); + System.out.println("#########################################"); + startCommandThread(); + self.gameRenderer.onResized(10, 10); } @@ -53,9 +67,19 @@ public class HeadlessMinecraftClient { Thread commandThread = new Thread(() -> { // BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line; + int i = 0; try { - ServerSocket serverSocket = new ServerSocket(65000); - System.out.println("Server is listening on port " + 65000); + ServerSocket serverSocket; + while(true){ + try { + serverSocket = new ServerSocket(65000+i, 50, InetAddress.getByName("127.0.0.1")); + System.out.println("Server is listening on port " + (65000+i)); + break; + } catch (java.net.BindException e){ + System.out.println("port " + (65000+i) + " failed, trying another"); + i++; + } + } while (true) { Socket socket = serverSocket.accept(); @@ -90,10 +114,8 @@ public class HeadlessMinecraftClient { commandThread.start(); } - @Unique final MinecraftClient self = (MinecraftClient)(Object)this; - - private void parseCommand(String command) { + if(command == null) return; String[] split = command.split(" "); try { switch (split[0].toLowerCase()) { @@ -101,9 +123,6 @@ public class HeadlessMinecraftClient { case "exit": self.stop(); break; - case "tick": - self.tick(); - break; case "listelements": case "elems": listElements(); @@ -131,6 +150,23 @@ public class HeadlessMinecraftClient { simulateKeyUp(split[1]); } break; + + case "connect": + if (split.length == 1) + writer.println("You must specify a server address!"); + if (split.length > 3) + writer.println("Too many arguments!"); + else { + + int port = 25565; + + if (split.length == 3) + port = Integer.parseInt(split[2]); + + writer.println("Connecting to: " + split[1] + ":" + port); + connect_to_serv(new ServerAddress(split[1], port)); + } + break; default: writer.println("Unknown command: " + command); } @@ -311,4 +347,11 @@ public class HeadlessMinecraftClient { return GLFW.GLFW_KEY_UNKNOWN; } + + public void connect_to_serv(ServerAddress addr){ + self.execute(() -> { + ConnectScreen.connect(self.currentScreen, self, addr, new ServerInfo("Test", addr.getAddress(), ServerInfo.ServerType.OTHER), true, null); + }); + } + }