From d8cc9cab480a651fd69acf4c3b6cac087d5eedc2 Mon Sep 17 00:00:00 2001 From: adman Date: Mon, 2 Mar 2026 00:14:57 +0100 Subject: [PATCH] stuff --- client/{modules => }/config_ignorer.go | 2 +- client/{modules => }/login.go | 5 +- client/{modules => }/status.go | 2 +- client/{modules => }/timer.go | 14 +- data/minecraft-data | 2 +- data/registry.go | 20 + data/registry/1.21.8.nbt | Bin 0 -> 27943 bytes level/packet.go | 2 +- nbt/file.go | 9 +- proto/connection.go | 4 +- proto/testdata/fuzz/FuzzConn/08307d8a6eaaaf56 | 2 + proto/testdata/fuzz/FuzzConn/582528ddfad69eb5 | 2 + proto/testdata/fuzz/FuzzConn/8727b16d337d7b81 | 2 + proto/testdata/fuzz/FuzzConn/998444ddd2dfb8f1 | 2 + proto/testdata/fuzz/FuzzConn/a08445a85261adfb | 2 + proto/testdata/fuzz/FuzzConn/e31fe72d9d1b54f1 | 2 + .../fuzz/FuzzPlayPackets/d276c59373082446 | 2 + proto_base/base_types.go | 27 + proto_generated/packet_info.go | 4 +- proto_generated/v1_21_11/proto.go | 29609 +++++++++++ proto_generated/v1_21_8/proto.go | 40622 ++++++++-------- proto_generated/v1_21_9/proto.go | 29432 +++++++++++ proto_generator/helper_generator.go | 9 +- proto_generator/main.go | 3 +- proto_generator/native_decoder.go | 1 + proto_generator/native_encoder.go | 1 + proto_generator/native_type.go | 1 + server/config_server.go | 80 + tools/print_nbt/main.go | 39 + tools/registry_data_hunter/main.go | 44 +- tools/schematic_server/main.go | 73 +- tools/uncodeable_packet_hunter_proxy/main.go | 11 +- 32 files changed, 79606 insertions(+), 20424 deletions(-) rename client/{modules => }/config_ignorer.go (98%) rename client/{modules => }/login.go (97%) rename client/{modules => }/status.go (98%) rename client/{modules => }/timer.go (84%) create mode 100644 data/registry.go create mode 100644 data/registry/1.21.8.nbt create mode 100644 proto/testdata/fuzz/FuzzConn/08307d8a6eaaaf56 create mode 100644 proto/testdata/fuzz/FuzzConn/582528ddfad69eb5 create mode 100644 proto/testdata/fuzz/FuzzConn/8727b16d337d7b81 create mode 100644 proto/testdata/fuzz/FuzzConn/998444ddd2dfb8f1 create mode 100644 proto/testdata/fuzz/FuzzConn/a08445a85261adfb create mode 100644 proto/testdata/fuzz/FuzzConn/e31fe72d9d1b54f1 create mode 100644 proto/testdata/fuzz/FuzzPlayPackets/d276c59373082446 create mode 100644 proto_generated/v1_21_11/proto.go create mode 100644 proto_generated/v1_21_9/proto.go create mode 100644 server/config_server.go create mode 100644 tools/print_nbt/main.go diff --git a/client/modules/config_ignorer.go b/client/config_ignorer.go similarity index 98% rename from client/modules/config_ignorer.go rename to client/config_ignorer.go index 581af7b..3c16d73 100644 --- a/client/modules/config_ignorer.go +++ b/client/config_ignorer.go @@ -1,4 +1,4 @@ -package modules +package client import ( "errors" diff --git a/client/modules/login.go b/client/login.go similarity index 97% rename from client/modules/login.go rename to client/login.go index 54f2085..e25389c 100644 --- a/client/modules/login.go +++ b/client/login.go @@ -1,4 +1,4 @@ -package modules +package client import ( "crypto/rand" @@ -11,7 +11,6 @@ import ( "strconv" "github.com/admin-else/strom/api" - "github.com/admin-else/strom/client" "github.com/admin-else/strom/crypto" "github.com/admin-else/strom/event" "github.com/admin-else/strom/proto" @@ -157,7 +156,7 @@ func Login(c *proto.Conn, account *api.Account) (err error) { } func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) { - c, err = client.Connect(connectTo) + c, err = Connect(connectTo) if err != nil { return } diff --git a/client/modules/status.go b/client/status.go similarity index 98% rename from client/modules/status.go rename to client/status.go index d2c3521..114e114 100644 --- a/client/modules/status.go +++ b/client/status.go @@ -1,4 +1,4 @@ -package modules +package client import ( "fmt" diff --git a/client/modules/timer.go b/client/timer.go similarity index 84% rename from client/modules/timer.go rename to client/timer.go index 6d16dbd..d31dc0a 100644 --- a/client/modules/timer.go +++ b/client/timer.go @@ -1,6 +1,9 @@ -package modules +package client -import "time" +import ( + "slices" + "time" +) type IntervalTask struct { F func() error @@ -33,18 +36,15 @@ func (t *Timer) Tick() (err error) { } t.Interval[i] = task } - var triggerLater []OnceTask - for _, task := range t.Once { + for i, task := range t.Once { if task.Trigger.After(time.Now()) { err = task.F() if err != nil { return } - } else { - triggerLater = append(triggerLater, task) + slices.Delete(t.Once, i, i) } } - t.Once = triggerLater return } diff --git a/data/minecraft-data b/data/minecraft-data index 9443ed0..3e12d39 160000 --- a/data/minecraft-data +++ b/data/minecraft-data @@ -1 +1 @@ -Subproject commit 9443ed0dec3b9b8cdfe82ddb8a8097a622df10a7 +Subproject commit 3e12d39f672a83e081a33ce5dd7c48229f6e572e diff --git a/data/registry.go b/data/registry.go new file mode 100644 index 0000000..66b935f --- /dev/null +++ b/data/registry.go @@ -0,0 +1,20 @@ +package data + +import ( + "embed" + + "github.com/admin-else/strom/nbt" +) + +//go:embed registry/* +var Registry embed.FS + +func LoadRegistry(name string) (n *nbt.Tag, err error) { + r, err := Registry.Open("registry/" + name + ".nbt") + if err != nil { + return + } + defer r.Close() + n, err = nbt.ReadFile(r) + return +} diff --git a/data/registry/1.21.8.nbt b/data/registry/1.21.8.nbt new file mode 100644 index 0000000000000000000000000000000000000000..220d1982e08eca6cbfa00b8ce2bd4a3edad8dc96 GIT binary patch literal 27943 zcmV)XK&`(YiwFP!00000|Lna7yd=j}FZ}QBxp!|^t+d)*tyW=!R@w4Ot5vXUWmyh5 zf(?EcOuJ^fW~Oy}x<=hSclOE#b1+~s*v90j?^o3| zGu7Qy9p=tmt$_F5&u?|7!l_fIPClpCfK{x03hnuE68SV<18`s!yY3IC|9Q^}cD
^w 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%0A1k4|HoYB)iDlvDqP z`m7iDAsTJj|B*JrDs!%py;gLm_k}O@m}qTQ$MTpxla9|N$Q_%-9Gd0O5dwqt)4oO z<38J@LB4)hxbRn%-oigEx#QI-XPj^=E=hz$;i}L>Dc9m$lRpXZG_Fjg%i@CfnOm-k z?&*2G-dKpJm)?Ue093?fHc5V{wco9ifOS1!odT?z0P6<8dOBd80GyWr&dUMoX27}y zux?Df%oSdeLNGNGuGQO;oj#4CEy2$W0U5RFbVOsC6tXqf>qOE4=VsAmSFbX9jK(e( zN@;|y&xXT%$180v*2TGe$9PDoDY>N>;8Tpz9%UYNC#iOt1(s!whcpfp@1!1_a-HVF z#?jzy=s@bn&MC>~xUDxzLdcgdo*9p-UJK!jI5sfp4%wvcrY?9WLzZQ^1)A$$(grLH zzJ*kVYck!=ZI%0gH2iD*)?Cz~b_b%fD*?>sr9# zGWI&a`G8^Hj$m+Fc_OVbz2+2?Tz3v*xcM^GPbPSHxkYYIE%Lm;KfBV7^rcNgAy4`w z5p||Tw@!mBEBj%{#uRZtaa92P;j`$0cjWX zX8TsaegdNTAQqDRc=sn136oOTEZ) zwinva`-RCvB%nlO4;u~EtIiH*gizyW89Ni_kUsZBUa(%{-Q8H@Ef{z!GY3_AcD*zb zjWsi>fB8}+?Y74(*vzk`SF7TL__-5vqyNVMYXn%EfHelJj{w%61J+*v&MN@t{{hxt z0@hyv)}H~^U#A%|BAeyaGUMfCX;z2zlWDey$SnCpnq4w?#=}Tv8aync_1DVi{EeE7 z0X6#nS80S`-Je9@Yp+pv8~hXvi_^@>OR4F+*nP-?C_+r&|mEZBWn z>!4^A+_3X8n=@y194fH9Uc|<6-WEUl`c+nl$xu8Kv~JR9aWgdU=;Tw#s;Zt zu$Zjbl3tSasjs(GUTRrs!{EPO4ownEX|Lz@Nz&=NZIgcD7Mq_4&f3s(xM?_QWDOSYb= zBwF@o36{>!r%6!Lq^=K3R{YB{>FW!Xsb|G7;3`j}+#e<72={!S)-{h3Vgy8jF$2$j3G^j2fWYrW+r5zXE6O%3ZSwwcMo ztpGJ>JP8Wh=K%H|z&;nS&zl8@TgL$VwDc)Wg350KS}!dIilwMj5OGI!p>D45)0q9f zZ$au}A>racrg|(fIOe3qrFY~cG>S-vB?-wpz!v~=fh)WMXdTuwcJV>MVMIC4d|)&f zx(PElMEYbn+>#XsWRv+`!IS9RoaQZY>JeP>y&{h?uc$g3(zttcl47mjuuVxP8!a+G zCR!Gn{o*YpaP`c5(ST|+^+&;m@YUp-*za9P?xQ}moSsbmERsu44+9n#LjU&E&8Bx8 zl5o>6v|Uy5E%lVx_M=W;?`O-Zl!n}V7MqKN&tF)Hh3WMLfo$zvaBCKQWrb9Y7Xj7_ zWPR)lvvsrfX37BVajq+Z+DDT3qLEfCI+6t>^t6o?(?l74r8My)gCfzU)Fnw0kxt@o z(t_t_8$5l=x6hNj`*bQVrezqfnw2Zs4+5%$5d{^QahxC-CKf* z=u=SB7I=lP@>v(^dQDt9$k%v_>P+39d$VR-ZEsdu@ij?FGUS7b+A-Sg`XVPJv+o7X zRKaOJ-z2H{qBODC8gK;xXdMCUp?LOrr{VUp67?q=Ml_B`k@)&VlFg$!Xh=^faEz=Q zL;udRNkSzVLXMxtQ(MOk0!MxVNefBV;iA{=XRTHu8nck-K4|K^yF9s9IU{Ja6sDwO?I#7^>cjpwJ|dFCv_xoVmu zAf70Hs(24z-6vxk*QU=IKb}f#{)G9Hb|`?K1gswgoTtgB&!7CBG`GQdI^bL>S-}00 zEj$}=P6(k1>xWa8@nmO2H>@{#s`*mWHeGvUqp0(wIN6tG)Hp8yoEJ(~e^BbwJM2wu z_^ujP?KG`uZYpyc2Hu)SG#X|(39EBwJ=7xi#=b{JThgX8!1n|AQB$&OA!K=HbIkD_ zrliBmFj+(TxMMJ9K>rh-4o zd!J@sh-5wGIxbh8>mt9ZqQKy2UiV;8CegX5xMh!HD9zI-SbLfa0$Gr(-$R#;aCrL^ zvwe5QdAUTn!pA3S=4WN59o%-EO`3-DNoi1D(C-~74O^eA_at`MpzVjUlViR~l_}Ve zer}`Ec{)ujxWa%rZW?bCt&(P%O~KtM=*i%%O*QY7aEn>OnNo7S1dNEEO|(?h@<~#@ z*0q&-eN3K$^gAi8!Nb2x@$i38dij4T+BQRzrjY29QjKpa3lW^d?T`%(`*<7Ryd7}94sgC6 zaNYqp?*yE00Gvkv=Nkcsn*rYpINt&|-wHVI0-SFHoNou5@5r>BKQE(N1+16tJ8$c` z=a7tI>c*Xj($FQI=NIeYVUYL_j{MGsOFFt4DqzZ$$#Sq{Ye=)u9n*)t+gn2t$24|n zw@W*k58ho>j0a0*k1O@O+>hNZ3I2cfu0B?d>#F}|_KsblxJjIs=dU=m!wM` zN1IeCU!sMyAS6JPG{d}o_w7!0c4j>@`(7MCd=!F^Xk8KoXi6O?j$^lR9G6Ii(j;za z32jp(0)-|Dki;nj+9qwK7L)vi_TDqQGjs3Rw`;eip!zRM_U_KTbMCq4<9B|)hzZui zRvZq_vC?VKnwDm8dZGFydr@LJ%$sdLm075W2qzb&J#G)9h;D>|nx zcy8OrXZu~0q7gH&3u?c{j&-kk_^LuG>lWgW;?Zzl5m0wTwlHHV2zmZ5S-@r7sM(%0E zy0St>_S!O(dpX#f`Q0ST6_zzz44YbfFEUjlx0sG@8x59jv_D)ki2eCg2A%Sm<)ARd zLQHeM;Ja#z_A=@4=filZAH^~a=EKOQ@@V*{itLl$iIZk$KBxhwFRD04ZS@;yRqN>_ zlvlTdeymv0dGy0;OFEk#ou-|o6>p`LHW)}wocKZ9vM4QV=8b$IO_r_VSF4y^(5}|v zTsMt%uKJHhJ5`jE)|D7#FD^w?myRKOy`=7W=M0MkC?4?+X2I`y=tA|&7)kd^e80*0{Rsw<1EN>0+Ia_&vAr^7+6;!_<3R~^m zY9$*OxCZTFCyb&oSGreni?1FE=i8S%aIPBv5#)LO1iC}JD944R+#t+lw;B*WRDUJn zZa^Fa#65tx3lIkYaW5baF_TrDer?EmYKfy8>U@#wE6C}t-wkp($nlJNS7V;WKX0V= zZ(Ge_t2S^W)U(>|aX=hp!kV@W7A($qH5C-@pzPp-lr(;Y(t8h`N9$uY8G(TsVg$Cq^Qjtu_#hze z1jIiuYfEJ>2-D1uWT4!sc_f_r(EC<9o<5h|p3VBtr)qAQVq&`n?I=)CLD;-Y1AG*5 z^KJt0j0l{^KYdZ%vOoQeOrkLy*y8oh_834EV!udCL{K4Mb6l^B~p zM<}ojgcRFI7=`x{c3~gk6$*UA?Sx&p!(?^$E&;qIs zKh^sCEzJb0qJs;lCHvdcjO4zLAT)PU7rN@;b*=7x;#<6n=)4~!zQu!7!+U^u81JTf z-ZA22yoc(1M~SQP0P#6KL~3A%H7z)f6L;gi#PRrHk|8)ke2@DzK`K7NWG~HB%ASft zlb+x0XJOM{2(zZ)NyT%3I0=a70r3?;ya0&*1jJVX@ijnv9S|=9;w3Td zi_-lw;QR~V{43x*131qD&U1is5^$a;EZV<~@MuFE+E)SRYetKvaRbnJkKN%f_R~0M zN+mwh4AR_R?8}I`6PwAh^*uKBF+P1hNjh0uMvK1sn-Rl335eSP@linB28d@EdnkL) zLGEQq92(zb5{Ig|dKkA-xeyvvkM+7M>D>T$?*Y6U0nZ1#Uje)T@a6%p33w9lT7cIE zyb$ni0=y33MS#}@yae!ifVT(mQovgPyhXr^$495uIA+N3Q&xa@iKdwJ^wMaW=|wIq zPtr`9Z|zmO-zNsa@6#H$qavIABs6f0xed#2Ld_r;@#=37MRs2kUa7wJEsTTh${?>N zB1%i)b;Q*0dO$p)H4nrf`FL1sAczMQyCt)wW3>Bt?>ONswdz~_G!wj4%`}yMko9CU zH}WC-77bzmdq_QYM!R+aFi?lFa)h@l0F~XjDK~1E&)TWplV;-oZ(`zqnb`PG0peqf znQ5!#0^kN`s2l9>qAr^4D3F@{Y7AR(l9nNw{(LYWO7s5tA{R#uPK7xIYk%j)f3rrj zcF$d2VI*7nu46Ll(R4m@qf&L&(-akUSHh1cJ71rYjp9py^N)b@Pk{4fz3lgy_RrpwVq=}l`5KJ3h+c) zY~Ajcna_})Gd^P#$+bk#(k2!o@BqnI}m1>L~z zn)a#G#W?9tFc%R~Kn=cXf-C<_yBUVWW*uIpCie~cM`_7DA$Jrdf>jG;cmbQx3Bv zwzrlPK{pYC_(Btd`lEwz%;(fu#Y;h?x2UM?XqUtr#K(v*?yu(^~xe}`Fjoa9n-UFAtn zX$hx&6VtQ0)Pz1rP3QxFIHa1?_G2qsEwdClV#{RAPOG^Y$Nf=2oB+h90P$%+{1qTR z1BlN8;;#Ym7$E)z5T66Y=K=8rKs*kJF9PCknbcxFmCIq=QUy!nEnm%)1y<5gyH>%J z`PA4RM(Xrh{eAF6!xY>2A}0X63jlB3*k;p+#s)^qda8TF9(`8?;h5be1_XP(_X(zW zGRlO8oG6*ByZ=>eLS%Q~!`jAV#gg*3>@vVDSw}`PPhx)|%%ZTv_z8EI_1dEn9aLId z8fzv9E*6s{XO?8YYwS_u1fpPP)I$93_8~;Qmu0uj3b700EXNV9RNHCx--u*0muYNi zO1RXJxNU+8Z?i2k?lsy&0K-_GwtE2`^p>ih%sx;^ZB6#Ml7f|jRA~$!rwRCni1oOx zpZn)SZC(4*jN^%^HZ{k3B|DSNlzr%x(=2`L>rwf%*>t^ae-7Y2ZqWcQ3_C^wC7tK$vIOy62@2C*jT2-ENU9NO@MO|>A7qs{gy({ zWh?2u%#rp>N!P{Q54d*$?g7BP8*uLd+=GC7FW?>m-1`9cFyI~m+>Ze6M@d6w2jFc5 zyq$oz9dPdl+@pYd3~(Qy!M69(pxd639C@q<-kfbT^08I}-JSO`rcxA_M&8R_hYp$I zRQYu-1+fKMaQzROJf$X&g0wilG}fcoZ}+j9r%IduVbbS6p;cKMkB;uG|ui4n1H{si}@x=fU7`AdT zlgp(^mRVpT)e3+SH=arI*Lb(R7&@#_Oxl!GWbM{6%~QH;<68;fQmxjO8Q}H-aVo>=c6Q35i1P)^4YKo7> zHOv+&J;ur>24UCzfO8aZ9srzUfb$^W90#0_0nVQdDc3cHCQ;`)pU_mC&clE+a3hZZ z&ZB_yDZn|QsoK?4)r^jMo!?*azCNX&IaA{FD>O6zr zpTvF(GXy!_Zoqp3;9UlIZv?!{0q+XHdlTUOFyLJYcvk`5)qr;m;Jq2}-U4{n0^W6i z_f}@-=B1@jxB1LMlQR!XR+8JimRMV^*T=bQ%Alil$26ce+G4|F>p8rnw~xI%d1$txAqowq@@7Zd>fWxJ=hHW~$^y z)XRWslzbEA5t{+$_w|sqvx>+Mw*dHn{Y)){Y0d;7#ii722jN8Mxyo!}vtz{^*^2@8 z@V7b_k+o$VwY=_ZjYG_olaJHyjFsn`qJEak)b9p2`|TiIl38wgiDJVF*5F%d^SYIh z@0oIh)s?zoztY86SdP&c1RC{ z`Rw+};V9!QlQ7QxWYG`fT&9EM*rd#A7%_s{V?JPNCtb-rY|z}(57pi8-;~VzS(wXu zGf({~TY#`wLG|t1V?}~BRKEY*)B66Qb(J=8V;NTv#tK2Q6r^EL_cM+?ma