From 6ca69ba97d85204e7dcff15a9d3b5f3564cce98f Mon Sep 17 00:00:00 2001 From: unilock Date: Fri, 19 Jul 2024 17:51:11 -0400 Subject: [PATCH 1/4] Port to 1.21 Signed-off-by: unilock --- .github/workflows/build.yml | 10 +++--- .github/workflows/release.yml | 8 ++--- .gitignore | 2 ++ build.gradle | 33 ++++++++---------- gradle.properties | 8 ++--- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 7 ++-- gradlew.bat | 22 ++++++------ .../pb4/ansharpatch/AnsharPolymerPatch.java | 7 ++-- .../mixin/DisableComponentSyncMixin.java | 2 +- .../mixin/EntityStatusS2CPacketAccessor.java | 8 +---- .../FileResourcePackProviderAccessor.java | 1 - .../mixin/ModRegistriationMixin.java | 5 +-- .../mixin/PlayerTransportComponentMixin.java | 13 ++++--- .../mixin/ResourcePackManagerMixin.java | 3 +- .../mixin/ServerPlayerEntityMixin.java | 2 -- .../mixin/TransportEffectsMixin.java | 6 ++-- .../ansharpatch/pack/LangPackProvider.java | 28 ++++++++------- .../anshar-polymer-patch.mixins.json | 2 +- src/main/resources/fabric.mod.json | 4 +-- 21 files changed, 86 insertions(+), 87 deletions(-) mode change 100644 => 100755 gradlew diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49512e9..6b45ebf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,16 +15,16 @@ jobs: matrix: # Use these Java versions java: [ - 17 # Latest version + 21 # Latest version ] # and run on both Linux and Windows os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: setup jdk ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} - name: make gradle wrapper executable @@ -33,8 +33,8 @@ jobs: - name: build run: ./gradlew build - name: capture build artifacts - if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from LTS java on one OS - uses: actions/upload-artifact@v2 + if: ${{ runner.os == 'Linux' && matrix.java == '21' }} # Only upload artifacts built from LTS java on one OS + uses: actions/upload-artifact@v4 with: name: Artifacts path: build/libs/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8efd829..99d5011 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/cache@v2 + - uses: actions/cache@v4 with: path: | ~/.gradle/loom-cache @@ -20,11 +20,11 @@ jobs: key: gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | gradle- - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/.gitignore b/.gitignore index c476faf..2439444 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +libs/ + # gradle .gradle/ diff --git a/build.gradle b/build.gradle index a6dbc93..8e2639d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.5-SNAPSHOT' + id 'fabric-loom' version '1.7-SNAPSHOT' id 'maven-publish' id "com.modrinth.minotaur" version "2.+" } @@ -38,20 +38,17 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "maven.modrinth:anshar:0.0.15" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-base:5.4.0" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-block:5.4.0" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-level:5.4.0" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-entity:5.4.0" - modImplementation "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:20.4.2" - - modImplementation include('eu.pb4:polymer-virtual-entity:0.7.6+1.20.4') - modImplementation include("xyz.nucleoid:server-translations-api:2.2.0+1.20.3-rc1") - - // Uncomment the following line to enable the deprecated Fabric API modules. - // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time. - - // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}" + //modImplementation "maven.modrinth:anshar:0.0.15" + modImplementation files("libs/anshar-0.0.15.jar") + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:6.1.0" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:6.1.0" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-level:6.1.0" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-entity:6.1.0" + modImplementation "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:21.0.5" + + modImplementation include("eu.pb4:polymer-reg-sync-manipulator:0.9.6+1.21") + modImplementation include("eu.pb4:polymer-virtual-entity:0.9.6+1.21") + modImplementation include("xyz.nucleoid:server-translations-api:2.3.1+1.21-pre2") } processResources { @@ -63,7 +60,7 @@ processResources { } tasks.withType(JavaCompile).configureEach { - it.options.release = 17 + it.options.release = 21 } java { @@ -72,8 +69,8 @@ java { // If you remove this line, sources will not be generated. withSourcesJar() - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } jar { diff --git a/gradle.properties b/gradle.properties index aa3ff5d..5c2fd28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,9 +4,9 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.20.4 -yarn_mappings=1.20.4+build.3 -loader_version=0.15.6 +minecraft_version=1.21 +yarn_mappings=1.21+build.9 +loader_version=0.16.0 # Mod Properties mod_version=0.0.15.1 @@ -14,4 +14,4 @@ maven_group=eu.pb4.ansharpatch archives_base_name=anshar-polymer-patch # Dependencies -fabric_version=0.96.1+1.20.4 \ No newline at end of file +fabric_version=0.100.7+1.21 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 34463 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 SXRcJ{65?fGI57uQ5&!`B?F@7P delta 34554 zcmX7vV`H6d(}mmEwr$(CZQE$vU^m*aZQE(=WXEZ2+l}qF_w)XN>&rEBu9;)4xt<3b zo(HR^Mh47P)@z^^pH!4#b(O8!;$>N+S+v5K5f8RrQ+Qv0_oH#e!pI2>yt4ij>fI9l zW&-hsVAQg%dpn3NRy$kb_vbM2sr`>bZ48b35m{D=OqX;p8A${^Dp|W&J5mXvUl#_I zN!~GCBUzj~C%K?<7+UZ_q|L)EGG#_*2Zzko-&Kck)Qd2%CpS3{P1co1?$|Sj1?E;PO z7alI9$X(MDly9AIEZ-vDLhpAKd1x4U#w$OvBtaA{fW9)iD#|AkMrsSaNz(69;h1iM1#_ z?u?O_aKa>vk=j;AR&*V-p3SY`CI}Uo%eRO(Dr-Te<99WQhi>y&l%UiS%W2m(d#woD zW?alFl75!1NiUzVqgqY98fSQNjhX3uZ&orB08Y*DFD;sjIddWoJF;S_@{Lx#SQk+9 zvSQ-620z0D7cy8-u_7u?PqYt?R0m2k%PWj%V(L|MCO(@3%l&pzEy7ijNv(VXU9byn z@6=4zL|qk*7!@QWd9imT9i%y}1#6+%w=s%WmsHbw@{UVc^?nL*GsnACaLnTbr9A>B zK)H-$tB`>jt9LSwaY+4!F1q(YO!E7@?SX3X-Ug4r($QrmJnM8m#;#LN`kE>?<{vbCZbhKOrMpux zTU=02hy${;n&ikcP8PqufhT9nJU>s;dyl;&~|Cs+o{9pCu{cRF+0{iyuH~6=tIZXVd zR~pJBC3Hf-g%Y|bhTuGyd~3-sm}kaX5=T?p$V?48h4{h2;_u{b}8s~Jar{39PnL7DsXpxcX#3zx@f9K zkkrw9s2*>)&=fLY{=xeIYVICff2Id5cc*~l7ztSsU@xuXYdV1(lLGZ5)?mXyIDf1- zA7j3P{C5s?$Y-kg60&XML*y93zrir8CNq*EMx)Kw)XA(N({9t-XAdX;rjxk`OF%4-0x?ne@LlBQMJe5+$Ir{Oj`@#qe+_-z!g5qQ2SxKQy1ex_x^Huj%u+S@EfEPP-70KeL@7@PBfadCUBt%`huTknOCj{ z;v?wZ2&wsL@-iBa(iFd)7duJTY8z-q5^HR-R9d*ex2m^A-~uCvz9B-1C$2xXL#>ow z!O<5&jhbM&@m=l_aW3F>vjJyy27gY}!9PSU3kITbrbs#Gm0gD?~Tub8ZFFK$X?pdv-%EeopaGB#$rDQHELW!8bVt`%?&>0 zrZUQ0!yP(uzVK?jWJ8^n915hO$v1SLV_&$-2y(iDIg}GDFRo!JzQF#gJoWu^UW0#? z*OC-SPMEY!LYcIZO95!sv{#-t!3Z!CfomqgzFJld>~CTFKGcr^sUai5s-y^vI5K={ z)cmQthQuKS07e8nLfaIYQ5f}PJQqcmokx?%yzFH*`%k}RyXCt1Chfv5KAeMWbq^2MNft;@`hMyhWg50(!jdAn;Jyx4Yt)^^DVCSu?xRu^$*&&=O6#JVShU_N3?D)|$5pyP8A!f)`| z>t0k&S66T*es5(_cs>0F=twYJUrQMqYa2HQvy)d+XW&rai?m;8nW9tL9Ivp9qi2-` zOQM<}D*g`28wJ54H~1U!+)vQh)(cpuf^&8uteU$G{9BUhOL| zBX{5E1**;hlc0ZAi(r@)IK{Y*ro_UL8Ztf8n{Xnwn=s=qH;fxkK+uL zY)0pvf6-iHfX+{F8&6LzG;&d%^5g`_&GEEx0GU=cJM*}RecV-AqHSK@{TMir1jaFf&R{@?|ieOUnmb?lQxCN!GnAqcii9$ z{a!Y{Vfz)xD!m2VfPH=`bk5m6dG{LfgtA4ITT?Sckn<92rt@pG+sk>3UhTQx9ywF3 z=$|U(bN<=6-B4+UbYWxfQUOe8cmEDY3QL$;mOw&X2;q9x9qNz3J97)3^jb zdlzkDYLKm^5?3IV>t3fdWwNpq3qY;hsj=pk9;P!wVmjP|6Dw^ez7_&DH9X33$T=Q{>Nl zv*a*QMM1-2XQ)O=3n@X+RO~S`N13QM81^ZzljPJIFBh%x<~No?@z_&LAl)ap!AflS zb{yFXU(Uw(dw%NR_l7%eN2VVX;^Ln{I1G+yPQr1AY+0MapBnJ3k1>Zdrw^3aUig*! z?xQe8C0LW;EDY(qe_P!Z#Q^jP3u$Z3hQpy^w7?jI;~XTz0ju$DQNc4LUyX}+S5zh> zGkB%~XU+L?3pw&j!i|x6C+RyP+_XYNm9`rtHpqxvoCdV_MXg847oHhYJqO+{t!xxdbsw4Ugn($Cwkm^+36&goy$vkaFs zrH6F29eMPXyoBha7X^b+N*a!>VZ<&Gf3eeE+Bgz7PB-6X7 z_%2M~{sTwC^iQVjH9#fVa3IO6E4b*S%M;#WhHa^L+=DP%arD_`eW5G0<9Tk=Ci?P@ z6tJXhej{ZWF=idj32x7dp{zmQY;;D2*11&-(~wifGXLmD6C-XR=K3c>S^_+x!3OuB z%D&!EOk;V4Sq6eQcE{UEDsPMtED*;qgcJU^UwLwjE-Ww54d73fQ`9Sv%^H>juEKmxN+*aD=0Q+ZFH1_J(*$~9&JyUJ6!>(Nj zi3Z6zWC%Yz0ZjX>thi~rH+lqv<9nkI3?Ghn7@!u3Ef){G(0Pvwnxc&(YeC=Kg2-7z zr>a^@b_QClXs?Obplq@Lq-l5>W);Y^JbCYk^n8G`8PzCH^rnY5Zk-AN6|7Pn=oF(H zxE#8LkI;;}K7I^UK55Z)c=zn7OX_XVgFlEGSO}~H^y|wd7piw*b1$kA!0*X*DQ~O` z*vFvc5Jy7(fFMRq>XA8Tq`E>EF35{?(_;yAdbO8rrmrlb&LceV%;U3haVV}Koh9C| zTZnR0a(*yN^Hp9u*h+eAdn)d}vPCo3k?GCz1w>OOeme(Mbo*A7)*nEmmUt?eN_vA; z=~2}K_}BtDXJM-y5fn^v>QQo+%*FdZQFNz^j&rYhmZHgDA-TH47#Wjn_@iH4?6R{J z%+C8LYIy>{3~A@|y4kN8YZZp72F8F@dOZWp>N0-DyVb4UQd_t^`P)zsCoygL_>>x| z2Hyu7;n(4G&?wCB4YVUIVg0K!CALjRsb}&4aLS|}0t`C}orYqhFe7N~h9XQ_bIW*f zGlDCIE`&wwyFX1U>}g#P0xRRn2q9%FPRfm{-M7;}6cS(V6;kn@6!$y06lO>8AE_!O z{|W{HEAbI0eD$z9tQvWth7y>qpTKQ0$EDsJkQxAaV2+gE28Al8W%t`Pbh zPl#%_S@a^6Y;lH6BfUfZNRKwS#x_keQ`;Rjg@qj zZRwQXZd-rWngbYC}r6X)VCJ-=D54A+81%(L*8?+&r7(wOxDSNn!t(U}!;5|sjq zc5yF5$V!;%C#T+T3*AD+A({T)#p$H_<$nDd#M)KOLbd*KoW~9E19BBd-UwBX1<0h9 z8lNI&7Z_r4bx;`%5&;ky+y7PD9F^;Qk{`J@z!jJKyJ|s@lY^y!r9p^75D)_TJ6S*T zLA7AA*m}Y|5~)-`cyB+lUE9CS_`iB;MM&0fX**f;$n($fQ1_Zo=u>|n~r$HvkOUK(gv_L&@DE0b4#ya{HN)8bNQMl9hCva zi~j0v&plRsp?_zR zA}uI4n;^_Ko5`N-HCw_1BMLd#OAmmIY#ol4M^UjLL-UAat+xA+zxrFqKc@V5Zqan_ z+LoVX-Ub2mT7Dk_ z<+_3?XWBEM84@J_F}FDe-hl@}x@v-s1AR{_YD!_fMgagH6s9uyi6pW3gdhauG>+H? zi<5^{dp*5-9v`|m*ceT&`Hqv77oBQ+Da!=?dDO&9jo;=JkzrQKx^o$RqAgzL{ zjK@n)JW~lzxB>(o(21ibI}i|r3e;17zTjdEl5c`Cn-KAlR7EPp84M@!8~CywES-`mxKJ@Dsf6B18_!XMIq$Q3rTDeIgJ3X zB1)voa#V{iY^ju>*Cdg&UCbx?d3UMArPRHZauE}c@Fdk;z85OcA&Th>ZN%}=VU%3b9={Q(@M4QaeuGE(BbZ{U z?WPDG+sjJSz1OYFpdImKYHUa@ELn%n&PR9&I7B$<-c3e|{tPH*u@hs)Ci>Z@5$M?lP(#d#QIz}~()P7mt`<2PT4oHH}R&#dIx4uq943D8gVbaa2&FygrSk3*whGr~Jn zR4QnS@83UZ_BUGw;?@T zo5jA#potERcBv+dd8V$xTh)COur`TQ^^Yb&cdBcesjHlA3O8SBeKrVj!-D3+_p6%P zP@e{|^-G-C(}g+=bAuAy8)wcS{$XB?I=|r=&=TvbqeyXiuG43RR>R72Ry7d6RS;n^ zO5J-QIc@)sz_l6%Lg5zA8cgNK^GK_b-Z+M{RLYk5=O|6c%!1u6YMm3jJg{TfS*L%2 zA<*7$@wgJ(M*gyTzz8+7{iRP_e~(CCbGB}FN-#`&1ntct@`5gB-u6oUp3#QDxyF8v zOjxr}pS{5RpK1l7+l(bC)0>M;%7L?@6t}S&a zx0gP8^sXi(g2_g8+8-1~hKO;9Nn%_S%9djd*;nCLadHpVx(S0tixw2{Q}vOPCWvZg zjYc6LQ~nIZ*b0m_uN~l{&2df2*ZmBU8dv`#o+^5p>D5l%9@(Y-g%`|$%nQ|SSRm0c zLZV)45DS8d#v(z6gj&6|ay@MP23leodS8-GWIMH8_YCScX#Xr)mbuvXqSHo*)cY9g z#Ea+NvHIA)@`L+)T|f$Etx;-vrE3;Gk^O@IN@1{lpg&XzU5Eh3!w;6l=Q$k|%7nj^ z|HGu}c59-Ilzu^w<93il$cRf@C(4Cr2S!!E&7#)GgUH@py?O;Vl&joXrep=2A|3Vn zH+e$Ctmdy3B^fh%12D$nQk^j|v=>_3JAdKPt2YVusbNW&CL?M*?`K1mK*!&-9Ecp~>V1w{EK(429OT>DJAV21fG z=XP=%m+0vV4LdIi#(~XpaUY$~fQ=xA#5?V%xGRr_|5WWV=uoG_Z&{fae)`2~u{6-p zG>E>8j({w7njU-5Lai|2HhDPntQ(X@yB z9l?NGoKB5N98fWrkdN3g8ox7Vic|gfTF~jIfXkm|9Yuu-p>v3d{5&hC+ZD%mh|_=* zD5v*u(SuLxzX~owH!mJQi%Z=ALvdjyt9U6baVY<88B>{HApAJ~>`buHVGQd%KUu(d z5#{NEKk6Vy08_8*E(?hqZe2L?P2$>!0~26N(rVzB9KbF&JQOIaU{SumX!TsYzR%wB z<5EgJXDJ=1L_SNCNZcBWBNeN+Y`)B%R(wEA?}Wi@mp(jcw9&^1EMSM58?68gwnXF` zzT0_7>)ep%6hid-*DZ42eU)tFcFz7@bo=<~CrLXpNDM}tv*-B(ZF`(9^RiM9W4xC%@ZHv=>w(&~$Wta%)Z;d!{J;e@z zX1Gkw^XrHOfYHR#hAU=G`v43E$Iq}*gwqm@-mPac0HOZ0 zVtfu7>CQYS_F@n6n#CGcC5R%4{+P4m7uVlg3axX}B(_kf((>W?EhIO&rQ{iUO$16X zv{Abj3ZApUrcar7Ck}B1%RvnR%uocMlKsRxV9Qqe^Y_5C$xQW@9QdCcF%W#!zj;!xWc+0#VQ*}u&rJ7)zc+{vpw+nV?{tdd&Xs`NV zKUp|dV98WbWl*_MoyzM0xv8tTNJChwifP!9WM^GD|Mkc75$F;j$K%Y8K@7?uJjq-w zz*|>EH5jH&oTKlIzueAN2926Uo1OryC|CmkyoQZABt#FtHz)QmQvSX35o`f z<^*5XXxexj+Q-a#2h4(?_*|!5Pjph@?Na8Z>K%AAjNr3T!7RN;7c)1SqAJfHY|xAV z1f;p%lSdE8I}E4~tRH(l*rK?OZ>mB4C{3e%E-bUng2ymerg8?M$rXC!D?3O}_mka? zm*Y~JMu+_F7O4T;#nFv)?Ru6 z92r|old*4ZB$*6M40B;V&2w->#>4DEu0;#vHSgXdEzm{+VS48 z7U1tVn#AnQ3z#gP26$!dmS5&JsXsrR>~rWA}%qd{92+j zu+wYAqrJYOA%WC9nZ>BKH&;9vMSW_59z5LtzS4Q@o5vcrWjg+28#&$*8SMYP z!l5=|p@x6YnmNq>23sQ(^du5K)TB&K8t{P`@T4J5cEFL@qwtsCmn~p>>*b=37y!kB zn6x{#KjM{S9O_otGQub*K)iIjtE2NfiV~zD2x{4r)IUD(Y8%r`n;#)ujIrl8Sa+L{ z>ixGoZJ1K@;wTUbRRFgnltN_U*^EOJS zRo4Y+S`cP}e-zNtdl^S5#%oN#HLjmq$W^(Y6=5tM#RBK-M14RO7X(8Gliy3+&9fO; zXn{60%0sWh1_g1Z2r0MuGwSGUE;l4TI*M!$5dm&v9pO7@KlW@j_QboeDd1k9!7S)jIwBza-V#1)(7ht|sjY}a19sO!T z2VEW7nB0!zP=Sx17-6S$r=A)MZikCjlQHE)%_Ka|OY4+jgGOw=I3CM`3ui^=o0p7u z?xujpg#dRVZCg|{%!^DvoR*~;QBH8ia6%4pOh<#t+e_u!8gjuk_Aic=|*H24Yq~Wup1dTRQs0nlZOy+30f16;f7EYh*^*i9hTZ`h`015%{i|4 z?$7qC3&kt#(jI#<76Biz=bl=k=&qyaH>foM#zA7}N`Ji~)-f-t&tR4^do)-5t?Hz_Q+X~S2bZx{t+MEjwy3kGfbv(ij^@;=?H_^FIIu*HP_7mpV)NS{MY-Rr7&rvWo@Wd~{Lt!8|66rq`GdGu% z@<(<7bYcZKCt%_RmTpAjx=TNvdh+ZiLkMN+hT;=tC?%vQQGc7WrCPIYZwYTW`;x|N zrlEz1yf95FiloUU^(onr3A3>+96;;6aL?($@!JwiQ2hO|^i)b4pCJ7-y&a~B#J`#FO!3uBp{5GLQfhOAOMUV7$0|d$=_y&jl>va$3u-H z_+H*|UXBPLe%N2Ukwu1*)kt!$Y>(IH3`YbEt; znb1uB*{UgwG{pQnh>h@vyCE!6B~!k}NxEai#iY{$!_w54s5!6jG9%pr=S~3Km^EEA z)sCnnau+ZY)(}IK#(3jGGADw8V7#v~<&y5cF=5_Ypkrs3&7{}%(4KM7) zuSHVqo~g#1kzNwXc39%hL8atpa1Wd#V^uL=W^&E)fvGivt)B!M)?)Y#Ze&zU6O_I?1wj)*M;b*dE zqlcwgX#eVuZj2GKgBu@QB(#LHMd`qk<08i$hG1@g1;zD*#(9PHjVWl*5!;ER{Q#A9 zyQ%fu<$U?dOW=&_#~{nrq{RRyD8upRi}c-m!n)DZw9P>WGs>o1vefI}ujt_`O@l#Z z%xnOt4&e}LlM1-0*dd?|EvrAO-$fX8i{aTP^2wsmSDd!Xc9DxJB=x1}6|yM~QQPbl z0xrJcQNtWHgt*MdGmtj%x6SWYd?uGnrx4{m{6A9bYx`m z$*UAs@9?3s;@Jl19%$!3TxPlCkawEk12FADYJClt0N@O@Pxxhj+Kk(1jK~laR0*KGAc7%C4nI^v2NShTc4#?!p{0@p0T#HSIRndH;#Ts0YECtlSR}~{Uck+keoJq6iH)(Zc~C!fBe2~4(Wd> zR<4I1zMeW$<0xww(@09!l?;oDiq zk8qjS9Lxv$<5m#j(?4VLDgLz;8b$B%XO|9i7^1M;V{aGC#JT)c+L=BgCfO5k>CTlI zOlf~DzcopV29Dajzt*OcYvaUH{UJPaD$;spv%>{y8goE+bDD$~HQbON>W*~JD`;`- zZEcCPSdlCvANe z=?|+e{6AW$f(H;BND>uy1MvQ`pri>SafK5bK!YAE>0URAW9RS8#LWUHBOc&BNQ9T+ zJpg~Eky!u!9WBk)!$Z?!^3M~o_VPERYnk1NmzVYaGH;1h+;st==-;jzF~2LTn+x*k zvywHZg7~=aiJe=OhS@U>1fYGvT1+jsAaiaM;) zay2xsMKhO+FIeK?|K{G4SJOEt*eX?!>K8jpsZWW8c!X|JR#v(1+Ey5NM^TB1n|_40 z@Db2gH}PNT+3YEyqXP8U@)`E|Xat<{K5K;eK7O0yV72m|b!o43!e-!P>iW>7-9HN7 zmmc7)JX0^lPzF#>$#D~nU^3f!~Q zQWly&oZEb1847&czU;dg?=dS>z3lJkADL1innNtE(f?~OxM`%A_PBp?Lj;zDDomdw zoC=eKBnzA5DamDVIk!-AoSMv~QchAOt&5fk#G=s!$FD}9rL0yDjwDkw<9>|UUuyVm z&o7y|6Ut5WI0!G$M?NiMUy%;s3ugPKJU_+B!Z$eMFm}A**6Z8jHg)_qVmzG-uG7bj zfb6twRQ2wVgd)WY00}ux=jqy@YH4ldI*;T^2iAk+@0u`r_Fu(hmc3}!u-Pb>BDIf{ zCNDDv_Ko`U@})TZvuE=#74~E4SUh)<>8kxZ=7`E?#|c zdDKEoHxbEq;VVpkk^b&~>-y`uO~mX=X0bmP!=F1G1YiluyeEg!D*8Fq-h=NyE-2S;^F6j=QMtUzN4oPedvc*q(BCpbg~*As!D@U z3(sz|;Pe1hn08P_cDQ(klZ6 z;P`q(5_V?*kJYBBrA1^yDgJD|)X1FV_*~sO>?8Sy~I9WdK5K8bc7aeNC zDb{Fe>y3N^{mrD1+GyH{F?@9}YQ2Om3t`nt zQ(}MS8M?6Vk>B=*j*yibz6QCdR=ALgTUcKx61){O@1WkPp-v$$4}e#KgK`HG~2@#A?`BF8em`ah6+8hH-DNA2>@02WWk9(fzhL_iz|~H~qEViQ(*{ zV;3tjb<%&r!whm6B`XtWmmrMWi=#ZO&`{h9`->HVxQ)^_oOS{W z!BzVRjdx5@pCXl#87ovlp<^QU;s<*d$)+|vI;Ai(!8Tjll^mi6!o~CpnlgZAK>6=V zm38^kT`D$_$v@UYeFyVhnsMZI1m`E&8<{V07>bBEI1=fg3cji*N?7pBzuamD`X|^^ zm!)2v?s|6T&H-_^y`KM&$!0!9tai9x&)5<(&sY6B`3D{$$KMAX3@&`SW;X0 zB-}obt^I;|#o_bR>eOv?P>=UC6CGTXIM+lSu?Uy+R9~O;q|c2+FafBP;E)B5M9HJgRIpF|GvRi*E+JTBI~T?T*X}r) zefUd*(+3n_YHZZS(g8)+7=pNV9QR^>Qs8t+iEpbJS!9;wio&9rn=19C0G#Ax zM-tWHp_YlJvXWsUqJUr^`OYFA4wkgL`cSOV;w4?tp>GT1jq}-qPoN zp&G}*;+#+Zh&vqDOp>gRL#^O7;s2yWqs+U4_+R4`{l9rEt-ud(kZ*JZm#0M{4K(OH zb<7kgkgbakPE=G&!#cNkvSgpU{KLkc6)dNU$}BQelv+t+gemD5;)F-0(%cjYUFcm{ zxaUt??ycI({X5Gkk@KIR$WCqy4!wkeO_j)?O7=lFL@zJDfz zrJJRDePaPzCAB)hPOL%05T5D*hq|L5-GG&s5sB97pCT23toUrTxRB{!lejfX_xg(y z;VQ+X91I;EUOB;=mTkswkW0~F$ zS%M}ATlKkIg??F?I|%gdYBhU(h$LqkhE!Xx$7kPS{2U4wLujF_4O+d8^ej{ zgSo(;vA)|(KT8R_n_aQ$YqDQaI9Stqi7u=+l~~*u^3-WsfA$=w=VX6H%gf!6X|O#X z*U6Wg#naq%yrf&|`*$O!?cS94GD zk}Gx%{UU!kx|HFb+{f(RA2h+t#A!32`fxL}QlXUM{QF3m&{=7+hz@aXMq*FirZk?W zoQ~ZCOx>S?o>3`+tC&N0x4R`%m)%O$b@BkW;6zE+aBzeYi47~78w$d~uypaV*p$kQ zJf34Q+pp~vg6)yeTT&qWbnR2|SifwK2gA7fzy#W(DyM^bdCjnee42Ws>5mM9W6_`j zC(|n5Fa&=MT$$@?p~)!IlLezYa}=Uw21^Fz-I#?_AOk(7Ttxm;#>RDD_9EloqhvrS z&7fpbd$q_e21Al+bcz|o{(^p}AG>jX0B}ZZRfzk$WLbNLC{y|lZ|&a(=bOE6Mxum{ zM=Nd+-I2A-N&2giWM2oAH`O&QecJn6%uYl0GWlpx&2*)BIfl3h&2E(>#ODt4oG}Dq z__73?sw2-TOWq@d&gmYKdh`a}-_6YQ5```}bEBEmWLj))O z?*eUM4tw0Cwrr+4Ml^9JkKW9e4|_^oal0*sS-u_Xovjo8RJ18x_m7v!j$eR@-{2(Y z?&K4ZR8^T{MGHL#C(+ZAs6&k}r07Xqo1WzaMLo9V;I<9a6jx2wH2qeU?kv25MJxoj zJKzX`Un|;_e&KY%R2jU~<5lm-`$EjIJLDP~11_5?&W#t3I{~+0Ze++pOh2B4c1Mde zSgj$ODQQm7gk&w{wwfE1_@V(g!C=2Hd%Gwj{{-_K4S|nZu+vk}@k(?&13iccsLkQo z_t8#Ah$HVB-MRyzpab*OHOp zl`$tEcUcF9_=3*qh8KTaW$znGztA7Obzb`QW5IQN+8XC=l%+$FVgZ|*XCU?G4w)}! zmEY+2!(!%R5;h`>W(ACqB|7`GTSp4{d)eEC8O)Mhsr$dQG}WVBk$aN1->sTSV7E)K zBqr;^#^bZJJX4E_{9gdPo8e?Ry>ZrE&qM)zF5z20DP0`)IIm_!vm&s2mzl z2;EPI{HgFH-Mp&fIL^6f74>19^>o^AOj`uyL0+Nb##Slvi9K4LQSs>f+$j?cn9Z__C zAkyZ9C;#uRi3cDYoTA>AT<|*pt{K70oZKG*S1F$r?KE=$4~W3!u53yUvh~(kMrClS zXC?Dmgv4iS`>~wBPJJFL_C8x2tEg*PCDX2=rHQ@z+Zs)Kkr;FYG`GnbUXqdipzvHE z1aZ>G6|e`}Q#)Kru0)(SZnUCN#dN2H zd1}r&xGsaAeEed9#?|0HzMGA7pl2=aehy_zsRV8RKV6+^I8woDd%4J8v9hs$x{ zl*V61wSumovRVWtetd1eJ%i^#z`_~~^B;aeuD`6LgHL66F0b^G5@om^&_3REtGmhz z%j^9{U`BH7-~P_>c_yu9sE+kk)|2`C)-ygYhR?g~gH`OK@JFAGg0O)ng-JzSZMjw< z2f&vA7@qAhrVyoz64A!JaTVa>jb5=I0cbRuTv;gMF@4bX3DVV#!VWZEo>PWHeMQtU!!7ptMzb{H ze`E4ZG!rr4A8>j2AK(A0Vh6mNY0|*1BbLhs4?>jmi6fRaQwed-Z?0d=eT@Hg zLS(%af5#q%h@txY2KaYmJBu>}ZESUv-G02~cJ-(ADz6u8rLVECbAR7+KV~a!DI83H zd!Z(Ekz%vjA-|%4-YpgfymMzxm_RjZg%ruo zT4^x)f*%Ufvg_n`&55cK;~QChP6~Fy_Z67HA`UtdW)@$Xk-2+|opk6A@y0~3Qb;V% z%+B@ArKl|Q^DJW&xuBZD#~SurH7XXf*uE0@|ccNd&MA%Ts*1 zg7TU!xY}~*AOY+tAnFR(Fu)e@^9V!Rm65$;G$-?6e%7w7p9WT098%-R?u#J+zLot@ z4H7R>G8;q~_^uxC_Z=-548YRA`r`CsPDL!^$v0Yy<^KSoKwiJaCt&dlW?p^7Y_<9c z3n#cMWFUe@W@4ffE`}pQduRZ)I5v`G8On2RI zL)V5k)PMBq(Zfb6Ruig;_SMwaM9t)2JfUafW-6F8V+PjKM#9iD1~v!uOfWiNL=R_j z$xKbCPfuiw`kKN1U{W6p#s!Vo+Suw#*7O24y`hNTmrEqDkQvZ}tMO{2`r|3XNXJwC zSUqB-GdK(D8yYTd*bs~vM{3@r5;JMtW-c8ywtvPG2Gepg-QU=s)?*2y@n~8f95m96 z+pO1p_FIP@Pbnlb&AnDXqBkb=RDa{H-fN9$Rv{OYoWwrU{J??m#C~^HFtMrjN~Spz zt1SsVlTk=x^7b3q-DxumB4DxAv}x1?YHb=BBbrOcvqOzjVK#ZlL$frhpxI1I&JL^4 zTz{rnIH(26vL$9Zf7%ffyC7agUX3bg9@D~^pcIOgp^SvS@0_fS0rHL9Zq*vjT4ZZ-;< zjl1>i0E~DMlLHLFe*&dK6lIzW57ySu#Tu=qwMh#+h*$yk2HIFb z>nT*!OJPT$OPLhmOCaK*%WUy42dzuvsd)CXDdLTLrH7iRS)E$Zzgab4TrcDG#Hg058>HuG9V=$qMph{<;l?`Ri zEyGDUBkrQzLi1NJtvoj(mN?yl$vw8i+u{fXdFV>oD0cQS`6mT>G!chOCzE!M}POG4yVkcsa=D@;o&t554oCp+<>_TZ~ZFu!frP4 zU=Fl`17;Hbhh*q72kj_XUp7O8XXeU24I1gAe!Z;8OmghWKbAdr6WwUEq^k(Y&_8z zj%SeljzOqyBkQ*T{RNL0@|%7B?116lab<@;U^MhM_=By8;asX*oe`l13GJ8z5* z5VjTi4+vl>1TM8OFqzvHGm)^9If&dr@6zaY`cEcbpgfH2v+vgE7J84UMd4{&7eL;p z(c9_$OzU1R7?w91eP-GY=k8o@VPB!Un6?GZ;t-tik9u# zvqoC)70K;GOln-bWzDpZYO;db3+qtNN9djk`Y?U8NTp<7p^qb*p}pudj%BUzM(7UH zy%qEc`XuT^%33b1Ck5~E(5L7=0rzR9`q$N${pil>S#W+o{57c$^%{6jXLl7mylgTC zJD;ToHF|(P$0P-VDu1113cl`fO??oskdG7^5dmB%MB4r5SOQ*GRGZ)={o>ds z>9kPUQ%r0Ab$o@MK{hL}EBvA<4GAv_oC7bVTzr|H)#yv~6@O3*T%M^d=yP+!DwVzl zmBv#szT%!L@ zp@s&_ia!GxNcwyFgCOxoHX+X@7dgvR{(Rc?n~*xScUt%qyo=g)w5da7a@kfkHC5f{IFx%*o4ng~rPm)5Yw; zw2^`5jQ4|6i@zwi9u9D=8;Zrap%z2I!`5JN3kOAh$h0K~vqK(kg#U3hW2TTZ@#_r_ zuYrSM;o@m|cf2&M;Y$Pr=7tL7cfFCjZdTPi91>|OQHV-$Uwc{<^Jl;4rh{n0WYMi;%o-qsd8G>t` zQ-2D8(zo(95gXe{3}cf6_?9yO@>*O2@DnMi0IM0|s|7 zttz7!JH98}Y&!xefmFwP>`Q>D`_oUYE!S7_mAp^my?hl~!ZN3Z&HjFI$bM0J_S;+@ z)c61&5|i&S#33B9Mvme=0gk(Yj(KKL8KhQ>V+m7_DV!+plI5r>jJ{+xCiSCc z`tY83(lA9*;dT!X@^x-D8ExhQ@OlJNOt(y3UP_9ldOS+k8hnRVig8sESest%o% z;j}Clsg_Ca5_>KG)G$OIMXfS(ocFQ<>%6$;u%x@EBc{_~MsPZjH3YcHB?RH<~ z;dk0a0@D>EH({DmGJ2n}HyvkMGJnIh%sA;g_+3K57^-Gv&8F^__Vz-f!0)!MQ5b`i zqoef_mEQ*sEWHiuFftjv-)N2Z8=|Bgx097+l$5w-TRn5KDo+Fae1PxP_%6mQq=HuS zP*%8{9H>3e?BNgbhlQLUK_uk{V@U3p*8>NdMN#@Fe@vi#yja%I#t$?$$AA0VQ(42x z0mDFwS%-M|lb{3O|He|F-NJ`0?$h{Q{SHul5z+L*m&!#!fJJqj;3jztr>O#Fy-E!z~0 zLOmUN3K~L8HkR|Nwiywi&40)E3vRgB<4otz96rleEBpjg`mCW*>Nn*WDNrlBS2nlV zdOxl4ll+uzZtGeG6`^DdE!@@cGyElu6#g>Yp&=1HtTN^eSMqQSqq&E_W@quQ!v*8$ z+|%d|%rshx=j?UN8s|+=?8>FG$a<4ngKuN*X)$w&m{snhX#>vXAAhv&&-}3>HGiL( z_9x8fVZXSs^sD>=(;RT!)SEFAxvXK^@SkiV<(^P-nfQ+mo2Io4{LcX;>*{6kT1 zf8-?bXHN4L2l2NaD^3zncNc1-nY1lw-EQ*FFcGJZs{9L$e=aJlCR8<`r&0!z{?fpt ztJbK!nz3wF0D;ur zV^Cy@9RmCxjK=X*#$+N#;gcRdLx}GuB`W$sS&0-$g7}56F@GLO#-t)SB+Mj^M7&p( z6cp|#ig#l@GT+ik-Xx2!!l_e8s;ehRK%E%3_0F#P1+Hc zYSW_5-U2TRC4ZkLEs)OhP@Dbhd?Cw$($5_;U|V4>EzzV(=>k+4Eezv|b9qyP_f% zJ<_EjASxvcKW!7qG9kWy8P-j=tyX_g&Hf!tUH*8gxIDQ$`d6;VtZYyv@r?#q71eqQ zuVwU8hJV-Mv?Dc1&FBmyML`_H0h2++J;ImVNPoF!}q{<%zspm zX8~m8`|*10*R2fZ&ze^H4}rQEqeM{`zr#4%AJ6!6_9qfm>cr6#TEf6N09|0P_S;v9 z5PmmirL$iSA{@-4#TOxVGx|!+=_0&Hxs(;xvNvL&VY_&!l9JH6|vKHhzEX6SO zrIYcL;g1S;8$`*n#4IE;{|-Iv?@OCWf7FZ_y^yVFseR%m<}9p51Z(??En=Zh=pMqj ze{7=8N(YOdYb_d`rseakM&DL5mx|f;i}F&b&b&8JY8k~4Uf_O$iai1BXmeU zNxJh9s*6M%Rncy_%IMBhysGXbnZ?!Xuz#8ntNV&8IjkHNE0L-p09L)>B;7blH;>WV zBO!T=Zixg>&~16TbA;YILdVDG1Cfw3=#xk2gAdWim_ja}>mfoTdz?@EoZ|Oqm>vV^ zkdmhp$NA$vr7ADPq{=ZG1+G9H8$Rw{GzH3e!l(4)>FGRuHRK#VbAKQ9 zzi#a}i2b>n^YpEC0Bo1` zLID4d1?(E8iZS|GWQ2ZxDhM<{hEz!HQ}gtz<1|mu62FVQ%?%c4hui|nZ9%=o=NzM# zB0hId)o(}WcX@g_Pk#}6PebTD{eS&9d5ePDY`pf24==BVoX&M>wd#YqUc2YDlRjs) zDqkZctyV2jL#jnqEg@?&^J)knJ~ada!)H#xPI@V`uZmNmGxAjcXcicGX7PKSPX<#g zkFwS|Mz@3W5w57p<$3lA_U3v1gte)?#MWM3nCC^2b?V(zDd>55ah{j%8-G6YoX--) zr#PxrA&nwmQ!ur){W+f;35p|ERz-!Lc=o;%TqhP9j#IY}4!Akwtcqei5^`BQtd?&Q zK4HJCl|M=ggxlfGk>~Yb22nFi#u#smczM$ZUwX>^d71e6Ah+!Ea@#1k^- zbokLQ!dK^6Kkj&9jH8iA{TMHcjBsp(`%m!UjxkOGJXn8%GqA)cAMF|8>&N(wkq$)O z7~cSr&bkqPb8v*;3iwFp34Vv5Pg}sSmv7DUZIN}#-NLbF`&`ww&VPmNynK6cPlHU# zFwOG09My_tnP3EDM)}S>zc-|M`Te8(!AQsrU*dc6{E0EX7fvLv!|SK2RWS6Kxy$qX zfaO~XUOx-Z5=Ya^J+_a96k$B|1fKvE=+#OBn$H<>55q^WVx(5L#`f>KZr zI>8T((-L7Jh(V!(nt%HQe?Ah@iqzabXIO}+6^X5^_qppP5js^$sPNM@PV)qRag3jg zgnbaxC)Y!tPv`krD+Nb7M37unh#gD59TthNj$>mx(wXOP+(oN{!k9D*k8fG|#6QN* zM+9ztkC(qA;*P&p#QXj!?&J_+?8o!?CrK~=^k#j%lS7J6d4G!b7FOpw-+ec2ALE}# ztl;`(JvjJPo_}k3(VrrnPtg*DIcU6szm@d#&7=IO+);m;_KZoDk%M7CROO}W4*3yU9C6flk4lU3(&7=xKPoN9$pNpl zDlau)w;~dDc%_TFz0zu|UxF0{E33L0Z=3ezrOQ4m^kyyZbkqTC%c@bSRj6zl^W1r= zsACw%D{Zxm^V7W4?v-{5E4xcnzA9MM);O9^>+wn*c7IOvO1mat#{t|k0PGYHUg?Te zBhsEzlQ^yi$5$3Po+8Or#dQlAm{o6SPc$)6{MSG`t;S{}Nwk|Bw4Y=$(D1~` zMMG$NZbZZLE;Ks#kVdGb^hxs2eKd>ir`hy1nnTagT-KhaQJDVV+HvfwRE0i9W8RS(D{ztwAe8~OMe_Gy1?;P@;lx^OC8^&8pq#gne3qD zvO+85Idq|1MJwe11>}0FmDkcLc|Fz1O;j&mMM3!xHONtFly9bsZp= z6aWB?DU;C^9FxIqIe*i8dz(GluG`YRvTlQ}ZQ8wBMi`H+11Xd;){T;FQf`ym_HIdT zxw%<4ULqnQiUNY#fhed{bPCKaEfg4_ZZJSmR31)Vg5U#DR8+vtbG{^9+GV)@e(AaA z`@Zu&-#O>ofAE2a0W1-#1$JC<#oFbUR(9&)Ek-<28LSLhbRSb2~R1VMjrsz%03% zbj)ad*oudfwr#|n`X(aNJEMjIl?b=$(fLs;tVcJPy=iF^TO^rj)iZvQKrx?*m$vcIFG^5a1P{u+&```@)4cGezkFUy zz(oF<;l(6O=C4@-?kc7$!yF9?`~n5!dh*|ts)a4%V@TF{bB$0iUtmJF;jGa)km+bm z&Jt!V^?%|x9Is&kssyGTX4&R&&aFzC(THIysMb)!;uT`os>h7+8l;aCvjFOtSv`50 zeGrcb1gefacqDB`6tP&0B`j?z8DD2@QPCivI#&9W7bmcQ8Y~x>mp6iAq)68VSs~6# zGeH?ij0XzQs=bD^bVyf2kC6uJu)YXwIG^r#mu^Or zwtsOB`9bfdlqt=ZFc%=i(l$_~$iq;0# zo#`-!DS0T2O;J6OAQ5AdRxXkX2DP1kIRVJqUWIC#Beg@3V)cqhED(^in`<%f%NlNF6p8k5w7f}}u^ z5$kofw-5#SIBTIi$!la_AGT@O3d;JTD6Oz~;#g9(aO3z|a49Zhd6#FSA-SxyZC$cg z@Cgl9avgB%k;u4kWQq{qs;lrRK6f?cz*t=rTto3N9fRCxQ4&oZqiu6$o%FaCpMNdJ zXK)=EbmYE*&r?!Re{D6kIbM7LrxfFQe36P{TrS**dAx8F`7vsBcN-*VM!q}LA~#9e z&A6qA9RFpqdNrpHrIkODEfszhU*$5=!DVNMfbXcB6x>FhA(39(&d0xouan2q2`PJF z$+#3?U)_N_Iq2V{;+>mMUVNLo!GC7lm96TTOi}P1s_KrlvaPAPIa?IJ%XR5)e2+Xz zGlJQ*eYMpWk6L=9DKmfwG~~HD$5KDPj~}pp_fR$`555d62BlN?n!g>VGn9BeK@e zWxskjn>ZPbvg?oJ34&}Ak7;-mKjI28x|^oS?Egf=9_*#$rK%KZp_$B!$Jv-YctXGv zj#>#?d6L`o9y~=!(qtv05r5or{9Szg{gkaeekuo)O+Te{%#%aekSTbEJd)76jP*8E znb}q23dMMD`~uHv_&I(#u7A;Huj5BH+Fx@{KPMpSRJ=gOk;w@w9wa4yldS-fa$S#Y z^`(cv-*UGwoJ>*o;$`;2OL&EJwi0!5nhjLEM$MLEZd+uSLuKcM&0B0 z+1`_`9Gr3_`Yi$1`nJ(NlCwvYf5e}P@CW>PY}b-}75s%1a;z4skALboP3MOd%H@$) zp}*p98s5RXWL}>ck63*P75^Yl(WvU^W}M3Cj9lBAdUU(ZxHxIV!|Ch&9{$Dj|0b_> zn(<7`RlF}S{V)|diid^KY3oBysUCU}s5nR!<%EU?8okLdZe)7gikqabyimd=2NL1t zQo8Xd1Ca1&_^+V(-hV?~-*&ic=bD-kev((HqKHpwbVrWZR)m*bpqtJaT)1g^YW9kW zVv;5%h{=@i*-O(L?@eZUcjnHCQfdRFdCm?^nmJ==&ITzlMU*qospO!lyhqYDP1i)3 z@QrCxq*zRM92Pl46Eo$sydbe4u8P^z3A*I2z=}Mnxbdj>W`8VWQqM2u5^qt-0+x@- zHM%2Yup$;vdCt6@(o5rK<@74?I$l(1;yAI8ngq=^G*u;g9j~aNB0{UR0@a6$NWyUZ z#x^6Ibodtf=~~6i1iu9nTvX`7iaHicj2)xZ=#!JISR{uBv6!aS!_wC#PH>XOr>8%D1|eI(Gogm5a)$j_o8sX^+C-p zv=ft!DSzlGMB1xEp-ps}PE2nd#LQp;kp(@2m>mih)~3+YK8RRQaW|@kjYR>;T`gDp zq16U_1u0zY^Q7SHK=Cjx3918VX8ej!P~Ate4!!MDM{s2*s14zh4>uOO8@=V;^5Q!& z$ETKimxO{7q|(Jc%|~CKZok?q1`fUA(}Jo`y?-B{6G(sDAkdGc{PiV)N5~~Xjr9Kt zJH)4Tl=ctdRx&f~ixj>wjBm9M9D0KED;&f?3OfTnWf=FeVuNJH0A6e_FDkqPdwt42 zJX$MHg@TG?r?7)l7-H|0pInr4lHx!P8Nr^=CZ>3lv>U>Y zhkvjyh5bP_g{OULP#Hig`>Dvs3wvrqSwobL(w~tb!}wJS&zHV9YE5=u?I=AU4SjWV zO9YjIMzy@iby29X=ytKFT-|Z-qHN^pH&Zg(nG=7i2(%pv7I0ike>aRbcj4_6{$Bde z6#mms5yO+xQcs}t1F}Z6j^Mwc!iVrqD1YShbcEcchuR9tglO|L7N$f&d0|J}kWf;h zm{KJrO8T*djc*+hWg#CeOdApvWc`SkN&7=$7P)ReIeIUue1&CVPEaj)2udhe+5W`X$bg@!MQ?OPnF&J6-okoFU`8T)QRCknthc6B1|0_*1TDCC-rX z7hEq%oFU_{xL%hyL&o29y(@8sj30EnCC-p=s)kKe88@Q>JiDAt)wLaNY+XbFz1BVS zL@dNLRAFy|io2*{eh7_dip6SpMK>mh7$&+JFv)c`CcD<5#I*sXt_xA-axlexD$3nw zVXAu#rn%Q+y88n7+?%8vx2)ps{{c`-2M9FbluW}5006p^;dxnq+e!m55QhI)wOUte zJ>7V>3ZA+y^#Dc18$lElK|$~`-JNcu*#pV8UWh)3Z{dXqUibh$lsH=z5gEwL{Q2fj zNZvnQ-vDf2PT=w3;k&^Ae^^@j$M1ODMq|d0-FZ_2|XiKHLhEB;^88I<+^6PSu7q?|oxD=%8&Ue1^o%27B&#!&!lh=u83+I?Fo;!DF z$CE8Xdghd2Wm~#iGQ%zHEg3sMe`e-%&$O*%-p(4BcZ{5&y9O3VbvKzAH8Q8%Lf&oZ z9@cZN(cUsPlFaL4NmFEG@6K-Cwq*#s&W_6d;X*El33pUaZpP5CMoh~v9Mc-X>}kVs zaTexxbZqU|k<1#WTb>FLGiif%!O0j8m^p)Kwe5^_jyQTYXLO!%^szC+f9dSETu;yC zg5+mfeo{ZJcjk0!r1QYgNh9M0sg9{GXOD~+4%3=cjr}RLxRWWAwa-{NThB7BtHrpx zybRXW#@S4+;F_nEUOkzN;kx^DOIN3K*4n&h!3_{scdu!g-Y%v`W4F-omO9m1Jg9r4 zJ+5oyhjQ57_Arw#*7k6if0oj6je^v`l>A?58l)zTR!~Ej!nCBG0<oPUP+Nxx!$(>=ko$io(N14La#|EhdE-=oTuIDNfJrbr3)T+^Xf4YmQS+N#8GuPQ? z=W@UlaOwsr##C?Q$Gq_r_Axb9PE?#ShXdo3(5Q{t!J5O29EKAbVr|D}-#bhl)G6n| zUQIJndK^br;)AqBqpjkw#iqO4bfARojE8AkNz3ifTF(Nu&9T(n0N5$F*+KWn{%)qF zvvmy8y-Y#V-6IzXf732%T}=1U{Y;NPs7xNsg2^$53UcY_##VP@G;14f)Uv&3#(fwb~OKgwcQ~c3ABsH``hMQBut0th^QhVpEHL-^bWxZ^lhtQ zj9%OJpr$^y4~h+Xy5kwnhRs1brqOZ1T-$7$SbAPkgC{Aa296(-lTI-0eQN~C@wy{d zoyJnM#xC4fe`i{W5@8OHR}x-dx&AP1tAUcYb|PRu_)t%B%eL(yf&{+ER1R_iIhUs1OZsGmziq=&(?k$+PtW<^X)#$tcrD2An z-|`GqF}@F`^X!L=v!y-r5IY^PKR`dI(f892Nx4RE;Ejgqhv|UC@Q+|hpkm>EYh!)$ zcb64`e~|amkBKhtLuFgoLksNufb4t*WyG^9x~_=TRQ1Q{L&E!EsT%Jrp!*5aMai(c z=_6u5^hq9U`q5HyewJw&u+uZ-+PQ*fNKFpYb0T3q{Ur0~!vbqFqgt(~JzOgQqQg3n zkiE0jYPHhnhHCQU_3`Mae%go*8HN@0^gKcve|hAL>5X=@T79-PY&!X!L1F`^r* zHxG{L2!z2xeq(gZv9Zw`k0Kh!<*ZV&NS2dDM|mB|3i$~-m@b0Xk<5fbkd-Y_-GOT5 zFonU?apmpNVaLuR$~~vxN|tj~Z`UCgi|($z%@HTp9c^`6txCK{Q+CNlrRnKBS?NQ& ze^qXQm}pPNgHPrygy^Txx6OF-P{H!dyn$}V7!$cc`k6TebXLNj(C7tv5rw?uUKHUP zq525ICa2ng=II(g8#*u1$Heg;57W=l&ueIxK7k-CSWlRU?K^7Lo|!x_s~5qJ&PU9# zQvY&AqpOk~f`;Wu9bt;hYDe~1g}mV?fAc|yNtzP=muJbVVhPeUU=~gOKHD+&m+#s2*K)+1CBJ974%so%*Jy3HzNWTt^5gPkZP{QifeO9B_f9SX6 zWOPw=`BSK}xa;qfV)qM3I29-K7KVo5d9q!qfY+= z?z-RuCP?3qcElbD(>Eoa{)zq>+4c|~l@iq<`qxT%Q$9L8>ey%WA%XY5LowKW{sP8e9jV>_n~qo~*gnHu*n%<7JA~&RICDgu;o;t?QVYd9(L!PI-dS%ggq9&d+y&sH zSryoqrsgK|(kwjrHtx~*e(uEv)0N)NaSCH7zhT~uOo^2}0g`{qiEt8ngb@e9DlbgK zl0S*ucdNf$Y}joKf9r*uR~a9ivmNL6^Ioyz0MpL@hoB(uL(QwSCV1(11-EY$7d2Gp zymzm7;{YGjct5`#nQXfEIHS8!bLQ3^As*D|O?nYJ5u$=Zd=#0?QBR}8c9_#r+t)MN zfrjebpqif$9|!8nEnRoiE4exv3-M#p-qvW2t0VexiDX{3@+VT%}0+Ra$dd!Ka?q z(z?xqH*%k(y;3l#N#nu6&8U;AKVZ+wa# z8n{M#(tN%9 zvvSp*zVO>1;x%OAdf4OmZigNp}k(KWD zCno8ge+|p&Q=#ra#4i>*liptUEHx%00bg@nk)E7@wdn)Rb&D>E*}syE_=|L|NZ*6~ z=dpj1p7w1IGzXH`pQnywb6{%&-8?r%?@4!K^N-@bizEK!n~L=QqY#g&4<0=qfJ45} zE^;oU_ZR6WE- z#SK`XnO4&_+-xn%v(PsDZkx8(Qg8%dulK=Tui?91+V3(td$HmJ-5yu|N`m}?xM_p$ zzO@P5X03QOo>;pDj-8^*7b)O->HH$-{suTNy;KG+nx(Rhx0j>i`D=7Fo!$pEi$(gR zf8g$h;O;y=evJW{&!qQ@WSBl#q~DmL&ne)1{sJwNOa1QAiJPCFpkwXHYxG6o{8Cyx zGf7{L1SaW^iu9Fke}jLHzdl0CD*k$X;^x9UjF!2gMx?;eQbq&IG~7wIoA%g+r& zsD^m$RTf&I=qidT+Cr_0#%Q~u_s}jyOZU)TMN@P@(L;1x(c^Ri)+N$uSkY0k6)n(v z6qR4$dp~_x(UM;@_ygF)>LTQhuT^Y_xuD7z2NUg6^w*cu`{U^=6cMB)PBeaflh243 ze@`_2n_~U%>6IHei{PI+WN*n<-$I0_6BhxXlDYUwdpxZ|c_2|_U+F|(yU4KQ2b;LA zBucsJ($Vrk?I)Tzgp;OtX^|T$I;`0*=0@gXpSY8|{oEZ;EUOR{;??e;xD^2TvUrr& z3EB}?@;@zc!FLvULlfV1qR8!6cvF$@e^$R;MegnnG{oTieMP=+yT86GRNtjV0__R~ zVMM4m#eGG7;37S~Qd=2n4nKXoE2MYfQ^&^&elTDE%ttA_Qfu}<{meyLm0T&4Mpx(x zr!cirEApX8u-(@j29QKTm(~@UxcS^bB-rhrAh%4ruhE<7CO$mLM{Xn{!AKx^e}x}z z;&;}6w@uRRP5&}0g@d1%2%RK{KxGFDW^?cAlt zLS>xcXOy0$xM&3W-wv!kMvFK_KF(mwDoZUQ-?sr!O9u!`Lm;-F4gdhY8;4O&V%U42cOzgT@++{5Rb_Y!~)Y_JT1+9)zb* zqnP-I58y)?&(IzX7bl6gWOQdQ<(RH>I^tfvvCW)~>#y zTcO`}J(;*+VECa;9FNE&852*oWNcV1vVZpD)Q|P`UFpTNqPHExmu^|J zwNdqq-%UM_193|l6&_OHxB*e*1`bCLDT>*Pb*8!6ELqrE-i8iy7Ij%u-2E|-0W*uxf<$W z`9N7d`evT{Ki4BcStVHJs&4Qp6v);2&~2rDlcKi@M}=#uL12{Myecx^iy{8c zVw`(}N3*!b4ak(=|HMS$2PVHlJ$X!Fx~nO4HM#P4Odcci4L6rhaQjTSgiAYJVW}(3 zcZ6dd;k|d|FB}wD<$jpIV3ES^cd=y*as#G1*to(L7Ee&T3=W)vrT%_}6Rcdu_!2Ox zdYK3HJOTg!9+QD19g|)V50gKZ2$Phk9FvcY6@RORP(={Ilb|T{zS&HZ zZ8w{+o7RKa2k|XD2_Ad^A4;5v9-M{w_q z=X}6rk(Ww~N);x^iv)>V)F>R%WhPu8Gn7lW${nB1g?2dLWg6t73{<@%IZZ~BaZFho z{msu;S`%=Y2!BRo(WJ^CT4hqAYqXBuA|4G-hEb5X+gsK4vi|+ax`Y)QE>yX5GbXw0?()rHg zp2v6Y?|;Ai6~Hta44Y4$EEhLYRc@>br(frOjAV;0o1acsC^@* zn3r)y+I>hF1TIxce;hk#yN!}<5g)5iP-2MryPTMe;_5#3Y?~{f39EjFts-NL=6`$fd!<&A)>c385EL}b_hc7TIt#4AVZQ2VNn8;C%V-97h_=;pxPGBN^ zxZEQv^u1TyF>`Dd|Y+WNVk^$vUz2S`^>>OG|rnzOP~h-%^w0;yXlW?LXSF zFAFN=d;B0nJdh6>c=m{s`j9&f&t2!$-EFF>xC?`>kKH9&>Z_j?I&y<d)Ov7vpfIa?C#9&uirm@0zd|~2z#gaHD7ORz-qEb_-YRO7fVmPlel~IFXuuP3)vCN9+M!jN)Dp22H6{lT-VJ zGgdUc&`&^+6vNb&LY?af1om1gjhU%`gWT>aQtk0gJTQUq-oH$Flkd1w_lBBf0;BCy z`7+HcE$8bM0^avZ&C0|*OB=uyFRJ?aTcyIPb&~+uB{0^Ysv=R7ZMP*l&{d2c6X;)4 zG{sye&>M>%3NQkre(=Ig+{%mG#`fOM=|O%cclvVw)s7Fw1@Oa-0qBDX0)tL}srdd3 zAKVr|u!4652w2`d0fsD36d(v8?%fw448z=eKw!vV=Ju7+g<@B0$2aAJ0j^IF7?!W< ztpbe1;%>zpHr&Lcv2JbrusgL?(as#!?0ARvZ(9Tyw9dPLBI6nnUO(iIo%Z>S_JI|# zma!w&AcT?E9qq-QVS__Pcf=Ea+vSIvKgxKI!0TcYM;pGp_iegD<(`iw?f*icdNCBX@kt!LzRTw1Yo($EO{91y)_~ zna_534W4x25$ukGuftOpJnG=jV8ac!8;kc6zdg|V2T)4~2x;QgE$@>LmS2BOn-Id% zPzQ28t;HPLr2p=wv3&Oj;JfT|seQL0nM~MJ-CF6-0jU9DeYR z@_64&(j;x_;hdb@dGFotF5i9czW2|+H~#{#7PlELoIc&#dNMd5B?h^g3~ml4Qo(RA zp=EQjBAK$LMzUIx)4a|VE*XEE7Bi9&No06p(8y7msI>(K*_+;xm6@}{P{;bNG3R2q_^ill$0qum2XdBSv~ zj!flrjWkV}8w?9NY@NI*E76{b`7I2yOInW8*^Z{HMa7sj>JplolG6-L9n;6tX6xj2 zn?nKGDyy>jD8s78N_*AgXzF9AX>98AVK(M^;YK|n@6nqZ^So$4y$?Rjnt@s@@WF!_ z;%ku)Ud$9Xi~Bio)1CH@sgE?7-s2Q zO70|>uI<+qhK9zbjuQPbQ&f114=b=z09Fwo&CMQ3=c?)OJGTfZGU7uMLc(z~Lu*;i zHb=5*a$S{_V&=AIc_1$mC;vnQ?IluiBSJ+^IKxRw46Caap*(-$LQE<*qx*Z?DW)h^ zd(nb5408-#VUeM}u~J*qZ5`H&Dr}$xlV!>~=nQ%A2*bQ|r4_N@!zMvf12!|v6f`-E zA159fr-nFf(3Q+@#Wuk_ZM}KMRF@3%tC$uEJdW)mlpT{2=#k8f2Ro-GAQpVs?IiHT zRBz6DyJPh!@>_pyHI|XqZrB*hXFcd(STxD>#HtTnj{R zI_co4MD?WI#m!+&AKWKrxt2HWBiimm8X2J@Gq@Vt#l(MB42sNXkJlShK|+a2t3nf~ z9K#Z_+$Sk=QZo6ZQ{saz&VK_8f$J9yVJq^&_z>ZYX>pD=c{zsT0)B$DOC{*dt0qOW z>sW&4oM!brL%2=LE6ISWnE}yg0)_4tD7E51O4qW1RV$2DEgqb%=t39~8?^CDDrIS&Wms6= zbK2Eh-Xx=3%DVAZsfQF>l4J92FV5i|>Z;Xl2{+y&vIS$bk4x|}%eIvd@Szv)LD%aOMWyPXmsD3iJHYjQVmo3Dol!SE z@M=&mE`Iu|7uUWm=}AD+4I&bA=>HbL+*kq^&HmjSY7T`%@iF*sp&=gc8pHfiEF8t+ zQ7pCa;CWn%gd*{&Kf;B_@vw!)P77iBTx)+}qra5~Tf#>yJZ7QIzl%ms7DjvgoiyqR zAE~hrv(V>%nuZ4pi--Ns(kM|Fr7Rq^khSof1=GT?g_BpXtn(I5#a*}Ij(62GJN`%C z<=Drl3ZC?LG0U$s-Dq50A)NbSTPi=_%})kwxho&E==wkE(LH}@{{)3qO|C%#YF=3$ zdiA?ni$9)wR*=E-zD>6#=i#B!N#gG&-1E6KkNw7xOU%m~-nh!XQ{HJ=8J4JS5MC7j80GfF1F!!W{h{y?1Y6gJv#Es?z-Mhy6*8qFYB=KY5fJ$eA5$JDWZC&|wm9Vh`;wc1 z=hdk(0FO+816Kit$%z66lMChx$ilBF2VOs5jG{_Fm|^llWu?h^^R#6V_b)Rr*r2Go zCJIq?W1a~s_?F7ag7Zb0%OoM9-t$dmLAMF|0NpViXalO=LkbX8`{$d;BCcg)V6a88 zp-~y6${p-l#0_8!3>GM=&ZvP@X-rJ1|U_6z{_d)L2hS-94p_r zNR&C&lwq=fmEz=Gi{xeDN1+4Vql040S4)s8GqAtmXGCMf(rRml$p-dPz{AsxWx*#7 z1I<|s^p_oqSz`7Kll2`vz-A#%!)0L5M^WYL$S|3)N@Q}Svnp66{FqRnt&S)votz;m zA;;+IfmI{UMr2?xK~eqK4W?QPtP=SQA4L?Exn2;JaX#W;mGFaPfWAVFN$n7b${>49 zkV+ZQVI((!sx|@ru8U%(NZ90nWgaq!b@vPmS||zvBY+B|C!b%YB@17*Bg(*_graC; zF33Ka$q#Y`z%B!>QGqN`0osXb-`Pr#N^_7ZX~ZBQ1A_vJd9x>9Ty7%^AMXK%usn+V z#4d>c>{h7C!iPA3cA@5E9CIF-wP*MN@ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e09..09523c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index 1aa94a4..f5feea6 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java index 05df260..6727e3d 100644 --- a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java +++ b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java @@ -1,9 +1,9 @@ package eu.pb4.ansharpatch; +import com.lgmrszd.anshar.ModComponentTypes; +import eu.pb4.polymer.rsm.api.RegistrySyncUtils; import net.fabricmc.api.ModInitializer; - -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.minecraft.resource.ResourceType; +import net.minecraft.registry.Registries; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,6 +12,7 @@ public class AnsharPolymerPatch implements ModInitializer { @Override public void onInitialize() { + RegistrySyncUtils.setServerEntry(Registries.DATA_COMPONENT_TYPE, ModComponentTypes.BEACON_POS); /*PolymerResourcePackUtils.addModAssets("anshar"); PolymerResourcePackUtils.getInstance().creationEvent.register(x -> { x.addWriteConverter((path, bytes) -> path.startsWith("/assets/anshar/sounds/tunes") ? null : bytes); diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java index 9551e49..bc0e419 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java @@ -3,8 +3,8 @@ import com.lgmrszd.anshar.beacon.BeaconComponent; import com.lgmrszd.anshar.beacon.EndCrystalComponent; import com.lgmrszd.anshar.transport.PlayerTransportComponent; -import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.server.network.ServerPlayerEntity; +import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent; import org.spongepowered.asm.mixin.Mixin; @Mixin({BeaconComponent.class, EndCrystalComponent.class, PlayerTransportComponent.class}) diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java b/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java index 1f0db70..6bfbe10 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java @@ -7,15 +7,9 @@ @Mixin(EntityStatusS2CPacket.class) public interface EntityStatusS2CPacketAccessor { - @Accessor - int getId(); - @Mutable @Accessor - void setId(int id); - - @Accessor - byte getStatus(); + void setEntityId(int id); @Mutable @Accessor diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java b/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java index 0ce2237..7349028 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java @@ -2,7 +2,6 @@ import net.minecraft.resource.FileResourcePackProvider; import net.minecraft.resource.ResourcePackSource; -import net.minecraft.resource.ResourceType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java index ffe3ae3..3fc3b67 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java @@ -2,6 +2,7 @@ import com.lgmrszd.anshar.ModRegistration; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.packet.CustomPayload; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; @@ -15,8 +16,8 @@ private static Object dontRegister(Registry registry, Identifier id, Object e return entry; } - @Redirect(method = "registerAll", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking;registerGlobalReceiver(Lnet/minecraft/util/Identifier;Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking$PlayChannelHandler;)Z")) - private static boolean networkingBad(Identifier channelName, ServerPlayNetworking.PlayChannelHandler channelHandler) { + @Redirect(method = "registerAll", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking;registerGlobalReceiver(Lnet/minecraft/network/packet/CustomPayload$Id;Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking$PlayPayloadHandler;)Z")) + private static boolean networkingBad(CustomPayload.Id type, ServerPlayNetworking.PlayPayloadHandler handler) { return false; } } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java index c441525..d00372a 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java @@ -12,19 +12,19 @@ import eu.pb4.polymer.virtualentity.api.elements.ItemDisplayElement; import it.unimi.dsi.fastutil.ints.IntArrayList; import net.minecraft.client.render.model.json.ModelTransformationMode; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.FireworksComponent; import net.minecraft.entity.EntityStatuses; import net.minecraft.entity.EntityType; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.decoration.Brightness; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.FireworkRocketItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.*; import net.minecraft.particle.DustParticleEffect; -import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.Registries; import net.minecraft.server.network.ServerPlayNetworkHandler; @@ -37,7 +37,6 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.random.Random; import net.minecraft.world.GameMode; -import net.minecraft.world.explosion.Explosion; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3f; import org.joml.Vector3f; @@ -267,7 +266,7 @@ public float getJumpPercentage() { return (float) this.gateTicks / 230.0F; } - @Redirect(method = "moveToCurrentTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;teleport(DDD)V")) + @Redirect(method = "moveToCurrentTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;requestTeleport(DDD)V")) private void replaceTeleport(PlayerEntity instance, double x, double y, double z) { instance.setPos(x, y, z); } @@ -278,19 +277,19 @@ private void replaceTeleport(PlayerEntity instance, double x, double y, double z */ @Overwrite public void sendExplosionPacketS2C(boolean skipOurselves, BlockPos pos, int color) { - var list = new ArrayList>(); + var list = new ArrayList>(); var id = VirtualEntityUtils.requestEntityId(); list.add(new EntitySpawnS2CPacket(id, UUID.randomUUID(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0, EntityType.FIREWORK_ROCKET, 0, Vec3d.ZERO, 0)); { var stack = new ItemStack(Items.FIREWORK_ROCKET); - stack.getOrCreateNbt().put(FireworkRocketItem.FIREWORKS_KEY, TransportEffects.makeTransportFirework(color)); + stack.set(DataComponentTypes.FIREWORKS, new FireworksComponent(0, TransportEffects.makeTransportFirework(color))); list.add(new EntityTrackerUpdateS2CPacket(id, List.of(DataTracker.SerializedEntry.of(FireworkRocketEntityAccessor.getITEM(), stack)))); } { var x = PolymerCommonUtils.createUnsafe(EntityStatusS2CPacket.class); - ((EntityStatusS2CPacketAccessor) x).setId(id); + ((EntityStatusS2CPacketAccessor) x).setEntityId(id); ((EntityStatusS2CPacketAccessor) x).setStatus(EntityStatuses.EXPLODE_FIREWORK_CLIENT); list.add(x); } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java index ee1561d..b4b4699 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java @@ -11,7 +11,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.LinkedHashSet; -import java.util.Map; import java.util.Set; @Mixin(ResourcePackManager.class) @@ -20,7 +19,7 @@ public abstract class ResourcePackManagerMixin { @Shadow @Final @Mutable - public Set providers; + private Set providers; @Inject(method = "", at = @At("RETURN")) public void injectCustom(ResourcePackProvider[] resourcePackProviders, CallbackInfo info) { diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java index f194594..5ff5940 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java @@ -1,8 +1,6 @@ package eu.pb4.ansharpatch.mixin; import com.lgmrszd.anshar.transport.PlayerTransportComponent; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.mojang.authlib.GameProfile; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/TransportEffectsMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/TransportEffectsMixin.java index 100fae6..fa2b032 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/TransportEffectsMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/TransportEffectsMixin.java @@ -1,16 +1,16 @@ package eu.pb4.ansharpatch.mixin; import com.lgmrszd.anshar.transport.TransportEffects; -import net.minecraft.particle.DefaultParticleType; import net.minecraft.particle.ParticleTypes; +import net.minecraft.particle.SimpleParticleType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(TransportEffects.class) public class TransportEffectsMixin { - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/api/particle/v1/FabricParticleTypes;simple(Z)Lnet/minecraft/particle/DefaultParticleType;")) - private static DefaultParticleType replaceParticle(boolean alwaysSpawn) { + @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/api/particle/v1/FabricParticleTypes;simple(Z)Lnet/minecraft/particle/SimpleParticleType;")) + private static SimpleParticleType replaceParticle(boolean alwaysSpawn) { return ParticleTypes.FIREWORK; } } diff --git a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java index 3f02c6d..fc0786d 100644 --- a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java +++ b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java @@ -3,7 +3,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.minecraft.resource.*; -import net.minecraft.resource.featuretoggle.FeatureSet; import net.minecraft.resource.metadata.ResourceMetadataReader; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -16,7 +15,7 @@ import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Consumer; @@ -25,15 +24,15 @@ public record LangPackProvider(ModContainer mod) implements ResourcePackProvider @Override public void register(Consumer profileAdder) { - profileAdder.accept(ResourcePackProfile.of("$anshar-lang", Text.literal("Anshar Polymer Patch"), - true, this, - new ResourcePackProfile.Metadata(Text.literal("Lang Files"), ResourcePackCompatibility.COMPATIBLE, FeatureSet.empty(), List.of()), - ResourcePackProfile.InsertionPosition.BOTTOM, false, ResourcePackSource.BUILTIN + profileAdder.accept(ResourcePackProfile.create(getInfo(), + this, + ResourceType.SERVER_DATA, + new ResourcePackPosition(true, ResourcePackProfile.InsertionPosition.BOTTOM, false) )); } @Override - public ResourcePack open(String name) { + public ResourcePack open(ResourcePackInfo info) { return this; } @@ -88,13 +87,18 @@ public Set getNamespaces(ResourceType type) { @Nullable @Override - public T parseMetadata(ResourceMetadataReader metaReader) throws IOException { + public T parseMetadata(ResourceMetadataReader metaReader) { return null; } @Override - public String getName() { - return "$anshar-lang"; + public ResourcePackInfo getInfo() { + return new ResourcePackInfo( + "$anshar-lang", + Text.literal("Anshar Polymer Patch"), + ResourcePackSource.BUILTIN, + Optional.empty() + ); } @Override @@ -104,7 +108,7 @@ public void close() { @Override - public ResourcePack openWithOverlays(String name, ResourcePackProfile.Metadata metadata) { - return open(name); + public ResourcePack openWithOverlays(ResourcePackInfo info, ResourcePackProfile.Metadata metadata) { + return open(info); } } diff --git a/src/main/resources/anshar-polymer-patch.mixins.json b/src/main/resources/anshar-polymer-patch.mixins.json index 0ce981f..1b2d160 100644 --- a/src/main/resources/anshar-polymer-patch.mixins.json +++ b/src/main/resources/anshar-polymer-patch.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "eu.pb4.ansharpatch.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ "DisableComponentSyncMixin", "EntityStatusS2CPacketAccessor", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0566e03..11512fa 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -25,8 +25,8 @@ "depends": { "fabricloader": ">=0.15.0", "anshar": ">=0.0.15", - "minecraft": "~1.20.4", - "java": ">=17", + "minecraft": "~1.21", + "java": ">=21", "fabric-api": "*" } } \ No newline at end of file From 3a9ff1b13a326876fc8032ab42f2412e1cfd5757 Mon Sep 17 00:00:00 2001 From: unilock Date: Sat, 20 Jul 2024 07:43:49 -0400 Subject: [PATCH 2/4] Fix PolymerComponent registration Signed-off-by: unilock --- build.gradle | 2 +- src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 8e2639d..6bfb218 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ dependencies { modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-entity:6.1.0" modImplementation "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:21.0.5" - modImplementation include("eu.pb4:polymer-reg-sync-manipulator:0.9.6+1.21") + modImplementation include("eu.pb4:polymer-core:0.9.6+1.21") modImplementation include("eu.pb4:polymer-virtual-entity:0.9.6+1.21") modImplementation include("xyz.nucleoid:server-translations-api:2.3.1+1.21-pre2") } diff --git a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java index 6727e3d..1e5fe03 100644 --- a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java +++ b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java @@ -1,9 +1,8 @@ package eu.pb4.ansharpatch; import com.lgmrszd.anshar.ModComponentTypes; -import eu.pb4.polymer.rsm.api.RegistrySyncUtils; +import eu.pb4.polymer.core.api.other.PolymerComponent; import net.fabricmc.api.ModInitializer; -import net.minecraft.registry.Registries; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,7 +11,7 @@ public class AnsharPolymerPatch implements ModInitializer { @Override public void onInitialize() { - RegistrySyncUtils.setServerEntry(Registries.DATA_COMPONENT_TYPE, ModComponentTypes.BEACON_POS); + PolymerComponent.registerDataComponent(ModComponentTypes.BEACON_POS); /*PolymerResourcePackUtils.addModAssets("anshar"); PolymerResourcePackUtils.getInstance().creationEvent.register(x -> { x.addWriteConverter((path, bytes) -> path.startsWith("/assets/anshar/sounds/tunes") ? null : bytes); From 12569a31e237f5542c34f205df2ea5ac52ee74c5 Mon Sep 17 00:00:00 2001 From: unilock Date: Sat, 20 Jul 2024 09:02:39 -0400 Subject: [PATCH 3/4] Fix LangPackProvider#parseMetadata Signed-off-by: unilock --- src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java index fc0786d..4fecd58 100644 --- a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java +++ b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java @@ -2,7 +2,10 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; +import net.minecraft.SharedConstants; import net.minecraft.resource.*; +import net.minecraft.resource.metadata.PackResourceMetadata; +import net.minecraft.resource.metadata.ResourceMetadataMap; import net.minecraft.resource.metadata.ResourceMetadataReader; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -88,7 +91,7 @@ public Set getNamespaces(ResourceType type) { @Nullable @Override public T parseMetadata(ResourceMetadataReader metaReader) { - return null; + return ResourceMetadataMap.of(PackResourceMetadata.SERIALIZER, new PackResourceMetadata(Text.literal("Lang Files"), SharedConstants.getGameVersion().getResourceVersion(ResourceType.SERVER_DATA), Optional.empty())).get(metaReader); } @Override From 189ce56cd8845e839e9af7f74e01490d36bebae1 Mon Sep 17 00:00:00 2001 From: unilock Date: Sun, 23 Mar 2025 11:42:31 -0400 Subject: [PATCH 4/4] Port to latest Anshar ISSUES while embedded: - Rain / Snow - Vertical camera movement unlocked Signed-off-by: unilock --- .github/workflows/build.yml | 35 +++--- .github/workflows/release.yml | 26 ++-- build.gradle | 47 ++++--- gradle.properties | 10 +- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 +- .../pb4/ansharpatch/AnsharPolymerPatch.java | 7 +- .../mixin/DisableComponentSyncMixin.java | 1 - .../mixin/EntityStatusS2CPacketAccessor.java | 4 +- .../FileResourcePackProviderAccessor.java | 1 - .../mixin/ModRegistriationMixin.java | 12 +- .../ansharpatch/mixin/PlayerManagerMixin.java | 15 +++ .../mixin/PlayerTransportComponentMixin.java | 118 +++++++++--------- .../mixin/ResourcePackManagerMixin.java | 11 +- .../mixin/ServerPlayerEntityMixin.java | 31 +---- .../ansharpatch/mixin/ServerWorldMixin.java | 19 +++ .../ansharpatch/pack/LangPackProvider.java | 50 ++++---- .../anshar-polymer-patch.mixins.json | 2 + src/main/resources/fabric.mod.json | 10 +- 20 files changed, 211 insertions(+), 195 deletions(-) create mode 100644 src/main/java/eu/pb4/ansharpatch/mixin/PlayerManagerMixin.java create mode 100644 src/main/java/eu/pb4/ansharpatch/mixin/ServerWorldMixin.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b45ebf..dffbdbc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,37 +3,32 @@ # certain platforms or Java versions, and provides a first line of defence # against bad commits. -name: build -on: +name: Build +on: pull_request: push: paths-ignore: [ '.github/', 'docs/', 'mkdocs.yml' ] jobs: build: - strategy: - matrix: - # Use these Java versions - java: [ - 21 # Latest version - ] - # and run on both Linux and Windows - os: [ubuntu-latest] - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - - name: checkout repository + - name: Checkout repository uses: actions/checkout@v4 - - name: setup jdk ${{ matrix.java }} + + - name: Setup JDK 21 uses: actions/setup-java@v4 with: - java-version: ${{ matrix.java }} - - name: make gradle wrapper executable - if: ${{ runner.os != 'Windows' }} - run: chmod +x ./gradlew - - name: build + java-version: 21 + distribution: microsoft + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Build run: ./gradlew build - - name: capture build artifacts - if: ${{ runner.os == 'Linux' && matrix.java == '21' }} # Only upload artifacts built from LTS java on one OS + + - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: Artifacts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 99d5011..6279aa6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,28 +9,32 @@ on: jobs: build: runs-on: ubuntu-latest - steps: - - uses: actions/cache@v4 + - name: Setup Gradle caches + uses: actions/cache@v4 with: path: | - ~/.gradle/loom-cache ~/.gradle/caches + ~/.gradle/loom-cache ~/.gradle/wrapper - key: gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - gradle- - - uses: actions/checkout@v4 - - name: Set up JDK + key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }} + restore-keys: ${{ runner.os }}-gradle + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup JDK 21 uses: actions/setup-java@v4 with: java-version: 21 + distribution: microsoft + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 - - name: Grant execute permission for gradlew - run: chmod +x gradlew - name: Build and publish with Gradle run: ./gradlew build publish env: MODRINTH: ${{ secrets.MODRINTH }} CHANGELOG: ${{ github.event.release.body }} - RELEASE: true \ No newline at end of file + RELEASE: true diff --git a/build.gradle b/build.gradle index 6bfb218..e1a3c60 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.7-SNAPSHOT' + id 'fabric-loom' version '1.10-SNAPSHOT' id 'maven-publish' id "com.modrinth.minotaur" version "2.+" } @@ -12,21 +12,22 @@ base { } repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. - maven { url "https://api.modrinth.com/maven/" } - maven { url 'https://maven.nucleoid.xyz' } maven { name = 'Ladysnake Mods' - url = 'https://maven.ladysnake.org/releases' + url = 'https://maven.ladysnake.org/releases/' + } + maven { + name = 'NucleoidMC' + url = 'https://maven.nucleoid.xyz/' } maven { name = "Fuzs Mod Resources" url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } + maven { + name = 'Modrinth' + url = 'https://api.modrinth.com/maven/' + } } dependencies { @@ -38,16 +39,15 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - //modImplementation "maven.modrinth:anshar:0.0.15" - modImplementation files("libs/anshar-0.0.15.jar") - modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:6.1.0" - modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:6.1.0" - modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-level:6.1.0" - modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-entity:6.1.0" - modImplementation "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:21.0.5" + modImplementation "maven.modrinth:anshar:1.0.2" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:6.1.2" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:6.1.2" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-level:6.1.2" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-entity:6.1.2" + modImplementation "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:21.1.3" - modImplementation include("eu.pb4:polymer-core:0.9.6+1.21") - modImplementation include("eu.pb4:polymer-virtual-entity:0.9.6+1.21") + modImplementation include("eu.pb4:polymer-core:0.9.18+1.21.1") + modImplementation include("eu.pb4:polymer-virtual-entity:0.9.18+1.21.1") modImplementation include("xyz.nucleoid:server-translations-api:2.3.1+1.21-pre2") } @@ -60,13 +60,11 @@ processResources { } tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" it.options.release = 21 } java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. withSourcesJar() sourceCompatibility = JavaVersion.VERSION_21 @@ -75,14 +73,15 @@ java { jar { from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}"} + rename { "${it}_${project.base.archivesName.get()}" } } } -// configure the maven publication +// Configure the maven publication publishing { publications { - mavenJava(MavenPublication) { + create("mavenJava", MavenPublication) { + artifactId = project.archives_base_name from components.java } } diff --git a/gradle.properties b/gradle.properties index 5c2fd28..3679670 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,14 +4,14 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21 -yarn_mappings=1.21+build.9 -loader_version=0.16.0 +minecraft_version=1.21.1 +yarn_mappings=1.21.1+build.3 +loader_version=0.16.10 # Mod Properties -mod_version=0.0.15.1 +mod_version=1.0.2.1 maven_group=eu.pb4.ansharpatch archives_base_name=anshar-polymer-patch # Dependencies -fabric_version=0.100.7+1.21 \ No newline at end of file +fabric_version=0.115.3+1.21.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..9bbc975c742b298b441bfb90dbc124400a3751b9 100644 GIT binary patch delta 34884 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 delta 34740 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�{ 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

    2jq7_TfZ- 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0..37f853b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6..faf9300 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. diff --git a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java index 1e5fe03..bfe54d5 100644 --- a/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java +++ b/src/main/java/eu/pb4/ansharpatch/AnsharPolymerPatch.java @@ -1,6 +1,6 @@ package eu.pb4.ansharpatch; -import com.lgmrszd.anshar.ModComponentTypes; +import com.lgmrszd.anshar.beacon.EndCrystalItemContainer; import eu.pb4.polymer.core.api.other.PolymerComponent; import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; @@ -11,8 +11,9 @@ public class AnsharPolymerPatch implements ModInitializer { @Override public void onInitialize() { - PolymerComponent.registerDataComponent(ModComponentTypes.BEACON_POS); - /*PolymerResourcePackUtils.addModAssets("anshar"); + PolymerComponent.registerDataComponent(EndCrystalItemContainer.BEACON_POS_DATA_COMPONENT); + /* + PolymerResourcePackUtils.addModAssets("anshar"); PolymerResourcePackUtils.getInstance().creationEvent.register(x -> { x.addWriteConverter((path, bytes) -> path.startsWith("/assets/anshar/sounds/tunes") ? null : bytes); }); diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java index bc0e419..e93c276 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/DisableComponentSyncMixin.java @@ -9,7 +9,6 @@ @Mixin({BeaconComponent.class, EndCrystalComponent.class, PlayerTransportComponent.class}) public abstract class DisableComponentSyncMixin implements AutoSyncedComponent { - @Override public boolean shouldSyncWith(ServerPlayerEntity player) { return false; diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java b/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java index 6bfbe10..1e74059 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/EntityStatusS2CPacketAccessor.java @@ -7,11 +7,11 @@ @Mixin(EntityStatusS2CPacket.class) public interface EntityStatusS2CPacketAccessor { - @Mutable @Accessor + @Mutable void setEntityId(int id); - @Mutable @Accessor + @Mutable void setStatus(byte status); } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java b/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java index 7349028..3601ac3 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/FileResourcePackProviderAccessor.java @@ -7,7 +7,6 @@ @Mixin(FileResourcePackProvider.class) public interface FileResourcePackProviderAccessor { - @Accessor ResourcePackSource getSource(); } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java index 3fc3b67..b853889 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ModRegistriationMixin.java @@ -1,8 +1,11 @@ package eu.pb4.ansharpatch.mixin; import com.lgmrszd.anshar.ModRegistration; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.packet.CustomPayload; +import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; @@ -11,13 +14,16 @@ @Mixin(ModRegistration.class) public class ModRegistriationMixin { - @Redirect(method = "registerAll", at = @At(value = "INVOKE", target = "Lnet/minecraft/registry/Registry;register(Lnet/minecraft/registry/Registry;Lnet/minecraft/util/Identifier;Ljava/lang/Object;)Ljava/lang/Object;")) - private static Object dontRegister(Registry registry, Identifier id, Object entry) { + @WrapOperation(method = "registerAll", at = @At(value = "INVOKE", target = "Lnet/minecraft/registry/Registry;register(Lnet/minecraft/registry/Registry;Lnet/minecraft/util/Identifier;Ljava/lang/Object;)Ljava/lang/Object;")) + private static T cancelRegistration(Registry registry, Identifier id, T entry, Operation original) { + if (Registries.DATA_COMPONENT_TYPE.equals(registry)) { + return original.call(registry, id, entry); + } return entry; } @Redirect(method = "registerAll", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking;registerGlobalReceiver(Lnet/minecraft/network/packet/CustomPayload$Id;Lnet/fabricmc/fabric/api/networking/v1/ServerPlayNetworking$PlayPayloadHandler;)Z")) - private static boolean networkingBad(CustomPayload.Id type, ServerPlayNetworking.PlayPayloadHandler handler) { + private static boolean cancelNetworking(CustomPayload.Id type, ServerPlayNetworking.PlayPayloadHandler handler) { return false; } } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/PlayerManagerMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerManagerMixin.java new file mode 100644 index 0000000..4dbc801 --- /dev/null +++ b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerManagerMixin.java @@ -0,0 +1,15 @@ +package eu.pb4.ansharpatch.mixin; + +import net.minecraft.server.PlayerManager; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(PlayerManager.class) +public class PlayerManagerMixin { +// @WrapOperation(method = "sendWorldInfo", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V", ordinal = 3)) +// private void cancelRainPacket(ServerPlayNetworkHandler instance, Packet packet, Operation original) { +// if (PlayerTransportComponent.KEY.get(instance.player).isInNetwork()) { +// return; +// } +// original.call(instance, packet); +// } +} diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java index d00372a..65240e0 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/PlayerTransportComponentMixin.java @@ -33,7 +33,9 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ColorHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.random.Random; import net.minecraft.world.GameMode; @@ -48,39 +50,18 @@ import java.util.*; - -@Mixin(PlayerTransportComponent.class) +@Mixin(value = PlayerTransportComponent.class, remap = false) public abstract class PlayerTransportComponentMixin implements HolderAttachment { - @Shadow - @Final - private PlayerEntity player; - @Shadow - private @Nullable BeaconNode target; - - @Shadow - public abstract Set getJumpCandidates(); - - @Shadow - public abstract BeaconNode getNearestLookedAt(); - - @Shadow - public abstract boolean tryJump(BeaconNode node); - - @Shadow - protected abstract void moveToCurrentTarget(); - - @Shadow - public abstract double distanceTo(BeaconNode node); + @Shadow @Final private PlayerEntity player; + @Shadow private BeaconNode target; - @Shadow - public abstract Vector3f compassNormToNode(BeaconNode node); + @Shadow protected abstract void moveToCurrentTarget(); + @Shadow public abstract Set getJumpCandidates(); + @Shadow public abstract BeaconNode getNearestLookedAt(); + @Shadow public abstract Vector3f compassNormToNode(BeaconNode node); + @Shadow public abstract double distanceTo(BeaconNode node); + @Shadow public abstract boolean tryJump(BeaconNode node); - @Shadow public abstract boolean isInNetwork(); - - @Shadow public abstract void serverTick(); - - @Unique - private static final int TICKS_TO_JUMP = 230; @Unique private final ElementHolder holder = new ElementHolder(); @Unique @@ -110,13 +91,21 @@ private void onInit(PlayerEntity player, CallbackInfo ci) { i.setBrightness(new Brightness(0, 0)); holder.addElement(i); holder.setAttachment(this); - if (player instanceof ServerPlayerEntity serverPlayer) { - this.serverPlayer = serverPlayer; + if (player instanceof ServerPlayerEntity spe) { + this.serverPlayer = spe; } } + @Inject(method = "enterNetwork", at = @At("HEAD")) + private void onEnterHead(FrequencyNetwork network, BlockPos through, CallbackInfo ci) { + if (this.serverPlayer == null) { + return; + } + this.isSetup = false; + } + @Inject(method = "enterNetwork", at = @At("TAIL")) - private void onEnter(FrequencyNetwork network, BlockPos through, CallbackInfo ci) { + private void onEnterTail(FrequencyNetwork network, BlockPos through, CallbackInfo ci) { if (this.serverPlayer == null) { return; } @@ -126,17 +115,20 @@ private void onEnter(FrequencyNetwork network, BlockPos through, CallbackInfo ci @Unique private void setupState() { - this.isSetup = true; var list = new IntArrayList(source.getEntityIds()); list.rem(this.source.getEntityId()); list.add(this.player.getId()); this.holder.startWatching(this.serverPlayer); this.serverPlayer.networkHandler.sendPacket(VirtualEntityUtils.createRidePacket(this.source.getEntityId(), list)); this.serverPlayer.networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.GAME_MODE_CHANGED, GameMode.SPECTATOR.getId())); +// if (getWorld().isRaining()) { +// this.serverPlayer.networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.RAIN_STOPPED, GameStateChangeS2CPacket.DEMO_OPEN_SCREEN)); +// } + this.done = false; } - @Inject(method = "exitNetwork", at = @At("HEAD"), remap = false) - private void onExit(CallbackInfo ci) { + @Inject(method = "exitNetwork", at = @At("HEAD")) + private void onExitHead(CallbackInfo ci) { if (this.serverPlayer == null) { return; } @@ -148,9 +140,18 @@ private void onExit(CallbackInfo ci) { this.serverPlayer.networkHandler.sendPacket(new TitleS2CPacket(Text.empty())); this.serverPlayer.networkHandler.sendPacket(new SubtitleS2CPacket(Text.empty())); this.serverPlayer.networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.GAME_MODE_CHANGED, this.serverPlayer.interactionManager.getGameMode().getId())); +// if (getWorld().isRaining()) { +// this.serverPlayer.networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.RAIN_STARTED, GameStateChangeS2CPacket.DEMO_OPEN_SCREEN)); +// } + this.done = true; + } + + @Inject(method = "exitNetwork", at = @At("TAIL")) + private void onExitTail(CallbackInfo ci) { + this.isSetup = false; } - @Inject(method = "serverTick", at = @At(value = "INVOKE", target = "Lcom/lgmrszd/anshar/transport/PlayerTransportComponent;moveToCurrentTarget()V"), remap = false) + @Inject(method = "serverTick", at = @At(value = "INVOKE", target = "Lcom/lgmrszd/anshar/transport/PlayerTransportComponent;moveToCurrentTarget()V")) public void onTick(CallbackInfo ci) { if (this.serverPlayer == null) { return; @@ -165,7 +166,7 @@ public void onTick(CallbackInfo ci) { } else { this.holder.tick(); if (this.player.forwardSpeed > 0.1) { - if (this.nearest == null && this.gateTicks == 0 && this.player.getWorld().getTime() % 10L == 0L) { + if (this.nearest == null && this.gateTicks == 0 && getWorld().getTime() % 10L == 0L) { this.nearest = this.getNearestLookedAt(); if (this.nearest != null) { //this.audioManager.playJump(); @@ -175,7 +176,7 @@ public void onTick(CallbackInfo ci) { if (this.nearest != null) { if (this.gateTicks % 40 == 0) { this.serverPlayer.networkHandler.sendPacket(new PlaySoundS2CPacket(Registries.SOUND_EVENT.getEntry(SoundEvents.BLOCK_BEACON_AMBIENT), SoundCategory.BLOCKS, - serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 0.8f, 2f, 0l)); + serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), 0.8f, 2f, 0L)); } ++this.gateTicks; @@ -187,7 +188,6 @@ public void onTick(CallbackInfo ci) { //this.spawnOrientationParticles(); this.serverPlayer.networkHandler.sendPacket(new StopSoundS2CPacket(SoundEvents.BLOCK_BEACON_AMBIENT.getId(), SoundCategory.BLOCKS)); } - var helpColr = 7368816; BeaconNode target; @@ -205,14 +205,14 @@ public void onTick(CallbackInfo ci) { Text pos; if (target != null) { - name = Text.empty().append(target.getName()).withColor(target.getColorHex()); - pos = Text.literal(target.getPos().toShortString()).append(" (" + (int) this.distanceTo(target) + ")").withColor(16777215); + name = Text.empty().append(target.getName()).withColor(ColorHelper.Argb.fullAlpha(target.getColor())); + pos = Text.literal(target.getPos().toShortString()).append(" (" + (int) this.distanceTo(target) + ")").withColor(Formatting.WHITE.getColorValue()); } else { name = Text.empty(); pos = Text.empty(); } this.serverPlayer.networkHandler.sendPacket(new TitleFadeS2CPacket(0, 10, 0)); - this.serverPlayer.sendMessage(Text.translatable("anshar.help.transport.location", this.target.getName()).withColor(helpColr), true); + this.serverPlayer.sendMessage(Text.translatable("anshar.help.transport.location", this.target.getName()).withColor(Formatting.GRAY.getColorValue()), true); this.serverPlayer.networkHandler.sendPacket(new TitleS2CPacket(name)); this.serverPlayer.networkHandler.sendPacket(new SubtitleS2CPacket(pos)); @@ -227,11 +227,11 @@ public void onTick(CallbackInfo ci) { } else { //this.audioManager.tick(); } - } } } + @Unique private void drawGate(BeaconNode node, boolean nearest, int ticks) { Vector3f normalGirl = this.compassNormToNode(node); float jumpRatio = (float) ticks / 230.0F; @@ -242,18 +242,19 @@ private void drawGate(BeaconNode node, boolean nearest, int ticks) { float gateHeight = 10.0F * (float) Math.pow(intensity, 4.0); float starSpeed = 0.1F * ((float) Math.pow(intensity, 4.0) - 1.0F); - for (int side = -1; side <= 1; side += 2) { - for (int i = 0; i < 3 * (int) Math.pow(intensity, 4.0); ++i) { + for (int i = 0; i < 3 * (int) Math.pow(intensity, 6.0F); ++i) { float pY = random.nextFloat() * gateHeight - gateHeight / 2.0F; Vector3f pPos = (new Vector3f(gateWidth * (float) side, pY, 0.0F)).mul(M).add(normalExt).add(player.getEyePos().toVector3f()); Vector3f pVel = (new Vector3f(0.0F, 0.0F, starSpeed)).mul(M); - float[] colors = node.getColor(); + int red = ColorHelper.Argb.getRed(node.getColor()); + int green = ColorHelper.Argb.getGreen(node.getColor()); + int blue = ColorHelper.Argb.getBlue(node.getColor()); var color = new Vector3f(); if (nearest) { - color.set(colors[0] + jumpRatio * (random.nextFloat() - colors[0]), colors[1] + jumpRatio * (random.nextFloat() - colors[1]), colors[2] + jumpRatio * (random.nextFloat() - colors[2])); + color.set(red + jumpRatio * (random.nextFloat() - red), green + jumpRatio * (random.nextFloat() - green), blue + jumpRatio * (random.nextFloat() - blue)); } else { - color.set(colors[0], colors[1], colors[2]); + color.set(red, green, blue); } var e = random.nextFloat() < jumpRatio ? ParticleTypes.FIREWORK : new DustParticleEffect(color, 15); @@ -262,29 +263,24 @@ private void drawGate(BeaconNode node, boolean nearest, int ticks) { } } - public float getJumpPercentage() { - return (float) this.gateTicks / 230.0F; - } - - @Redirect(method = "moveToCurrentTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;requestTeleport(DDD)V")) + @Redirect(method = "moveToCurrentTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;requestTeleport(DDD)V", remap = true)) private void replaceTeleport(PlayerEntity instance, double x, double y, double z) { instance.setPos(x, y, z); } /** * @author Patbox - * @reason Server sidin + * @reason Server-siding */ @Overwrite public void sendExplosionPacketS2C(boolean skipOurselves, BlockPos pos, int color) { var list = new ArrayList>(); var id = VirtualEntityUtils.requestEntityId(); - list.add(new EntitySpawnS2CPacket(id, UUID.randomUUID(), - pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0, EntityType.FIREWORK_ROCKET, 0, Vec3d.ZERO, 0)); + list.add(new EntitySpawnS2CPacket(id, UUID.randomUUID(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0, EntityType.FIREWORK_ROCKET, 0, Vec3d.ZERO, 0)); { var stack = new ItemStack(Items.FIREWORK_ROCKET); - stack.set(DataComponentTypes.FIREWORKS, new FireworksComponent(0, TransportEffects.makeTransportFirework(color))); + stack.set(DataComponentTypes.FIREWORKS, new FireworksComponent(0, List.of(TransportEffects.makeTransportFirework(color)))); list.add(new EntityTrackerUpdateS2CPacket(id, List.of(DataTracker.SerializedEntry.of(FireworkRocketEntityAccessor.getITEM(), stack)))); } { @@ -297,13 +293,13 @@ public void sendExplosionPacketS2C(boolean skipOurselves, BlockPos pos, int colo var b = new BundleS2CPacket(list); - for (var player : this.player.getWorld().getPlayers()) { + for (var player : getWorld().getPlayers()) { if (skipOurselves && player == this.player) { continue; } - if (player instanceof ServerPlayerEntity serverPlayer && this.player.getPos().isInRange(player.getPos(), 32.0)) { - serverPlayer.networkHandler.sendPacket(b); + if (player instanceof ServerPlayerEntity spe && this.player.getPos().isInRange(player.getPos(), 32.0)) { + spe.networkHandler.sendPacket(b); } } } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java index b4b4699..a176030 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ResourcePackManagerMixin.java @@ -1,7 +1,10 @@ package eu.pb4.ansharpatch.mixin; import eu.pb4.ansharpatch.pack.LangPackProvider; -import net.minecraft.resource.*; +import net.minecraft.resource.FileResourcePackProvider; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.resource.ResourcePackProvider; +import net.minecraft.resource.ResourcePackSource; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -15,11 +18,7 @@ @Mixin(ResourcePackManager.class) public abstract class ResourcePackManagerMixin { - - @Shadow - @Final - @Mutable - private Set providers; + @Shadow @Final @Mutable private Set providers; @Inject(method = "", at = @At("RETURN")) public void injectCustom(ResourcePackProvider[] resourcePackProviders, CallbackInfo info) { diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java index 5ff5940..bee961a 100644 --- a/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ServerPlayerEntityMixin.java @@ -1,35 +1,16 @@ package eu.pb4.ansharpatch.mixin; import com.lgmrszd.anshar.transport.PlayerTransportComponent; -import com.mojang.authlib.GameProfile; -import net.minecraft.entity.player.PlayerEntity; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ServerPlayerEntity.class) -public abstract class ServerPlayerEntityMixin extends PlayerEntity { - public ServerPlayerEntityMixin(World world, BlockPos pos, float yaw, GameProfile gameProfile) { - super(world, pos, yaw, gameProfile); - } - - @Inject(method = "updateInput", at = @At("TAIL")) - private void orIsInNetwork(float sidewaysSpeed, float forwardSpeed, boolean jumping, boolean sneaking, CallbackInfo ci) { - if (PlayerTransportComponent.KEY.get(this).isInNetwork()) { - if (sidewaysSpeed >= -1.0F && sidewaysSpeed <= 1.0F) { - this.sidewaysSpeed = sidewaysSpeed; - } - - if (forwardSpeed >= -1.0F && forwardSpeed <= 1.0F) { - this.forwardSpeed = forwardSpeed; - } - - this.jumping = jumping; - this.setSneaking(sneaking); - }; +public abstract class ServerPlayerEntityMixin { + @WrapOperation(method = "updateInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;hasVehicle()Z")) + private boolean orIsInNetwork(ServerPlayerEntity instance, Operation original) { + return original.call(instance) || PlayerTransportComponent.KEY.get(instance).isInNetwork(); } } diff --git a/src/main/java/eu/pb4/ansharpatch/mixin/ServerWorldMixin.java b/src/main/java/eu/pb4/ansharpatch/mixin/ServerWorldMixin.java new file mode 100644 index 0000000..db15b04 --- /dev/null +++ b/src/main/java/eu/pb4/ansharpatch/mixin/ServerWorldMixin.java @@ -0,0 +1,19 @@ +package eu.pb4.ansharpatch.mixin; + +import net.minecraft.server.world.ServerWorld; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(ServerWorld.class) +public class ServerWorldMixin { +// @Shadow @Final List players; +// +// @Redirect(method = "tickWeather", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;sendToAll(Lnet/minecraft/network/packet/Packet;)V", ordinal = 1)) +// private void cancelRainPacket(PlayerManager instance, Packet packet) { +// for (ServerPlayerEntity serverPlayerEntity : this.players) { +// if (PlayerTransportComponent.KEY.get(serverPlayerEntity).isInNetwork()) { +// return; +// } +// serverPlayerEntity.networkHandler.sendPacket(packet); +// } +// } +} diff --git a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java index 4fecd58..7b6137e 100644 --- a/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java +++ b/src/main/java/eu/pb4/ansharpatch/pack/LangPackProvider.java @@ -9,7 +9,7 @@ import net.minecraft.resource.metadata.ResourceMetadataReader; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.io.InputStream; @@ -27,11 +27,14 @@ public record LangPackProvider(ModContainer mod) implements ResourcePackProvider @Override public void register(Consumer profileAdder) { - profileAdder.accept(ResourcePackProfile.create(getInfo(), - this, - ResourceType.SERVER_DATA, - new ResourcePackPosition(true, ResourcePackProfile.InsertionPosition.BOTTOM, false) - )); + profileAdder.accept( + ResourcePackProfile.create( + getInfo(), + this, + ResourceType.SERVER_DATA, + new ResourcePackPosition(true, ResourcePackProfile.InsertionPosition.BOTTOM, false) + ) + ); } @Override @@ -39,7 +42,11 @@ public ResourcePack open(ResourcePackInfo info) { return this; } - @Nullable + @Override + public ResourcePack openWithOverlays(ResourcePackInfo info, ResourcePackProfile.Metadata metadata) { + return open(info); + } + @Override public InputSupplier openRoot(String... segments) { var path = mod.findPath(String.join("/", segments)); @@ -47,7 +54,6 @@ public InputSupplier openRoot(String... segments) { return path.map(InputSupplier::create).orElse(null); } - @Nullable @Override public InputSupplier open(ResourceType type, Identifier id) { var path = mod.findPath("assets/" + id.getNamespace() + "/" + id.getPath()); @@ -57,19 +63,20 @@ public InputSupplier open(ResourceType type, Identifier id) { @Override public void findResources(ResourceType type, String namespace, String prefix, ResultConsumer consumer) { - var path = mod.findPath("assets/" + namespace + "/" + prefix); + var optional = mod.findPath("assets/" + namespace + "/" + prefix); - if (path.isEmpty()) { + if (optional.isEmpty()) { return; } try { - String separator = path.get().getFileSystem().getSeparator(); - Files.walkFileTree(path.get(), new SimpleFileVisitor<>() { + String separator = optional.get().getFileSystem().getSeparator(); + Files.walkFileTree(optional.get(), new SimpleFileVisitor<>() { @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - String filename = path.get().relativize(file).toString().replace(separator, "/"); - Identifier identifier = Identifier.of(namespace, prefix + "/" + filename); + @NotNull + public FileVisitResult visitFile(Path file, @NotNull BasicFileAttributes attrs) throws IOException { + String filename = optional.get().relativize(file).toString().replace(separator, "/"); + Identifier identifier = Identifier.tryParse(namespace, prefix + "/" + filename); if (identifier != null) { consumer.accept(identifier, InputSupplier.create(file)); @@ -79,7 +86,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } }); } catch (IOException ignored) { - // + // NO-OP } } @@ -88,16 +95,15 @@ public Set getNamespaces(ResourceType type) { return Set.of("anshar"); } - @Nullable @Override public T parseMetadata(ResourceMetadataReader metaReader) { - return ResourceMetadataMap.of(PackResourceMetadata.SERIALIZER, new PackResourceMetadata(Text.literal("Lang Files"), SharedConstants.getGameVersion().getResourceVersion(ResourceType.SERVER_DATA), Optional.empty())).get(metaReader); + return ResourceMetadataMap.of(PackResourceMetadata.SERIALIZER, new PackResourceMetadata(Text.literal("Anshar Polymer Patch"), SharedConstants.getGameVersion().getResourceVersion(ResourceType.SERVER_DATA), Optional.empty())).get(metaReader); } @Override public ResourcePackInfo getInfo() { return new ResourcePackInfo( - "$anshar-lang", + "anshar-polymer-patch", Text.literal("Anshar Polymer Patch"), ResourcePackSource.BUILTIN, Optional.empty() @@ -108,10 +114,4 @@ public ResourcePackInfo getInfo() { public void close() { } - - - @Override - public ResourcePack openWithOverlays(ResourcePackInfo info, ResourcePackProfile.Metadata metadata) { - return open(info); - } } diff --git a/src/main/resources/anshar-polymer-patch.mixins.json b/src/main/resources/anshar-polymer-patch.mixins.json index 1b2d160..2143568 100644 --- a/src/main/resources/anshar-polymer-patch.mixins.json +++ b/src/main/resources/anshar-polymer-patch.mixins.json @@ -8,9 +8,11 @@ "FileResourcePackProviderAccessor", "FireworkRocketEntityAccessor", "ModRegistriationMixin", + "PlayerManagerMixin", "PlayerTransportComponentMixin", "ResourcePackManagerMixin", "ServerPlayerEntityMixin", + "ServerWorldMixin", "TransportEffectsMixin" ], "injectors": { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 11512fa..a2a27be 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -7,11 +7,14 @@ "authors": [ "Patbox" ], + "contibutors": [ + "unilock" + ], "contact": { - "homepage": "https://pb4.eu", + "homepage": "https://pb4.eu/", "sources": "https://github.com/PolymerPorts/anshar-patch" }, - "license": "LGPLv3", + "license": "LGPL-3.0-only", "icon": "assets/anshar-polymer-patch/icon.png", "environment": "*", "entrypoints": { @@ -24,9 +27,8 @@ ], "depends": { "fabricloader": ">=0.15.0", - "anshar": ">=0.0.15", "minecraft": "~1.21", - "java": ">=21", + "anshar": ">=1.0.0", "fabric-api": "*" } } \ No newline at end of file