From f6548dd6a7213b90f7b6855e6448d811aae03c40 Mon Sep 17 00:00:00 2001 From: AkmalFairuz Date: Wed, 1 Jan 2025 13:40:15 +0700 Subject: [PATCH] Add 1.21.2 & 1.21.0 support --- README.md | 12 +- legacyver/data/block_states_686.nbt | Bin 0 -> 1987586 bytes legacyver/data/item_runtime_ids_686.nbt | Bin 0 -> 46152 bytes legacyver/data/required_item_list_686.json | 6398 +++++++++++++++++ legacyver/legacypacket/add_actor.go | 76 + legacyver/legacypacket/add_player.go | 92 + legacyver/legacypacket/camera_instruction.go | 36 + legacyver/legacypacket/change_dimension.go | 46 + .../correct_player_move_prediction.go | 50 + legacyver/legacypacket/disconnect.go | 40 + legacyver/legacypacket/editor_network.go | 29 + legacyver/legacypacket/inventory_content.go | 4 +- legacyver/legacypacket/inventory_slot.go | 4 +- .../legacypacket/inventory_transaction.go | 50 + .../legacypacket/mob_armour_equipment.go | 44 + .../legacypacket/player_armour_damage.go | 63 + legacyver/legacypacket/player_auth_input.go | 2 +- legacyver/legacypacket/set_actor_link.go | 25 + legacyver/legacypacket/set_title.go | 53 + legacyver/legacypacket/stop_sound.go | 33 + legacyver/proto/entity_link.go | 56 + legacyver/proto/inventory.go | 158 + legacyver/proto/io.go | 39 + legacyver/proto/item_stack.go | 4 +- legacyver/proto/resource_pack.go | 4 +- legacyver/protocol.go | 262 + legacyver/v685.go | 28 + legacyver/v686.go | 36 + main.go | 4 + 29 files changed, 7641 insertions(+), 7 deletions(-) create mode 100644 legacyver/data/block_states_686.nbt create mode 100644 legacyver/data/item_runtime_ids_686.nbt create mode 100644 legacyver/data/required_item_list_686.json create mode 100644 legacyver/legacypacket/add_actor.go create mode 100644 legacyver/legacypacket/add_player.go create mode 100644 legacyver/legacypacket/camera_instruction.go create mode 100644 legacyver/legacypacket/change_dimension.go create mode 100644 legacyver/legacypacket/correct_player_move_prediction.go create mode 100644 legacyver/legacypacket/disconnect.go create mode 100644 legacyver/legacypacket/editor_network.go create mode 100644 legacyver/legacypacket/inventory_transaction.go create mode 100644 legacyver/legacypacket/mob_armour_equipment.go create mode 100644 legacyver/legacypacket/player_armour_damage.go create mode 100644 legacyver/legacypacket/set_actor_link.go create mode 100644 legacyver/legacypacket/set_title.go create mode 100644 legacyver/legacypacket/stop_sound.go create mode 100644 legacyver/proto/entity_link.go create mode 100644 legacyver/proto/inventory.go create mode 100644 legacyver/v685.go create mode 100644 legacyver/v686.go diff --git a/README.md b/README.md index 013e33e..9d7889f 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,16 @@ A gophertunnel protocol interface implementation to support older Minecraft Bedr | 748 | 1.21.40 | ✅ | | 729 | 1.21.30 | ✅ | | 712 | 1.21.20 | ✅ | -| 686 | 1.21.2 | 🚧 | -| 685 | 1.21.0 | 🚧 | +| 686 | 1.21.2 | ✅ | +| 685 | 1.21.0 | ✅ | +| 671 | 1.20.80 | 🚧 | +| 662 | 1.20.70 | 🚧 | +| 649 | 1.20.60 | 🚧 | +| 630 | 1.20.50 | 🚧 | +| 622 | 1.20.40 | 🚧 | +| 618 | 1.20.30 | 🚧 | +| 594 | 1.20.10 | 🚧 | +| 589 | 1.20.0 | 🚧 | ## Credits - [Flonja/multiversion](https://github.com/Flonja/multiversion) diff --git a/legacyver/data/block_states_686.nbt b/legacyver/data/block_states_686.nbt new file mode 100644 index 0000000000000000000000000000000000000000..d4ba1bd5ddcc25fb344996252a22d86a99e0a78c GIT binary patch literal 1987586 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
    RiwA>^4dnOWU9bE{Y5a;H1T% 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 literal 0 HcmV?d00001 diff --git a/legacyver/data/item_runtime_ids_686.nbt b/legacyver/data/item_runtime_ids_686.nbt new file mode 100644 index 0000000000000000000000000000000000000000..51ae9a8f9a9a014ad3d631bf8f844d41d3c12677 GIT binary patch literal 46152 zcmaidcbrpIxAvXMFcog^z4!ZGGBdRM_1=50`A(8EGkGV;$$L)1IDX}d4G|F$5wRhn zA|fIxc0@!(R76BXL_|dF*iaF%d~2;;&U%u-{R@7{+uOst|>F4>NTBQruf_goSs~-;N z?+S6Ll0;Q|z0;Y@Po}?%gM7YJf4VF4%jstmC3(oC7EDxg;ppgPy_w%izbyvwcrFUY zbG0~3l13cnYUQ9FZs^ntz~3i9tz4>(PR;yG`r}ePto&d+EZ3HHW_~{XxG)yQjf5{$ zt-q1U{B-(FF${|NMl$xdGk=hNST2o@)pMh9Fe&d;rBxd(2MJvusD?}X^?K#wFg!QR z#ZmE%?#yqemq_R#LR#e<-8rG9cJKOdkAB<C(FwmM80R za7mxu?VwOE%?;{NoFgGDf77A&uK8BES~O7%-yL%)@-#r&n!aj5e^% znm^uFMu%nxncqyWo7Ce{twwuA($D{lP1eSO@IY7QPtw1smx^I7h%5B;^w*VKQXyF+ zA$F44QQ3K#>h ztW$qmX%ut$xKtqR5#`^~llj$jb&Ofi-@giS7Sr<4heOa`}Sp%&(<4@qd&r z2ZeEY;O$^sDvhL6$Q4UTAy*hH#kCiEGry7k+-P>b+z4sM<2WeL0tf2`GQXSt$pqQQ zFcz7J1NvX8yB~t?7AAvgZX$}xM|v|qmHwP9Q#l&_ZM~a~D(OMU#L|ZPQW~v((4#dwI;T`5k)ahB zDIBJsJHg?|(?r7I*1|AO~3; zC1XQdS`HuS*6ZqQ>CD+TbZEV*gk^SR$wU~EyC!*@%&{-JA)_D2J!m#N>-!Gv>ua=?VLU=Q zL%%AFhxHG^6p8yPPKNh`?imY9A3q7JVUY$2?x(%_9!g)#B5vu{yAqrem7{vu-v5&+ z`a1_+jFQW-*H53p4tnvS0ED|6V_vHLN6u_2fm^MY)P9;hbMk0*av~fPvnfasC@Js~f&{Blw)S`s7OL;D_^t+~L zSp^rlw@cfvEJy=4uEe?Rt&M_ z74ZDUQc#Ji#T>2YrBgsQ*)in8$?)@Tts~lK&F|H3U5N7J24(kp^)reCv!-c3 z=%}|eC*bx3Sb{Qn_Q{JuIwr$1S!@QVY+h5Z_BdD(StPPCK{a{08&;2_gquNN3G(ra zmdimUNbUW@06&sKFfu|Agd~1vr(O*!rhHX#{evF@a2FjK6VrcRr#7#(nA`&bo)7!A zl_U^FK}|H0qu?P&2I1;HEzkv80`Ho>2HR$x09lGBy7k5oSf%$PNE}o?>dyR5Do_() zzyV5=7Ljw=2dK`Osu{BvbZABN3e;ZlkAWiouu&alkR&>KMJI@A`WOa+<{Rbw(y1D3 za6Cid*vd@i$J58pM-$~MKvk{c<)ff}F)TqS5?!N}Ex!h9=H6|1=8yE|)}j*KkPsRn zZQ1B|x`pQaC#)Ht3w8|uCS0)#xdL$(1q0*bXKyR^Z#x~8Dzl3r~` zN5_JMe&?dC8+){w@d1LhP;3j{nTk?G&cyxrr5=s;^WF-qFPO`XrntnBJJJre@>(Mc- zi9sep4sB@%(E#2KV3ZgDA{Ho6U?sj3K%hd`w3(ji(>jVAI0 z-o6Ik?&FGLDT?VmR`u!4uLtpHSU;4}>glD)uRWosoq)p$?bDZbA+H2;X9ZaU=B2&* zmgS&GkAHrLcFq1F)8NNijvWxT7oupq6yDaQC4_z(5JDnVPbK`x9&LeXVaUKj$oXZz zmT0;wDc49Nt_Fp0K42+lF9v7-3xGaNA)zsIOS<(wI`l4{UHs<-UD`~$OJ}EN52Gt@ zwvQ}ytAQtT)|H^hE#NLvyfqeuZ}-76I2ys=Mm7@fP1O%<9j?K{+gYAi34)t%)*G;Er94LDV67vM{e=)PlLtrg2>N&qz8RMG=4QecegYKo__&m z(7r*wQ76p#ZIAWQ?y@-s()W!y+y9q zfGDtBlkFn^Fmh*C=Fd_OLrfG|m$SN1-DVT zY}Nf>A%)#i0m&YayEN1*g~?N(pref9k{>mQVeu~L!d|dkL>*8F6u;7^KaKJUh1Nke zuRT+N@C!wgWTI>Q@SA(}%R7ylG2;R-(eCr<|5)QxW%6g-+^-3r_KQVvXFXgrRX<{3 zEQkrCm*0orybvf){TAqnx+neB^S$86h=<6XiJ?6XF2KFe%sDFo;dAI>&Dj6ZaLO{u zj}B;n98~9)$~SlFfb2}6))s(vK4xKcJUUe)Oj?g(&e{>S6W)a#>(|av$QmXZ_6>kV z6x2proYXG_PG}-3kEFtL9CW8HK_-(aTNMH1E&?T?g)?l2Pszu*z(2O|?J2ZT#$al1xN#@iPRZK^#Z*`@8fq87xFHT0RWkDQS!n zMkT2XuY_1t`P5f|wH6{i6}tye)8dGdj0MgJ)wlF%bty!}YrtMqB0{#!GVyM|w%Zb^tV-8=jMH<8wWkKTfrmXr;4m)Wx7p?7>{FiE{&2fq%0J)|i;U z4H<3Gwe^)HS>LB^m(kG%^Hl`UC;sTPrVvm>IH+wVMBbQY1#(wazoSV*v#bIqTo0Mujn1v!` zYYQ&ZI$I+HXJcmlj%Elf>a$j9JG_)UZLJZLgAtkakmFO3a7&i8zRN}Z8iXl9YW>p% zAPs3u^KbRDn*0@^yP!Oo)R*^Y$R*IGtRasD;>>_81|V)T`y+9qRR0FHSC|E(guA;n zpmo<`c4G}PtOT`4ca!9Kz*{z+;iT4=ZS(PigMUYFwBxUy0BXmYe@qFzO8b&IOCzI+MIYOq!J0lT034`QMz<^KYNspVj9 zU{hjmfkC2rglavassrcA-vC&lG6j-eyc&pgT1`qzb7quwyk0Md*YxU_5(7uTQ9|s$ z(7NL!C_8=Td*CKa`GG+DKh*?>#qNqq+y?}RUq22_B-eWgc-E8vsd9cm{$e5MreX-b z#`sv0TvkWUL+IHcMz2tcsE#M8hZB!O3N;Q3gsKSZNP;~{?gv<-lHR=K$AAiO%QJK4 z3ZR!N(GMvh)f7J54f=1BaV*o|B7KfKy>W7U09=zKg;c4-7gI8So`M07Gtwx-X8zQs zJk+J_K~tU4Z6H~BK|v`-+6?tumeaA}*eg&UMQLynw@UtbcyXIhAd~TAr`FY0PFDQj z;(oBdhMN$+Zw*A0XbX~yz-)V|qr2_^w!i}+a+QU#YXEaNcF`0A?SmytNkEd)sQxZQ zBsM$L$SdG|Q;)Wfl!FpyaRCs!$}>9p`U5Dq^1*`%n|BRB%q0a7+ksIcm1n!*(+uxI z6@UqGYy}>Jly@@P%^Da-xdf@rSOgdLQbw;)rR&@PDy32pVj|W|)8ZyjvCgX_cUS`A z;Z!O+=dbD5zpd+_d)LDSz}kvgF=6|goe-`&YSwvVLR3dG`WCJL4P1rD;Cu+~WS6SE zq?E4z7*b4LdA&3)gX}B?WMqIS7yns@j;I|gjHJfmwx%XKYnBeI%(_@u;#}zi$e z#yI~swP6?Q!fzTUdqIkb4)fL?t<&_(*Rno2qipY22|65FrJw z7G1mzNGc5_Jl=W)P@!bBCG6YQr{#}7Z%Hk@1gV9*3ku7PN_9)82J2F?_R|_73Sw)s z*`kLJfgW1PGjZHM)$7e4Ar1CwzkcXcC|$hI) zq3plY%Hz|GR+7jIt_J{ED^V_*=?hLQ?|{Oa=p1Gjij*XoTmUKMN`s?8hejXl(aKb( zDsVw0RCe)jZ)SRmPK>=uCDmdQU2;T_=mUVh7BNU4gOFmk>u5v8lT$StB2d7C_b9#? zQncyzY?`7Smx7oITyBDh#xltao}U1U*%I(cP^KNa8RA`{W2DUAR6O1Z*>p>6qX`5y-mSE2B zAt2L>Ah-Pjh+9kE7)J3iU@qNO%$~jp;>QBj{g7>yA{4*vw*YnTLmH-*ZUpz%w2$V& zPebJ%)hJiOXP|P&MLS}FzDM(e{mo=S*miY#vE3;e5a)?D~u& ze+mlfeVCyvjYQ7LYN*_|px%=Tr=Wn*#M<%#|5fwmf0Y|L3YBm+oyXaLjX*pUi9p~; zM6z0&!xK&CWOtsaSFc zHExc03>4m3Oe$BoZHfjI;+R~dNw$LfZC11e6my1lL%wh#%>Q+51;x*uIe@wqpn6mM z$JJ^JAzvp{KpIhOM7Lom08<;cqc`)1skc3&w8$Dh04`>%kx&VkgD>~=XvCnXm!ptb zwhVU*;C&bjiPI!6jVGbyz}Ph7OD^uvl{OWsjk;`#HacSzD^g*aY4n+aQk7^g65F?6@$EZ0v3Li11pNw=jSUk54Y&5`?1%qaR!~8L zgJ3Y(H*l|uU!ZwlZk%|}nXwm=p#GI7NW`m}QApVsA+$dM(uDeg!dkl3-*rPM;5r6% z;P@$&Bly0jWD|UDZc2SX<99))lSNVf;D=vjL3vx+RRp~16HvtzVF%(|>VOUmcavkSz zJfkBH58$MOQ84zCy&7+-42!tTPazVbv>ma-`oWjOgL~&E&T1bdL%j?(y9^88ZUx51 z|Fw?^zXjx{>R7Tv&w&-Tio!Vi02uxH1QF>RsL!R;W3m~@1a@?FYT2vJo2J_;SuPwO{iS79DWWRKygTw-6UTx!@k&8 zR_XMe;AyPm;s)d=p#WdDTm9@%pN8O6Ys0e4OQu?=zJyz=jiA3NM`NW|AocIpV$Q$P zIM~BbUcKE=0B@_f&eebJ#eogj{sH}vK8W_h$C1rZa2%$FL5eh9>(bGk$0x40dOH9V z=Q#-@JPy5_gf=-Z0j12#z#T$d`SO5PLZ3rR*`QU>J7d(03-U={skM)@nkzy4t&Iz* zaW{%T%3$=&JwqvkN@GN;XuBbZx70%#->&V|&nlQ8?OkR}aNRUbvl#fCTnolj_~YlG zXoD1wkr=t?B)JZfKuyc|5(M`SsL=|nhmHsiBVL3$)p|tX8#j}12N}ui6@A)=mx;Vt zj)ex?!C<&_S>ao!p&=v(qFQgZ!DG?>Q*u&%20^u5O&01+y;@35Ed#X@a_4}B)M0S} zaCu%;X8a@VM5#f&sCstZ1}|i?%uK$V2kfnn7WMYiQ|)hi$Kk<});1utP6MX43Nu12 zE{$YoM!%w0M6cVdh#ybYsS6X!IWp~EYE$dpe&*m3aNATM%M~Bq3%}5#k&SJWr*h6R zwZyAB_~&7n+{Ne2IS5T=I~T@&&Y&m{zFAfXVY~!s(o^ zp*?bxHjhUNRIljQ)sn{bfEf{bY852jY`RhikXHbektkM51qu+UOQe2YM(gYk8{;AM zRo)JnW6MJE^L+(PZ4NebK>ImB4aSNJOg;?!D^*O4mF9+<0D>2za*dj6(%pOwn$=Uh z=vbtWfGV=o6tU$uf%h(y$sBV7$Q2OD*$6+VksZAZGX3@&!(%-M!I!Damlj+vbC*Df z@6tlTXKaO5cGJ)X{T6Qk2heO!#e{5_rt@8Aj@gbt5ss7T*|WDp)+&vX^ya(+_RCR@ zWD#~v)%L#4w1zh!d0e9s6$VkS04#B&@@G?Y8bO5fa^UZ!!6zs@1GRPTO|sMHeB7Y} zZfj1Jj6DEY+lK)9O*ez<=hR*yCYT+RKLH1A)!0r;&;HuxB@is{X>)tz3tE(LWnCen~)d%(e&Onl0N?S;TodJVYYoVpM` z!&(4SGi;M+UxDTrj*Rfl9U#Xwh9=zDFEdu866?EOy|w%YlmA?&xlNVI-)(2ohi63E zwWg7i@u2g8x^&$r%;&s}l?biFB-qh@4{VTP84tiKQ705dFNA^8F*)x*Z>H4=ELdI# zz3Dy}$+_bCRp52clpwpVsjw+;3}6_KX-6*uE=H*ISElvMxCOM`EDJ{>|4tABJ?7`G$Y^z5F8Or92CZ00Doj7d>8tz>C{NUTJ2Vcx)3Tl*)wof z{#V-x^2`~_VW^Kpbkx>ZOl|{Tni{m>WAFo+BqA8_cXec_-t~QGNVG-@WpWWj%Eo8f zG`_(2H{q6I7f7lq;l=$Lt~K#VmS$WqptHV)9`^By&p``scMxp7)YjaQ(bb1!oj3OA zTRJdLlUh{FxeH2E44@^$&%_8Jqucud#ZwvH&ugga2o2$v?g5{~Yt2{q4j`}1`IE)F z8zQbrzmVyY_ZJ`aUzXT=esZzO~T#~l+kPxxYNRn@- z**pZH6vJxHR&!1M=Ma9-)FFy#SikGvL-(JDENoRbz=$8S$0}YlQ7M<@UI%5lB1qPM zU*4Gf5Wq|u657I(`KLHsGyFtpF?}vPkT@%U;Zh+M=A&svccoYzey{Oop zZz1ZnWo{hzo6%MR#V?0}SvtXf5uklrK}{}x=Tyyb6dTkzaJKq@?_i(BNc$I$;!7YF zvPyUpBrH9Zl8dgHl;?6KhoJ_AT{gpqD}l8Xr_8mErQ&I* z05DYwDe5}_)73;{+LUUY1n^*(N3Je^q-|DkcJ=|tSGm`I9Fj{^l=euc1|P0R?<$C` z?5ne*jgto|Vj+Y7blR;VeKz8PA@9o0yD z8ky*I&<-qMlb-U8F1-p99N6Ch;MbMHkjl&hfljI=9xRn2!f&9KSZ+YZj;0!lUOm+d zPM6yJ-Uf3(L6L45yavi{>_eDR*wYY@F1{^M%#^r)lJZ3rb z;B3C+dMFy9VQZ9=R?y-?fEF|qhO9Lu*BRU9;?b+1l|^zNo~Ak<>Jgh`#xyRy0pil6 zLUGfWA@+_p;Zq*Q5GL1mYG-L}E{}sggCAT26FZzF&Hg=2*;tRjVC|tky?kR4$@$rq z?^^I^V!ox(?^VFVKI5&#(S1V3;t^+`Ntmw#3e*!h=~6C%@Xx*KoWWht zn3_IJKxM)8eb7hX=m^o!F9D*;dtD9_mT6iQN#9kSnmYa=h3CP`pU}?`ZkmU-3*4JmE)EQK!4wd8=b3$O%U$93WXsiJ54$F2ay0`lTb7>HMhX3QBs14j$)2l{BF!>pkb8B zN`^M)BqZ-l(Rs&qE6F0a2WFb2B4>n>E$3ob#*{l*4Bp=pH>pRsyER3Y{@UaSHbOII zdiN9%ZU8zj&3~t|zHF-APqx@ROwL=M&(Lo9UTl*jybqjcr9^|84HAE2igwOK%uU_~ zCFBYrve+Jln8h!KNkd%+fd+v^spYeAt5t&r87OY{r8O;I1ruL6%Rlip z(UXB_o6v#xxW! zybQ7c9(KFpUSfqlI8zpY#{v@!eH|(xghewGAD)Lobf?C~{67h)rAk<&u?5xeWmu)O z8iB=ZYY#FmTu#=qeJ?`=IwNn6zb3cmz%& z@sCYQ*Xai!U=B% zduv|?0OCo|5Xb(*K~EPzbxKsA^EgyR=QU8#=}wYzhb?)Nb|2t#Lkp$B$39RQe^itI z^`$*6qHpS{G>nxuUJuy}`^E-v?gSRyq}^I<`isD6)09-{;MS-9JO_Q!ttROen9=8r zza~si_Gkidgd7{)<$9>dsL>eA_^NKrP2{8U*|~`ufmh^;$|$P7)Ti%7Hk(SA2Oo!d zebNs_b9(YdgC2rHYmXiZg#9V2wgkFt&gC*X1*X4(S|!u`mg526Hs1OO5H%mF#4b}L z@)JznaJxeoe+pGaUWr|b^HxYulDRN~Mdu{czJz*O>lut$dI~av>D(@fX{C1Ler$|M z&uF3$*LE-2t`L#$cMeUk*UrZ;z3(?NfD< z&_vQ_7=k zad6TWj9k*5b7>0s52Bdai9p&8oB#yj_92`76HPOF3u0Dv1N_FI07fidV}k{ycyEER zM79_$b#xa2*(VHdQDaleOO$9ltau)Cv{hJ5qIiCvZuaH*nP;O*FM-L;Qpk2Q)Z;U^ zHi9_k6F@IbHP_2Q6|7pDKy5kp_nVWee9X8AZ|epZSr0*|0HQ4fx@@Glw&&y(1y0b zI+(O9iKgw|KL$Q!qC^FgXWPK@@m`9pmz(`(?OeE8n-5z8&dDP%$4{BTU;AMkEomr? z;QeK7BwJ~!J-`?_Wm^p}%1Sv?NlW0cFhXf`&>*b(3jk#aXH{1M3=!R8JLfBH-vZ`k zgxXdJmeJ`duK;wlJd;TwdI<9<%uUjD;zCuO0MO?xpfX_dVCaR}b+P8(03GA3$c(}N zt5aCENF=-k956IC&2MX6XV2IIG^6!un3ld5G6J;96skW62w3h&KgfPu2=gw5sIJ!E>eUE#gb%7D$)Q79>7g+$xCbJ9QXhNFo>WJC)wZX5 z*5Iv8ofjmuGK$nCG#&&%Qy zqf-X{ij3NMpj1wLXH8!P6}j&7Y*;)VvWKw8)keBA0!7Erlq9MC@2o}q2`i!B!Y|sDCJ`R~qpK+7fibG2}b#jOM#$RgBxzGF`ny<4y#NfbV zkS(?1VrGb(g4Q89(>IldH=!-YCb}rriRxECfra689mPj|eaB$ffZ$Z9=GoSzUy4s& zxud=P&;D;sb2QT=^8s-?F=+{hABAC#s@STj2x0kvruLf|WGsj|4bwjyE|s2CH5&XI zuu9@S3_Wrsl+d=LVc7fc1bji~9M&7j&24u-JN=I|)d*Xx3mI1cp)awH&asHm0q5$F zzMP);ZI`zHiW|4QHqWS|u{0zAZw%1ro9FS#4=sk%DVt-S=5HK`Wg z2X)qLf7}Ceujo6_6q}dIfxX}@qrw=qEBHpb_0TLL#AJ&!Jq6y&cvPk-u7SE5)Z)R# zz*Sqkp1#H%zyN!+$?wB9_}Ek(OHnT&^9}BVo~@uujIUR;wLgP1|B2?&omrYaYa4`E z5%$BA! z;hm6~p<_;HP6jDvlKf3=Vcac-enrO%PJh;b|D)a*X;Gr#?onkPbY73}D0CUtMN(-G zNPi7<)5(l)j9N3G4X<$;O_2{bGOfVz8ZL6DC14tim3%9hI9t0)lPNcMY6eQ;Ig<|t zI3&FBcfcgNIzVAdpMXAA$MHAS&;CaZP=uQ{y{y}zYRK`?z^`wFc-?q>Q+CN9{QL|o zlHrOu(lMc-V<_&Os`u0*xj)u&PPv!3M4<<@NRoAAFS+o?0ju-aCHl6VPZh2{+0Y(p zOrO-XImUjd`Jv08gh;tA2O_=zRdNEEojF67LNpfzNrZxLP2=~Zy6g~)Xb>05fBhv? z0=trY58$r?X{A}U6C9lRuV00Tk5Yo^SKmPJu8slsKYkgbf5S}~C1#@gDacybNXt0g zPp9a77Ii4d7MXC^^o=HmAkwzKcHJ6+OFo4ljWpwW$RNQ{1q|j%y6kCy8#8cz(HN&C z&IP09KoU^A3`aCs%$RC}P_hhQ3wqHvn@CSV_Uo^V)R24S8v zuvMDY)~M{p@0@X_-j1O7Fyv5du6iZ(4{8CH^4 z&!F*ks6XHu`F8g0{&2w;|3@&mW1H^Du`}jFL;nd}k(&nLN$mq*H@pjy@0r9u3`F!O@z!LV)7<+;sNdpx5gIKl!1YRK zYp1ig-vTGbi$pM(8uY$~V*^|3HUuXu>er07J>29*m?I(LYU6sczMefk4g9rSpFrBf zO}?Y`JgB_@>Ro4!8?yO2NO77w;K|%qLMgmY^F9e@jI|Q&@}kQiC*ihnaMnL-7YWUp zu?~t4W!D^1BAl@YEEkQ+s8KE{jDMg(6Lr=#I2BAiw@*NbZ|rSrwf}bLu=9CpId$+7 zaHtl}8Aj*XwtVC8?1siLNqV-8$xWPUs#qzW8=>CYpMl6v z*vU#5l%IkkY;z*lTpl0TVrs;J%5b{vic0DLu3Xg7t@dtKDA2Yntuf|H9-gW@Doo_?0L-K}nVMA)auGbD<6bZ-eXt3taGQ)eBzzt0xLc!{ zzomVf*ssFoi{V979T8O2GQRguE55_R#|0Y=B6xk_-F#jCW6e9qZH0CMgrW)E-f zI2((I0ncW@k-+;P9^gUJm0cpe(f# z(Js-cS)3pK9DuJIWnjL$2uzG@nn1D3;cBM%!x+*Xpolgeua?Rt}nBxSr0;jhn zJvAvuVxMkpojG$RfN&HVpKT3s%e&rxw$l_bb8!m5w9Q(#!%q4BE z)p!#6nyD|84wJ`-;Tg!)wV4%ipe;_DHG3oIk4x|v*RmOogm6M{;QM?i3o3^+G4E1H zF3XOAd)Ni}z~bb*s>@|l5B>Nq-tB$T(~3fbK!QJS$H1ueOz^T6I8CT zxhGCsjsp7Enp$#IBf1v)i;V7jq5X^|ZfUg#t*G<_H2%90rL|J{ICLBqqv|*fq4xyQ z{cw_xMQ6hRUsVX=|wgeTm{QqnWSQ7B7|Opz6NR#Adani7qqjD@r+XTp)Ub5 zAcftxgB^DEaA@#9Xc;q}!HJ)_)>9n_``B0A4K)T7SyyO`H}TxkX7d_&O9NeGG46-S znoc{}W%;t0o8iLN8ahEc)u&lzadnoich{oLOp?Puk+$TBRzZ5Bg$HJcv|^fmWmB(u zEx>&@?acaw5o;0wy;{Ghic!2qPxZw%7Vd^j? z8%54?HINIK+UAXolV#A+D&{OTFpoefyJdNrD!<^-#T-i(>?4?(MRS;wgs7Jr0nNIV zoil4cC}5e+*rsZ{3qaUaa`j_)=B7l*28au4QHg4-xbxc-r9BEtZQL={=-dnqVg)*Z zhv@(6XKis#cJ>^dr9{^BTRrK=_xu=W1**NLQ4);r z>Gi0G=0d0ma_c+zOZxN^3zsFewRNg?a#9KZ9d^YLCW+}FU(>F>ttkaUQ!$(Y`4j>x zRo^2~+d4Sa+blaVZs!ACNj)RA%OL1Aq3z{;y26Z3!TawzrO$)*6|6c1TtgbAUH~27 zsxjecm#!wGvOIDXqYW~gCEXh{-`*Vz`!q4HE+@7E`#iZ#s2jl@M+%zVR7| zvuJ2KJJykMn2g;6G>M~diCjM)PMuU=UTl5GPtGuiPO%&u`SOH&=|CE$EjdMLG|n}9qK z@o0sPA}bF7XX_W}Be;OU*v(qT5eE$tf(}|rxeyQ{;Om{kLRc!X*r|tl3@VsZ0ZBId z1|E)@CZd}G{toCnVLRrG#5|Z(EURE~2sA7f-V3NN13)Fq{OXl94Yf?hv2*d zmlC4N2dXZ=7_z^?IW*d)uIQKZdYj81SXo{L3&lL`^H5Y_wNbLm;0etsL0nY66$)pp zsgltDTEH2pxp)pjH=pGZOS%@`+-dL7jQ<7}#s*cWf(yHJD%XHVR<1^kd=kb zmGJ6&XbN#oq=_dP-VHyev(2fqocciH>Wg3oJ;q=eydHv2i}(181=#&!%1d;;-+Mh8 z2}tH)Dfm2#clB>R20GhKsU#|MO`kpz!CP}l7ib084QQ-NN5II!4(b#W*LRy}>3i5; z8zQ>ZBNx03T(DmkgL8L-)$@+ceEBr+iG)>&RVSWc8=QD+{U~R(FYMNcBp()Ef+`;? z=U!H&)aC&6jJ1x;G*5C0x-02yF*%#s<+c{XHB@Y4csc7P;Z2nZ=i|R#200MGhZ*dz zI|1BM{G4LE3y^A}P|V!-dPpkxj;l+c1CvP_b1DJ(qg$YFka7n!UCg_>YoS(#{Reo5 zgCOJ10%oTV9R&d6GXfUxMx)?CQ)I|Ttk6&@mB08Hu%f?1cK8$=EEor+@`W9E4)f#) z5!-|y&sO4b6`Uuft*PC>w_xGK^%2;ilv-4O7nYhGqUh5-kOy>RpF>$xRQxP7m87;` z8dhEh>^|1i()&4>0k2kq8Kha^9@r4;5xKhTSxA(%9F=$%7&tXg{d_QRF6Bvr>rLo(Qh=P^@;(Tf+@lN+SG3ddAJ0l!DoERK@B&yL0qbaJ0md@>AS>mr zoXyVs7S!C2C1Hm1$bhaJGmGtTpp_}z98E(19xxaZTTn07&w(+wHpJAXzYKA2b8)4k z)Hi_&tCcj2{7#rqD1@Jy{YG@(4byZ+R}jA&SJZ;|*TMpd*^~J`b9Ld6v4(nX!28g& zF4+lQ_C0vwO&C=tw@=fdzC28ua^P=(cCu&1GV}XDTf%W@R!$d=(DAROq$CrOLgJ7L z{RmBC?6+fJ!&$-!$aC3*(*SjlJ1rFn0ikER01HO@m_I>en1Ad3`cc-vZM^ zsp+7w8B)fN=Hp_HT~AMdp0~YuB)Z}%&z|l#yyHmswjQ%^LzBGnFKSI zOD=^pw^R1P;eXK1y3CxusL5|zvMpVb{V+DgNsr6m+ztTTU=G^7YVi{|;=$noR*Ux_ z2y)SPnl(BIv+JqyHl)*R<1b;La7)YO|2k`jpNks}QTr{pL9@bQSDpm|Oz-{%@Tn9< zP}`+p@ILI;ch1w1Dtv?rLok_`gQYR|0r_mpjYvjb1n0zV#sGpv&`D|AaPX3MK(ikC zFB;aPX~TFpofSOKzLc$5RcSAtj7!BeV03hLP;f0V*O-TL1t6 literal 0 HcmV?d00001 diff --git a/legacyver/data/required_item_list_686.json b/legacyver/data/required_item_list_686.json new file mode 100644 index 0000000..1533da5 --- /dev/null +++ b/legacyver/data/required_item_list_686.json @@ -0,0 +1,6398 @@ +{ + "minecraft:acacia_boat": { + "runtime_id": 387, + "component_based": false + }, + "minecraft:acacia_button": { + "runtime_id": -140, + "component_based": false + }, + "minecraft:acacia_chest_boat": { + "runtime_id": 661, + "component_based": false + }, + "minecraft:acacia_door": { + "runtime_id": 572, + "component_based": false + }, + "minecraft:acacia_double_slab": { + "runtime_id": -812, + "component_based": false + }, + "minecraft:acacia_fence": { + "runtime_id": -575, + "component_based": false + }, + "minecraft:acacia_fence_gate": { + "runtime_id": 187, + "component_based": false + }, + "minecraft:acacia_hanging_sign": { + "runtime_id": -504, + "component_based": false + }, + "minecraft:acacia_leaves": { + "runtime_id": 161, + "component_based": false + }, + "minecraft:acacia_log": { + "runtime_id": 162, + "component_based": false + }, + "minecraft:acacia_planks": { + "runtime_id": -742, + "component_based": false + }, + "minecraft:acacia_pressure_plate": { + "runtime_id": -150, + "component_based": false + }, + "minecraft:acacia_sapling": { + "runtime_id": -828, + "component_based": false + }, + "minecraft:acacia_sign": { + "runtime_id": 595, + "component_based": false + }, + "minecraft:acacia_slab": { + "runtime_id": -807, + "component_based": false + }, + "minecraft:acacia_stairs": { + "runtime_id": 163, + "component_based": false + }, + "minecraft:acacia_standing_sign": { + "runtime_id": -190, + "component_based": false + }, + "minecraft:acacia_trapdoor": { + "runtime_id": -145, + "component_based": false + }, + "minecraft:acacia_wall_sign": { + "runtime_id": -191, + "component_based": false + }, + "minecraft:acacia_wood": { + "runtime_id": -817, + "component_based": false + }, + "minecraft:activator_rail": { + "runtime_id": 126, + "component_based": false + }, + "minecraft:agent_spawn_egg": { + "runtime_id": 497, + "component_based": false + }, + "minecraft:air": { + "runtime_id": -158, + "component_based": false + }, + "minecraft:allay_spawn_egg": { + "runtime_id": 650, + "component_based": false + }, + "minecraft:allium": { + "runtime_id": -831, + "component_based": false + }, + "minecraft:allow": { + "runtime_id": 210, + "component_based": false + }, + "minecraft:amethyst_block": { + "runtime_id": -327, + "component_based": false + }, + "minecraft:amethyst_cluster": { + "runtime_id": -329, + "component_based": false + }, + "minecraft:amethyst_shard": { + "runtime_id": 643, + "component_based": false + }, + "minecraft:ancient_debris": { + "runtime_id": -271, + "component_based": false + }, + "minecraft:andesite": { + "runtime_id": -594, + "component_based": false + }, + "minecraft:andesite_stairs": { + "runtime_id": -171, + "component_based": false + }, + "minecraft:angler_pottery_sherd": { + "runtime_id": 675, + "component_based": false + }, + "minecraft:anvil": { + "runtime_id": 145, + "component_based": false + }, + "minecraft:apple": { + "runtime_id": 257, + "component_based": true + }, + "minecraft:archer_pottery_sherd": { + "runtime_id": 676, + "component_based": false + }, + "minecraft:armadillo_scute": { + "runtime_id": 721, + "component_based": false + }, + "minecraft:armadillo_spawn_egg": { + "runtime_id": 720, + "component_based": false + }, + "minecraft:armor_stand": { + "runtime_id": 568, + "component_based": false + }, + "minecraft:arms_up_pottery_sherd": { + "runtime_id": 677, + "component_based": false + }, + "minecraft:arrow": { + "runtime_id": 307, + "component_based": true + }, + "minecraft:axolotl_bucket": { + "runtime_id": 376, + "component_based": false + }, + "minecraft:axolotl_spawn_egg": { + "runtime_id": 512, + "component_based": false + }, + "minecraft:azalea": { + "runtime_id": -337, + "component_based": false + }, + "minecraft:azalea_leaves": { + "runtime_id": -324, + "component_based": false + }, + "minecraft:azalea_leaves_flowered": { + "runtime_id": -325, + "component_based": false + }, + "minecraft:azure_bluet": { + "runtime_id": -832, + "component_based": false + }, + "minecraft:baked_potato": { + "runtime_id": 285, + "component_based": false + }, + "minecraft:balloon": { + "runtime_id": 617, + "component_based": false + }, + "minecraft:bamboo": { + "runtime_id": -163, + "component_based": false + }, + "minecraft:bamboo_block": { + "runtime_id": -527, + "component_based": false + }, + "minecraft:bamboo_button": { + "runtime_id": -511, + "component_based": false + }, + "minecraft:bamboo_chest_raft": { + "runtime_id": 673, + "component_based": false + }, + "minecraft:bamboo_door": { + "runtime_id": -517, + "component_based": false + }, + "minecraft:bamboo_double_slab": { + "runtime_id": -521, + "component_based": false + }, + "minecraft:bamboo_fence": { + "runtime_id": -515, + "component_based": false + }, + "minecraft:bamboo_fence_gate": { + "runtime_id": -516, + "component_based": false + }, + "minecraft:bamboo_hanging_sign": { + "runtime_id": -522, + "component_based": false + }, + "minecraft:bamboo_mosaic": { + "runtime_id": -509, + "component_based": false + }, + "minecraft:bamboo_mosaic_double_slab": { + "runtime_id": -525, + "component_based": false + }, + "minecraft:bamboo_mosaic_slab": { + "runtime_id": -524, + "component_based": false + }, + "minecraft:bamboo_mosaic_stairs": { + "runtime_id": -523, + "component_based": false + }, + "minecraft:bamboo_planks": { + "runtime_id": -510, + "component_based": false + }, + "minecraft:bamboo_pressure_plate": { + "runtime_id": -514, + "component_based": false + }, + "minecraft:bamboo_raft": { + "runtime_id": 672, + "component_based": false + }, + "minecraft:bamboo_sapling": { + "runtime_id": -164, + "component_based": false + }, + "minecraft:bamboo_sign": { + "runtime_id": 671, + "component_based": false + }, + "minecraft:bamboo_slab": { + "runtime_id": -513, + "component_based": false + }, + "minecraft:bamboo_stairs": { + "runtime_id": -512, + "component_based": false + }, + "minecraft:bamboo_standing_sign": { + "runtime_id": -518, + "component_based": false + }, + "minecraft:bamboo_trapdoor": { + "runtime_id": -520, + "component_based": false + }, + "minecraft:bamboo_wall_sign": { + "runtime_id": -519, + "component_based": false + }, + "minecraft:banner": { + "runtime_id": 583, + "component_based": false + }, + "minecraft:banner_pattern": { + "runtime_id": 756, + "component_based": false + }, + "minecraft:barrel": { + "runtime_id": -203, + "component_based": false + }, + "minecraft:barrier": { + "runtime_id": -161, + "component_based": false + }, + "minecraft:basalt": { + "runtime_id": -234, + "component_based": false + }, + "minecraft:bat_spawn_egg": { + "runtime_id": 462, + "component_based": false + }, + "minecraft:beacon": { + "runtime_id": 138, + "component_based": false + }, + "minecraft:bed": { + "runtime_id": 426, + "component_based": false + }, + "minecraft:bedrock": { + "runtime_id": 7, + "component_based": false + }, + "minecraft:bee_nest": { + "runtime_id": -218, + "component_based": false + }, + "minecraft:bee_spawn_egg": { + "runtime_id": 504, + "component_based": false + }, + "minecraft:beef": { + "runtime_id": 277, + "component_based": false + }, + "minecraft:beehive": { + "runtime_id": -219, + "component_based": false + }, + "minecraft:beetroot": { + "runtime_id": 289, + "component_based": false + }, + "minecraft:beetroot_seeds": { + "runtime_id": 299, + "component_based": false + }, + "minecraft:beetroot_soup": { + "runtime_id": 290, + "component_based": false + }, + "minecraft:bell": { + "runtime_id": -206, + "component_based": false + }, + "minecraft:big_dripleaf": { + "runtime_id": -323, + "component_based": false + }, + "minecraft:birch_boat": { + "runtime_id": 384, + "component_based": false + }, + "minecraft:birch_button": { + "runtime_id": -141, + "component_based": false + }, + "minecraft:birch_chest_boat": { + "runtime_id": 658, + "component_based": false + }, + "minecraft:birch_door": { + "runtime_id": 570, + "component_based": false + }, + "minecraft:birch_double_slab": { + "runtime_id": -810, + "component_based": false + }, + "minecraft:birch_fence": { + "runtime_id": -576, + "component_based": false + }, + "minecraft:birch_fence_gate": { + "runtime_id": 184, + "component_based": false + }, + "minecraft:birch_hanging_sign": { + "runtime_id": -502, + "component_based": false + }, + "minecraft:birch_leaves": { + "runtime_id": -801, + "component_based": false + }, + "minecraft:birch_log": { + "runtime_id": -570, + "component_based": false + }, + "minecraft:birch_planks": { + "runtime_id": -740, + "component_based": false + }, + "minecraft:birch_pressure_plate": { + "runtime_id": -151, + "component_based": false + }, + "minecraft:birch_sapling": { + "runtime_id": -826, + "component_based": false + }, + "minecraft:birch_sign": { + "runtime_id": 593, + "component_based": false + }, + "minecraft:birch_slab": { + "runtime_id": -805, + "component_based": false + }, + "minecraft:birch_stairs": { + "runtime_id": 135, + "component_based": false + }, + "minecraft:birch_standing_sign": { + "runtime_id": -186, + "component_based": false + }, + "minecraft:birch_trapdoor": { + "runtime_id": -146, + "component_based": false + }, + "minecraft:birch_wall_sign": { + "runtime_id": -187, + "component_based": false + }, + "minecraft:birch_wood": { + "runtime_id": -815, + "component_based": false + }, + "minecraft:black_candle": { + "runtime_id": -428, + "component_based": false + }, + "minecraft:black_candle_cake": { + "runtime_id": -445, + "component_based": false + }, + "minecraft:black_carpet": { + "runtime_id": -611, + "component_based": false + }, + "minecraft:black_concrete": { + "runtime_id": -642, + "component_based": false + }, + "minecraft:black_concrete_powder": { + "runtime_id": -723, + "component_based": false + }, + "minecraft:black_dye": { + "runtime_id": 403, + "component_based": false + }, + "minecraft:black_glazed_terracotta": { + "runtime_id": 235, + "component_based": false + }, + "minecraft:black_shulker_box": { + "runtime_id": -627, + "component_based": false + }, + "minecraft:black_stained_glass": { + "runtime_id": -687, + "component_based": false + }, + "minecraft:black_stained_glass_pane": { + "runtime_id": -657, + "component_based": false + }, + "minecraft:black_terracotta": { + "runtime_id": -738, + "component_based": false + }, + "minecraft:black_wool": { + "runtime_id": -554, + "component_based": false + }, + "minecraft:blackstone": { + "runtime_id": -273, + "component_based": false + }, + "minecraft:blackstone_double_slab": { + "runtime_id": -283, + "component_based": false + }, + "minecraft:blackstone_slab": { + "runtime_id": -282, + "component_based": false + }, + "minecraft:blackstone_stairs": { + "runtime_id": -276, + "component_based": false + }, + "minecraft:blackstone_wall": { + "runtime_id": -277, + "component_based": false + }, + "minecraft:blade_pottery_sherd": { + "runtime_id": 678, + "component_based": false + }, + "minecraft:blast_furnace": { + "runtime_id": -196, + "component_based": false + }, + "minecraft:blaze_powder": { + "runtime_id": 438, + "component_based": false + }, + "minecraft:blaze_rod": { + "runtime_id": 431, + "component_based": false + }, + "minecraft:blaze_spawn_egg": { + "runtime_id": 465, + "component_based": false + }, + "minecraft:bleach": { + "runtime_id": 615, + "component_based": false + }, + "minecraft:blue_candle": { + "runtime_id": -424, + "component_based": false + }, + "minecraft:blue_candle_cake": { + "runtime_id": -441, + "component_based": false + }, + "minecraft:blue_carpet": { + "runtime_id": -607, + "component_based": false + }, + "minecraft:blue_concrete": { + "runtime_id": -638, + "component_based": false + }, + "minecraft:blue_concrete_powder": { + "runtime_id": -719, + "component_based": false + }, + "minecraft:blue_dye": { + "runtime_id": 407, + "component_based": false + }, + "minecraft:blue_glazed_terracotta": { + "runtime_id": 231, + "component_based": false + }, + "minecraft:blue_ice": { + "runtime_id": -11, + "component_based": false + }, + "minecraft:blue_orchid": { + "runtime_id": -830, + "component_based": false + }, + "minecraft:blue_shulker_box": { + "runtime_id": -623, + "component_based": false + }, + "minecraft:blue_stained_glass": { + "runtime_id": -683, + "component_based": false + }, + "minecraft:blue_stained_glass_pane": { + "runtime_id": -653, + "component_based": false + }, + "minecraft:blue_terracotta": { + "runtime_id": -734, + "component_based": false + }, + "minecraft:blue_wool": { + "runtime_id": -563, + "component_based": false + }, + "minecraft:boat": { + "runtime_id": 754, + "component_based": false + }, + "minecraft:bogged_spawn_egg": { + "runtime_id": 472, + "component_based": false + }, + "minecraft:bolt_armor_trim_smithing_template": { + "runtime_id": 717, + "component_based": false + }, + "minecraft:bone": { + "runtime_id": 423, + "component_based": false + }, + "minecraft:bone_block": { + "runtime_id": 216, + "component_based": false + }, + "minecraft:bone_meal": { + "runtime_id": 419, + "component_based": false + }, + "minecraft:book": { + "runtime_id": 395, + "component_based": false + }, + "minecraft:bookshelf": { + "runtime_id": 47, + "component_based": false + }, + "minecraft:border_block": { + "runtime_id": 212, + "component_based": false + }, + "minecraft:bordure_indented_banner_pattern": { + "runtime_id": 602, + "component_based": false + }, + "minecraft:bow": { + "runtime_id": 306, + "component_based": false + }, + "minecraft:bowl": { + "runtime_id": 328, + "component_based": false + }, + "minecraft:brain_coral": { + "runtime_id": -581, + "component_based": false + }, + "minecraft:brain_coral_block": { + "runtime_id": -849, + "component_based": false + }, + "minecraft:brain_coral_fan": { + "runtime_id": -840, + "component_based": false + }, + "minecraft:bread": { + "runtime_id": 265, + "component_based": false + }, + "minecraft:breeze_rod": { + "runtime_id": 432, + "component_based": false + }, + "minecraft:breeze_spawn_egg": { + "runtime_id": 511, + "component_based": false + }, + "minecraft:brewer_pottery_sherd": { + "runtime_id": 679, + "component_based": false + }, + "minecraft:brewing_stand": { + "runtime_id": 440, + "component_based": true + }, + "minecraft:brick": { + "runtime_id": 391, + "component_based": false + }, + "minecraft:brick_block": { + "runtime_id": 45, + "component_based": false + }, + "minecraft:brick_slab": { + "runtime_id": -874, + "component_based": false + }, + "minecraft:brick_stairs": { + "runtime_id": 108, + "component_based": false + }, + "minecraft:brown_candle": { + "runtime_id": -425, + "component_based": false + }, + "minecraft:brown_candle_cake": { + "runtime_id": -442, + "component_based": false + }, + "minecraft:brown_carpet": { + "runtime_id": -608, + "component_based": false + }, + "minecraft:brown_concrete": { + "runtime_id": -639, + "component_based": false + }, + "minecraft:brown_concrete_powder": { + "runtime_id": -720, + "component_based": false + }, + "minecraft:brown_dye": { + "runtime_id": 406, + "component_based": false + }, + "minecraft:brown_glazed_terracotta": { + "runtime_id": 232, + "component_based": false + }, + "minecraft:brown_mushroom": { + "runtime_id": 39, + "component_based": false + }, + "minecraft:brown_mushroom_block": { + "runtime_id": 99, + "component_based": false + }, + "minecraft:brown_shulker_box": { + "runtime_id": -624, + "component_based": false + }, + "minecraft:brown_stained_glass": { + "runtime_id": -684, + "component_based": false + }, + "minecraft:brown_stained_glass_pane": { + "runtime_id": -654, + "component_based": false + }, + "minecraft:brown_terracotta": { + "runtime_id": -735, + "component_based": false + }, + "minecraft:brown_wool": { + "runtime_id": -555, + "component_based": false + }, + "minecraft:brush": { + "runtime_id": 698, + "component_based": false + }, + "minecraft:bubble_column": { + "runtime_id": -160, + "component_based": false + }, + "minecraft:bubble_coral": { + "runtime_id": -582, + "component_based": false + }, + "minecraft:bubble_coral_block": { + "runtime_id": -850, + "component_based": false + }, + "minecraft:bubble_coral_fan": { + "runtime_id": -841, + "component_based": false + }, + "minecraft:bucket": { + "runtime_id": 367, + "component_based": false + }, + "minecraft:budding_amethyst": { + "runtime_id": -328, + "component_based": false + }, + "minecraft:burn_pottery_sherd": { + "runtime_id": 680, + "component_based": false + }, + "minecraft:cactus": { + "runtime_id": 81, + "component_based": false + }, + "minecraft:cake": { + "runtime_id": 425, + "component_based": true + }, + "minecraft:calcite": { + "runtime_id": -326, + "component_based": false + }, + "minecraft:calibrated_sculk_sensor": { + "runtime_id": -580, + "component_based": false + }, + "minecraft:camel_spawn_egg": { + "runtime_id": 674, + "component_based": false + }, + "minecraft:camera": { + "runtime_id": 612, + "component_based": false + }, + "minecraft:campfire": { + "runtime_id": 607, + "component_based": true + }, + "minecraft:candle": { + "runtime_id": -412, + "component_based": false + }, + "minecraft:candle_cake": { + "runtime_id": -429, + "component_based": false + }, + "minecraft:carpet": { + "runtime_id": 726, + "component_based": false + }, + "minecraft:carrot": { + "runtime_id": 283, + "component_based": false + }, + "minecraft:carrot_on_a_stick": { + "runtime_id": 533, + "component_based": false + }, + "minecraft:carrots": { + "runtime_id": 141, + "component_based": false + }, + "minecraft:cartography_table": { + "runtime_id": -200, + "component_based": false + }, + "minecraft:carved_pumpkin": { + "runtime_id": -155, + "component_based": false + }, + "minecraft:cat_spawn_egg": { + "runtime_id": 498, + "component_based": false + }, + "minecraft:cauldron": { + "runtime_id": 441, + "component_based": true + }, + "minecraft:cave_spider_spawn_egg": { + "runtime_id": 466, + "component_based": false + }, + "minecraft:cave_vines": { + "runtime_id": -322, + "component_based": false + }, + "minecraft:cave_vines_body_with_berries": { + "runtime_id": -375, + "component_based": false + }, + "minecraft:cave_vines_head_with_berries": { + "runtime_id": -376, + "component_based": false + }, + "minecraft:chain": { + "runtime_id": 638, + "component_based": true + }, + "minecraft:chain_command_block": { + "runtime_id": 189, + "component_based": false + }, + "minecraft:chainmail_boots": { + "runtime_id": 349, + "component_based": false + }, + "minecraft:chainmail_chestplate": { + "runtime_id": 347, + "component_based": false + }, + "minecraft:chainmail_helmet": { + "runtime_id": 346, + "component_based": false + }, + "minecraft:chainmail_leggings": { + "runtime_id": 348, + "component_based": false + }, + "minecraft:charcoal": { + "runtime_id": 309, + "component_based": true + }, + "minecraft:chemical_heat": { + "runtime_id": 192, + "component_based": false + }, + "minecraft:chemistry_table": { + "runtime_id": 238, + "component_based": false + }, + "minecraft:cherry_boat": { + "runtime_id": 668, + "component_based": false + }, + "minecraft:cherry_button": { + "runtime_id": -530, + "component_based": false + }, + "minecraft:cherry_chest_boat": { + "runtime_id": 669, + "component_based": false + }, + "minecraft:cherry_door": { + "runtime_id": -531, + "component_based": false + }, + "minecraft:cherry_double_slab": { + "runtime_id": -540, + "component_based": false + }, + "minecraft:cherry_fence": { + "runtime_id": -532, + "component_based": false + }, + "minecraft:cherry_fence_gate": { + "runtime_id": -533, + "component_based": false + }, + "minecraft:cherry_hanging_sign": { + "runtime_id": -534, + "component_based": false + }, + "minecraft:cherry_leaves": { + "runtime_id": -548, + "component_based": false + }, + "minecraft:cherry_log": { + "runtime_id": -536, + "component_based": false + }, + "minecraft:cherry_planks": { + "runtime_id": -537, + "component_based": false + }, + "minecraft:cherry_pressure_plate": { + "runtime_id": -538, + "component_based": false + }, + "minecraft:cherry_sapling": { + "runtime_id": -547, + "component_based": false + }, + "minecraft:cherry_sign": { + "runtime_id": 670, + "component_based": false + }, + "minecraft:cherry_slab": { + "runtime_id": -539, + "component_based": false + }, + "minecraft:cherry_stairs": { + "runtime_id": -541, + "component_based": false + }, + "minecraft:cherry_standing_sign": { + "runtime_id": -542, + "component_based": false + }, + "minecraft:cherry_trapdoor": { + "runtime_id": -543, + "component_based": false + }, + "minecraft:cherry_wall_sign": { + "runtime_id": -544, + "component_based": false + }, + "minecraft:cherry_wood": { + "runtime_id": -546, + "component_based": false + }, + "minecraft:chest": { + "runtime_id": 54, + "component_based": false + }, + "minecraft:chest_boat": { + "runtime_id": 664, + "component_based": false + }, + "minecraft:chest_minecart": { + "runtime_id": 397, + "component_based": false + }, + "minecraft:chicken": { + "runtime_id": 279, + "component_based": false + }, + "minecraft:chicken_spawn_egg": { + "runtime_id": 444, + "component_based": false + }, + "minecraft:chiseled_bookshelf": { + "runtime_id": -526, + "component_based": false + }, + "minecraft:chiseled_copper": { + "runtime_id": -760, + "component_based": false + }, + "minecraft:chiseled_deepslate": { + "runtime_id": -395, + "component_based": false + }, + "minecraft:chiseled_nether_bricks": { + "runtime_id": -302, + "component_based": false + }, + "minecraft:chiseled_polished_blackstone": { + "runtime_id": -279, + "component_based": false + }, + "minecraft:chiseled_tuff": { + "runtime_id": -753, + "component_based": false + }, + "minecraft:chiseled_tuff_bricks": { + "runtime_id": -759, + "component_based": false + }, + "minecraft:chorus_flower": { + "runtime_id": 200, + "component_based": false + }, + "minecraft:chorus_fruit": { + "runtime_id": 574, + "component_based": false + }, + "minecraft:chorus_plant": { + "runtime_id": 240, + "component_based": false + }, + "minecraft:clay": { + "runtime_id": 82, + "component_based": false + }, + "minecraft:clay_ball": { + "runtime_id": 392, + "component_based": false + }, + "minecraft:client_request_placeholder_block": { + "runtime_id": -465, + "component_based": false + }, + "minecraft:clock": { + "runtime_id": 401, + "component_based": false + }, + "minecraft:coal": { + "runtime_id": 308, + "component_based": true + }, + "minecraft:coal_block": { + "runtime_id": 173, + "component_based": false + }, + "minecraft:coal_ore": { + "runtime_id": 16, + "component_based": false + }, + "minecraft:coast_armor_trim_smithing_template": { + "runtime_id": 702, + "component_based": false + }, + "minecraft:cobbled_deepslate": { + "runtime_id": -379, + "component_based": false + }, + "minecraft:cobbled_deepslate_double_slab": { + "runtime_id": -396, + "component_based": false + }, + "minecraft:cobbled_deepslate_slab": { + "runtime_id": -380, + "component_based": false + }, + "minecraft:cobbled_deepslate_stairs": { + "runtime_id": -381, + "component_based": false + }, + "minecraft:cobbled_deepslate_wall": { + "runtime_id": -382, + "component_based": false + }, + "minecraft:cobblestone": { + "runtime_id": 4, + "component_based": false + }, + "minecraft:cobblestone_slab": { + "runtime_id": -873, + "component_based": false + }, + "minecraft:cobblestone_wall": { + "runtime_id": 139, + "component_based": false + }, + "minecraft:cocoa": { + "runtime_id": 127, + "component_based": false + }, + "minecraft:cocoa_beans": { + "runtime_id": 420, + "component_based": false + }, + "minecraft:cod": { + "runtime_id": 268, + "component_based": false + }, + "minecraft:cod_bucket": { + "runtime_id": 371, + "component_based": false + }, + "minecraft:cod_spawn_egg": { + "runtime_id": 490, + "component_based": false + }, + "minecraft:colored_torch_bp": { + "runtime_id": 204, + "component_based": false + }, + "minecraft:colored_torch_rg": { + "runtime_id": 202, + "component_based": false + }, + "minecraft:command_block": { + "runtime_id": 137, + "component_based": false + }, + "minecraft:command_block_minecart": { + "runtime_id": 579, + "component_based": false + }, + "minecraft:comparator": { + "runtime_id": 538, + "component_based": true + }, + "minecraft:compass": { + "runtime_id": 399, + "component_based": false + }, + "minecraft:composter": { + "runtime_id": -213, + "component_based": false + }, + "minecraft:compound": { + "runtime_id": 613, + "component_based": false + }, + "minecraft:concrete": { + "runtime_id": 743, + "component_based": false + }, + "minecraft:concrete_powder": { + "runtime_id": 744, + "component_based": false + }, + "minecraft:conduit": { + "runtime_id": -157, + "component_based": false + }, + "minecraft:cooked_beef": { + "runtime_id": 278, + "component_based": false + }, + "minecraft:cooked_chicken": { + "runtime_id": 280, + "component_based": false + }, + "minecraft:cooked_cod": { + "runtime_id": 272, + "component_based": false + }, + "minecraft:cooked_mutton": { + "runtime_id": 567, + "component_based": false + }, + "minecraft:cooked_porkchop": { + "runtime_id": 267, + "component_based": false + }, + "minecraft:cooked_rabbit": { + "runtime_id": 293, + "component_based": false + }, + "minecraft:cooked_salmon": { + "runtime_id": 273, + "component_based": false + }, + "minecraft:cookie": { + "runtime_id": 275, + "component_based": false + }, + "minecraft:copper_block": { + "runtime_id": -340, + "component_based": false + }, + "minecraft:copper_bulb": { + "runtime_id": -776, + "component_based": false + }, + "minecraft:copper_door": { + "runtime_id": -784, + "component_based": false + }, + "minecraft:copper_grate": { + "runtime_id": -768, + "component_based": false + }, + "minecraft:copper_ingot": { + "runtime_id": 520, + "component_based": false + }, + "minecraft:copper_ore": { + "runtime_id": -311, + "component_based": false + }, + "minecraft:copper_trapdoor": { + "runtime_id": -792, + "component_based": false + }, + "minecraft:coral": { + "runtime_id": 740, + "component_based": false + }, + "minecraft:coral_block": { + "runtime_id": 729, + "component_based": false + }, + "minecraft:coral_fan": { + "runtime_id": 730, + "component_based": false + }, + "minecraft:coral_fan_dead": { + "runtime_id": 731, + "component_based": false + }, + "minecraft:coral_fan_hang": { + "runtime_id": -135, + "component_based": false + }, + "minecraft:coral_fan_hang2": { + "runtime_id": -136, + "component_based": false + }, + "minecraft:coral_fan_hang3": { + "runtime_id": -137, + "component_based": false + }, + "minecraft:cornflower": { + "runtime_id": -838, + "component_based": false + }, + "minecraft:cow_spawn_egg": { + "runtime_id": 445, + "component_based": false + }, + "minecraft:cracked_deepslate_bricks": { + "runtime_id": -410, + "component_based": false + }, + "minecraft:cracked_deepslate_tiles": { + "runtime_id": -409, + "component_based": false + }, + "minecraft:cracked_nether_bricks": { + "runtime_id": -303, + "component_based": false + }, + "minecraft:cracked_polished_blackstone_bricks": { + "runtime_id": -280, + "component_based": false + }, + "minecraft:crafter": { + "runtime_id": -313, + "component_based": false + }, + "minecraft:crafting_table": { + "runtime_id": 58, + "component_based": false + }, + "minecraft:creeper_banner_pattern": { + "runtime_id": 598, + "component_based": false + }, + "minecraft:creeper_spawn_egg": { + "runtime_id": 450, + "component_based": false + }, + "minecraft:crimson_button": { + "runtime_id": -260, + "component_based": false + }, + "minecraft:crimson_door": { + "runtime_id": 635, + "component_based": false + }, + "minecraft:crimson_double_slab": { + "runtime_id": -266, + "component_based": false + }, + "minecraft:crimson_fence": { + "runtime_id": -256, + "component_based": false + }, + "minecraft:crimson_fence_gate": { + "runtime_id": -258, + "component_based": false + }, + "minecraft:crimson_fungus": { + "runtime_id": -228, + "component_based": false + }, + "minecraft:crimson_hanging_sign": { + "runtime_id": -506, + "component_based": false + }, + "minecraft:crimson_hyphae": { + "runtime_id": -299, + "component_based": false + }, + "minecraft:crimson_nylium": { + "runtime_id": -232, + "component_based": false + }, + "minecraft:crimson_planks": { + "runtime_id": -242, + "component_based": false + }, + "minecraft:crimson_pressure_plate": { + "runtime_id": -262, + "component_based": false + }, + "minecraft:crimson_roots": { + "runtime_id": -223, + "component_based": false + }, + "minecraft:crimson_sign": { + "runtime_id": 633, + "component_based": false + }, + "minecraft:crimson_slab": { + "runtime_id": -264, + "component_based": false + }, + "minecraft:crimson_stairs": { + "runtime_id": -254, + "component_based": false + }, + "minecraft:crimson_standing_sign": { + "runtime_id": -250, + "component_based": false + }, + "minecraft:crimson_stem": { + "runtime_id": -225, + "component_based": false + }, + "minecraft:crimson_trapdoor": { + "runtime_id": -246, + "component_based": false + }, + "minecraft:crimson_wall_sign": { + "runtime_id": -252, + "component_based": false + }, + "minecraft:crossbow": { + "runtime_id": 591, + "component_based": false + }, + "minecraft:crying_obsidian": { + "runtime_id": -289, + "component_based": false + }, + "minecraft:cut_copper": { + "runtime_id": -347, + "component_based": false + }, + "minecraft:cut_copper_slab": { + "runtime_id": -361, + "component_based": false + }, + "minecraft:cut_copper_stairs": { + "runtime_id": -354, + "component_based": false + }, + "minecraft:cyan_candle": { + "runtime_id": -422, + "component_based": false + }, + "minecraft:cyan_candle_cake": { + "runtime_id": -439, + "component_based": false + }, + "minecraft:cyan_carpet": { + "runtime_id": -605, + "component_based": false + }, + "minecraft:cyan_concrete": { + "runtime_id": -636, + "component_based": false + }, + "minecraft:cyan_concrete_powder": { + "runtime_id": -717, + "component_based": false + }, + "minecraft:cyan_dye": { + "runtime_id": 409, + "component_based": false + }, + "minecraft:cyan_glazed_terracotta": { + "runtime_id": 229, + "component_based": false + }, + "minecraft:cyan_shulker_box": { + "runtime_id": -621, + "component_based": false + }, + "minecraft:cyan_stained_glass": { + "runtime_id": -681, + "component_based": false + }, + "minecraft:cyan_stained_glass_pane": { + "runtime_id": -651, + "component_based": false + }, + "minecraft:cyan_terracotta": { + "runtime_id": -732, + "component_based": false + }, + "minecraft:cyan_wool": { + "runtime_id": -561, + "component_based": false + }, + "minecraft:danger_pottery_sherd": { + "runtime_id": 681, + "component_based": false + }, + "minecraft:dark_oak_boat": { + "runtime_id": 388, + "component_based": false + }, + "minecraft:dark_oak_button": { + "runtime_id": -142, + "component_based": false + }, + "minecraft:dark_oak_chest_boat": { + "runtime_id": 662, + "component_based": false + }, + "minecraft:dark_oak_door": { + "runtime_id": 573, + "component_based": false + }, + "minecraft:dark_oak_double_slab": { + "runtime_id": -813, + "component_based": false + }, + "minecraft:dark_oak_fence": { + "runtime_id": -577, + "component_based": false + }, + "minecraft:dark_oak_fence_gate": { + "runtime_id": 186, + "component_based": false + }, + "minecraft:dark_oak_hanging_sign": { + "runtime_id": -505, + "component_based": false + }, + "minecraft:dark_oak_leaves": { + "runtime_id": -803, + "component_based": false + }, + "minecraft:dark_oak_log": { + "runtime_id": -572, + "component_based": false + }, + "minecraft:dark_oak_planks": { + "runtime_id": -743, + "component_based": false + }, + "minecraft:dark_oak_pressure_plate": { + "runtime_id": -152, + "component_based": false + }, + "minecraft:dark_oak_sapling": { + "runtime_id": -829, + "component_based": false + }, + "minecraft:dark_oak_sign": { + "runtime_id": 596, + "component_based": false + }, + "minecraft:dark_oak_slab": { + "runtime_id": -808, + "component_based": false + }, + "minecraft:dark_oak_stairs": { + "runtime_id": 164, + "component_based": false + }, + "minecraft:dark_oak_trapdoor": { + "runtime_id": -147, + "component_based": false + }, + "minecraft:dark_oak_wood": { + "runtime_id": -818, + "component_based": false + }, + "minecraft:dark_prismarine_stairs": { + "runtime_id": -3, + "component_based": false + }, + "minecraft:darkoak_standing_sign": { + "runtime_id": -192, + "component_based": false + }, + "minecraft:darkoak_wall_sign": { + "runtime_id": -193, + "component_based": false + }, + "minecraft:daylight_detector": { + "runtime_id": 151, + "component_based": false + }, + "minecraft:daylight_detector_inverted": { + "runtime_id": 178, + "component_based": false + }, + "minecraft:dead_brain_coral": { + "runtime_id": -586, + "component_based": false + }, + "minecraft:dead_brain_coral_block": { + "runtime_id": -854, + "component_based": false + }, + "minecraft:dead_brain_coral_fan": { + "runtime_id": -844, + "component_based": false + }, + "minecraft:dead_bubble_coral": { + "runtime_id": -587, + "component_based": false + }, + "minecraft:dead_bubble_coral_block": { + "runtime_id": -855, + "component_based": false + }, + "minecraft:dead_bubble_coral_fan": { + "runtime_id": -845, + "component_based": false + }, + "minecraft:dead_fire_coral": { + "runtime_id": -588, + "component_based": false + }, + "minecraft:dead_fire_coral_block": { + "runtime_id": -856, + "component_based": false + }, + "minecraft:dead_fire_coral_fan": { + "runtime_id": -846, + "component_based": false + }, + "minecraft:dead_horn_coral": { + "runtime_id": -589, + "component_based": false + }, + "minecraft:dead_horn_coral_block": { + "runtime_id": -857, + "component_based": false + }, + "minecraft:dead_horn_coral_fan": { + "runtime_id": -847, + "component_based": false + }, + "minecraft:dead_tube_coral": { + "runtime_id": -585, + "component_based": false + }, + "minecraft:dead_tube_coral_block": { + "runtime_id": -853, + "component_based": false + }, + "minecraft:dead_tube_coral_fan": { + "runtime_id": -134, + "component_based": false + }, + "minecraft:deadbush": { + "runtime_id": 32, + "component_based": false + }, + "minecraft:decorated_pot": { + "runtime_id": -551, + "component_based": false + }, + "minecraft:deepslate": { + "runtime_id": -378, + "component_based": false + }, + "minecraft:deepslate_brick_double_slab": { + "runtime_id": -399, + "component_based": false + }, + "minecraft:deepslate_brick_slab": { + "runtime_id": -392, + "component_based": false + }, + "minecraft:deepslate_brick_stairs": { + "runtime_id": -393, + "component_based": false + }, + "minecraft:deepslate_brick_wall": { + "runtime_id": -394, + "component_based": false + }, + "minecraft:deepslate_bricks": { + "runtime_id": -391, + "component_based": false + }, + "minecraft:deepslate_coal_ore": { + "runtime_id": -406, + "component_based": false + }, + "minecraft:deepslate_copper_ore": { + "runtime_id": -408, + "component_based": false + }, + "minecraft:deepslate_diamond_ore": { + "runtime_id": -405, + "component_based": false + }, + "minecraft:deepslate_emerald_ore": { + "runtime_id": -407, + "component_based": false + }, + "minecraft:deepslate_gold_ore": { + "runtime_id": -402, + "component_based": false + }, + "minecraft:deepslate_iron_ore": { + "runtime_id": -401, + "component_based": false + }, + "minecraft:deepslate_lapis_ore": { + "runtime_id": -400, + "component_based": false + }, + "minecraft:deepslate_redstone_ore": { + "runtime_id": -403, + "component_based": false + }, + "minecraft:deepslate_tile_double_slab": { + "runtime_id": -398, + "component_based": false + }, + "minecraft:deepslate_tile_slab": { + "runtime_id": -388, + "component_based": false + }, + "minecraft:deepslate_tile_stairs": { + "runtime_id": -389, + "component_based": false + }, + "minecraft:deepslate_tile_wall": { + "runtime_id": -390, + "component_based": false + }, + "minecraft:deepslate_tiles": { + "runtime_id": -387, + "component_based": false + }, + "minecraft:deny": { + "runtime_id": 211, + "component_based": false + }, + "minecraft:detector_rail": { + "runtime_id": 28, + "component_based": false + }, + "minecraft:diamond": { + "runtime_id": 310, + "component_based": false + }, + "minecraft:diamond_axe": { + "runtime_id": 325, + "component_based": false + }, + "minecraft:diamond_block": { + "runtime_id": 57, + "component_based": false + }, + "minecraft:diamond_boots": { + "runtime_id": 357, + "component_based": false + }, + "minecraft:diamond_chestplate": { + "runtime_id": 355, + "component_based": false + }, + "minecraft:diamond_helmet": { + "runtime_id": 354, + "component_based": false + }, + "minecraft:diamond_hoe": { + "runtime_id": 339, + "component_based": false + }, + "minecraft:diamond_horse_armor": { + "runtime_id": 549, + "component_based": false + }, + "minecraft:diamond_leggings": { + "runtime_id": 356, + "component_based": false + }, + "minecraft:diamond_ore": { + "runtime_id": 56, + "component_based": false + }, + "minecraft:diamond_pickaxe": { + "runtime_id": 324, + "component_based": false + }, + "minecraft:diamond_shovel": { + "runtime_id": 323, + "component_based": false + }, + "minecraft:diamond_sword": { + "runtime_id": 322, + "component_based": false + }, + "minecraft:diorite": { + "runtime_id": -592, + "component_based": false + }, + "minecraft:diorite_stairs": { + "runtime_id": -170, + "component_based": false + }, + "minecraft:dirt": { + "runtime_id": 3, + "component_based": false + }, + "minecraft:dirt_with_roots": { + "runtime_id": -318, + "component_based": false + }, + "minecraft:disc_fragment_5": { + "runtime_id": 656, + "component_based": false + }, + "minecraft:dispenser": { + "runtime_id": 23, + "component_based": false + }, + "minecraft:dolphin_spawn_egg": { + "runtime_id": 494, + "component_based": false + }, + "minecraft:donkey_spawn_egg": { + "runtime_id": 475, + "component_based": false + }, + "minecraft:double_cut_copper_slab": { + "runtime_id": -368, + "component_based": false + }, + "minecraft:double_plant": { + "runtime_id": 738, + "component_based": false + }, + "minecraft:double_stone_block_slab": { + "runtime_id": 43, + "component_based": false + }, + "minecraft:double_stone_block_slab2": { + "runtime_id": 181, + "component_based": false + }, + "minecraft:double_stone_block_slab3": { + "runtime_id": -167, + "component_based": false + }, + "minecraft:double_stone_block_slab4": { + "runtime_id": -168, + "component_based": false + }, + "minecraft:dragon_breath": { + "runtime_id": 576, + "component_based": false + }, + "minecraft:dragon_egg": { + "runtime_id": 122, + "component_based": false + }, + "minecraft:dried_kelp": { + "runtime_id": 274, + "component_based": false + }, + "minecraft:dried_kelp_block": { + "runtime_id": -139, + "component_based": false + }, + "minecraft:dripstone_block": { + "runtime_id": -317, + "component_based": false + }, + "minecraft:dropper": { + "runtime_id": 125, + "component_based": false + }, + "minecraft:drowned_spawn_egg": { + "runtime_id": 493, + "component_based": false + }, + "minecraft:dune_armor_trim_smithing_template": { + "runtime_id": 701, + "component_based": false + }, + "minecraft:dye": { + "runtime_id": 755, + "component_based": false + }, + "minecraft:echo_shard": { + "runtime_id": 666, + "component_based": false + }, + "minecraft:egg": { + "runtime_id": 398, + "component_based": false + }, + "minecraft:elder_guardian_spawn_egg": { + "runtime_id": 481, + "component_based": false + }, + "minecraft:element_0": { + "runtime_id": 36, + "component_based": false + }, + "minecraft:element_1": { + "runtime_id": -12, + "component_based": false + }, + "minecraft:element_10": { + "runtime_id": -21, + "component_based": false + }, + "minecraft:element_100": { + "runtime_id": -111, + "component_based": false + }, + "minecraft:element_101": { + "runtime_id": -112, + "component_based": false + }, + "minecraft:element_102": { + "runtime_id": -113, + "component_based": false + }, + "minecraft:element_103": { + "runtime_id": -114, + "component_based": false + }, + "minecraft:element_104": { + "runtime_id": -115, + "component_based": false + }, + "minecraft:element_105": { + "runtime_id": -116, + "component_based": false + }, + "minecraft:element_106": { + "runtime_id": -117, + "component_based": false + }, + "minecraft:element_107": { + "runtime_id": -118, + "component_based": false + }, + "minecraft:element_108": { + "runtime_id": -119, + "component_based": false + }, + "minecraft:element_109": { + "runtime_id": -120, + "component_based": false + }, + "minecraft:element_11": { + "runtime_id": -22, + "component_based": false + }, + "minecraft:element_110": { + "runtime_id": -121, + "component_based": false + }, + "minecraft:element_111": { + "runtime_id": -122, + "component_based": false + }, + "minecraft:element_112": { + "runtime_id": -123, + "component_based": false + }, + "minecraft:element_113": { + "runtime_id": -124, + "component_based": false + }, + "minecraft:element_114": { + "runtime_id": -125, + "component_based": false + }, + "minecraft:element_115": { + "runtime_id": -126, + "component_based": false + }, + "minecraft:element_116": { + "runtime_id": -127, + "component_based": false + }, + "minecraft:element_117": { + "runtime_id": -128, + "component_based": false + }, + "minecraft:element_118": { + "runtime_id": -129, + "component_based": false + }, + "minecraft:element_12": { + "runtime_id": -23, + "component_based": false + }, + "minecraft:element_13": { + "runtime_id": -24, + "component_based": false + }, + "minecraft:element_14": { + "runtime_id": -25, + "component_based": false + }, + "minecraft:element_15": { + "runtime_id": -26, + "component_based": false + }, + "minecraft:element_16": { + "runtime_id": -27, + "component_based": false + }, + "minecraft:element_17": { + "runtime_id": -28, + "component_based": false + }, + "minecraft:element_18": { + "runtime_id": -29, + "component_based": false + }, + "minecraft:element_19": { + "runtime_id": -30, + "component_based": false + }, + "minecraft:element_2": { + "runtime_id": -13, + "component_based": false + }, + "minecraft:element_20": { + "runtime_id": -31, + "component_based": false + }, + "minecraft:element_21": { + "runtime_id": -32, + "component_based": false + }, + "minecraft:element_22": { + "runtime_id": -33, + "component_based": false + }, + "minecraft:element_23": { + "runtime_id": -34, + "component_based": false + }, + "minecraft:element_24": { + "runtime_id": -35, + "component_based": false + }, + "minecraft:element_25": { + "runtime_id": -36, + "component_based": false + }, + "minecraft:element_26": { + "runtime_id": -37, + "component_based": false + }, + "minecraft:element_27": { + "runtime_id": -38, + "component_based": false + }, + "minecraft:element_28": { + "runtime_id": -39, + "component_based": false + }, + "minecraft:element_29": { + "runtime_id": -40, + "component_based": false + }, + "minecraft:element_3": { + "runtime_id": -14, + "component_based": false + }, + "minecraft:element_30": { + "runtime_id": -41, + "component_based": false + }, + "minecraft:element_31": { + "runtime_id": -42, + "component_based": false + }, + "minecraft:element_32": { + "runtime_id": -43, + "component_based": false + }, + "minecraft:element_33": { + "runtime_id": -44, + "component_based": false + }, + "minecraft:element_34": { + "runtime_id": -45, + "component_based": false + }, + "minecraft:element_35": { + "runtime_id": -46, + "component_based": false + }, + "minecraft:element_36": { + "runtime_id": -47, + "component_based": false + }, + "minecraft:element_37": { + "runtime_id": -48, + "component_based": false + }, + "minecraft:element_38": { + "runtime_id": -49, + "component_based": false + }, + "minecraft:element_39": { + "runtime_id": -50, + "component_based": false + }, + "minecraft:element_4": { + "runtime_id": -15, + "component_based": false + }, + "minecraft:element_40": { + "runtime_id": -51, + "component_based": false + }, + "minecraft:element_41": { + "runtime_id": -52, + "component_based": false + }, + "minecraft:element_42": { + "runtime_id": -53, + "component_based": false + }, + "minecraft:element_43": { + "runtime_id": -54, + "component_based": false + }, + "minecraft:element_44": { + "runtime_id": -55, + "component_based": false + }, + "minecraft:element_45": { + "runtime_id": -56, + "component_based": false + }, + "minecraft:element_46": { + "runtime_id": -57, + "component_based": false + }, + "minecraft:element_47": { + "runtime_id": -58, + "component_based": false + }, + "minecraft:element_48": { + "runtime_id": -59, + "component_based": false + }, + "minecraft:element_49": { + "runtime_id": -60, + "component_based": false + }, + "minecraft:element_5": { + "runtime_id": -16, + "component_based": false + }, + "minecraft:element_50": { + "runtime_id": -61, + "component_based": false + }, + "minecraft:element_51": { + "runtime_id": -62, + "component_based": false + }, + "minecraft:element_52": { + "runtime_id": -63, + "component_based": false + }, + "minecraft:element_53": { + "runtime_id": -64, + "component_based": false + }, + "minecraft:element_54": { + "runtime_id": -65, + "component_based": false + }, + "minecraft:element_55": { + "runtime_id": -66, + "component_based": false + }, + "minecraft:element_56": { + "runtime_id": -67, + "component_based": false + }, + "minecraft:element_57": { + "runtime_id": -68, + "component_based": false + }, + "minecraft:element_58": { + "runtime_id": -69, + "component_based": false + }, + "minecraft:element_59": { + "runtime_id": -70, + "component_based": false + }, + "minecraft:element_6": { + "runtime_id": -17, + "component_based": false + }, + "minecraft:element_60": { + "runtime_id": -71, + "component_based": false + }, + "minecraft:element_61": { + "runtime_id": -72, + "component_based": false + }, + "minecraft:element_62": { + "runtime_id": -73, + "component_based": false + }, + "minecraft:element_63": { + "runtime_id": -74, + "component_based": false + }, + "minecraft:element_64": { + "runtime_id": -75, + "component_based": false + }, + "minecraft:element_65": { + "runtime_id": -76, + "component_based": false + }, + "minecraft:element_66": { + "runtime_id": -77, + "component_based": false + }, + "minecraft:element_67": { + "runtime_id": -78, + "component_based": false + }, + "minecraft:element_68": { + "runtime_id": -79, + "component_based": false + }, + "minecraft:element_69": { + "runtime_id": -80, + "component_based": false + }, + "minecraft:element_7": { + "runtime_id": -18, + "component_based": false + }, + "minecraft:element_70": { + "runtime_id": -81, + "component_based": false + }, + "minecraft:element_71": { + "runtime_id": -82, + "component_based": false + }, + "minecraft:element_72": { + "runtime_id": -83, + "component_based": false + }, + "minecraft:element_73": { + "runtime_id": -84, + "component_based": false + }, + "minecraft:element_74": { + "runtime_id": -85, + "component_based": false + }, + "minecraft:element_75": { + "runtime_id": -86, + "component_based": false + }, + "minecraft:element_76": { + "runtime_id": -87, + "component_based": false + }, + "minecraft:element_77": { + "runtime_id": -88, + "component_based": false + }, + "minecraft:element_78": { + "runtime_id": -89, + "component_based": false + }, + "minecraft:element_79": { + "runtime_id": -90, + "component_based": false + }, + "minecraft:element_8": { + "runtime_id": -19, + "component_based": false + }, + "minecraft:element_80": { + "runtime_id": -91, + "component_based": false + }, + "minecraft:element_81": { + "runtime_id": -92, + "component_based": false + }, + "minecraft:element_82": { + "runtime_id": -93, + "component_based": false + }, + "minecraft:element_83": { + "runtime_id": -94, + "component_based": false + }, + "minecraft:element_84": { + "runtime_id": -95, + "component_based": false + }, + "minecraft:element_85": { + "runtime_id": -96, + "component_based": false + }, + "minecraft:element_86": { + "runtime_id": -97, + "component_based": false + }, + "minecraft:element_87": { + "runtime_id": -98, + "component_based": false + }, + "minecraft:element_88": { + "runtime_id": -99, + "component_based": false + }, + "minecraft:element_89": { + "runtime_id": -100, + "component_based": false + }, + "minecraft:element_9": { + "runtime_id": -20, + "component_based": false + }, + "minecraft:element_90": { + "runtime_id": -101, + "component_based": false + }, + "minecraft:element_91": { + "runtime_id": -102, + "component_based": false + }, + "minecraft:element_92": { + "runtime_id": -103, + "component_based": false + }, + "minecraft:element_93": { + "runtime_id": -104, + "component_based": false + }, + "minecraft:element_94": { + "runtime_id": -105, + "component_based": false + }, + "minecraft:element_95": { + "runtime_id": -106, + "component_based": false + }, + "minecraft:element_96": { + "runtime_id": -107, + "component_based": false + }, + "minecraft:element_97": { + "runtime_id": -108, + "component_based": false + }, + "minecraft:element_98": { + "runtime_id": -109, + "component_based": false + }, + "minecraft:element_99": { + "runtime_id": -110, + "component_based": false + }, + "minecraft:elytra": { + "runtime_id": 580, + "component_based": false + }, + "minecraft:emerald": { + "runtime_id": 528, + "component_based": false + }, + "minecraft:emerald_block": { + "runtime_id": 133, + "component_based": false + }, + "minecraft:emerald_ore": { + "runtime_id": 129, + "component_based": false + }, + "minecraft:empty_map": { + "runtime_id": 531, + "component_based": false + }, + "minecraft:enchanted_book": { + "runtime_id": 537, + "component_based": false + }, + "minecraft:enchanted_golden_apple": { + "runtime_id": 263, + "component_based": false + }, + "minecraft:enchanting_table": { + "runtime_id": 116, + "component_based": false + }, + "minecraft:end_brick_stairs": { + "runtime_id": -178, + "component_based": false + }, + "minecraft:end_bricks": { + "runtime_id": 206, + "component_based": false + }, + "minecraft:end_crystal": { + "runtime_id": 758, + "component_based": false + }, + "minecraft:end_gateway": { + "runtime_id": 209, + "component_based": false + }, + "minecraft:end_portal": { + "runtime_id": 119, + "component_based": false + }, + "minecraft:end_portal_frame": { + "runtime_id": 120, + "component_based": false + }, + "minecraft:end_rod": { + "runtime_id": 208, + "component_based": false + }, + "minecraft:end_stone": { + "runtime_id": 121, + "component_based": false + }, + "minecraft:ender_chest": { + "runtime_id": 130, + "component_based": false + }, + "minecraft:ender_dragon_spawn_egg": { + "runtime_id": 517, + "component_based": false + }, + "minecraft:ender_eye": { + "runtime_id": 442, + "component_based": false + }, + "minecraft:ender_pearl": { + "runtime_id": 430, + "component_based": false + }, + "minecraft:enderman_spawn_egg": { + "runtime_id": 451, + "component_based": false + }, + "minecraft:endermite_spawn_egg": { + "runtime_id": 469, + "component_based": false + }, + "minecraft:evoker_spawn_egg": { + "runtime_id": 485, + "component_based": false + }, + "minecraft:experience_bottle": { + "runtime_id": 524, + "component_based": false + }, + "minecraft:explorer_pottery_sherd": { + "runtime_id": 682, + "component_based": false + }, + "minecraft:exposed_chiseled_copper": { + "runtime_id": -761, + "component_based": false + }, + "minecraft:exposed_copper": { + "runtime_id": -341, + "component_based": false + }, + "minecraft:exposed_copper_bulb": { + "runtime_id": -777, + "component_based": false + }, + "minecraft:exposed_copper_door": { + "runtime_id": -785, + "component_based": false + }, + "minecraft:exposed_copper_grate": { + "runtime_id": -769, + "component_based": false + }, + "minecraft:exposed_copper_trapdoor": { + "runtime_id": -793, + "component_based": false + }, + "minecraft:exposed_cut_copper": { + "runtime_id": -348, + "component_based": false + }, + "minecraft:exposed_cut_copper_slab": { + "runtime_id": -362, + "component_based": false + }, + "minecraft:exposed_cut_copper_stairs": { + "runtime_id": -355, + "component_based": false + }, + "minecraft:exposed_double_cut_copper_slab": { + "runtime_id": -369, + "component_based": false + }, + "minecraft:eye_armor_trim_smithing_template": { + "runtime_id": 705, + "component_based": false + }, + "minecraft:farmland": { + "runtime_id": 60, + "component_based": false + }, + "minecraft:feather": { + "runtime_id": 334, + "component_based": false + }, + "minecraft:fence": { + "runtime_id": 728, + "component_based": false + }, + "minecraft:fence_gate": { + "runtime_id": 107, + "component_based": false + }, + "minecraft:fermented_spider_eye": { + "runtime_id": 437, + "component_based": false + }, + "minecraft:fern": { + "runtime_id": -848, + "component_based": false + }, + "minecraft:field_masoned_banner_pattern": { + "runtime_id": 601, + "component_based": false + }, + "minecraft:filled_map": { + "runtime_id": 428, + "component_based": false + }, + "minecraft:fire": { + "runtime_id": 51, + "component_based": false + }, + "minecraft:fire_charge": { + "runtime_id": 525, + "component_based": false + }, + "minecraft:fire_coral": { + "runtime_id": -583, + "component_based": false + }, + "minecraft:fire_coral_block": { + "runtime_id": -851, + "component_based": false + }, + "minecraft:fire_coral_fan": { + "runtime_id": -842, + "component_based": false + }, + "minecraft:firework_rocket": { + "runtime_id": 535, + "component_based": false + }, + "minecraft:firework_star": { + "runtime_id": 536, + "component_based": false + }, + "minecraft:fishing_rod": { + "runtime_id": 400, + "component_based": true + }, + "minecraft:fletching_table": { + "runtime_id": -201, + "component_based": false + }, + "minecraft:flint": { + "runtime_id": 363, + "component_based": false + }, + "minecraft:flint_and_steel": { + "runtime_id": 305, + "component_based": false + }, + "minecraft:flow_armor_trim_smithing_template": { + "runtime_id": 716, + "component_based": false + }, + "minecraft:flow_banner_pattern": { + "runtime_id": 605, + "component_based": false + }, + "minecraft:flow_pottery_sherd": { + "runtime_id": 683, + "component_based": false + }, + "minecraft:flower_banner_pattern": { + "runtime_id": 597, + "component_based": false + }, + "minecraft:flower_pot": { + "runtime_id": 530, + "component_based": true + }, + "minecraft:flowering_azalea": { + "runtime_id": -338, + "component_based": false + }, + "minecraft:flowing_lava": { + "runtime_id": 10, + "component_based": false + }, + "minecraft:flowing_water": { + "runtime_id": 8, + "component_based": false + }, + "minecraft:fox_spawn_egg": { + "runtime_id": 500, + "component_based": false + }, + "minecraft:frame": { + "runtime_id": 529, + "component_based": true + }, + "minecraft:friend_pottery_sherd": { + "runtime_id": 684, + "component_based": false + }, + "minecraft:frog_spawn": { + "runtime_id": -468, + "component_based": false + }, + "minecraft:frog_spawn_egg": { + "runtime_id": 647, + "component_based": false + }, + "minecraft:frosted_ice": { + "runtime_id": 207, + "component_based": false + }, + "minecraft:furnace": { + "runtime_id": 61, + "component_based": false + }, + "minecraft:ghast_spawn_egg": { + "runtime_id": 463, + "component_based": false + }, + "minecraft:ghast_tear": { + "runtime_id": 433, + "component_based": false + }, + "minecraft:gilded_blackstone": { + "runtime_id": -281, + "component_based": false + }, + "minecraft:glass": { + "runtime_id": 20, + "component_based": false + }, + "minecraft:glass_bottle": { + "runtime_id": 436, + "component_based": false + }, + "minecraft:glass_pane": { + "runtime_id": 102, + "component_based": false + }, + "minecraft:glistering_melon_slice": { + "runtime_id": 443, + "component_based": false + }, + "minecraft:globe_banner_pattern": { + "runtime_id": 604, + "component_based": false + }, + "minecraft:glow_berries": { + "runtime_id": 759, + "component_based": false + }, + "minecraft:glow_frame": { + "runtime_id": 642, + "component_based": true + }, + "minecraft:glow_ink_sac": { + "runtime_id": 519, + "component_based": false + }, + "minecraft:glow_lichen": { + "runtime_id": -411, + "component_based": false + }, + "minecraft:glow_squid_spawn_egg": { + "runtime_id": 514, + "component_based": false + }, + "minecraft:glow_stick": { + "runtime_id": 620, + "component_based": false + }, + "minecraft:glowingobsidian": { + "runtime_id": 246, + "component_based": false + }, + "minecraft:glowstone": { + "runtime_id": 89, + "component_based": false + }, + "minecraft:glowstone_dust": { + "runtime_id": 402, + "component_based": false + }, + "minecraft:goat_horn": { + "runtime_id": 646, + "component_based": false + }, + "minecraft:goat_spawn_egg": { + "runtime_id": 513, + "component_based": false + }, + "minecraft:gold_block": { + "runtime_id": 41, + "component_based": false + }, + "minecraft:gold_ingot": { + "runtime_id": 312, + "component_based": false + }, + "minecraft:gold_nugget": { + "runtime_id": 434, + "component_based": false + }, + "minecraft:gold_ore": { + "runtime_id": 14, + "component_based": false + }, + "minecraft:golden_apple": { + "runtime_id": 262, + "component_based": false + }, + "minecraft:golden_axe": { + "runtime_id": 332, + "component_based": false + }, + "minecraft:golden_boots": { + "runtime_id": 361, + "component_based": false + }, + "minecraft:golden_carrot": { + "runtime_id": 287, + "component_based": false + }, + "minecraft:golden_chestplate": { + "runtime_id": 359, + "component_based": false + }, + "minecraft:golden_helmet": { + "runtime_id": 358, + "component_based": false + }, + "minecraft:golden_hoe": { + "runtime_id": 340, + "component_based": false + }, + "minecraft:golden_horse_armor": { + "runtime_id": 548, + "component_based": false + }, + "minecraft:golden_leggings": { + "runtime_id": 360, + "component_based": false + }, + "minecraft:golden_pickaxe": { + "runtime_id": 331, + "component_based": false + }, + "minecraft:golden_rail": { + "runtime_id": 27, + "component_based": false + }, + "minecraft:golden_shovel": { + "runtime_id": 330, + "component_based": false + }, + "minecraft:golden_sword": { + "runtime_id": 329, + "component_based": false + }, + "minecraft:granite": { + "runtime_id": -590, + "component_based": false + }, + "minecraft:granite_stairs": { + "runtime_id": -169, + "component_based": false + }, + "minecraft:grass_block": { + "runtime_id": 2, + "component_based": false + }, + "minecraft:grass_path": { + "runtime_id": 198, + "component_based": false + }, + "minecraft:gravel": { + "runtime_id": 13, + "component_based": false + }, + "minecraft:gray_candle": { + "runtime_id": -420, + "component_based": false + }, + "minecraft:gray_candle_cake": { + "runtime_id": -437, + "component_based": false + }, + "minecraft:gray_carpet": { + "runtime_id": -603, + "component_based": false + }, + "minecraft:gray_concrete": { + "runtime_id": -634, + "component_based": false + }, + "minecraft:gray_concrete_powder": { + "runtime_id": -715, + "component_based": false + }, + "minecraft:gray_dye": { + "runtime_id": 411, + "component_based": false + }, + "minecraft:gray_glazed_terracotta": { + "runtime_id": 227, + "component_based": false + }, + "minecraft:gray_shulker_box": { + "runtime_id": -619, + "component_based": false + }, + "minecraft:gray_stained_glass": { + "runtime_id": -679, + "component_based": false + }, + "minecraft:gray_stained_glass_pane": { + "runtime_id": -649, + "component_based": false + }, + "minecraft:gray_terracotta": { + "runtime_id": -730, + "component_based": false + }, + "minecraft:gray_wool": { + "runtime_id": -553, + "component_based": false + }, + "minecraft:green_candle": { + "runtime_id": -426, + "component_based": false + }, + "minecraft:green_candle_cake": { + "runtime_id": -443, + "component_based": false + }, + "minecraft:green_carpet": { + "runtime_id": -609, + "component_based": false + }, + "minecraft:green_concrete": { + "runtime_id": -640, + "component_based": false + }, + "minecraft:green_concrete_powder": { + "runtime_id": -721, + "component_based": false + }, + "minecraft:green_dye": { + "runtime_id": 405, + "component_based": false + }, + "minecraft:green_glazed_terracotta": { + "runtime_id": 233, + "component_based": false + }, + "minecraft:green_shulker_box": { + "runtime_id": -625, + "component_based": false + }, + "minecraft:green_stained_glass": { + "runtime_id": -685, + "component_based": false + }, + "minecraft:green_stained_glass_pane": { + "runtime_id": -655, + "component_based": false + }, + "minecraft:green_terracotta": { + "runtime_id": -736, + "component_based": false + }, + "minecraft:green_wool": { + "runtime_id": -560, + "component_based": false + }, + "minecraft:grindstone": { + "runtime_id": -195, + "component_based": false + }, + "minecraft:guardian_spawn_egg": { + "runtime_id": 470, + "component_based": false + }, + "minecraft:gunpowder": { + "runtime_id": 335, + "component_based": false + }, + "minecraft:guster_banner_pattern": { + "runtime_id": 606, + "component_based": false + }, + "minecraft:guster_pottery_sherd": { + "runtime_id": 685, + "component_based": false + }, + "minecraft:hanging_roots": { + "runtime_id": -319, + "component_based": false + }, + "minecraft:hard_black_stained_glass": { + "runtime_id": -702, + "component_based": false + }, + "minecraft:hard_black_stained_glass_pane": { + "runtime_id": -672, + "component_based": false + }, + "minecraft:hard_blue_stained_glass": { + "runtime_id": -698, + "component_based": false + }, + "minecraft:hard_blue_stained_glass_pane": { + "runtime_id": -668, + "component_based": false + }, + "minecraft:hard_brown_stained_glass": { + "runtime_id": -699, + "component_based": false + }, + "minecraft:hard_brown_stained_glass_pane": { + "runtime_id": -669, + "component_based": false + }, + "minecraft:hard_cyan_stained_glass": { + "runtime_id": -696, + "component_based": false + }, + "minecraft:hard_cyan_stained_glass_pane": { + "runtime_id": -666, + "component_based": false + }, + "minecraft:hard_glass": { + "runtime_id": 253, + "component_based": false + }, + "minecraft:hard_glass_pane": { + "runtime_id": 190, + "component_based": false + }, + "minecraft:hard_gray_stained_glass": { + "runtime_id": -694, + "component_based": false + }, + "minecraft:hard_gray_stained_glass_pane": { + "runtime_id": -664, + "component_based": false + }, + "minecraft:hard_green_stained_glass": { + "runtime_id": -700, + "component_based": false + }, + "minecraft:hard_green_stained_glass_pane": { + "runtime_id": -670, + "component_based": false + }, + "minecraft:hard_light_blue_stained_glass": { + "runtime_id": -690, + "component_based": false + }, + "minecraft:hard_light_blue_stained_glass_pane": { + "runtime_id": -660, + "component_based": false + }, + "minecraft:hard_light_gray_stained_glass": { + "runtime_id": -695, + "component_based": false + }, + "minecraft:hard_light_gray_stained_glass_pane": { + "runtime_id": -665, + "component_based": false + }, + "minecraft:hard_lime_stained_glass": { + "runtime_id": -692, + "component_based": false + }, + "minecraft:hard_lime_stained_glass_pane": { + "runtime_id": -662, + "component_based": false + }, + "minecraft:hard_magenta_stained_glass": { + "runtime_id": -689, + "component_based": false + }, + "minecraft:hard_magenta_stained_glass_pane": { + "runtime_id": -659, + "component_based": false + }, + "minecraft:hard_orange_stained_glass": { + "runtime_id": -688, + "component_based": false + }, + "minecraft:hard_orange_stained_glass_pane": { + "runtime_id": -658, + "component_based": false + }, + "minecraft:hard_pink_stained_glass": { + "runtime_id": -693, + "component_based": false + }, + "minecraft:hard_pink_stained_glass_pane": { + "runtime_id": -663, + "component_based": false + }, + "minecraft:hard_purple_stained_glass": { + "runtime_id": -697, + "component_based": false + }, + "minecraft:hard_purple_stained_glass_pane": { + "runtime_id": -667, + "component_based": false + }, + "minecraft:hard_red_stained_glass": { + "runtime_id": -701, + "component_based": false + }, + "minecraft:hard_red_stained_glass_pane": { + "runtime_id": -671, + "component_based": false + }, + "minecraft:hard_stained_glass": { + "runtime_id": 752, + "component_based": false + }, + "minecraft:hard_stained_glass_pane": { + "runtime_id": 753, + "component_based": false + }, + "minecraft:hard_white_stained_glass": { + "runtime_id": 254, + "component_based": false + }, + "minecraft:hard_white_stained_glass_pane": { + "runtime_id": 191, + "component_based": false + }, + "minecraft:hard_yellow_stained_glass": { + "runtime_id": -691, + "component_based": false + }, + "minecraft:hard_yellow_stained_glass_pane": { + "runtime_id": -661, + "component_based": false + }, + "minecraft:hardened_clay": { + "runtime_id": 172, + "component_based": false + }, + "minecraft:hay_block": { + "runtime_id": 170, + "component_based": false + }, + "minecraft:heart_of_the_sea": { + "runtime_id": 587, + "component_based": false + }, + "minecraft:heart_pottery_sherd": { + "runtime_id": 686, + "component_based": false + }, + "minecraft:heartbreak_pottery_sherd": { + "runtime_id": 687, + "component_based": false + }, + "minecraft:heavy_core": { + "runtime_id": -316, + "component_based": false + }, + "minecraft:heavy_weighted_pressure_plate": { + "runtime_id": 148, + "component_based": false + }, + "minecraft:hoglin_spawn_egg": { + "runtime_id": 506, + "component_based": false + }, + "minecraft:honey_block": { + "runtime_id": -220, + "component_based": false + }, + "minecraft:honey_bottle": { + "runtime_id": 610, + "component_based": false + }, + "minecraft:honeycomb": { + "runtime_id": 609, + "component_based": false + }, + "minecraft:honeycomb_block": { + "runtime_id": -221, + "component_based": false + }, + "minecraft:hopper": { + "runtime_id": 543, + "component_based": true + }, + "minecraft:hopper_minecart": { + "runtime_id": 542, + "component_based": false + }, + "minecraft:horn_coral": { + "runtime_id": -584, + "component_based": false + }, + "minecraft:horn_coral_block": { + "runtime_id": -852, + "component_based": false + }, + "minecraft:horn_coral_fan": { + "runtime_id": -843, + "component_based": false + }, + "minecraft:horse_spawn_egg": { + "runtime_id": 467, + "component_based": false + }, + "minecraft:host_armor_trim_smithing_template": { + "runtime_id": 715, + "component_based": false + }, + "minecraft:howl_pottery_sherd": { + "runtime_id": 688, + "component_based": false + }, + "minecraft:husk_spawn_egg": { + "runtime_id": 473, + "component_based": false + }, + "minecraft:ice": { + "runtime_id": 79, + "component_based": false + }, + "minecraft:ice_bomb": { + "runtime_id": 614, + "component_based": false + }, + "minecraft:infested_deepslate": { + "runtime_id": -454, + "component_based": false + }, + "minecraft:info_update": { + "runtime_id": 248, + "component_based": false + }, + "minecraft:info_update2": { + "runtime_id": 249, + "component_based": false + }, + "minecraft:ink_sac": { + "runtime_id": 421, + "component_based": false + }, + "minecraft:invisible_bedrock": { + "runtime_id": 95, + "component_based": false + }, + "minecraft:iron_axe": { + "runtime_id": 304, + "component_based": false + }, + "minecraft:iron_bars": { + "runtime_id": 101, + "component_based": false + }, + "minecraft:iron_block": { + "runtime_id": 42, + "component_based": false + }, + "minecraft:iron_boots": { + "runtime_id": 353, + "component_based": false + }, + "minecraft:iron_chestplate": { + "runtime_id": 351, + "component_based": false + }, + "minecraft:iron_door": { + "runtime_id": 379, + "component_based": false + }, + "minecraft:iron_golem_spawn_egg": { + "runtime_id": 515, + "component_based": false + }, + "minecraft:iron_helmet": { + "runtime_id": 350, + "component_based": false + }, + "minecraft:iron_hoe": { + "runtime_id": 338, + "component_based": false + }, + "minecraft:iron_horse_armor": { + "runtime_id": 547, + "component_based": false + }, + "minecraft:iron_ingot": { + "runtime_id": 311, + "component_based": false + }, + "minecraft:iron_leggings": { + "runtime_id": 352, + "component_based": false + }, + "minecraft:iron_nugget": { + "runtime_id": 585, + "component_based": false + }, + "minecraft:iron_ore": { + "runtime_id": 15, + "component_based": false + }, + "minecraft:iron_pickaxe": { + "runtime_id": 303, + "component_based": false + }, + "minecraft:iron_shovel": { + "runtime_id": 302, + "component_based": false + }, + "minecraft:iron_sword": { + "runtime_id": 313, + "component_based": false + }, + "minecraft:iron_trapdoor": { + "runtime_id": 167, + "component_based": false + }, + "minecraft:item.acacia_door": { + "runtime_id": 196, + "component_based": false + }, + "minecraft:item.bed": { + "runtime_id": 26, + "component_based": false + }, + "minecraft:item.beetroot": { + "runtime_id": 244, + "component_based": false + }, + "minecraft:item.birch_door": { + "runtime_id": 194, + "component_based": false + }, + "minecraft:item.brewing_stand": { + "runtime_id": 117, + "component_based": false + }, + "minecraft:item.cake": { + "runtime_id": 92, + "component_based": false + }, + "minecraft:item.camera": { + "runtime_id": 242, + "component_based": false + }, + "minecraft:item.campfire": { + "runtime_id": -209, + "component_based": false + }, + "minecraft:item.cauldron": { + "runtime_id": 118, + "component_based": false + }, + "minecraft:item.chain": { + "runtime_id": -286, + "component_based": false + }, + "minecraft:item.crimson_door": { + "runtime_id": -244, + "component_based": false + }, + "minecraft:item.dark_oak_door": { + "runtime_id": 197, + "component_based": false + }, + "minecraft:item.flower_pot": { + "runtime_id": 140, + "component_based": false + }, + "minecraft:item.frame": { + "runtime_id": 199, + "component_based": false + }, + "minecraft:item.glow_frame": { + "runtime_id": -339, + "component_based": false + }, + "minecraft:item.hopper": { + "runtime_id": 154, + "component_based": false + }, + "minecraft:item.iron_door": { + "runtime_id": 71, + "component_based": false + }, + "minecraft:item.jungle_door": { + "runtime_id": 195, + "component_based": false + }, + "minecraft:item.kelp": { + "runtime_id": -138, + "component_based": false + }, + "minecraft:item.mangrove_door": { + "runtime_id": -493, + "component_based": false + }, + "minecraft:item.nether_sprouts": { + "runtime_id": -238, + "component_based": false + }, + "minecraft:item.nether_wart": { + "runtime_id": 115, + "component_based": false + }, + "minecraft:item.reeds": { + "runtime_id": 83, + "component_based": false + }, + "minecraft:item.skull": { + "runtime_id": 144, + "component_based": false + }, + "minecraft:item.soul_campfire": { + "runtime_id": -290, + "component_based": false + }, + "minecraft:item.spruce_door": { + "runtime_id": 193, + "component_based": false + }, + "minecraft:item.warped_door": { + "runtime_id": -245, + "component_based": false + }, + "minecraft:item.wheat": { + "runtime_id": 59, + "component_based": false + }, + "minecraft:item.wooden_door": { + "runtime_id": 64, + "component_based": false + }, + "minecraft:jigsaw": { + "runtime_id": -211, + "component_based": false + }, + "minecraft:jukebox": { + "runtime_id": 84, + "component_based": false + }, + "minecraft:jungle_boat": { + "runtime_id": 385, + "component_based": false + }, + "minecraft:jungle_button": { + "runtime_id": -143, + "component_based": false + }, + "minecraft:jungle_chest_boat": { + "runtime_id": 659, + "component_based": false + }, + "minecraft:jungle_door": { + "runtime_id": 571, + "component_based": false + }, + "minecraft:jungle_double_slab": { + "runtime_id": -811, + "component_based": false + }, + "minecraft:jungle_fence": { + "runtime_id": -578, + "component_based": false + }, + "minecraft:jungle_fence_gate": { + "runtime_id": 185, + "component_based": false + }, + "minecraft:jungle_hanging_sign": { + "runtime_id": -503, + "component_based": false + }, + "minecraft:jungle_leaves": { + "runtime_id": -802, + "component_based": false + }, + "minecraft:jungle_log": { + "runtime_id": -571, + "component_based": false + }, + "minecraft:jungle_planks": { + "runtime_id": -741, + "component_based": false + }, + "minecraft:jungle_pressure_plate": { + "runtime_id": -153, + "component_based": false + }, + "minecraft:jungle_sapling": { + "runtime_id": -827, + "component_based": false + }, + "minecraft:jungle_sign": { + "runtime_id": 594, + "component_based": false + }, + "minecraft:jungle_slab": { + "runtime_id": -806, + "component_based": false + }, + "minecraft:jungle_stairs": { + "runtime_id": 136, + "component_based": false + }, + "minecraft:jungle_standing_sign": { + "runtime_id": -188, + "component_based": false + }, + "minecraft:jungle_trapdoor": { + "runtime_id": -148, + "component_based": false + }, + "minecraft:jungle_wall_sign": { + "runtime_id": -189, + "component_based": false + }, + "minecraft:jungle_wood": { + "runtime_id": -816, + "component_based": false + }, + "minecraft:kelp": { + "runtime_id": 390, + "component_based": true + }, + "minecraft:ladder": { + "runtime_id": 65, + "component_based": false + }, + "minecraft:lantern": { + "runtime_id": -208, + "component_based": false + }, + "minecraft:lapis_block": { + "runtime_id": 22, + "component_based": false + }, + "minecraft:lapis_lazuli": { + "runtime_id": 422, + "component_based": false + }, + "minecraft:lapis_ore": { + "runtime_id": 21, + "component_based": false + }, + "minecraft:large_amethyst_bud": { + "runtime_id": -330, + "component_based": false + }, + "minecraft:large_fern": { + "runtime_id": -865, + "component_based": false + }, + "minecraft:lava": { + "runtime_id": 11, + "component_based": false + }, + "minecraft:lava_bucket": { + "runtime_id": 370, + "component_based": false + }, + "minecraft:lead": { + "runtime_id": 563, + "component_based": false + }, + "minecraft:leather": { + "runtime_id": 389, + "component_based": false + }, + "minecraft:leather_boots": { + "runtime_id": 345, + "component_based": false + }, + "minecraft:leather_chestplate": { + "runtime_id": 343, + "component_based": false + }, + "minecraft:leather_helmet": { + "runtime_id": 342, + "component_based": false + }, + "minecraft:leather_horse_armor": { + "runtime_id": 546, + "component_based": false + }, + "minecraft:leather_leggings": { + "runtime_id": 344, + "component_based": false + }, + "minecraft:leaves": { + "runtime_id": 733, + "component_based": false + }, + "minecraft:leaves2": { + "runtime_id": 734, + "component_based": false + }, + "minecraft:lectern": { + "runtime_id": -194, + "component_based": false + }, + "minecraft:lever": { + "runtime_id": 69, + "component_based": false + }, + "minecraft:light_block": { + "runtime_id": -215, + "component_based": false + }, + "minecraft:light_blue_candle": { + "runtime_id": -416, + "component_based": false + }, + "minecraft:light_blue_candle_cake": { + "runtime_id": -433, + "component_based": false + }, + "minecraft:light_blue_carpet": { + "runtime_id": -599, + "component_based": false + }, + "minecraft:light_blue_concrete": { + "runtime_id": -630, + "component_based": false + }, + "minecraft:light_blue_concrete_powder": { + "runtime_id": -711, + "component_based": false + }, + "minecraft:light_blue_dye": { + "runtime_id": 415, + "component_based": false + }, + "minecraft:light_blue_glazed_terracotta": { + "runtime_id": 223, + "component_based": false + }, + "minecraft:light_blue_shulker_box": { + "runtime_id": -615, + "component_based": false + }, + "minecraft:light_blue_stained_glass": { + "runtime_id": -675, + "component_based": false + }, + "minecraft:light_blue_stained_glass_pane": { + "runtime_id": -645, + "component_based": false + }, + "minecraft:light_blue_terracotta": { + "runtime_id": -726, + "component_based": false + }, + "minecraft:light_blue_wool": { + "runtime_id": -562, + "component_based": false + }, + "minecraft:light_gray_candle": { + "runtime_id": -421, + "component_based": false + }, + "minecraft:light_gray_candle_cake": { + "runtime_id": -438, + "component_based": false + }, + "minecraft:light_gray_carpet": { + "runtime_id": -604, + "component_based": false + }, + "minecraft:light_gray_concrete": { + "runtime_id": -635, + "component_based": false + }, + "minecraft:light_gray_concrete_powder": { + "runtime_id": -716, + "component_based": false + }, + "minecraft:light_gray_dye": { + "runtime_id": 410, + "component_based": false + }, + "minecraft:light_gray_shulker_box": { + "runtime_id": -620, + "component_based": false + }, + "minecraft:light_gray_stained_glass": { + "runtime_id": -680, + "component_based": false + }, + "minecraft:light_gray_stained_glass_pane": { + "runtime_id": -650, + "component_based": false + }, + "minecraft:light_gray_terracotta": { + "runtime_id": -731, + "component_based": false + }, + "minecraft:light_gray_wool": { + "runtime_id": -552, + "component_based": false + }, + "minecraft:light_weighted_pressure_plate": { + "runtime_id": 147, + "component_based": false + }, + "minecraft:lightning_rod": { + "runtime_id": -312, + "component_based": false + }, + "minecraft:lilac": { + "runtime_id": -863, + "component_based": false + }, + "minecraft:lily_of_the_valley": { + "runtime_id": -839, + "component_based": false + }, + "minecraft:lime_candle": { + "runtime_id": -418, + "component_based": false + }, + "minecraft:lime_candle_cake": { + "runtime_id": -435, + "component_based": false + }, + "minecraft:lime_carpet": { + "runtime_id": -601, + "component_based": false + }, + "minecraft:lime_concrete": { + "runtime_id": -632, + "component_based": false + }, + "minecraft:lime_concrete_powder": { + "runtime_id": -713, + "component_based": false + }, + "minecraft:lime_dye": { + "runtime_id": 413, + "component_based": false + }, + "minecraft:lime_glazed_terracotta": { + "runtime_id": 225, + "component_based": false + }, + "minecraft:lime_shulker_box": { + "runtime_id": -617, + "component_based": false + }, + "minecraft:lime_stained_glass": { + "runtime_id": -677, + "component_based": false + }, + "minecraft:lime_stained_glass_pane": { + "runtime_id": -647, + "component_based": false + }, + "minecraft:lime_terracotta": { + "runtime_id": -728, + "component_based": false + }, + "minecraft:lime_wool": { + "runtime_id": -559, + "component_based": false + }, + "minecraft:lingering_potion": { + "runtime_id": 578, + "component_based": false + }, + "minecraft:lit_blast_furnace": { + "runtime_id": -214, + "component_based": false + }, + "minecraft:lit_deepslate_redstone_ore": { + "runtime_id": -404, + "component_based": false + }, + "minecraft:lit_furnace": { + "runtime_id": 62, + "component_based": false + }, + "minecraft:lit_pumpkin": { + "runtime_id": 91, + "component_based": false + }, + "minecraft:lit_redstone_lamp": { + "runtime_id": 124, + "component_based": false + }, + "minecraft:lit_redstone_ore": { + "runtime_id": 74, + "component_based": false + }, + "minecraft:lit_smoker": { + "runtime_id": -199, + "component_based": false + }, + "minecraft:llama_spawn_egg": { + "runtime_id": 483, + "component_based": false + }, + "minecraft:lodestone": { + "runtime_id": -222, + "component_based": false + }, + "minecraft:lodestone_compass": { + "runtime_id": 621, + "component_based": false + }, + "minecraft:log": { + "runtime_id": 727, + "component_based": false + }, + "minecraft:log2": { + "runtime_id": 742, + "component_based": false + }, + "minecraft:loom": { + "runtime_id": -204, + "component_based": false + }, + "minecraft:mace": { + "runtime_id": 326, + "component_based": false + }, + "minecraft:magenta_candle": { + "runtime_id": -415, + "component_based": false + }, + "minecraft:magenta_candle_cake": { + "runtime_id": -432, + "component_based": false + }, + "minecraft:magenta_carpet": { + "runtime_id": -598, + "component_based": false + }, + "minecraft:magenta_concrete": { + "runtime_id": -629, + "component_based": false + }, + "minecraft:magenta_concrete_powder": { + "runtime_id": -710, + "component_based": false + }, + "minecraft:magenta_dye": { + "runtime_id": 416, + "component_based": false + }, + "minecraft:magenta_glazed_terracotta": { + "runtime_id": 222, + "component_based": false + }, + "minecraft:magenta_shulker_box": { + "runtime_id": -614, + "component_based": false + }, + "minecraft:magenta_stained_glass": { + "runtime_id": -674, + "component_based": false + }, + "minecraft:magenta_stained_glass_pane": { + "runtime_id": -644, + "component_based": false + }, + "minecraft:magenta_terracotta": { + "runtime_id": -725, + "component_based": false + }, + "minecraft:magenta_wool": { + "runtime_id": -565, + "component_based": false + }, + "minecraft:magma": { + "runtime_id": 213, + "component_based": false + }, + "minecraft:magma_cream": { + "runtime_id": 439, + "component_based": false + }, + "minecraft:magma_cube_spawn_egg": { + "runtime_id": 464, + "component_based": false + }, + "minecraft:mangrove_boat": { + "runtime_id": 654, + "component_based": false + }, + "minecraft:mangrove_button": { + "runtime_id": -487, + "component_based": false + }, + "minecraft:mangrove_chest_boat": { + "runtime_id": 663, + "component_based": false + }, + "minecraft:mangrove_door": { + "runtime_id": 652, + "component_based": false + }, + "minecraft:mangrove_double_slab": { + "runtime_id": -499, + "component_based": false + }, + "minecraft:mangrove_fence": { + "runtime_id": -491, + "component_based": false + }, + "minecraft:mangrove_fence_gate": { + "runtime_id": -492, + "component_based": false + }, + "minecraft:mangrove_hanging_sign": { + "runtime_id": -508, + "component_based": false + }, + "minecraft:mangrove_leaves": { + "runtime_id": -472, + "component_based": false + }, + "minecraft:mangrove_log": { + "runtime_id": -484, + "component_based": false + }, + "minecraft:mangrove_planks": { + "runtime_id": -486, + "component_based": false + }, + "minecraft:mangrove_pressure_plate": { + "runtime_id": -490, + "component_based": false + }, + "minecraft:mangrove_propagule": { + "runtime_id": -474, + "component_based": false + }, + "minecraft:mangrove_roots": { + "runtime_id": -482, + "component_based": false + }, + "minecraft:mangrove_sign": { + "runtime_id": 653, + "component_based": false + }, + "minecraft:mangrove_slab": { + "runtime_id": -489, + "component_based": false + }, + "minecraft:mangrove_stairs": { + "runtime_id": -488, + "component_based": false + }, + "minecraft:mangrove_standing_sign": { + "runtime_id": -494, + "component_based": false + }, + "minecraft:mangrove_trapdoor": { + "runtime_id": -496, + "component_based": false + }, + "minecraft:mangrove_wall_sign": { + "runtime_id": -495, + "component_based": false + }, + "minecraft:mangrove_wood": { + "runtime_id": -497, + "component_based": false + }, + "minecraft:medicine": { + "runtime_id": 618, + "component_based": false + }, + "minecraft:medium_amethyst_bud": { + "runtime_id": -331, + "component_based": false + }, + "minecraft:melon_block": { + "runtime_id": 103, + "component_based": false + }, + "minecraft:melon_seeds": { + "runtime_id": 297, + "component_based": false + }, + "minecraft:melon_slice": { + "runtime_id": 276, + "component_based": false + }, + "minecraft:melon_stem": { + "runtime_id": 105, + "component_based": false + }, + "minecraft:milk_bucket": { + "runtime_id": 368, + "component_based": false + }, + "minecraft:minecart": { + "runtime_id": 377, + "component_based": false + }, + "minecraft:miner_pottery_sherd": { + "runtime_id": 689, + "component_based": false + }, + "minecraft:mob_spawner": { + "runtime_id": 52, + "component_based": false + }, + "minecraft:mojang_banner_pattern": { + "runtime_id": 600, + "component_based": false + }, + "minecraft:monster_egg": { + "runtime_id": 97, + "component_based": false + }, + "minecraft:mooshroom_spawn_egg": { + "runtime_id": 449, + "component_based": false + }, + "minecraft:moss_block": { + "runtime_id": -320, + "component_based": false + }, + "minecraft:moss_carpet": { + "runtime_id": -335, + "component_based": false + }, + "minecraft:mossy_cobblestone": { + "runtime_id": 48, + "component_based": false + }, + "minecraft:mossy_cobblestone_stairs": { + "runtime_id": -179, + "component_based": false + }, + "minecraft:mossy_stone_brick_stairs": { + "runtime_id": -175, + "component_based": false + }, + "minecraft:mourner_pottery_sherd": { + "runtime_id": 690, + "component_based": false + }, + "minecraft:moving_block": { + "runtime_id": 250, + "component_based": false + }, + "minecraft:mud": { + "runtime_id": -473, + "component_based": false + }, + "minecraft:mud_brick_double_slab": { + "runtime_id": -479, + "component_based": false + }, + "minecraft:mud_brick_slab": { + "runtime_id": -478, + "component_based": false + }, + "minecraft:mud_brick_stairs": { + "runtime_id": -480, + "component_based": false + }, + "minecraft:mud_brick_wall": { + "runtime_id": -481, + "component_based": false + }, + "minecraft:mud_bricks": { + "runtime_id": -475, + "component_based": false + }, + "minecraft:muddy_mangrove_roots": { + "runtime_id": -483, + "component_based": false + }, + "minecraft:mule_spawn_egg": { + "runtime_id": 476, + "component_based": false + }, + "minecraft:mushroom_stew": { + "runtime_id": 264, + "component_based": false + }, + "minecraft:music_disc_11": { + "runtime_id": 560, + "component_based": true + }, + "minecraft:music_disc_13": { + "runtime_id": 550, + "component_based": true + }, + "minecraft:music_disc_5": { + "runtime_id": 655, + "component_based": true + }, + "minecraft:music_disc_blocks": { + "runtime_id": 552, + "component_based": true + }, + "minecraft:music_disc_cat": { + "runtime_id": 551, + "component_based": true + }, + "minecraft:music_disc_chirp": { + "runtime_id": 553, + "component_based": true + }, + "minecraft:music_disc_creator": { + "runtime_id": 749, + "component_based": true + }, + "minecraft:music_disc_creator_music_box": { + "runtime_id": 750, + "component_based": true + }, + "minecraft:music_disc_far": { + "runtime_id": 554, + "component_based": true + }, + "minecraft:music_disc_mall": { + "runtime_id": 555, + "component_based": true + }, + "minecraft:music_disc_mellohi": { + "runtime_id": 556, + "component_based": true + }, + "minecraft:music_disc_otherside": { + "runtime_id": 645, + "component_based": true + }, + "minecraft:music_disc_pigstep": { + "runtime_id": 639, + "component_based": true + }, + "minecraft:music_disc_precipice": { + "runtime_id": 751, + "component_based": true + }, + "minecraft:music_disc_relic": { + "runtime_id": 718, + "component_based": true + }, + "minecraft:music_disc_stal": { + "runtime_id": 557, + "component_based": true + }, + "minecraft:music_disc_strad": { + "runtime_id": 558, + "component_based": true + }, + "minecraft:music_disc_wait": { + "runtime_id": 561, + "component_based": true + }, + "minecraft:music_disc_ward": { + "runtime_id": 559, + "component_based": true + }, + "minecraft:mutton": { + "runtime_id": 566, + "component_based": false + }, + "minecraft:mycelium": { + "runtime_id": 110, + "component_based": false + }, + "minecraft:name_tag": { + "runtime_id": 564, + "component_based": false + }, + "minecraft:nautilus_shell": { + "runtime_id": 586, + "component_based": false + }, + "minecraft:nether_brick": { + "runtime_id": 112, + "component_based": false + }, + "minecraft:nether_brick_fence": { + "runtime_id": 113, + "component_based": false + }, + "minecraft:nether_brick_slab": { + "runtime_id": -877, + "component_based": false + }, + "minecraft:nether_brick_stairs": { + "runtime_id": 114, + "component_based": false + }, + "minecraft:nether_gold_ore": { + "runtime_id": -288, + "component_based": false + }, + "minecraft:nether_sprouts": { + "runtime_id": 640, + "component_based": true + }, + "minecraft:nether_star": { + "runtime_id": 534, + "component_based": false + }, + "minecraft:nether_wart": { + "runtime_id": 298, + "component_based": false + }, + "minecraft:nether_wart_block": { + "runtime_id": 214, + "component_based": false + }, + "minecraft:netherbrick": { + "runtime_id": 539, + "component_based": false + }, + "minecraft:netherite_axe": { + "runtime_id": 625, + "component_based": false + }, + "minecraft:netherite_block": { + "runtime_id": -270, + "component_based": false + }, + "minecraft:netherite_boots": { + "runtime_id": 631, + "component_based": false + }, + "minecraft:netherite_chestplate": { + "runtime_id": 629, + "component_based": false + }, + "minecraft:netherite_helmet": { + "runtime_id": 628, + "component_based": false + }, + "minecraft:netherite_hoe": { + "runtime_id": 626, + "component_based": false + }, + "minecraft:netherite_ingot": { + "runtime_id": 627, + "component_based": false + }, + "minecraft:netherite_leggings": { + "runtime_id": 630, + "component_based": false + }, + "minecraft:netherite_pickaxe": { + "runtime_id": 624, + "component_based": false + }, + "minecraft:netherite_scrap": { + "runtime_id": 632, + "component_based": false + }, + "minecraft:netherite_shovel": { + "runtime_id": 623, + "component_based": false + }, + "minecraft:netherite_sword": { + "runtime_id": 622, + "component_based": false + }, + "minecraft:netherite_upgrade_smithing_template": { + "runtime_id": 699, + "component_based": false + }, + "minecraft:netherrack": { + "runtime_id": 87, + "component_based": false + }, + "minecraft:netherreactor": { + "runtime_id": 247, + "component_based": false + }, + "minecraft:normal_stone_stairs": { + "runtime_id": -180, + "component_based": false + }, + "minecraft:noteblock": { + "runtime_id": 25, + "component_based": false + }, + "minecraft:npc_spawn_egg": { + "runtime_id": 480, + "component_based": false + }, + "minecraft:oak_boat": { + "runtime_id": 383, + "component_based": false + }, + "minecraft:oak_chest_boat": { + "runtime_id": 657, + "component_based": false + }, + "minecraft:oak_double_slab": { + "runtime_id": 157, + "component_based": false + }, + "minecraft:oak_fence": { + "runtime_id": 85, + "component_based": false + }, + "minecraft:oak_hanging_sign": { + "runtime_id": -500, + "component_based": false + }, + "minecraft:oak_leaves": { + "runtime_id": 18, + "component_based": false + }, + "minecraft:oak_log": { + "runtime_id": 17, + "component_based": false + }, + "minecraft:oak_planks": { + "runtime_id": 5, + "component_based": false + }, + "minecraft:oak_sapling": { + "runtime_id": 6, + "component_based": false + }, + "minecraft:oak_sign": { + "runtime_id": 365, + "component_based": false + }, + "minecraft:oak_slab": { + "runtime_id": 158, + "component_based": false + }, + "minecraft:oak_stairs": { + "runtime_id": 53, + "component_based": false + }, + "minecraft:oak_wood": { + "runtime_id": -212, + "component_based": false + }, + "minecraft:observer": { + "runtime_id": 251, + "component_based": false + }, + "minecraft:obsidian": { + "runtime_id": 49, + "component_based": false + }, + "minecraft:ocelot_spawn_egg": { + "runtime_id": 460, + "component_based": false + }, + "minecraft:ochre_froglight": { + "runtime_id": -471, + "component_based": false + }, + "minecraft:ominous_bottle": { + "runtime_id": 611, + "component_based": false + }, + "minecraft:ominous_trial_key": { + "runtime_id": 259, + "component_based": true + }, + "minecraft:orange_candle": { + "runtime_id": -414, + "component_based": false + }, + "minecraft:orange_candle_cake": { + "runtime_id": -431, + "component_based": false + }, + "minecraft:orange_carpet": { + "runtime_id": -597, + "component_based": false + }, + "minecraft:orange_concrete": { + "runtime_id": -628, + "component_based": false + }, + "minecraft:orange_concrete_powder": { + "runtime_id": -709, + "component_based": false + }, + "minecraft:orange_dye": { + "runtime_id": 417, + "component_based": false + }, + "minecraft:orange_glazed_terracotta": { + "runtime_id": 221, + "component_based": false + }, + "minecraft:orange_shulker_box": { + "runtime_id": -613, + "component_based": false + }, + "minecraft:orange_stained_glass": { + "runtime_id": -673, + "component_based": false + }, + "minecraft:orange_stained_glass_pane": { + "runtime_id": -643, + "component_based": false + }, + "minecraft:orange_terracotta": { + "runtime_id": -724, + "component_based": false + }, + "minecraft:orange_tulip": { + "runtime_id": -834, + "component_based": false + }, + "minecraft:orange_wool": { + "runtime_id": -557, + "component_based": false + }, + "minecraft:oxeye_daisy": { + "runtime_id": -837, + "component_based": false + }, + "minecraft:oxidized_chiseled_copper": { + "runtime_id": -763, + "component_based": false + }, + "minecraft:oxidized_copper": { + "runtime_id": -343, + "component_based": false + }, + "minecraft:oxidized_copper_bulb": { + "runtime_id": -779, + "component_based": false + }, + "minecraft:oxidized_copper_door": { + "runtime_id": -787, + "component_based": false + }, + "minecraft:oxidized_copper_grate": { + "runtime_id": -771, + "component_based": false + }, + "minecraft:oxidized_copper_trapdoor": { + "runtime_id": -795, + "component_based": false + }, + "minecraft:oxidized_cut_copper": { + "runtime_id": -350, + "component_based": false + }, + "minecraft:oxidized_cut_copper_slab": { + "runtime_id": -364, + "component_based": false + }, + "minecraft:oxidized_cut_copper_stairs": { + "runtime_id": -357, + "component_based": false + }, + "minecraft:oxidized_double_cut_copper_slab": { + "runtime_id": -371, + "component_based": false + }, + "minecraft:packed_ice": { + "runtime_id": 174, + "component_based": false + }, + "minecraft:packed_mud": { + "runtime_id": -477, + "component_based": false + }, + "minecraft:painting": { + "runtime_id": 364, + "component_based": false + }, + "minecraft:panda_spawn_egg": { + "runtime_id": 499, + "component_based": false + }, + "minecraft:paper": { + "runtime_id": 394, + "component_based": false + }, + "minecraft:parrot_spawn_egg": { + "runtime_id": 488, + "component_based": false + }, + "minecraft:pearlescent_froglight": { + "runtime_id": -469, + "component_based": false + }, + "minecraft:peony": { + "runtime_id": -867, + "component_based": false + }, + "minecraft:petrified_oak_slab": { + "runtime_id": -902, + "component_based": false + }, + "minecraft:phantom_membrane": { + "runtime_id": 590, + "component_based": false + }, + "minecraft:phantom_spawn_egg": { + "runtime_id": 496, + "component_based": false + }, + "minecraft:pig_spawn_egg": { + "runtime_id": 446, + "component_based": false + }, + "minecraft:piglin_banner_pattern": { + "runtime_id": 603, + "component_based": false + }, + "minecraft:piglin_brute_spawn_egg": { + "runtime_id": 509, + "component_based": false + }, + "minecraft:piglin_spawn_egg": { + "runtime_id": 507, + "component_based": false + }, + "minecraft:pillager_spawn_egg": { + "runtime_id": 501, + "component_based": false + }, + "minecraft:pink_candle": { + "runtime_id": -419, + "component_based": false + }, + "minecraft:pink_candle_cake": { + "runtime_id": -436, + "component_based": false + }, + "minecraft:pink_carpet": { + "runtime_id": -602, + "component_based": false + }, + "minecraft:pink_concrete": { + "runtime_id": -633, + "component_based": false + }, + "minecraft:pink_concrete_powder": { + "runtime_id": -714, + "component_based": false + }, + "minecraft:pink_dye": { + "runtime_id": 412, + "component_based": false + }, + "minecraft:pink_glazed_terracotta": { + "runtime_id": 226, + "component_based": false + }, + "minecraft:pink_petals": { + "runtime_id": -549, + "component_based": false + }, + "minecraft:pink_shulker_box": { + "runtime_id": -618, + "component_based": false + }, + "minecraft:pink_stained_glass": { + "runtime_id": -678, + "component_based": false + }, + "minecraft:pink_stained_glass_pane": { + "runtime_id": -648, + "component_based": false + }, + "minecraft:pink_terracotta": { + "runtime_id": -729, + "component_based": false + }, + "minecraft:pink_tulip": { + "runtime_id": -836, + "component_based": false + }, + "minecraft:pink_wool": { + "runtime_id": -566, + "component_based": false + }, + "minecraft:piston": { + "runtime_id": 33, + "component_based": false + }, + "minecraft:piston_arm_collision": { + "runtime_id": 34, + "component_based": false + }, + "minecraft:pitcher_crop": { + "runtime_id": -574, + "component_based": false + }, + "minecraft:pitcher_plant": { + "runtime_id": -612, + "component_based": false + }, + "minecraft:pitcher_pod": { + "runtime_id": 301, + "component_based": false + }, + "minecraft:planks": { + "runtime_id": 739, + "component_based": false + }, + "minecraft:plenty_pottery_sherd": { + "runtime_id": 691, + "component_based": false + }, + "minecraft:podzol": { + "runtime_id": 243, + "component_based": false + }, + "minecraft:pointed_dripstone": { + "runtime_id": -308, + "component_based": false + }, + "minecraft:poisonous_potato": { + "runtime_id": 286, + "component_based": false + }, + "minecraft:polar_bear_spawn_egg": { + "runtime_id": 482, + "component_based": false + }, + "minecraft:polished_andesite": { + "runtime_id": -595, + "component_based": false + }, + "minecraft:polished_andesite_stairs": { + "runtime_id": -174, + "component_based": false + }, + "minecraft:polished_basalt": { + "runtime_id": -235, + "component_based": false + }, + "minecraft:polished_blackstone": { + "runtime_id": -291, + "component_based": false + }, + "minecraft:polished_blackstone_brick_double_slab": { + "runtime_id": -285, + "component_based": false + }, + "minecraft:polished_blackstone_brick_slab": { + "runtime_id": -284, + "component_based": false + }, + "minecraft:polished_blackstone_brick_stairs": { + "runtime_id": -275, + "component_based": false + }, + "minecraft:polished_blackstone_brick_wall": { + "runtime_id": -278, + "component_based": false + }, + "minecraft:polished_blackstone_bricks": { + "runtime_id": -274, + "component_based": false + }, + "minecraft:polished_blackstone_button": { + "runtime_id": -296, + "component_based": false + }, + "minecraft:polished_blackstone_double_slab": { + "runtime_id": -294, + "component_based": false + }, + "minecraft:polished_blackstone_pressure_plate": { + "runtime_id": -295, + "component_based": false + }, + "minecraft:polished_blackstone_slab": { + "runtime_id": -293, + "component_based": false + }, + "minecraft:polished_blackstone_stairs": { + "runtime_id": -292, + "component_based": false + }, + "minecraft:polished_blackstone_wall": { + "runtime_id": -297, + "component_based": false + }, + "minecraft:polished_deepslate": { + "runtime_id": -383, + "component_based": false + }, + "minecraft:polished_deepslate_double_slab": { + "runtime_id": -397, + "component_based": false + }, + "minecraft:polished_deepslate_slab": { + "runtime_id": -384, + "component_based": false + }, + "minecraft:polished_deepslate_stairs": { + "runtime_id": -385, + "component_based": false + }, + "minecraft:polished_deepslate_wall": { + "runtime_id": -386, + "component_based": false + }, + "minecraft:polished_diorite": { + "runtime_id": -593, + "component_based": false + }, + "minecraft:polished_diorite_stairs": { + "runtime_id": -173, + "component_based": false + }, + "minecraft:polished_granite": { + "runtime_id": -591, + "component_based": false + }, + "minecraft:polished_granite_stairs": { + "runtime_id": -172, + "component_based": false + }, + "minecraft:polished_tuff": { + "runtime_id": -748, + "component_based": false + }, + "minecraft:polished_tuff_double_slab": { + "runtime_id": -750, + "component_based": false + }, + "minecraft:polished_tuff_slab": { + "runtime_id": -749, + "component_based": false + }, + "minecraft:polished_tuff_stairs": { + "runtime_id": -751, + "component_based": false + }, + "minecraft:polished_tuff_wall": { + "runtime_id": -752, + "component_based": false + }, + "minecraft:popped_chorus_fruit": { + "runtime_id": 575, + "component_based": false + }, + "minecraft:poppy": { + "runtime_id": 38, + "component_based": false + }, + "minecraft:porkchop": { + "runtime_id": 266, + "component_based": false + }, + "minecraft:portal": { + "runtime_id": 90, + "component_based": false + }, + "minecraft:potato": { + "runtime_id": 284, + "component_based": false + }, + "minecraft:potatoes": { + "runtime_id": 142, + "component_based": false + }, + "minecraft:potion": { + "runtime_id": 435, + "component_based": false + }, + "minecraft:powder_snow": { + "runtime_id": -306, + "component_based": false + }, + "minecraft:powder_snow_bucket": { + "runtime_id": 375, + "component_based": false + }, + "minecraft:powered_comparator": { + "runtime_id": 150, + "component_based": false + }, + "minecraft:powered_repeater": { + "runtime_id": 94, + "component_based": false + }, + "minecraft:prismarine": { + "runtime_id": 168, + "component_based": false + }, + "minecraft:prismarine_bricks_stairs": { + "runtime_id": -4, + "component_based": false + }, + "minecraft:prismarine_crystals": { + "runtime_id": 565, + "component_based": false + }, + "minecraft:prismarine_shard": { + "runtime_id": 581, + "component_based": false + }, + "minecraft:prismarine_stairs": { + "runtime_id": -2, + "component_based": false + }, + "minecraft:prize_pottery_sherd": { + "runtime_id": 692, + "component_based": false + }, + "minecraft:pufferfish": { + "runtime_id": 271, + "component_based": false + }, + "minecraft:pufferfish_bucket": { + "runtime_id": 374, + "component_based": false + }, + "minecraft:pufferfish_spawn_egg": { + "runtime_id": 491, + "component_based": false + }, + "minecraft:pumpkin": { + "runtime_id": 86, + "component_based": false + }, + "minecraft:pumpkin_pie": { + "runtime_id": 288, + "component_based": false + }, + "minecraft:pumpkin_seeds": { + "runtime_id": 296, + "component_based": false + }, + "minecraft:pumpkin_stem": { + "runtime_id": 104, + "component_based": false + }, + "minecraft:purple_candle": { + "runtime_id": -423, + "component_based": false + }, + "minecraft:purple_candle_cake": { + "runtime_id": -440, + "component_based": false + }, + "minecraft:purple_carpet": { + "runtime_id": -606, + "component_based": false + }, + "minecraft:purple_concrete": { + "runtime_id": -637, + "component_based": false + }, + "minecraft:purple_concrete_powder": { + "runtime_id": -718, + "component_based": false + }, + "minecraft:purple_dye": { + "runtime_id": 408, + "component_based": false + }, + "minecraft:purple_glazed_terracotta": { + "runtime_id": 219, + "component_based": false + }, + "minecraft:purple_shulker_box": { + "runtime_id": -622, + "component_based": false + }, + "minecraft:purple_stained_glass": { + "runtime_id": -682, + "component_based": false + }, + "minecraft:purple_stained_glass_pane": { + "runtime_id": -652, + "component_based": false + }, + "minecraft:purple_terracotta": { + "runtime_id": -733, + "component_based": false + }, + "minecraft:purple_wool": { + "runtime_id": -564, + "component_based": false + }, + "minecraft:purpur_block": { + "runtime_id": 201, + "component_based": false + }, + "minecraft:purpur_stairs": { + "runtime_id": 203, + "component_based": false + }, + "minecraft:quartz": { + "runtime_id": 540, + "component_based": false + }, + "minecraft:quartz_block": { + "runtime_id": 155, + "component_based": false + }, + "minecraft:quartz_bricks": { + "runtime_id": -304, + "component_based": false + }, + "minecraft:quartz_ore": { + "runtime_id": 153, + "component_based": false + }, + "minecraft:quartz_slab": { + "runtime_id": -876, + "component_based": false + }, + "minecraft:quartz_stairs": { + "runtime_id": 156, + "component_based": false + }, + "minecraft:rabbit": { + "runtime_id": 292, + "component_based": false + }, + "minecraft:rabbit_foot": { + "runtime_id": 544, + "component_based": false + }, + "minecraft:rabbit_hide": { + "runtime_id": 545, + "component_based": false + }, + "minecraft:rabbit_spawn_egg": { + "runtime_id": 468, + "component_based": false + }, + "minecraft:rabbit_stew": { + "runtime_id": 294, + "component_based": false + }, + "minecraft:rail": { + "runtime_id": 66, + "component_based": false + }, + "minecraft:raiser_armor_trim_smithing_template": { + "runtime_id": 713, + "component_based": false + }, + "minecraft:rapid_fertilizer": { + "runtime_id": 616, + "component_based": false + }, + "minecraft:ravager_spawn_egg": { + "runtime_id": 503, + "component_based": false + }, + "minecraft:raw_copper": { + "runtime_id": 523, + "component_based": false + }, + "minecraft:raw_copper_block": { + "runtime_id": -452, + "component_based": false + }, + "minecraft:raw_gold": { + "runtime_id": 522, + "component_based": false + }, + "minecraft:raw_gold_block": { + "runtime_id": -453, + "component_based": false + }, + "minecraft:raw_iron": { + "runtime_id": 521, + "component_based": false + }, + "minecraft:raw_iron_block": { + "runtime_id": -451, + "component_based": false + }, + "minecraft:recovery_compass": { + "runtime_id": 665, + "component_based": false + }, + "minecraft:red_candle": { + "runtime_id": -427, + "component_based": false + }, + "minecraft:red_candle_cake": { + "runtime_id": -444, + "component_based": false + }, + "minecraft:red_carpet": { + "runtime_id": -610, + "component_based": false + }, + "minecraft:red_concrete": { + "runtime_id": -641, + "component_based": false + }, + "minecraft:red_concrete_powder": { + "runtime_id": -722, + "component_based": false + }, + "minecraft:red_dye": { + "runtime_id": 404, + "component_based": false + }, + "minecraft:red_flower": { + "runtime_id": 737, + "component_based": false + }, + "minecraft:red_glazed_terracotta": { + "runtime_id": 234, + "component_based": false + }, + "minecraft:red_mushroom": { + "runtime_id": 40, + "component_based": false + }, + "minecraft:red_mushroom_block": { + "runtime_id": 100, + "component_based": false + }, + "minecraft:red_nether_brick": { + "runtime_id": 215, + "component_based": false + }, + "minecraft:red_nether_brick_stairs": { + "runtime_id": -184, + "component_based": false + }, + "minecraft:red_sandstone": { + "runtime_id": 179, + "component_based": false + }, + "minecraft:red_sandstone_stairs": { + "runtime_id": 180, + "component_based": false + }, + "minecraft:red_shulker_box": { + "runtime_id": -626, + "component_based": false + }, + "minecraft:red_stained_glass": { + "runtime_id": -686, + "component_based": false + }, + "minecraft:red_stained_glass_pane": { + "runtime_id": -656, + "component_based": false + }, + "minecraft:red_terracotta": { + "runtime_id": -737, + "component_based": false + }, + "minecraft:red_tulip": { + "runtime_id": -833, + "component_based": false + }, + "minecraft:red_wool": { + "runtime_id": -556, + "component_based": false + }, + "minecraft:redstone": { + "runtime_id": 380, + "component_based": false + }, + "minecraft:redstone_block": { + "runtime_id": 152, + "component_based": false + }, + "minecraft:redstone_lamp": { + "runtime_id": 123, + "component_based": false + }, + "minecraft:redstone_ore": { + "runtime_id": 73, + "component_based": false + }, + "minecraft:redstone_torch": { + "runtime_id": 76, + "component_based": false + }, + "minecraft:redstone_wire": { + "runtime_id": 55, + "component_based": false + }, + "minecraft:reinforced_deepslate": { + "runtime_id": -466, + "component_based": false + }, + "minecraft:repeater": { + "runtime_id": 427, + "component_based": true + }, + "minecraft:repeating_command_block": { + "runtime_id": 188, + "component_based": false + }, + "minecraft:reserved6": { + "runtime_id": 255, + "component_based": false + }, + "minecraft:respawn_anchor": { + "runtime_id": -272, + "component_based": false + }, + "minecraft:rib_armor_trim_smithing_template": { + "runtime_id": 709, + "component_based": false + }, + "minecraft:rose_bush": { + "runtime_id": -866, + "component_based": false + }, + "minecraft:rotten_flesh": { + "runtime_id": 281, + "component_based": false + }, + "minecraft:saddle": { + "runtime_id": 378, + "component_based": false + }, + "minecraft:salmon": { + "runtime_id": 269, + "component_based": false + }, + "minecraft:salmon_bucket": { + "runtime_id": 372, + "component_based": false + }, + "minecraft:salmon_spawn_egg": { + "runtime_id": 492, + "component_based": false + }, + "minecraft:sand": { + "runtime_id": 12, + "component_based": false + }, + "minecraft:sandstone": { + "runtime_id": 24, + "component_based": false + }, + "minecraft:sandstone_slab": { + "runtime_id": -872, + "component_based": false + }, + "minecraft:sandstone_stairs": { + "runtime_id": 128, + "component_based": false + }, + "minecraft:sapling": { + "runtime_id": 732, + "component_based": false + }, + "minecraft:scaffolding": { + "runtime_id": -165, + "component_based": false + }, + "minecraft:scrape_pottery_sherd": { + "runtime_id": 693, + "component_based": false + }, + "minecraft:sculk": { + "runtime_id": -458, + "component_based": false + }, + "minecraft:sculk_catalyst": { + "runtime_id": -460, + "component_based": false + }, + "minecraft:sculk_sensor": { + "runtime_id": -307, + "component_based": false + }, + "minecraft:sculk_shrieker": { + "runtime_id": -461, + "component_based": false + }, + "minecraft:sculk_vein": { + "runtime_id": -459, + "component_based": false + }, + "minecraft:sea_lantern": { + "runtime_id": 169, + "component_based": false + }, + "minecraft:sea_pickle": { + "runtime_id": -156, + "component_based": false + }, + "minecraft:seagrass": { + "runtime_id": -130, + "component_based": false + }, + "minecraft:sentry_armor_trim_smithing_template": { + "runtime_id": 700, + "component_based": false + }, + "minecraft:shaper_armor_trim_smithing_template": { + "runtime_id": 714, + "component_based": false + }, + "minecraft:sheaf_pottery_sherd": { + "runtime_id": 694, + "component_based": false + }, + "minecraft:shears": { + "runtime_id": 429, + "component_based": false + }, + "minecraft:sheep_spawn_egg": { + "runtime_id": 447, + "component_based": false + }, + "minecraft:shelter_pottery_sherd": { + "runtime_id": 695, + "component_based": false + }, + "minecraft:shield": { + "runtime_id": 362, + "component_based": false + }, + "minecraft:short_grass": { + "runtime_id": 31, + "component_based": false + }, + "minecraft:shroomlight": { + "runtime_id": -230, + "component_based": false + }, + "minecraft:shulker_box": { + "runtime_id": 747, + "component_based": false + }, + "minecraft:shulker_shell": { + "runtime_id": 582, + "component_based": false + }, + "minecraft:shulker_spawn_egg": { + "runtime_id": 479, + "component_based": false + }, + "minecraft:silence_armor_trim_smithing_template": { + "runtime_id": 711, + "component_based": false + }, + "minecraft:silver_glazed_terracotta": { + "runtime_id": 228, + "component_based": false + }, + "minecraft:silverfish_spawn_egg": { + "runtime_id": 452, + "component_based": false + }, + "minecraft:skeleton_horse_spawn_egg": { + "runtime_id": 477, + "component_based": false + }, + "minecraft:skeleton_spawn_egg": { + "runtime_id": 453, + "component_based": false + }, + "minecraft:skull": { + "runtime_id": 532, + "component_based": false + }, + "minecraft:skull_banner_pattern": { + "runtime_id": 599, + "component_based": false + }, + "minecraft:skull_pottery_sherd": { + "runtime_id": 696, + "component_based": false + }, + "minecraft:slime": { + "runtime_id": 165, + "component_based": false + }, + "minecraft:slime_ball": { + "runtime_id": 396, + "component_based": false + }, + "minecraft:slime_spawn_egg": { + "runtime_id": 454, + "component_based": false + }, + "minecraft:small_amethyst_bud": { + "runtime_id": -332, + "component_based": false + }, + "minecraft:small_dripleaf_block": { + "runtime_id": -336, + "component_based": false + }, + "minecraft:smithing_table": { + "runtime_id": -202, + "component_based": false + }, + "minecraft:smoker": { + "runtime_id": -198, + "component_based": false + }, + "minecraft:smooth_basalt": { + "runtime_id": -377, + "component_based": false + }, + "minecraft:smooth_quartz_stairs": { + "runtime_id": -185, + "component_based": false + }, + "minecraft:smooth_red_sandstone_stairs": { + "runtime_id": -176, + "component_based": false + }, + "minecraft:smooth_sandstone_stairs": { + "runtime_id": -177, + "component_based": false + }, + "minecraft:smooth_stone": { + "runtime_id": -183, + "component_based": false + }, + "minecraft:smooth_stone_slab": { + "runtime_id": 44, + "component_based": false + }, + "minecraft:sniffer_egg": { + "runtime_id": -596, + "component_based": false + }, + "minecraft:sniffer_spawn_egg": { + "runtime_id": 510, + "component_based": false + }, + "minecraft:snort_pottery_sherd": { + "runtime_id": 697, + "component_based": false + }, + "minecraft:snout_armor_trim_smithing_template": { + "runtime_id": 708, + "component_based": false + }, + "minecraft:snow": { + "runtime_id": 80, + "component_based": false + }, + "minecraft:snow_golem_spawn_egg": { + "runtime_id": 516, + "component_based": false + }, + "minecraft:snow_layer": { + "runtime_id": 78, + "component_based": false + }, + "minecraft:snowball": { + "runtime_id": 381, + "component_based": true + }, + "minecraft:soul_campfire": { + "runtime_id": 641, + "component_based": true + }, + "minecraft:soul_fire": { + "runtime_id": -237, + "component_based": false + }, + "minecraft:soul_lantern": { + "runtime_id": -269, + "component_based": false + }, + "minecraft:soul_sand": { + "runtime_id": 88, + "component_based": false + }, + "minecraft:soul_soil": { + "runtime_id": -236, + "component_based": false + }, + "minecraft:soul_torch": { + "runtime_id": -268, + "component_based": false + }, + "minecraft:sparkler": { + "runtime_id": 619, + "component_based": false + }, + "minecraft:spawn_egg": { + "runtime_id": 757, + "component_based": false + }, + "minecraft:spider_eye": { + "runtime_id": 282, + "component_based": false + }, + "minecraft:spider_spawn_egg": { + "runtime_id": 455, + "component_based": false + }, + "minecraft:spire_armor_trim_smithing_template": { + "runtime_id": 710, + "component_based": false + }, + "minecraft:splash_potion": { + "runtime_id": 577, + "component_based": false + }, + "minecraft:sponge": { + "runtime_id": 19, + "component_based": false + }, + "minecraft:spore_blossom": { + "runtime_id": -321, + "component_based": false + }, + "minecraft:spruce_boat": { + "runtime_id": 386, + "component_based": false + }, + "minecraft:spruce_button": { + "runtime_id": -144, + "component_based": false + }, + "minecraft:spruce_chest_boat": { + "runtime_id": 660, + "component_based": false + }, + "minecraft:spruce_door": { + "runtime_id": 569, + "component_based": false + }, + "minecraft:spruce_double_slab": { + "runtime_id": -809, + "component_based": false + }, + "minecraft:spruce_fence": { + "runtime_id": -579, + "component_based": false + }, + "minecraft:spruce_fence_gate": { + "runtime_id": 183, + "component_based": false + }, + "minecraft:spruce_hanging_sign": { + "runtime_id": -501, + "component_based": false + }, + "minecraft:spruce_leaves": { + "runtime_id": -800, + "component_based": false + }, + "minecraft:spruce_log": { + "runtime_id": -569, + "component_based": false + }, + "minecraft:spruce_planks": { + "runtime_id": -739, + "component_based": false + }, + "minecraft:spruce_pressure_plate": { + "runtime_id": -154, + "component_based": false + }, + "minecraft:spruce_sapling": { + "runtime_id": -825, + "component_based": false + }, + "minecraft:spruce_sign": { + "runtime_id": 592, + "component_based": false + }, + "minecraft:spruce_slab": { + "runtime_id": -804, + "component_based": false + }, + "minecraft:spruce_stairs": { + "runtime_id": 134, + "component_based": false + }, + "minecraft:spruce_standing_sign": { + "runtime_id": -181, + "component_based": false + }, + "minecraft:spruce_trapdoor": { + "runtime_id": -149, + "component_based": false + }, + "minecraft:spruce_wall_sign": { + "runtime_id": -182, + "component_based": false + }, + "minecraft:spruce_wood": { + "runtime_id": -814, + "component_based": false + }, + "minecraft:spyglass": { + "runtime_id": 644, + "component_based": false + }, + "minecraft:squid_spawn_egg": { + "runtime_id": 459, + "component_based": false + }, + "minecraft:stained_glass": { + "runtime_id": 745, + "component_based": false + }, + "minecraft:stained_glass_pane": { + "runtime_id": 746, + "component_based": false + }, + "minecraft:stained_hardened_clay": { + "runtime_id": 719, + "component_based": false + }, + "minecraft:standing_banner": { + "runtime_id": 176, + "component_based": false + }, + "minecraft:standing_sign": { + "runtime_id": 63, + "component_based": false + }, + "minecraft:stick": { + "runtime_id": 327, + "component_based": false + }, + "minecraft:sticky_piston": { + "runtime_id": 29, + "component_based": false + }, + "minecraft:sticky_piston_arm_collision": { + "runtime_id": -217, + "component_based": false + }, + "minecraft:stone": { + "runtime_id": 1, + "component_based": false + }, + "minecraft:stone_axe": { + "runtime_id": 321, + "component_based": false + }, + "minecraft:stone_block_slab": { + "runtime_id": 736, + "component_based": false + }, + "minecraft:stone_block_slab2": { + "runtime_id": 182, + "component_based": false + }, + "minecraft:stone_block_slab3": { + "runtime_id": -162, + "component_based": false + }, + "minecraft:stone_block_slab4": { + "runtime_id": -166, + "component_based": false + }, + "minecraft:stone_brick_slab": { + "runtime_id": -875, + "component_based": false + }, + "minecraft:stone_brick_stairs": { + "runtime_id": 109, + "component_based": false + }, + "minecraft:stone_button": { + "runtime_id": 77, + "component_based": false + }, + "minecraft:stone_hoe": { + "runtime_id": 337, + "component_based": false + }, + "minecraft:stone_pickaxe": { + "runtime_id": 320, + "component_based": false + }, + "minecraft:stone_pressure_plate": { + "runtime_id": 70, + "component_based": false + }, + "minecraft:stone_shovel": { + "runtime_id": 319, + "component_based": false + }, + "minecraft:stone_stairs": { + "runtime_id": 67, + "component_based": false + }, + "minecraft:stone_sword": { + "runtime_id": 318, + "component_based": false + }, + "minecraft:stonebrick": { + "runtime_id": 98, + "component_based": false + }, + "minecraft:stonecutter": { + "runtime_id": 245, + "component_based": false + }, + "minecraft:stonecutter_block": { + "runtime_id": -197, + "component_based": false + }, + "minecraft:stray_spawn_egg": { + "runtime_id": 471, + "component_based": false + }, + "minecraft:strider_spawn_egg": { + "runtime_id": 505, + "component_based": false + }, + "minecraft:string": { + "runtime_id": 333, + "component_based": true + }, + "minecraft:stripped_acacia_log": { + "runtime_id": -8, + "component_based": false + }, + "minecraft:stripped_acacia_wood": { + "runtime_id": -823, + "component_based": false + }, + "minecraft:stripped_bamboo_block": { + "runtime_id": -528, + "component_based": false + }, + "minecraft:stripped_birch_log": { + "runtime_id": -6, + "component_based": false + }, + "minecraft:stripped_birch_wood": { + "runtime_id": -821, + "component_based": false + }, + "minecraft:stripped_cherry_log": { + "runtime_id": -535, + "component_based": false + }, + "minecraft:stripped_cherry_wood": { + "runtime_id": -545, + "component_based": false + }, + "minecraft:stripped_crimson_hyphae": { + "runtime_id": -300, + "component_based": false + }, + "minecraft:stripped_crimson_stem": { + "runtime_id": -240, + "component_based": false + }, + "minecraft:stripped_dark_oak_log": { + "runtime_id": -9, + "component_based": false + }, + "minecraft:stripped_dark_oak_wood": { + "runtime_id": -824, + "component_based": false + }, + "minecraft:stripped_jungle_log": { + "runtime_id": -7, + "component_based": false + }, + "minecraft:stripped_jungle_wood": { + "runtime_id": -822, + "component_based": false + }, + "minecraft:stripped_mangrove_log": { + "runtime_id": -485, + "component_based": false + }, + "minecraft:stripped_mangrove_wood": { + "runtime_id": -498, + "component_based": false + }, + "minecraft:stripped_oak_log": { + "runtime_id": -10, + "component_based": false + }, + "minecraft:stripped_oak_wood": { + "runtime_id": -819, + "component_based": false + }, + "minecraft:stripped_spruce_log": { + "runtime_id": -5, + "component_based": false + }, + "minecraft:stripped_spruce_wood": { + "runtime_id": -820, + "component_based": false + }, + "minecraft:stripped_warped_hyphae": { + "runtime_id": -301, + "component_based": false + }, + "minecraft:stripped_warped_stem": { + "runtime_id": -241, + "component_based": false + }, + "minecraft:structure_block": { + "runtime_id": 252, + "component_based": false + }, + "minecraft:structure_void": { + "runtime_id": 217, + "component_based": false + }, + "minecraft:sugar": { + "runtime_id": 424, + "component_based": false + }, + "minecraft:sugar_cane": { + "runtime_id": 393, + "component_based": true + }, + "minecraft:sunflower": { + "runtime_id": 175, + "component_based": false + }, + "minecraft:suspicious_gravel": { + "runtime_id": -573, + "component_based": false + }, + "minecraft:suspicious_sand": { + "runtime_id": -529, + "component_based": false + }, + "minecraft:suspicious_stew": { + "runtime_id": 608, + "component_based": false + }, + "minecraft:sweet_berries": { + "runtime_id": 291, + "component_based": false + }, + "minecraft:sweet_berry_bush": { + "runtime_id": -207, + "component_based": false + }, + "minecraft:tadpole_bucket": { + "runtime_id": 649, + "component_based": false + }, + "minecraft:tadpole_spawn_egg": { + "runtime_id": 648, + "component_based": false + }, + "minecraft:tall_grass": { + "runtime_id": -864, + "component_based": false + }, + "minecraft:tallgrass": { + "runtime_id": 741, + "component_based": false + }, + "minecraft:target": { + "runtime_id": -239, + "component_based": false + }, + "minecraft:tide_armor_trim_smithing_template": { + "runtime_id": 707, + "component_based": false + }, + "minecraft:tinted_glass": { + "runtime_id": -334, + "component_based": false + }, + "minecraft:tnt": { + "runtime_id": 46, + "component_based": false + }, + "minecraft:tnt_minecart": { + "runtime_id": 541, + "component_based": false + }, + "minecraft:torch": { + "runtime_id": 50, + "component_based": false + }, + "minecraft:torchflower": { + "runtime_id": -568, + "component_based": false + }, + "minecraft:torchflower_crop": { + "runtime_id": -567, + "component_based": false + }, + "minecraft:torchflower_seeds": { + "runtime_id": 300, + "component_based": false + }, + "minecraft:totem_of_undying": { + "runtime_id": 584, + "component_based": false + }, + "minecraft:trader_llama_spawn_egg": { + "runtime_id": 667, + "component_based": false + }, + "minecraft:trapdoor": { + "runtime_id": 96, + "component_based": false + }, + "minecraft:trapped_chest": { + "runtime_id": 146, + "component_based": false + }, + "minecraft:trial_key": { + "runtime_id": 258, + "component_based": true + }, + "minecraft:trial_spawner": { + "runtime_id": -315, + "component_based": false + }, + "minecraft:trident": { + "runtime_id": 562, + "component_based": false + }, + "minecraft:trip_wire": { + "runtime_id": 132, + "component_based": false + }, + "minecraft:tripwire_hook": { + "runtime_id": 131, + "component_based": false + }, + "minecraft:tropical_fish": { + "runtime_id": 270, + "component_based": false + }, + "minecraft:tropical_fish_bucket": { + "runtime_id": 373, + "component_based": false + }, + "minecraft:tropical_fish_spawn_egg": { + "runtime_id": 489, + "component_based": false + }, + "minecraft:tube_coral": { + "runtime_id": -131, + "component_based": false + }, + "minecraft:tube_coral_block": { + "runtime_id": -132, + "component_based": false + }, + "minecraft:tube_coral_fan": { + "runtime_id": -133, + "component_based": false + }, + "minecraft:tuff": { + "runtime_id": -333, + "component_based": false + }, + "minecraft:tuff_brick_double_slab": { + "runtime_id": -756, + "component_based": false + }, + "minecraft:tuff_brick_slab": { + "runtime_id": -755, + "component_based": false + }, + "minecraft:tuff_brick_stairs": { + "runtime_id": -757, + "component_based": false + }, + "minecraft:tuff_brick_wall": { + "runtime_id": -758, + "component_based": false + }, + "minecraft:tuff_bricks": { + "runtime_id": -754, + "component_based": false + }, + "minecraft:tuff_double_slab": { + "runtime_id": -745, + "component_based": false + }, + "minecraft:tuff_slab": { + "runtime_id": -744, + "component_based": false + }, + "minecraft:tuff_stairs": { + "runtime_id": -746, + "component_based": false + }, + "minecraft:tuff_wall": { + "runtime_id": -747, + "component_based": false + }, + "minecraft:turtle_egg": { + "runtime_id": -159, + "component_based": false + }, + "minecraft:turtle_helmet": { + "runtime_id": 589, + "component_based": false + }, + "minecraft:turtle_scute": { + "runtime_id": 588, + "component_based": false + }, + "minecraft:turtle_spawn_egg": { + "runtime_id": 495, + "component_based": false + }, + "minecraft:twisting_vines": { + "runtime_id": -287, + "component_based": false + }, + "minecraft:underwater_torch": { + "runtime_id": 239, + "component_based": false + }, + "minecraft:undyed_shulker_box": { + "runtime_id": 205, + "component_based": false + }, + "minecraft:unknown": { + "runtime_id": -305, + "component_based": false + }, + "minecraft:unlit_redstone_torch": { + "runtime_id": 75, + "component_based": false + }, + "minecraft:unpowered_comparator": { + "runtime_id": 149, + "component_based": false + }, + "minecraft:unpowered_repeater": { + "runtime_id": 93, + "component_based": false + }, + "minecraft:vault": { + "runtime_id": -314, + "component_based": false + }, + "minecraft:verdant_froglight": { + "runtime_id": -470, + "component_based": false + }, + "minecraft:vex_armor_trim_smithing_template": { + "runtime_id": 706, + "component_based": false + }, + "minecraft:vex_spawn_egg": { + "runtime_id": 486, + "component_based": false + }, + "minecraft:villager_spawn_egg": { + "runtime_id": 458, + "component_based": false + }, + "minecraft:vindicator_spawn_egg": { + "runtime_id": 484, + "component_based": false + }, + "minecraft:vine": { + "runtime_id": 106, + "component_based": false + }, + "minecraft:wall_banner": { + "runtime_id": 177, + "component_based": false + }, + "minecraft:wall_sign": { + "runtime_id": 68, + "component_based": false + }, + "minecraft:wandering_trader_spawn_egg": { + "runtime_id": 502, + "component_based": false + }, + "minecraft:ward_armor_trim_smithing_template": { + "runtime_id": 704, + "component_based": false + }, + "minecraft:warden_spawn_egg": { + "runtime_id": 651, + "component_based": false + }, + "minecraft:warped_button": { + "runtime_id": -261, + "component_based": false + }, + "minecraft:warped_door": { + "runtime_id": 636, + "component_based": false + }, + "minecraft:warped_double_slab": { + "runtime_id": -267, + "component_based": false + }, + "minecraft:warped_fence": { + "runtime_id": -257, + "component_based": false + }, + "minecraft:warped_fence_gate": { + "runtime_id": -259, + "component_based": false + }, + "minecraft:warped_fungus": { + "runtime_id": -229, + "component_based": false + }, + "minecraft:warped_fungus_on_a_stick": { + "runtime_id": 637, + "component_based": true + }, + "minecraft:warped_hanging_sign": { + "runtime_id": -507, + "component_based": false + }, + "minecraft:warped_hyphae": { + "runtime_id": -298, + "component_based": false + }, + "minecraft:warped_nylium": { + "runtime_id": -233, + "component_based": false + }, + "minecraft:warped_planks": { + "runtime_id": -243, + "component_based": false + }, + "minecraft:warped_pressure_plate": { + "runtime_id": -263, + "component_based": false + }, + "minecraft:warped_roots": { + "runtime_id": -224, + "component_based": false + }, + "minecraft:warped_sign": { + "runtime_id": 634, + "component_based": false + }, + "minecraft:warped_slab": { + "runtime_id": -265, + "component_based": false + }, + "minecraft:warped_stairs": { + "runtime_id": -255, + "component_based": false + }, + "minecraft:warped_standing_sign": { + "runtime_id": -251, + "component_based": false + }, + "minecraft:warped_stem": { + "runtime_id": -226, + "component_based": false + }, + "minecraft:warped_trapdoor": { + "runtime_id": -247, + "component_based": false + }, + "minecraft:warped_wall_sign": { + "runtime_id": -253, + "component_based": false + }, + "minecraft:warped_wart_block": { + "runtime_id": -227, + "component_based": false + }, + "minecraft:water": { + "runtime_id": 9, + "component_based": false + }, + "minecraft:water_bucket": { + "runtime_id": 369, + "component_based": false + }, + "minecraft:waterlily": { + "runtime_id": 111, + "component_based": false + }, + "minecraft:waxed_chiseled_copper": { + "runtime_id": -764, + "component_based": false + }, + "minecraft:waxed_copper": { + "runtime_id": -344, + "component_based": false + }, + "minecraft:waxed_copper_bulb": { + "runtime_id": -780, + "component_based": false + }, + "minecraft:waxed_copper_door": { + "runtime_id": -788, + "component_based": false + }, + "minecraft:waxed_copper_grate": { + "runtime_id": -772, + "component_based": false + }, + "minecraft:waxed_copper_trapdoor": { + "runtime_id": -796, + "component_based": false + }, + "minecraft:waxed_cut_copper": { + "runtime_id": -351, + "component_based": false + }, + "minecraft:waxed_cut_copper_slab": { + "runtime_id": -365, + "component_based": false + }, + "minecraft:waxed_cut_copper_stairs": { + "runtime_id": -358, + "component_based": false + }, + "minecraft:waxed_double_cut_copper_slab": { + "runtime_id": -372, + "component_based": false + }, + "minecraft:waxed_exposed_chiseled_copper": { + "runtime_id": -765, + "component_based": false + }, + "minecraft:waxed_exposed_copper": { + "runtime_id": -345, + "component_based": false + }, + "minecraft:waxed_exposed_copper_bulb": { + "runtime_id": -781, + "component_based": false + }, + "minecraft:waxed_exposed_copper_door": { + "runtime_id": -789, + "component_based": false + }, + "minecraft:waxed_exposed_copper_grate": { + "runtime_id": -773, + "component_based": false + }, + "minecraft:waxed_exposed_copper_trapdoor": { + "runtime_id": -797, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper": { + "runtime_id": -352, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper_slab": { + "runtime_id": -366, + "component_based": false + }, + "minecraft:waxed_exposed_cut_copper_stairs": { + "runtime_id": -359, + "component_based": false + }, + "minecraft:waxed_exposed_double_cut_copper_slab": { + "runtime_id": -373, + "component_based": false + }, + "minecraft:waxed_oxidized_chiseled_copper": { + "runtime_id": -766, + "component_based": false + }, + "minecraft:waxed_oxidized_copper": { + "runtime_id": -446, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_bulb": { + "runtime_id": -783, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_door": { + "runtime_id": -791, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_grate": { + "runtime_id": -775, + "component_based": false + }, + "minecraft:waxed_oxidized_copper_trapdoor": { + "runtime_id": -799, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper": { + "runtime_id": -447, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper_slab": { + "runtime_id": -449, + "component_based": false + }, + "minecraft:waxed_oxidized_cut_copper_stairs": { + "runtime_id": -448, + "component_based": false + }, + "minecraft:waxed_oxidized_double_cut_copper_slab": { + "runtime_id": -450, + "component_based": false + }, + "minecraft:waxed_weathered_chiseled_copper": { + "runtime_id": -767, + "component_based": false + }, + "minecraft:waxed_weathered_copper": { + "runtime_id": -346, + "component_based": false + }, + "minecraft:waxed_weathered_copper_bulb": { + "runtime_id": -782, + "component_based": false + }, + "minecraft:waxed_weathered_copper_door": { + "runtime_id": -790, + "component_based": false + }, + "minecraft:waxed_weathered_copper_grate": { + "runtime_id": -774, + "component_based": false + }, + "minecraft:waxed_weathered_copper_trapdoor": { + "runtime_id": -798, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper": { + "runtime_id": -353, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper_slab": { + "runtime_id": -367, + "component_based": false + }, + "minecraft:waxed_weathered_cut_copper_stairs": { + "runtime_id": -360, + "component_based": false + }, + "minecraft:waxed_weathered_double_cut_copper_slab": { + "runtime_id": -374, + "component_based": false + }, + "minecraft:wayfinder_armor_trim_smithing_template": { + "runtime_id": 712, + "component_based": false + }, + "minecraft:weathered_chiseled_copper": { + "runtime_id": -762, + "component_based": false + }, + "minecraft:weathered_copper": { + "runtime_id": -342, + "component_based": false + }, + "minecraft:weathered_copper_bulb": { + "runtime_id": -778, + "component_based": false + }, + "minecraft:weathered_copper_door": { + "runtime_id": -786, + "component_based": false + }, + "minecraft:weathered_copper_grate": { + "runtime_id": -770, + "component_based": false + }, + "minecraft:weathered_copper_trapdoor": { + "runtime_id": -794, + "component_based": false + }, + "minecraft:weathered_cut_copper": { + "runtime_id": -349, + "component_based": false + }, + "minecraft:weathered_cut_copper_slab": { + "runtime_id": -363, + "component_based": false + }, + "minecraft:weathered_cut_copper_stairs": { + "runtime_id": -356, + "component_based": false + }, + "minecraft:weathered_double_cut_copper_slab": { + "runtime_id": -370, + "component_based": false + }, + "minecraft:web": { + "runtime_id": 30, + "component_based": false + }, + "minecraft:weeping_vines": { + "runtime_id": -231, + "component_based": false + }, + "minecraft:wheat": { + "runtime_id": 341, + "component_based": false + }, + "minecraft:wheat_seeds": { + "runtime_id": 295, + "component_based": false + }, + "minecraft:white_candle": { + "runtime_id": -413, + "component_based": false + }, + "minecraft:white_candle_cake": { + "runtime_id": -430, + "component_based": false + }, + "minecraft:white_carpet": { + "runtime_id": 171, + "component_based": false + }, + "minecraft:white_concrete": { + "runtime_id": 236, + "component_based": false + }, + "minecraft:white_concrete_powder": { + "runtime_id": 237, + "component_based": false + }, + "minecraft:white_dye": { + "runtime_id": 418, + "component_based": false + }, + "minecraft:white_glazed_terracotta": { + "runtime_id": 220, + "component_based": false + }, + "minecraft:white_shulker_box": { + "runtime_id": 218, + "component_based": false + }, + "minecraft:white_stained_glass": { + "runtime_id": 241, + "component_based": false + }, + "minecraft:white_stained_glass_pane": { + "runtime_id": 160, + "component_based": false + }, + "minecraft:white_terracotta": { + "runtime_id": 159, + "component_based": false + }, + "minecraft:white_tulip": { + "runtime_id": -835, + "component_based": false + }, + "minecraft:white_wool": { + "runtime_id": 35, + "component_based": false + }, + "minecraft:wild_armor_trim_smithing_template": { + "runtime_id": 703, + "component_based": false + }, + "minecraft:wind_charge": { + "runtime_id": 260, + "component_based": true + }, + "minecraft:witch_spawn_egg": { + "runtime_id": 461, + "component_based": false + }, + "minecraft:wither_rose": { + "runtime_id": -216, + "component_based": false + }, + "minecraft:wither_skeleton_spawn_egg": { + "runtime_id": 474, + "component_based": false + }, + "minecraft:wither_spawn_egg": { + "runtime_id": 518, + "component_based": false + }, + "minecraft:wolf_armor": { + "runtime_id": 722, + "component_based": true + }, + "minecraft:wolf_spawn_egg": { + "runtime_id": 448, + "component_based": false + }, + "minecraft:wood": { + "runtime_id": 748, + "component_based": false + }, + "minecraft:wooden_axe": { + "runtime_id": 317, + "component_based": false + }, + "minecraft:wooden_button": { + "runtime_id": 143, + "component_based": false + }, + "minecraft:wooden_door": { + "runtime_id": 366, + "component_based": false + }, + "minecraft:wooden_hoe": { + "runtime_id": 336, + "component_based": false + }, + "minecraft:wooden_pickaxe": { + "runtime_id": 316, + "component_based": false + }, + "minecraft:wooden_pressure_plate": { + "runtime_id": 72, + "component_based": false + }, + "minecraft:wooden_shovel": { + "runtime_id": 315, + "component_based": false + }, + "minecraft:wooden_slab": { + "runtime_id": 735, + "component_based": false + }, + "minecraft:wooden_sword": { + "runtime_id": 314, + "component_based": false + }, + "minecraft:wool": { + "runtime_id": 725, + "component_based": false + }, + "minecraft:writable_book": { + "runtime_id": 526, + "component_based": false + }, + "minecraft:written_book": { + "runtime_id": 527, + "component_based": false + }, + "minecraft:yellow_candle": { + "runtime_id": -417, + "component_based": false + }, + "minecraft:yellow_candle_cake": { + "runtime_id": -434, + "component_based": false + }, + "minecraft:yellow_carpet": { + "runtime_id": -600, + "component_based": false + }, + "minecraft:yellow_concrete": { + "runtime_id": -631, + "component_based": false + }, + "minecraft:yellow_concrete_powder": { + "runtime_id": -712, + "component_based": false + }, + "minecraft:yellow_dye": { + "runtime_id": 414, + "component_based": false + }, + "minecraft:yellow_flower": { + "runtime_id": 37, + "component_based": false + }, + "minecraft:yellow_glazed_terracotta": { + "runtime_id": 224, + "component_based": false + }, + "minecraft:yellow_shulker_box": { + "runtime_id": -616, + "component_based": false + }, + "minecraft:yellow_stained_glass": { + "runtime_id": -676, + "component_based": false + }, + "minecraft:yellow_stained_glass_pane": { + "runtime_id": -646, + "component_based": false + }, + "minecraft:yellow_terracotta": { + "runtime_id": -727, + "component_based": false + }, + "minecraft:yellow_wool": { + "runtime_id": -558, + "component_based": false + }, + "minecraft:zoglin_spawn_egg": { + "runtime_id": 508, + "component_based": false + }, + "minecraft:zombie_horse_spawn_egg": { + "runtime_id": 478, + "component_based": false + }, + "minecraft:zombie_pigman_spawn_egg": { + "runtime_id": 457, + "component_based": false + }, + "minecraft:zombie_spawn_egg": { + "runtime_id": 456, + "component_based": false + }, + "minecraft:zombie_villager_spawn_egg": { + "runtime_id": 487, + "component_based": false + } +} diff --git a/legacyver/legacypacket/add_actor.go b/legacyver/legacypacket/add_actor.go new file mode 100644 index 0000000..a8782f1 --- /dev/null +++ b/legacyver/legacypacket/add_actor.go @@ -0,0 +1,76 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// AddActor is sent by the server to the client to spawn an entity to the player. It is used for every entity +// except other players, for which the AddPlayer packet is used. +type AddActor struct { + // EntityUniqueID is the unique ID of the entity. The unique ID is a value that remains consistent across + // different sessions of the same world, but most servers simply fill the runtime ID of the entity out for + // this field. + EntityUniqueID int64 + // EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // EntityType is the string entity type of the entity, for example 'minecraft:skeleton'. A list of these + // entities may be found online. + EntityType string + // Position is the position to spawn the entity on. If the entity is on a distance that the player cannot + // see it, the entity will still show up if the player moves closer. + Position mgl32.Vec3 + // Velocity is the initial velocity the entity spawns with. This velocity will initiate client side + // movement of the entity. + Velocity mgl32.Vec3 + // Pitch is the vertical rotation of the entity. Facing straight forward yields a pitch of 0. Pitch is + // measured in degrees. + Pitch float32 + // Yaw is the horizontal rotation of the entity. Yaw is also measured in degrees. + Yaw float32 + // HeadYaw is the same as Yaw, except that it applies specifically to the head of the entity. A different value for + // HeadYaw than Yaw means that the entity will have its head turned. + HeadYaw float32 + // BodyYaw is the same as Yaw, except that it applies specifically to the body of the entity. A different value for + // BodyYaw than HeadYaw means that the entity will have its body turned, although it is unclear what the difference + // between BodyYaw and Yaw is. + BodyYaw float32 + // Attributes is a slice of attributes that the entity has. It includes attributes such as its health, + // movement speed, etc. + Attributes []protocol.AttributeValue + // EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in + // particular the way the entity looks. Flags include ones such as 'on fire' and 'sprinting'. + // The metadata values are indexed by their property key. + EntityMetadata map[uint32]any + // EntityProperties is a list of properties that the entity inhibits. These properties define and alter specific + // attributes of the entity. + EntityProperties protocol.EntityProperties + // EntityLinks is a list of entity links that are currently active on the entity. These links alter the + // way the entity shows up when first spawned in terms of it shown as riding an entity. Setting these + // links is important for new viewers to see the entity is riding another entity. + EntityLinks []proto.EntityLink +} + +// ID ... +func (*AddActor) ID() uint32 { + return packet.IDAddActor +} + +func (pk *AddActor) Marshal(io protocol.IO) { + io.Varint64(&pk.EntityUniqueID) + io.Varuint64(&pk.EntityRuntimeID) + io.String(&pk.EntityType) + io.Vec3(&pk.Position) + io.Vec3(&pk.Velocity) + io.Float32(&pk.Pitch) + io.Float32(&pk.Yaw) + io.Float32(&pk.HeadYaw) + io.Float32(&pk.BodyYaw) + protocol.Slice(io, &pk.Attributes) + io.EntityMetadata(&pk.EntityMetadata) + protocol.Single(io, &pk.EntityProperties) + protocol.Slice(io, &pk.EntityLinks) +} diff --git a/legacyver/legacypacket/add_player.go b/legacyver/legacypacket/add_player.go new file mode 100644 index 0000000..c14875c --- /dev/null +++ b/legacyver/legacypacket/add_player.go @@ -0,0 +1,92 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/google/uuid" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// AddPlayer is sent by the server to the client to make a player entity show up client-side. It is one of the +// few entities that cannot be sent using the AddActor packet. +type AddPlayer struct { + // UUID is the UUID of the player. It is the same UUID that the client sent in the Login packet at the + // start of the session. A player with this UUID must exist in the player list (built up using the + // PlayerList packet), for it to show up in-game. + UUID uuid.UUID + // Username is the name of the player. This username is the username that will be set as the initial + // name tag of the player. + Username string + // EntityRuntimeID is the runtime ID of the player. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // PlatformChatID is an identifier only set for particular platforms when chatting (presumably only for + // Nintendo Switch). It is otherwise an empty string, and is used to decide which players are able to + // chat with each other. + PlatformChatID string + // Position is the position to spawn the player on. If the player is on a distance that the viewer cannot + // see it, the player will still show up if the viewer moves closer. + Position mgl32.Vec3 + // Velocity is the initial velocity the player spawns with. This velocity will initiate client side + // movement of the player. + Velocity mgl32.Vec3 + // Pitch is the vertical rotation of the player. Facing straight forward yields a pitch of 0. Pitch is + // measured in degrees. + Pitch float32 + // Yaw is the horizontal rotation of the player. Yaw is also measured in degrees. + Yaw float32 + // HeadYaw is the same as Yaw, except that it applies specifically to the head of the player. A different + // value for HeadYaw than Yaw means that the player will have its head turned. + HeadYaw float32 + // HeldItem is the item that the player is holding. The item is shown to the viewer as soon as the player + // itself shows up. Needless to say that this field is rather pointless, as additional packets still must + // be sent for armour to show up. + HeldItem protocol.ItemInstance + // GameType is the game type of the player. If set to GameTypeSpectator, the player will not be shown to viewers. + GameType int32 + // EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in + // particular the way the player looks. Flags include ones such as 'on fire' and 'sprinting'. + // The metadata values are indexed by their property key. + EntityMetadata map[uint32]any + // EntityProperties is a list of properties that the entity inhibits. These properties define and alter specific + // attributes of the entity. + EntityProperties protocol.EntityProperties + // AbilityData represents various data about the abilities of a player, such as ability layers or permissions. + AbilityData protocol.AbilityData + // EntityLinks is a list of entity links that are currently active on the player. These links alter the + // way the player shows up when first spawned in terms of it shown as riding an entity. Setting these + // links is important for new viewers to see the player is riding another entity. + EntityLinks []proto.EntityLink + // DeviceID is the device ID set in one of the files found in the storage of the device of the player. It + // may be changed freely, so it should not be relied on for anything. + DeviceID string + // BuildPlatform is the build platform/device OS of the player that is about to be added, as it sent in + // the Login packet when joining. + BuildPlatform int32 +} + +// ID ... +func (*AddPlayer) ID() uint32 { + return packet.IDAddPlayer +} + +func (pk *AddPlayer) Marshal(io protocol.IO) { + io.UUID(&pk.UUID) + io.String(&pk.Username) + io.Varuint64(&pk.EntityRuntimeID) + io.String(&pk.PlatformChatID) + io.Vec3(&pk.Position) + io.Vec3(&pk.Velocity) + io.Float32(&pk.Pitch) + io.Float32(&pk.Yaw) + io.Float32(&pk.HeadYaw) + io.ItemInstance(&pk.HeldItem) + io.Varint32(&pk.GameType) + io.EntityMetadata(&pk.EntityMetadata) + protocol.Single(io, &pk.EntityProperties) + protocol.Single(io, &pk.AbilityData) + protocol.Slice(io, &pk.EntityLinks) + io.String(&pk.DeviceID) + io.Int32(&pk.BuildPlatform) +} diff --git a/legacyver/legacypacket/camera_instruction.go b/legacyver/legacypacket/camera_instruction.go new file mode 100644 index 0000000..3ecc363 --- /dev/null +++ b/legacyver/legacypacket/camera_instruction.go @@ -0,0 +1,36 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// CameraInstruction gives a custom camera specific instructions to operate. +type CameraInstruction struct { + // Set is a camera instruction that sets the camera to a specified preset. + Set protocol.Optional[protocol.CameraInstructionSet] + // Clear can be set to true to clear all the current camera instructions. + Clear protocol.Optional[bool] + // Fade is a camera instruction that fades the screen to a specified colour. + Fade protocol.Optional[protocol.CameraInstructionFade] + // Target is a camera instruction that targets a specific entity. + Target protocol.Optional[protocol.CameraInstructionTarget] + // RemoveTarget can be set to true to remove the current aim assist target. + RemoveTarget protocol.Optional[bool] +} + +// ID ... +func (*CameraInstruction) ID() uint32 { + return packet.IDCameraInstruction +} + +func (pk *CameraInstruction) Marshal(io protocol.IO) { + protocol.OptionalMarshaler(io, &pk.Set) + protocol.OptionalFunc(io, &pk.Clear, io.Bool) + protocol.OptionalMarshaler(io, &pk.Fade) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalMarshaler(io, &pk.Target) + protocol.OptionalFunc(io, &pk.RemoveTarget, io.Bool) + } +} diff --git a/legacyver/legacypacket/change_dimension.go b/legacyver/legacypacket/change_dimension.go new file mode 100644 index 0000000..c758a1a --- /dev/null +++ b/legacyver/legacypacket/change_dimension.go @@ -0,0 +1,46 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// ChangeDimension is sent by the server to the client to send a dimension change screen client-side. Once the +// screen is cleared client-side, the client will send a PlayerAction packet with +// PlayerActionDimensionChangeDone. +type ChangeDimension struct { + // Dimension is the dimension that the client should be changed to. The fog colour will change depending + // on the type of dimension, which is one of the constants above. + // Note that Dimension MUST be a different dimension than the one that the player is currently in. Sending + // a ChangeDimension packet with a Dimension that the player is currently in will result in a never-ending + // dimension change screen. + Dimension int32 + // Position is the position in the new dimension that the player is spawned in. + Position mgl32.Vec3 + // Respawn specifies if the dimension change was respawn based, meaning that the player died in one + // dimension and got respawned into another. The client will send a PlayerAction packet with + // PlayerActionDimensionChangeRequest if it dies in another dimension, indicating that it needs a + // DimensionChange packet with Respawn set to true. + Respawn bool + // LoadingScreenID is a unique ID for the loading screen that the player is currently in. The client will + // update the server on its state through the ServerBoundLoadingScreen packet, and it can be used to not + // send specific packets to the client if it is changing dimensions. This field should be unique for every + //ChangeDimension packet sent. + LoadingScreenID protocol.Optional[uint32] +} + +// ID ... +func (*ChangeDimension) ID() uint32 { + return packet.IDChangeDimension +} + +func (pk *ChangeDimension) Marshal(io protocol.IO) { + io.Varint32(&pk.Dimension) + io.Vec3(&pk.Position) + io.Bool(&pk.Respawn) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalFunc(io, &pk.LoadingScreenID, io.Uint32) + } +} diff --git a/legacyver/legacypacket/correct_player_move_prediction.go b/legacyver/legacypacket/correct_player_move_prediction.go new file mode 100644 index 0000000..1c31715 --- /dev/null +++ b/legacyver/legacypacket/correct_player_move_prediction.go @@ -0,0 +1,50 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// CorrectPlayerMovePrediction is sent by the server if and only if StartGame.ServerAuthoritativeMovementMode +// is set to AuthoritativeMovementModeServerWithRewind. The packet is used to correct movement at a specific +// point in time. +type CorrectPlayerMovePrediction struct { + // PredictionType is the type of prediction that was corrected. It is one of the constants above. + PredictionType byte + // Position is the position that the player is supposed to be at the tick written in the field below. + // The client will change its current position based on movement after that tick starting from the + // Position. + Position mgl32.Vec3 + // Delta is the change in position compared to what the client sent as its position at that specific tick. + Delta mgl32.Vec3 + // Rotation is the rotation of the player at the tick written in the field below. It is only included if + // PredictionType is PredictionTypeVehicle. + Rotation mgl32.Vec2 + // VehicleAngularVelocity is the angular velocity of the vehicle that the rider is riding. + VehicleAngularVelocity protocol.Optional[float32] + // OnGround specifies if the player was on the ground at the time of the tick below. + OnGround bool + // Tick is the tick of the movement which was corrected by this packet. + Tick uint64 +} + +// ID ... +func (*CorrectPlayerMovePrediction) ID() uint32 { + return packet.IDCorrectPlayerMovePrediction +} + +func (pk *CorrectPlayerMovePrediction) Marshal(io protocol.IO) { + io.Uint8(&pk.PredictionType) + io.Vec3(&pk.Position) + io.Vec3(&pk.Delta) + if pk.PredictionType == packet.PredictionTypeVehicle { + io.Vec2(&pk.Rotation) + if proto.IsProtoGTE(io, proto.ID712) { + protocol.OptionalFunc(io, &pk.VehicleAngularVelocity, io.Float32) + } + } + io.Bool(&pk.OnGround) + io.Varuint64(&pk.Tick) +} diff --git a/legacyver/legacypacket/disconnect.go b/legacyver/legacypacket/disconnect.go new file mode 100644 index 0000000..29ce872 --- /dev/null +++ b/legacyver/legacypacket/disconnect.go @@ -0,0 +1,40 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// Disconnect may be sent by the server to disconnect the client using an optional message to send as the +// disconnect screen. +type Disconnect struct { + // Reason is the reason for the disconnection. It seems as if this field has no use other than for + // telemetry reasons as it does not affect the message that gets displayed on the disconnect screen. + Reason int32 + // HideDisconnectionScreen specifies if the disconnection screen should be hidden when the client is + // disconnected, meaning it will be sent directly to the main menu. + HideDisconnectionScreen bool + // Message is an optional message to show when disconnected. This message is only written if the + // HideDisconnectionScreen field is set to true. + Message string + // FilteredMessage is a filtered version of Message with all the profanity removed. The client will use + // this over Message if this field is not empty and they have the "Filter Profanity" setting enabled. + FilteredMessage string +} + +// ID ... +func (*Disconnect) ID() uint32 { + return packet.IDDisconnect +} + +func (pk *Disconnect) Marshal(io protocol.IO) { + io.Varint32(&pk.Reason) + io.Bool(&pk.HideDisconnectionScreen) + if !pk.HideDisconnectionScreen { + io.String(&pk.Message) + if proto.IsProtoGTE(io, proto.ID712) { + io.String(&pk.FilteredMessage) + } + } +} diff --git a/legacyver/legacypacket/editor_network.go b/legacyver/legacypacket/editor_network.go new file mode 100644 index 0000000..5286709 --- /dev/null +++ b/legacyver/legacypacket/editor_network.go @@ -0,0 +1,29 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/nbt" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// EditorNetwork is a packet sent from the server to the client and vise-versa to communicate editor-mode related +// information. It carries a single compound tag containing the relevant information. +type EditorNetwork struct { + // RouteToManager ... + RouteToManager bool + // Payload is a network little endian compound tag holding data relevant to the editor. + Payload map[string]any +} + +// ID ... +func (*EditorNetwork) ID() uint32 { + return packet.IDEditorNetwork +} + +func (pk *EditorNetwork) Marshal(io protocol.IO) { + if proto.IsProtoGTE(io, proto.ID712) { + io.Bool(&pk.RouteToManager) + } + io.NBT(&pk.Payload, nbt.NetworkLittleEndian) +} diff --git a/legacyver/legacypacket/inventory_content.go b/legacyver/legacypacket/inventory_content.go index 5bc8330..a351657 100644 --- a/legacyver/legacypacket/inventory_content.go +++ b/legacyver/legacypacket/inventory_content.go @@ -40,6 +40,8 @@ func (pk *InventoryContent) Marshal(io protocol.IO) { if proto.IsProtoGTE(io, proto.ID748) { io.ItemInstance(&pk.StorageItem) } else { - io.Varuint32(&pk.DynamicContainerSize) + if proto.IsProtoGTE(io, proto.ID712) { + io.Varuint32(&pk.DynamicContainerSize) + } } } diff --git a/legacyver/legacypacket/inventory_slot.go b/legacyver/legacypacket/inventory_slot.go index 531b1d9..2af0a63 100644 --- a/legacyver/legacypacket/inventory_slot.go +++ b/legacyver/legacypacket/inventory_slot.go @@ -43,7 +43,9 @@ func (pk *InventorySlot) Marshal(io protocol.IO) { if proto.IsProtoGTE(io, proto.ID748) { io.ItemInstance(&pk.StorageItem) } else { - io.Varuint32(&pk.DynamicContainerSize) + if proto.IsProtoGTE(io, proto.ID712) { + io.Varuint32(&pk.DynamicContainerSize) + } } io.ItemInstance(&pk.NewItem) } diff --git a/legacyver/legacypacket/inventory_transaction.go b/legacyver/legacypacket/inventory_transaction.go new file mode 100644 index 0000000..f138bff --- /dev/null +++ b/legacyver/legacypacket/inventory_transaction.go @@ -0,0 +1,50 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// InventoryTransaction is a packet sent by the client. It essentially exists out of multiple sub-packets, +// each of which have something to do with the inventory in one way or another. Some of these sub-packets +// directly relate to the inventory, others relate to interaction with the world, that could potentially +// result in a change in the inventory. +type InventoryTransaction struct { + // LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should + // always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values + // in it. + // LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should + // respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the + // hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it. + LegacyRequestID int32 + // LegacySetItemSlots are only present if the LegacyRequestID is non-zero. These item slots inform the + // server of the slots that were changed during the inventory transaction, and the server should send + // back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.) + LegacySetItemSlots []protocol.LegacySetItemSlot + // Actions is a list of actions that took place, that form the inventory transaction together. Each of + // these actions hold one slot in which one item was changed to another. In general, the combination of + // all of these actions results in a balanced inventory transaction. This should be checked to ensure that + // no items are cheated into the inventory. + Actions []protocol.InventoryAction + // TransactionData is a data object that holds data specific to the type of transaction that the + // TransactionPacket held. Its concrete type must be one of NormalTransactionData, MismatchTransactionData + // UseItemTransactionData, UseItemOnEntityTransactionData or ReleaseItemTransactionData. If nil is set, + // the transaction will be assumed to of type InventoryTransactionTypeNormal. + TransactionData proto.InventoryTransactionData +} + +// ID ... +func (*InventoryTransaction) ID() uint32 { + return packet.IDInventoryTransaction +} + +func (pk *InventoryTransaction) Marshal(io protocol.IO) { + io.Varint32(&pk.LegacyRequestID) + if pk.LegacyRequestID != 0 { + protocol.Slice(io, &pk.LegacySetItemSlots) + } + proto.TransactionDataType(io, &pk.TransactionData) + protocol.Slice(io, &pk.Actions) + pk.TransactionData.Marshal(io) +} diff --git a/legacyver/legacypacket/mob_armour_equipment.go b/legacyver/legacypacket/mob_armour_equipment.go new file mode 100644 index 0000000..c6bdd9e --- /dev/null +++ b/legacyver/legacypacket/mob_armour_equipment.go @@ -0,0 +1,44 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// MobArmourEquipment is sent by the server to the client to update the armour an entity is wearing. It is +// sent for both players and other entities, such as zombies. +type MobArmourEquipment struct { + // EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and + // entities are generally identified in packets using this runtime ID. + EntityRuntimeID uint64 + // Helmet is the equipped helmet of the entity. Items that are not wearable on the head will not be + // rendered by the client. Unlike in Java Edition, blocks cannot be worn. + Helmet protocol.ItemInstance + // Chestplate is the chestplate of the entity. Items that are not wearable as chestplate will not be + // rendered. + Chestplate protocol.ItemInstance + // Leggings is the item worn as leggings by the entity. Items not wearable as leggings will not be + // rendered client-side. + Leggings protocol.ItemInstance + // Boots is the item worn as boots by the entity. Items not wearable as boots will not be rendered. + Boots protocol.ItemInstance + // Body is the item worn on the body of the entity. Items not wearable on the body will not be rendered. + Body protocol.ItemInstance +} + +// ID ... +func (*MobArmourEquipment) ID() uint32 { + return packet.IDMobArmourEquipment +} + +func (pk *MobArmourEquipment) Marshal(io protocol.IO) { + io.Varuint64(&pk.EntityRuntimeID) + io.ItemInstance(&pk.Helmet) + io.ItemInstance(&pk.Chestplate) + io.ItemInstance(&pk.Leggings) + io.ItemInstance(&pk.Boots) + if proto.IsProtoGTE(io, proto.ID712) { + io.ItemInstance(&pk.Body) + } +} diff --git a/legacyver/legacypacket/player_armour_damage.go b/legacyver/legacypacket/player_armour_damage.go new file mode 100644 index 0000000..32b943f --- /dev/null +++ b/legacyver/legacypacket/player_armour_damage.go @@ -0,0 +1,63 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// PlayerArmourDamage is sent by the server to damage the armour of a player. It is a very efficient packet, +// but generally it's much easier to just send a slot update for the damaged armour. +type PlayerArmourDamage struct { + // Bitset holds a bitset of 4 bits that indicate which pieces of armour need to have damage dealt to them. + // The first bit, when toggled, is for a helmet, the second for the chestplate, the third for the leggings + // and the fourth for boots. + Bitset uint8 + // HelmetDamage is the amount of damage that should be dealt to the helmet. + HelmetDamage int32 + // ChestplateDamage is the amount of damage that should be dealt to the chestplate. + ChestplateDamage int32 + // LeggingsDamage is the amount of damage that should be dealt to the leggings. + LeggingsDamage int32 + // BootsDamage is the amount of damage that should be dealt to the boots. + BootsDamage int32 + // BodyDamage is the amount of damage that should be dealt to the body. + BodyDamage int32 +} + +// ID ... +func (pk *PlayerArmourDamage) ID() uint32 { + return packet.IDPlayerArmourDamage +} + +func (pk *PlayerArmourDamage) Marshal(io protocol.IO) { + io.Uint8(&pk.Bitset) + if pk.Bitset&packet.PlayerArmourDamageFlagHelmet != 0 { + io.Varint32(&pk.HelmetDamage) + } else { + pk.HelmetDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagChestplate != 0 { + io.Varint32(&pk.ChestplateDamage) + } else { + pk.ChestplateDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagLeggings != 0 { + io.Varint32(&pk.LeggingsDamage) + } else { + pk.LeggingsDamage = 0 + } + if pk.Bitset&packet.PlayerArmourDamageFlagBoots != 0 { + io.Varint32(&pk.BootsDamage) + } else { + pk.BootsDamage = 0 + } + + if proto.IsProtoGTE(io, proto.ID712) { + if pk.Bitset&packet.PlayerArmourDamageFlagBody != 0 { + io.Varint32(&pk.BodyDamage) + } else { + pk.BodyDamage = 0 + } + } +} diff --git a/legacyver/legacypacket/player_auth_input.go b/legacyver/legacypacket/player_auth_input.go index 60a0ea7..a52a4ef 100644 --- a/legacyver/legacypacket/player_auth_input.go +++ b/legacyver/legacypacket/player_auth_input.go @@ -91,7 +91,7 @@ func (pk *PlayerAuthInput) Marshal(io protocol.IO) { io.Vec3(&pk.Delta) if pk.InputData.Load(packet.InputFlagPerformItemInteraction) { - io.PlayerInventoryAction(&pk.ItemInteractionData) + proto.PlayerInventoryAction(io, &pk.ItemInteractionData) } if pk.InputData.Load(packet.InputFlagPerformItemStackRequest) { diff --git a/legacyver/legacypacket/set_actor_link.go b/legacyver/legacypacket/set_actor_link.go new file mode 100644 index 0000000..a89d034 --- /dev/null +++ b/legacyver/legacypacket/set_actor_link.go @@ -0,0 +1,25 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// SetActorLink is sent by the server to initiate an entity link client-side, meaning one entity will start +// riding another. +type SetActorLink struct { + // EntityLink is the link to be set client-side. It links two entities together, so that one entity rides + // another. Note that players that see those entities later will not see the link, unless it is also sent + // in the AddActor and AddPlayer packets. + EntityLink proto.EntityLink +} + +// ID ... +func (*SetActorLink) ID() uint32 { + return packet.IDSetActorLink +} + +func (pk *SetActorLink) Marshal(io protocol.IO) { + protocol.Single(io, &pk.EntityLink) +} diff --git a/legacyver/legacypacket/set_title.go b/legacyver/legacypacket/set_title.go new file mode 100644 index 0000000..285994d --- /dev/null +++ b/legacyver/legacypacket/set_title.go @@ -0,0 +1,53 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// SetTitle is sent by the server to make a title, subtitle or action bar shown to a player. It has several +// fields that allow setting the duration of the titles. +type SetTitle struct { + // ActionType is the type of the action that should be executed upon the title of a player. It is one of + // the constants above and specifies the response of the client to the packet. + ActionType int32 + // Text is the text of the title, which has a different meaning depending on the ActionType that the + // packet has. The text is the text of a title, subtitle or action bar, depending on the type set. + Text string + // FadeInDuration is the duration that the title takes to fade in on the screen of the player. It is + // measured in 20ths of a second (AKA in ticks). + FadeInDuration int32 + // RemainDuration is the duration that the title remains on the screen of the player. It is measured in + // 20ths of a second (AKA in ticks). + RemainDuration int32 + // FadeOutDuration is the duration that the title takes to fade out of the screen of the player. It is + // measured in 20ths of a second (AKA in ticks). + FadeOutDuration int32 + // XUID is the XBOX Live user ID of the player, which will remain consistent as long as the player is + // logged in with the XBOX Live account. It is empty if the user is not logged into its XBL account. + XUID string + // PlatformOnlineID is either a uint64 or an empty string. + PlatformOnlineID string + // FilteredMessage is a filtered version of Message with all the profanity removed. The client will use + // this over Message if this field is not empty and they have the "Filter Profanity" setting enabled. + FilteredMessage string +} + +// ID ... +func (*SetTitle) ID() uint32 { + return packet.IDSetTitle +} + +func (pk *SetTitle) Marshal(io protocol.IO) { + io.Varint32(&pk.ActionType) + io.String(&pk.Text) + io.Varint32(&pk.FadeInDuration) + io.Varint32(&pk.RemainDuration) + io.Varint32(&pk.FadeOutDuration) + io.String(&pk.XUID) + io.String(&pk.PlatformOnlineID) + if proto.IsProtoGTE(io, proto.ID712) { + io.String(&pk.FilteredMessage) + } +} diff --git a/legacyver/legacypacket/stop_sound.go b/legacyver/legacypacket/stop_sound.go new file mode 100644 index 0000000..79e1612 --- /dev/null +++ b/legacyver/legacypacket/stop_sound.go @@ -0,0 +1,33 @@ +package legacypacket + +import ( + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/sandertv/gophertunnel/minecraft/protocol" + "github.com/sandertv/gophertunnel/minecraft/protocol/packet" +) + +// StopSound is sent by the server to stop a sound playing to the player, such as a playing music disk track +// or other long-lasting sounds. +type StopSound struct { + // SoundName is the name of the sound that should be stopped from playing. If no sound with this name is + // currently active, the packet is ignored. + SoundName string + // StopAll specifies if all sounds currently playing to the player should be stopped. If set to true, the + // SoundName field may be left empty. + StopAll bool + // StopMusicLegacy is currently unknown. + StopMusicLegacy bool +} + +// ID ... +func (*StopSound) ID() uint32 { + return packet.IDStopSound +} + +func (pk *StopSound) Marshal(io protocol.IO) { + io.String(&pk.SoundName) + io.Bool(&pk.StopAll) + if proto.IsProtoGTE(io, proto.ID712) { + io.Bool(&pk.StopMusicLegacy) + } +} diff --git a/legacyver/proto/entity_link.go b/legacyver/proto/entity_link.go new file mode 100644 index 0000000..eef7de0 --- /dev/null +++ b/legacyver/proto/entity_link.go @@ -0,0 +1,56 @@ +package proto + +import "github.com/sandertv/gophertunnel/minecraft/protocol" + +// EntityLink is a link between two entities, typically being one entity riding another. +type EntityLink struct { + // RiddenEntityUniqueID is the entity unique ID of the entity that is being ridden. For a player sitting + // in a boat, this is the unique ID of the boat. + RiddenEntityUniqueID int64 + // RiderEntityUniqueID is the entity unique ID of the entity that is riding. For a player sitting in a + // boat, this is the unique ID of the player. + RiderEntityUniqueID int64 + // Type is one of the types above. It specifies the way the entity is linked to another entity. + Type byte + // Immediate is set to immediately dismount an entity from another. This should be set when the mount of + // an entity is killed. + Immediate bool + // RiderInitiated specifies if the link was created by the rider, for example the player starting to ride + // a horse by itself. This is generally true in vanilla environment for players. + RiderInitiated bool + // VehicleAngularVelocity is the angular velocity of the vehicle that the rider is riding. + VehicleAngularVelocity float32 +} + +func (x *EntityLink) FromLatest(link protocol.EntityLink) EntityLink { + x.RiddenEntityUniqueID = link.RiddenEntityUniqueID + x.RiderEntityUniqueID = link.RiderEntityUniqueID + x.Type = link.Type + x.Immediate = link.Immediate + x.RiderInitiated = link.RiderInitiated + x.VehicleAngularVelocity = link.VehicleAngularVelocity + return *x +} + +func (x *EntityLink) ToLatest() protocol.EntityLink { + return protocol.EntityLink{ + RiddenEntityUniqueID: x.RiddenEntityUniqueID, + RiderEntityUniqueID: x.RiderEntityUniqueID, + Type: x.Type, + Immediate: x.Immediate, + RiderInitiated: x.RiderInitiated, + VehicleAngularVelocity: x.VehicleAngularVelocity, + } +} + +// Marshal encodes/decodes a single entity link. +func (x *EntityLink) Marshal(r protocol.IO) { + r.Varint64(&x.RiddenEntityUniqueID) + r.Varint64(&x.RiderEntityUniqueID) + r.Uint8(&x.Type) + r.Bool(&x.Immediate) + r.Bool(&x.RiderInitiated) + if IsProtoGTE(r, ID712) { + r.Float32(&x.VehicleAngularVelocity) + } +} diff --git a/legacyver/proto/inventory.go b/legacyver/proto/inventory.go new file mode 100644 index 0000000..fec9911 --- /dev/null +++ b/legacyver/proto/inventory.go @@ -0,0 +1,158 @@ +package proto + +import ( + "github.com/go-gl/mathgl/mgl32" + "github.com/sandertv/gophertunnel/minecraft/protocol" +) + +// InventoryTransactionData represents an object that holds data specific to an inventory transaction type. +// The data it holds depends on the type. +type InventoryTransactionData interface { + // Marshal encodes/decodes a serialised inventory transaction data object. + Marshal(r protocol.IO) +} + +// lookupTransactionData looks up inventory transaction data for the ID passed. +func lookupTransactionData(id uint32, x *InventoryTransactionData) bool { + switch id { + case protocol.InventoryTransactionTypeNormal: + *x = &protocol.NormalTransactionData{} + case protocol.InventoryTransactionTypeMismatch: + *x = &protocol.MismatchTransactionData{} + case protocol.InventoryTransactionTypeUseItem: + *x = &UseItemTransactionData{} + case protocol.InventoryTransactionTypeUseItemOnEntity: + *x = &protocol.UseItemOnEntityTransactionData{} + case protocol.InventoryTransactionTypeReleaseItem: + *x = &protocol.ReleaseItemTransactionData{} + default: + return false + } + return true +} + +// lookupTransactionDataType looks up an ID for a specific transaction data. +func lookupTransactionDataType(x InventoryTransactionData, id *uint32) bool { + switch x.(type) { + case *protocol.NormalTransactionData: + *id = protocol.InventoryTransactionTypeNormal + case *protocol.MismatchTransactionData: + *id = protocol.InventoryTransactionTypeMismatch + case *UseItemTransactionData: + *id = protocol.InventoryTransactionTypeUseItem + case *protocol.UseItemOnEntityTransactionData: + *id = protocol.InventoryTransactionTypeUseItemOnEntity + case *protocol.ReleaseItemTransactionData: + *id = protocol.InventoryTransactionTypeReleaseItem + default: + return false + } + return true +} + +// UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on +// a block. +type UseItemTransactionData struct { + // LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should + // always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values + // in it. + // LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should + // respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the + // hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it. + LegacyRequestID int32 + // LegacySetItemSlots are only present if the LegacyRequestID is non-zero. These item slots inform the + // server of the slots that were changed during the inventory transaction, and the server should send + // back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.) + LegacySetItemSlots []protocol.LegacySetItemSlot + // Actions is a list of actions that took place, that form the inventory transaction together. Each of + // these actions hold one slot in which one item was changed to another. In general, the combination of + // all of these actions results in a balanced inventory transaction. This should be checked to ensure that + // no items are cheated into the inventory. + Actions []protocol.InventoryAction + // ActionType is the type of the UseItem inventory transaction. It is one of the action types found above, + // and specifies the way the player interacted with the block. + ActionType uint32 + // TriggerType is the type of the trigger that caused the inventory transaction. It is one of the trigger + // types found in the constants above. If TriggerType is TriggerTypePlayerInput, the transaction is from + // the initial input of the player. If it is TriggerTypeSimulationTick, the transaction is from a simulation + // tick when the player is holding down the input. + TriggerType uint32 + // BlockPosition is the position of the block that was interacted with. This is only really a correct + // block position if ActionType is not UseItemActionClickAir. + BlockPosition protocol.BlockPos + // BlockFace is the face of the block that was interacted with. When clicking the block, it is the face + // clicked. When breaking the block, it is the face that was last being hit until the block broke. + BlockFace int32 + // HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used + // to ensure that the hot bar slot and held item are correctly synchronised with the server. + HotBarSlot int32 + // HeldItem is the item that was held to interact with the block. The server should check if this item + // is actually present in the HotBarSlot. + HeldItem protocol.ItemInstance + // Position is the position of the player at the time of interaction. For clicking a block, this is the + // position at that time, whereas for breaking the block it is the position at the time of breaking. + Position mgl32.Vec3 + // ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be + // used to find out exactly where a player clicked the block. + ClickedPosition mgl32.Vec3 + // BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify + // that the player's world client-side is synchronised with the server's. + BlockRuntimeID uint32 + // ClientPrediction is the client's prediction on the output of the transaction. It is one of the client + // prediction found in the constants above. + ClientPrediction uint32 +} + +func (x *UseItemTransactionData) FromLatest(l *protocol.UseItemTransactionData) *UseItemTransactionData { + return &UseItemTransactionData{ + LegacyRequestID: l.LegacyRequestID, + LegacySetItemSlots: l.LegacySetItemSlots, + Actions: l.Actions, + ActionType: l.ActionType, + TriggerType: l.TriggerType, + BlockPosition: l.BlockPosition, + BlockFace: l.BlockFace, + HotBarSlot: l.HotBarSlot, + HeldItem: l.HeldItem, + Position: l.Position, + ClickedPosition: l.ClickedPosition, + BlockRuntimeID: l.BlockRuntimeID, + ClientPrediction: l.ClientPrediction, + } +} + +func (x *UseItemTransactionData) ToLatest() *protocol.UseItemTransactionData { + return &protocol.UseItemTransactionData{ + LegacyRequestID: x.LegacyRequestID, + LegacySetItemSlots: x.LegacySetItemSlots, + Actions: x.Actions, + ActionType: x.ActionType, + TriggerType: x.TriggerType, + BlockPosition: x.BlockPosition, + BlockFace: x.BlockFace, + HotBarSlot: x.HotBarSlot, + HeldItem: x.HeldItem, + Position: x.Position, + ClickedPosition: x.ClickedPosition, + BlockRuntimeID: x.BlockRuntimeID, + ClientPrediction: x.ClientPrediction, + } +} + +// Marshal ... +func (x *UseItemTransactionData) Marshal(r protocol.IO) { + r.Varuint32(&x.ActionType) + if IsProtoGTE(r, ID712) { + r.Varuint32(&x.TriggerType) + } + r.UBlockPos(&x.BlockPosition) + r.Varint32(&x.BlockFace) + r.Varint32(&x.HotBarSlot) + r.ItemInstance(&x.HeldItem) + r.Vec3(&x.Position) + r.Vec3(&x.ClickedPosition) + r.Varuint32(&x.BlockRuntimeID) + if IsProtoGTE(r, ID712) { + r.Varuint32(&x.ClientPrediction) + } +} diff --git a/legacyver/proto/io.go b/legacyver/proto/io.go index 5a17aa2..ca37321 100644 --- a/legacyver/proto/io.go +++ b/legacyver/proto/io.go @@ -1,6 +1,7 @@ package proto import ( + "fmt" "github.com/sandertv/gophertunnel/minecraft/protocol" ) @@ -57,3 +58,41 @@ func EmptySlice[T any](io protocol.IO, slice *[]T) { *slice = make([]T, 0) } } + +func TransactionDataType(io protocol.IO, x *InventoryTransactionData) { + if IsReader(io) { + var transactionType uint32 + io.Varuint32(&transactionType) + if !lookupTransactionData(transactionType, x) { + io.UnknownEnumOption(transactionType, "inventory transaction data type") + } + } else { + var id uint32 + if !lookupTransactionDataType(*x, &id) { + io.UnknownEnumOption(fmt.Sprintf("%T", x), "inventory transaction data type") + } + io.Varuint32(&id) + } +} + +func PlayerInventoryAction(io protocol.IO, x *protocol.UseItemTransactionData) { + io.Varint32(&x.LegacyRequestID) + if x.LegacyRequestID < -1 && (x.LegacyRequestID&1) == 0 { + protocol.Slice(io, &x.LegacySetItemSlots) + } + protocol.Slice(io, &x.Actions) + io.Varuint32(&x.ActionType) + if IsProtoGTE(io, ID712) { + io.Varuint32(&x.TriggerType) + } + io.BlockPos(&x.BlockPosition) + io.Varint32(&x.BlockFace) + io.Varint32(&x.HotBarSlot) + io.ItemInstance(&x.HeldItem) + io.Vec3(&x.Position) + io.Vec3(&x.ClickedPosition) + io.Varuint32(&x.BlockRuntimeID) + if IsProtoGTE(io, ID712) { + io.Varuint32(&x.ClientPrediction) + } +} diff --git a/legacyver/proto/item_stack.go b/legacyver/proto/item_stack.go index 08d750a..e179f92 100644 --- a/legacyver/proto/item_stack.go +++ b/legacyver/proto/item_stack.go @@ -538,7 +538,9 @@ type CraftRecipeStackRequestAction struct { // Marshal ... func (a *CraftRecipeStackRequestAction) Marshal(r protocol.IO) { r.Varuint32(&a.RecipeNetworkID) - r.Uint8(&a.NumberOfCrafts) + if IsProtoGTE(r, ID712) { + r.Uint8(&a.NumberOfCrafts) + } } // AutoCraftRecipeStackRequestAction is sent by the client similarly to the CraftRecipeStackRequestAction. The diff --git a/legacyver/proto/resource_pack.go b/legacyver/proto/resource_pack.go index a0b4b7c..b6c9d41 100644 --- a/legacyver/proto/resource_pack.go +++ b/legacyver/proto/resource_pack.go @@ -87,7 +87,9 @@ func (x *TexturePackInfo) Marshal(r protocol.IO) { r.String(&x.SubPackName) r.String(&x.ContentIdentity) r.Bool(&x.HasScripts) - r.Bool(&x.AddonPack) + if IsProtoGTE(r, ID712) { + r.Bool(&x.AddonPack) + } r.Bool(&x.RTXEnabled) if IsProtoGTE(r, ID748) { r.String(&x.DownloadURL) diff --git a/legacyver/protocol.go b/legacyver/protocol.go index 876d9e5..13c6a6d 100644 --- a/legacyver/protocol.go +++ b/legacyver/protocol.go @@ -233,6 +233,137 @@ func (p *Protocol) downgradePackets(pks []packet.Packet, conn *minecraft.Conn) [ Port: pk.Port, ReloadWorld: pk.ReloadWorld, } + case *packet.AddActor: + links := make([]proto.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = (&proto.EntityLink{}).FromLatest(l) + } + pks[pkIndex] = &legacypacket.AddActor{ + EntityUniqueID: pk.EntityUniqueID, + EntityRuntimeID: pk.EntityRuntimeID, + EntityType: pk.EntityType, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + BodyYaw: pk.BodyYaw, + Attributes: pk.Attributes, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + EntityLinks: links, + } + case *packet.AddPlayer: + links := make([]proto.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = (&proto.EntityLink{}).FromLatest(l) + } + pks[pkIndex] = &legacypacket.AddPlayer{ + UUID: pk.UUID, + Username: pk.Username, + EntityRuntimeID: pk.EntityRuntimeID, + PlatformChatID: pk.PlatformChatID, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + HeldItem: pk.HeldItem, + GameType: pk.GameType, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + AbilityData: pk.AbilityData, + EntityLinks: links, + DeviceID: pk.DeviceID, + BuildPlatform: pk.BuildPlatform, + } + case *packet.SetActorLink: + pks[pkIndex] = &legacypacket.SetActorLink{ + EntityLink: (&proto.EntityLink{}).FromLatest(pk.EntityLink), + } + case *packet.CameraInstruction: + pks[pkIndex] = &legacypacket.CameraInstruction{ + Set: pk.Set, + Clear: pk.Clear, + Fade: pk.Fade, + Target: pk.Target, + RemoveTarget: pk.RemoveTarget, + } + case *packet.ChangeDimension: + pks[pkIndex] = &legacypacket.ChangeDimension{ + Dimension: pk.Dimension, + Position: pk.Position, + Respawn: pk.Respawn, + LoadingScreenID: pk.LoadingScreenID, + } + case *packet.CorrectPlayerMovePrediction: + pks[pkIndex] = &legacypacket.CorrectPlayerMovePrediction{ + PredictionType: pk.PredictionType, + Position: pk.Position, + Delta: pk.Delta, + Rotation: pk.Rotation, + VehicleAngularVelocity: pk.VehicleAngularVelocity, + OnGround: pk.OnGround, + Tick: pk.Tick, + } + case *packet.Disconnect: + pks[pkIndex] = &legacypacket.Disconnect{ + Reason: pk.Reason, + HideDisconnectionScreen: pk.HideDisconnectionScreen, + Message: pk.Message, + FilteredMessage: pk.FilteredMessage, + } + case *packet.EditorNetwork: + pks[pkIndex] = &legacypacket.EditorNetwork{ + RouteToManager: pk.RouteToManager, + Payload: pk.Payload, + } + case *packet.MobArmourEquipment: + pks[pkIndex] = &legacypacket.MobArmourEquipment{ + EntityRuntimeID: pk.EntityRuntimeID, + Helmet: pk.Helmet, + Chestplate: pk.Chestplate, + Leggings: pk.Leggings, + Boots: pk.Boots, + Body: pk.Body, + } + case *packet.PlayerArmourDamage: + pks[pkIndex] = &legacypacket.PlayerArmourDamage{ + Bitset: pk.Bitset, + HelmetDamage: pk.HelmetDamage, + ChestplateDamage: pk.ChestplateDamage, + LeggingsDamage: pk.LeggingsDamage, + BootsDamage: pk.BootsDamage, + BodyDamage: pk.BodyDamage, + } + case *packet.SetTitle: + pks[pkIndex] = &legacypacket.SetTitle{ + ActionType: pk.ActionType, + Text: pk.Text, + FadeInDuration: pk.FadeInDuration, + RemainDuration: pk.RemainDuration, + FadeOutDuration: pk.FadeOutDuration, + XUID: pk.XUID, + PlatformOnlineID: pk.PlatformOnlineID, + FilteredMessage: pk.FilteredMessage, + } + case *packet.StopSound: + pks[pkIndex] = &legacypacket.StopSound{ + SoundName: pk.SoundName, + StopAll: pk.StopAll, + StopMusicLegacy: pk.StopMusicLegacy, + } + case *packet.InventoryTransaction: + trData := pk.TransactionData + if x, ok := trData.(*protocol.UseItemTransactionData); ok { + trData = (&proto.UseItemTransactionData{}).FromLatest(x) + } + pks[pkIndex] = &legacypacket.InventoryTransaction{ + LegacyRequestID: pk.LegacyRequestID, + LegacySetItemSlots: pk.LegacySetItemSlots, + Actions: pk.Actions, + TransactionData: trData, + } } } @@ -372,6 +503,137 @@ func (p *Protocol) upgradePackets(pks []packet.Packet, conn *minecraft.Conn) []p Port: pk.Port, ReloadWorld: pk.ReloadWorld, } + case *legacypacket.AddActor: + links := make([]protocol.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = l.ToLatest() + } + pks[pkIndex] = &packet.AddActor{ + EntityUniqueID: pk.EntityUniqueID, + EntityRuntimeID: pk.EntityRuntimeID, + EntityType: pk.EntityType, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + BodyYaw: pk.BodyYaw, + Attributes: pk.Attributes, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + EntityLinks: links, + } + case *legacypacket.AddPlayer: + links := make([]protocol.EntityLink, len(pk.EntityLinks)) + for i, l := range pk.EntityLinks { + links[i] = l.ToLatest() + } + pks[pkIndex] = &packet.AddPlayer{ + UUID: pk.UUID, + Username: pk.Username, + EntityRuntimeID: pk.EntityRuntimeID, + PlatformChatID: pk.PlatformChatID, + Position: pk.Position, + Velocity: pk.Velocity, + Pitch: pk.Pitch, + Yaw: pk.Yaw, + HeadYaw: pk.HeadYaw, + HeldItem: pk.HeldItem, + GameType: pk.GameType, + EntityMetadata: pk.EntityMetadata, + EntityProperties: pk.EntityProperties, + AbilityData: pk.AbilityData, + EntityLinks: links, + DeviceID: pk.DeviceID, + BuildPlatform: pk.BuildPlatform, + } + case *legacypacket.SetActorLink: + pks[pkIndex] = &packet.SetActorLink{ + EntityLink: pk.EntityLink.ToLatest(), + } + case *legacypacket.CameraInstruction: + pks[pkIndex] = &packet.CameraInstruction{ + Set: pk.Set, + Clear: pk.Clear, + Fade: pk.Fade, + Target: pk.Target, + RemoveTarget: pk.RemoveTarget, + } + case *legacypacket.ChangeDimension: + pks[pkIndex] = &packet.ChangeDimension{ + Dimension: pk.Dimension, + Position: pk.Position, + Respawn: pk.Respawn, + LoadingScreenID: pk.LoadingScreenID, + } + case *legacypacket.CorrectPlayerMovePrediction: + pks[pkIndex] = &packet.CorrectPlayerMovePrediction{ + PredictionType: pk.PredictionType, + Position: pk.Position, + Delta: pk.Delta, + Rotation: pk.Rotation, + VehicleAngularVelocity: pk.VehicleAngularVelocity, + OnGround: pk.OnGround, + Tick: pk.Tick, + } + case *legacypacket.Disconnect: + pks[pkIndex] = &packet.Disconnect{ + Reason: pk.Reason, + HideDisconnectionScreen: pk.HideDisconnectionScreen, + Message: pk.Message, + FilteredMessage: pk.FilteredMessage, + } + case *legacypacket.EditorNetwork: + pks[pkIndex] = &packet.EditorNetwork{ + RouteToManager: pk.RouteToManager, + Payload: pk.Payload, + } + case *legacypacket.MobArmourEquipment: + pks[pkIndex] = &packet.MobArmourEquipment{ + EntityRuntimeID: pk.EntityRuntimeID, + Helmet: pk.Helmet, + Chestplate: pk.Chestplate, + Leggings: pk.Leggings, + Boots: pk.Boots, + Body: pk.Body, + } + case *legacypacket.PlayerArmourDamage: + pks[pkIndex] = &packet.PlayerArmourDamage{ + Bitset: pk.Bitset, + HelmetDamage: pk.HelmetDamage, + ChestplateDamage: pk.ChestplateDamage, + LeggingsDamage: pk.LeggingsDamage, + BootsDamage: pk.BootsDamage, + BodyDamage: pk.BodyDamage, + } + case *legacypacket.SetTitle: + pks[pkIndex] = &packet.SetTitle{ + ActionType: pk.ActionType, + Text: pk.Text, + FadeInDuration: pk.FadeInDuration, + RemainDuration: pk.RemainDuration, + FadeOutDuration: pk.FadeOutDuration, + XUID: pk.XUID, + PlatformOnlineID: pk.PlatformOnlineID, + FilteredMessage: pk.FilteredMessage, + } + case *legacypacket.StopSound: + pks[pkIndex] = &packet.StopSound{ + SoundName: pk.SoundName, + StopAll: pk.StopAll, + StopMusicLegacy: pk.StopMusicLegacy, + } + case *legacypacket.InventoryTransaction: + trData := pk.TransactionData + if x, ok := trData.(*proto.UseItemTransactionData); ok { + trData = x.ToLatest() + } + pks[pkIndex] = &packet.InventoryTransaction{ + LegacyRequestID: pk.LegacyRequestID, + LegacySetItemSlots: pk.LegacySetItemSlots, + Actions: pk.Actions, + TransactionData: trData, + } } } return pks diff --git a/legacyver/v685.go b/legacyver/v685.go new file mode 100644 index 0000000..ae901bb --- /dev/null +++ b/legacyver/v685.go @@ -0,0 +1,28 @@ +package legacyver + +import ( + _ "embed" + "github.com/akmalfairuz/legacy-version/internal/chunk" + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/akmalfairuz/legacy-version/mapping" +) + +const ( + // ItemVersion685 ... + ItemVersion685 = 191 + // BlockVersion685 ... + BlockVersion685 int32 = (1 << 24) | (21 << 16) | (0 << 8) +) + +// New685 uses same data as 686 +func New685(direct bool) *Protocol { + itemMapping := mapping.NewItemMapping(itemRuntimeIDData686, requiredItemList686, ItemVersion685, false) + blockMapping := mapping.NewBlockMapping(blockStateData686) + + return &Protocol{ + ver: "1.21.0", + id: proto.ID685, + blockTranslator: NewBlockTranslator(blockMapping, latestBlockMapping, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion685), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion685), false), + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest, blockMapping, blockMappingLatest), + } +} diff --git a/legacyver/v686.go b/legacyver/v686.go new file mode 100644 index 0000000..0970632 --- /dev/null +++ b/legacyver/v686.go @@ -0,0 +1,36 @@ +package legacyver + +import ( + _ "embed" + "github.com/akmalfairuz/legacy-version/internal/chunk" + "github.com/akmalfairuz/legacy-version/legacyver/proto" + "github.com/akmalfairuz/legacy-version/mapping" +) + +const ( + // ItemVersion686 ... + ItemVersion686 = 191 + // BlockVersion686 ... + BlockVersion686 int32 = (1 << 24) | (21 << 16) | (2 << 8) +) + +var ( + //go:embed data/item_runtime_ids_686.nbt + itemRuntimeIDData686 []byte + //go:embed data/required_item_list_686.json + requiredItemList686 []byte + //go:embed data/block_states_686.nbt + blockStateData686 []byte +) + +func New686(direct bool) *Protocol { + itemMapping := mapping.NewItemMapping(itemRuntimeIDData686, requiredItemList686, ItemVersion686, false) + blockMapping := mapping.NewBlockMapping(blockStateData686) + + return &Protocol{ + ver: "1.21.2", + id: proto.ID686, + blockTranslator: NewBlockTranslator(blockMapping, latestBlockMapping, chunk.NewNetworkPersistentEncoding(blockMapping, BlockVersion686), chunk.NewBlockPaletteEncoding(blockMapping, BlockVersion686), false), + itemTranslator: NewItemTranslator(itemMapping, itemMappingLatest, blockMapping, blockMappingLatest), + } +} diff --git a/main.go b/main.go index ab714ec..4d87d92 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,10 @@ func main() { StatusProvider: p, AcceptedProtocols: []minecraft.Protocol{ legacyver.New748(false), + legacyver.New729(false), + legacyver.New712(false), + legacyver.New686(false), + legacyver.New685(false), }, }.Listen("raknet", config.Connection.LocalAddress) if err != nil {