From 145ad6cf751d86145993bbd311fc45620b384abb Mon Sep 17 00:00:00 2001 From: LimonBlaze <1195384759@qq.com> Date: Sat, 20 Aug 2022 00:52:40 +0800 Subject: [PATCH] Completely Port to MC1.19.2, Origins 1.5.0.6 --- gradle.properties | 6 +- ...4.3.jar => apoli-forge-1.19.2-2.3.4.4.jar} | Bin 1179942 -> 1180079 bytes ...0.2.jar => calio-forge-1.19.2-1.6.0.3.jar} | Bin 214001 -> 214045 bytes ...5.jar => origins-forge-1.19.2-1.5.0.6.jar} | Bin 499548 -> 499733 bytes .../originsclasses/OriginsClasses.java | 11 +- .../client/OriginsClassesClient.java | 15 --- .../ModifyCraftResultConfiguration.java | 2 +- .../ModifyCraftedFoodConfiguration.java | 2 +- .../configuration/MultiMineConfiguration.java | 10 +- .../apoli/power/ModifyBreedingPower.java | 4 +- .../apoli/power/ModifyCraftedFoodPower.java | 4 +- .../common/apoli/power/MultiMinePower.java | 67 +++++------ .../apoli/power/SneakCountingPower.java | 30 ----- .../calio}/OriginsClassesDataTypes.java | 2 +- .../duck/SneakingStateSavingGameMode.java | 7 -- .../common/event/PowerEventHandler.java | 44 ++++---- .../common/network/S2CInfiniteTrader.java | 4 +- .../common/network/S2CMultiMining.java | 4 +- .../registry/OriginsClassesConditions.java | 4 +- .../common/registry/OriginsClassesPowers.java | 4 +- .../OriginsClassesMixinPlugin.java | 2 +- .../helper/ServerPlayerGameModeHelper.java | 7 ++ .../minecraft}/LivingEntityAccessor.java | 2 +- .../minecraft}/LootTableAccessor.java | 2 +- .../minecraft}/ClientSideMerchantMixin.java | 6 +- .../client/minecraft}/LocalPlayerMixin.java | 2 +- .../common}/apoli/ModifyFoodPowerMixin.java | 23 +++- .../ApotheosisEnchantmentMenuMixin.java | 12 +- .../CookingPotResultSlotMixin.java | 2 +- .../farmersdelight/SkilletItemMixin.java | 2 +- .../AbstractCauldronBlockMixin.java | 13 +-- .../AbstractFurnaceBlockEntityMixin.java | 2 +- .../minecraft}/AbstractVillagerMixin.java | 64 +++++------ .../common/minecraft}/AnvilMenuMixin.java | 2 +- .../mixin/common/minecraft}/ArrowMixin.java | 16 +-- .../mixin/common/minecraft}/BlockMixin.java | 6 +- .../common/minecraft}/BreedGoalMixin.java | 2 +- .../BrewingRecipeRegistryMixin.java | 10 +- .../minecraft}/EnchantmentMenuMixin.java | 12 +- .../minecraft}/FurnaceResultSlotMixin.java | 2 +- .../mixin/common/minecraft}/PlayerMixin.java | 2 +- .../common/minecraft}/PotionUtilMixin.java | 8 +- .../common/minecraft}/ProjectileMixin.java | 2 +- .../minecraft}/RepairItemRecipeMixin.java | 2 +- .../common/minecraft}/ResultSlotMixin.java | 2 +- .../minecraft}/ServerPlayerGameModeMixin.java | 38 +++---- .../minecraft}/TippedArrowRecipeMixin.java | 10 +- .../common}/tetra/WorkbenchTileMixin.java | 2 +- .../originsclasses/util/ClericHelper.java | 29 +++++ .../originsclasses/util/ClientUtils.java | 35 ++++++ .../{MultiMineMode.java => CommonUtils.java} | 55 +++++++-- .../originsclasses/util/EntityUtils.java | 19 ---- .../originsclasses/util/ItemUtils.java | 95 ---------------- .../originsclasses/util/MathUtils.java | 14 --- .../originsclasses/util/MerchantHelper.java | 105 ++++++++++++++++++ .../originsclasses/util/NbtType.java | 44 -------- .../originsclasses/util/NbtUtils.java | 59 ---------- .../originsclasses/util/PotionUtils.java | 44 -------- .../origins-classes/powers/tree_felling.json | 4 + .../resources/origins_classes.mixins.json | 56 +++++----- 60 files changed, 455 insertions(+), 579 deletions(-) rename libs/{apoli-forge-1.19.2-2.3.4.3.jar => apoli-forge-1.19.2-2.3.4.4.jar} (88%) rename libs/{calio-forge-1.19.2-1.6.0.2.jar => calio-forge-1.19.2-1.6.0.3.jar} (79%) rename libs/{origins-forge-1.19.2-1.5.0.5.jar => origins-forge-1.19.2-1.5.0.6.jar} (87%) delete mode 100644 src/main/java/dev/limonblaze/originsclasses/client/OriginsClassesClient.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/common/apoli/power/SneakCountingPower.java rename src/main/java/dev/limonblaze/originsclasses/{util => common/calio}/OriginsClassesDataTypes.java (92%) delete mode 100644 src/main/java/dev/limonblaze/originsclasses/common/duck/SneakingStateSavingGameMode.java rename src/main/java/dev/limonblaze/originsclasses/{compat => core}/OriginsClassesMixinPlugin.java (97%) create mode 100644 src/main/java/dev/limonblaze/originsclasses/core/helper/ServerPlayerGameModeHelper.java rename src/main/java/dev/limonblaze/originsclasses/{mixin/accessor => core/mixin/accessor/minecraft}/LivingEntityAccessor.java (84%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/accessor => core/mixin/accessor/minecraft}/LootTableAccessor.java (83%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/client => core/mixin/client/minecraft}/ClientSideMerchantMixin.java (78%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/client => core/mixin/client/minecraft}/LocalPlayerMixin.java (94%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/compat => core/mixin/common}/apoli/ModifyFoodPowerMixin.java (71%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/compat => core/mixin/common}/apotheosis/ApotheosisEnchantmentMenuMixin.java (73%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/compat => core/mixin/common}/farmersdelight/CookingPotResultSlotMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/compat => core/mixin/common}/farmersdelight/SkilletItemMixin.java (94%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/AbstractCauldronBlockMixin.java (82%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/AbstractFurnaceBlockEntityMixin.java (97%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/AbstractVillagerMixin.java (67%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/AnvilMenuMixin.java (96%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/ArrowMixin.java (73%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/BlockMixin.java (84%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/BreedGoalMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/BrewingRecipeRegistryMixin.java (69%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/EnchantmentMenuMixin.java (77%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/FurnaceResultSlotMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/PlayerMixin.java (93%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/PotionUtilMixin.java (78%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/ProjectileMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/RepairItemRecipeMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/ResultSlotMixin.java (95%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/ServerPlayerGameModeMixin.java (71%) rename src/main/java/dev/limonblaze/originsclasses/{mixin => core/mixin/common/minecraft}/TippedArrowRecipeMixin.java (76%) rename src/main/java/dev/limonblaze/originsclasses/{mixin/compat => core/mixin/common}/tetra/WorkbenchTileMixin.java (95%) create mode 100644 src/main/java/dev/limonblaze/originsclasses/util/ClericHelper.java create mode 100644 src/main/java/dev/limonblaze/originsclasses/util/ClientUtils.java rename src/main/java/dev/limonblaze/originsclasses/util/{MultiMineMode.java => CommonUtils.java} (51%) delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/EntityUtils.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/ItemUtils.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/MathUtils.java create mode 100644 src/main/java/dev/limonblaze/originsclasses/util/MerchantHelper.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/NbtType.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/NbtUtils.java delete mode 100644 src/main/java/dev/limonblaze/originsclasses/util/PotionUtils.java diff --git a/gradle.properties b/gradle.properties index 7dca29e..0079d0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,9 +21,9 @@ org.gradle.daemon=false # Mandatory Dependencies caelus_version=3.0.0.6 - calio_version=1.6.0.2 - apoli_version=2.3.4.3 - origins_version=1.5.0.5 + calio_version=1.6.0.3 + apoli_version=2.3.4.4 + origins_version=1.5.0.6 # Compat Dependencies farmersdelight_file=3916069 diff --git a/libs/apoli-forge-1.19.2-2.3.4.3.jar b/libs/apoli-forge-1.19.2-2.3.4.4.jar similarity index 88% rename from libs/apoli-forge-1.19.2-2.3.4.3.jar rename to libs/apoli-forge-1.19.2-2.3.4.4.jar index 1f03058f4effae1b2627b5e5b31d4e4549b3d6a3..1ac4a77f7837d0a5d104af86b278e343c78ee7f8 100644 GIT binary patch delta 53512 zcmZs@2Rv5q`#7HG@eKR1XGVl%XYaj*NLiW5rW7hX*|KFEqlm1O5pg6dBcifWiEJ%p zrKrUJJm;w1-_QT|e!X9B&$+Jq+Sh&G*L~jCeaa#YYN8Bi%#G3HO#AS7{J!~1jOjE= zXwn}eA>uvCPDw)Srq*=PLji$%k?xFV13tKYnoP?%S}<-&uV3 z35?!ONgoVZuO+HH#Ci<7c#mY>;~3r7Ecu9TOWpg5lKQ7PHWR92qJHi6Jz&ez`a~+U z!p-|SN0xfISq`hauXiwCj<7c8$p{SAuS{zWl98)23_Wk@INwT$L%l zs8{hoJBF?#LntvUbmFZ1ne^%6a+QI4A#-CK-n`wQq-x*3eM)5e_Wd85GL*@rNJeG& zlc~UetI4$Czdee485#uaHA+e#v5G)dFNrF{!3Z9LP#q-~mh`)xhj0M{0|90Y81RNU zo@#FtAMmW2Kmg=x2(h%O%#(hmL7^2xlhCqOjIs#h;m(~*)e4`8ngDHR+ z2wZo;IAj>Q6MANv=I(CfN-C{TJNS$ z_#b#ig+V_|Oj0VN(2yT~*wMpsX3Q8Wzz-xXGFA*}>W>*2!cGGuK9iBg;xYn=w1A`| z6=KBDIG!`3`W6eI(MS-hw>8(t!{lp6A@VUU2zA$%UW(!mrYKJ`CNHNg=8 z=(j02>j%9;DPi*ArN3kN0plhDeSQ6fs}wLQod{_O39Jtwo`ItT{DmwR85QY}jbe#3m%{W9=o-{0Hb`cb?_BH}dJ#Tj(4`N&~ z6dnk~Qh#`15E)5QD}yc<9?4R#x*U!KOtKit8E7O|J^89ClFtzh(iy8O7(k*O%8iUo zFT`JP5|E?-`RxQ2&=f_MgD3>&7=*xQcMw=XDLk133emxeoD*0D(6B@jk^lrj{{b5) z$@-BIZ6_!>ftiwjBj~^`8ZwX(CJ*ByGlzeWTm}5(BWwNx76mjq33y=X02z`W1=DCw zpiPQQ=wHhCCqS}EAh3#`%mSW0AejhRArehe=s^fu0!I)EoCuJrL?#0Br!9u20EA-z zKPr)V(ZMilBQj(30yM!$^8Vj|mjub6c`#a(EbQ6NC@|Z#j|?P%w-X*o^6BI&j9BOalRZF@?fdn?;5N zxLpZch=4dUN#J-NVL#aJMuw*N2Wuz682rdiV`11{Vlac1=gFdB-9SiaE}|v$OA6e% zOcp>z8Vf?9l|iT=Ltufl;7l@^FQNp5l>!O|2sl7_fWQpiNF#%imE?^-83jTb$|3ZB zK!D^kXgt+Z0uQKoo$NL;o}^M^5!p%DH2|*$lz7lEYGCRqfeO4{Os0o;6`C=UfZQ_z zA1GHvw)9tFNzm#ZnFI0&IbHQ!)=GSPN)blmwm) z5!k?y8M3ec%!Z~YGq|<5=VlOE=e!URf5HT;3=^2ZnH93<2pn?4X|Cv(;;&hZw8b(7 z<5C{cxsf_|%wIQit3I`=!MEQOm$o_cL-dSKn*(@29{& z)|q&?I50VU`N{4rUNPoi8rQGKp3DRiW1ok(@F(19V$o!cWp9qG+hBiJzjDf8A>1H$ zp5~)*l{HPg)jfkAo#pwDI(g1zVg|QO7SnIv7)=pYy`ha~hE6ptSk?q)Qgoi1! zHjd8Zp2O44V!j6D_O`lgm)iU9*}Rl)r{5Kx>diWJeulB%<5$Z`14(-kzvrfA&(w%F zRRo_8x{fVgusqq^@pderFlml<`MV24VZjI6+0TZ$-;Z{+X+F69b5$hB{Rh)M7N6pW z0+HEKp&F(3l>O9!<#~NmqXkQ^$qlg=l$ph!=*ZoDW6SGsxzwwvh~cUWN8vYT%1w5^ z-um+1&UA}A!m)AG{Ngn}ilKAcsGOYQAYwwfozH0XJE2xt0gI<|7SZP<<%gnrt$wdj zvGqs}N(PnT>iGmd>6}`K(YSnp%IZg0mMdA;bk)wp{fl+F$syU5nW6c!ms&-pzSPp! zwffF|{>TvgwuPEJ9lX+mFPLLb2X&4=zjGWAS2TM2>e^=)Q(0TSx07kklpi%eMMzW- zyPjLe#88`3f4UU=YppS5>X@Y?ALk>WPm20_|BV>tPn`i9HB9W)+i@E@rlH9Vc)q`^8HOD(sXMMk4y&0n9 zyCJ_8NUk0cZj)334Dvd$ow{T3$}0MhF9*>u(dgrq{9nUEpKV8IW4QZ{JrsK-V%KRW z@0wUa&AIE5BpWlFbga|v+=CS=>6C>F&ko1mmpSt)-$L4J^SZ*lGq$+!nKiFl+}qXp zFN7Ut3{3*Oz1^HY4>N$roQX7&xt$DLH~kSDr)+gB5=xVUBe zA*8~2^1M$_>sHa#km#56ok~9`pO$Cb!z5)?yy_+QI~}0RA{AA1@oJ1<%7^_4vO)1; z3BSGb(}pDpoepHQH-fceWh`C>ut%{y4)XAiQFEH&|8bDfAJ!J&hwPt<>TKu-+d4`~z~vNMoYMo?K1<%$100$xBx z#-KgoyC!N2-W5P-*mDd#;(mn)pkaif0yYg%$PzE=go5@~BNPj=fxsmw^vDdfy(CZo zMaHOI5+U#x4$hgN@W@zbBQ=4!lJ@$JV<=icT@izDCDoiH5HpZ-0SkjbsIn|Zj2r$_ z!+_9;7Fe;r+a8IC6YM^TqWO|EUDH)G=XUcHgWVIIv<5X!t{^x&@8k^pSt-c z7vOl1bOEc1P<*iN;BYa@1F;bY5&onDECAf9M=2uigVT0qp1=;QE)p;q+lEM_ zZla(XnWPU%9s&5a2-)(p0mY7pg7j8^74?1x)iAyfQ9KAU*!Y=x6dN%84yr2_TToa8 zA=!XO*pa9}$u^W2JRbqLh=&Q%22eP_HgM1Gh#)Ftd}A-l7;*bwjUX2EATWUXg}|YV zRRAwWXb&McK&KIu=>H-lKS5>Lmr>LK1o79RhEI@1o@0L$|7X$l zB?2uly-tq>`(C2B5Gts)7Xe`PAuI=|{Tdbc|3J_JMxUUX5fVlLa=$^b?WqD6ldlML z!18ATC6M|Vs?=j9P|OGx&Rp34Up_;#cXblAhPa-z9)i1bC_}`7e^&~iV~-UTF!Y5$ z3*K1zGY{biLz4pw99|}{0o$KZJMhGNUIV8w7D!u$3Sot16m;|>Eo6UICK!PM2fw0< zkqY@ABZvY6RId=QV9gGS0g1!k1(`HA5L(g@29OGk)fa??1b`lCfn9kl0qkW)(;?%aBfcrj?(Y)tdJT$#FDv>1GT@&W z#dYYE62Ok;hu0h+TM&($te~|}0&x5a<*JYndJwT+(-(npfLdbcL>LARNuvw*jwR&~ z_NES+3cM?e{)Whb)1c!kG*9ThLFbPf8wAcq1#|;UfNX4gIA##1j1EBx&mtkB00 z5u`;Wqd=1m_=iNFK)WGkLb4f z)7f&g7lMFOH|;4J3({7i`4B;n%1|WB(G&o22g<*ID)eU@tWZ%0S`ticK&vBMhC%c* z#Bc~vfbfH0lEB0+ff5YuLcd2sK{{N6kc`I&d-$amWENA_b$TZ7`VcyB@6@aViS;9+ zX9lg`phpmPe~TQFihw^EJqLKy_J`C#yRTP{+iZ(ejAUcgkmTKsY z1q@;bhAb^5?@4Xl)!2g(#;Gi#td|}TiOMke-h-^Ih_TRl{Pb|!-2}92YuF#RQB7U>z z$Nv{Afu%nH`m&L~+?)MJ5rc(*S}Z*~Sj0nq5sA{wEpkLN&{2py2gyCMW!!&QfhyAE z)krX)!sEXP2|4l(#6SPn7$6T%PY>#9ksn49jc?8*r0QvOEQxKgy3b6kn12;^`!w|%uXs`nnR^);tr-M)~M<5fD#14emrLw}&fN~jO z0?M5u7eHJEWjYjU6ov!%NkvZ&v@>F|PLhm6ePLB_V)HT8RF12KfO51{H@ey%0E? zPri*%K;xbuVbHvfQ3BG2$k_l10^~8q8glXf8|njKHb~xy#PRQ7u&VtJdx+IBpot!u zHwt~^oCq!S8Wk3K08nP2CxA^urs4&t~5ud42 zIB^{xpWYOFBJeOn@GZBDs&-!X^|xig`S*v)C}>RS@`mzI*`9T#*?vLVL8HfL=`9H6 z^jWvKL~gRw3NsmGSlx_2Cp?8qsDS?2P5@DzyJ7zBLiG>p^WO?op$y%pS~lOlQg+{Z zGohV|?(iyQFB;}q5BkaP5caUOjhOO##|cz_Jv?=1c0`m^D_TN(lL*b4!peobk z{L1I0G5#I%Av^!6A4-kumdu2;@6A7t-^m-@_xk>hhWW~OQ2yrzKB5BDuJ$#diq;(E zZdGOYq&kx&Bf}woq3TozV&_OsT!XwjLC#btA%gN-N?@jq055 zr{(3u4-e68ERH4T9SYTX*#r5X63zURD1YE971K&`8g`2U-3+`zFGR}x31f)wV!jtNxy?t+?O`y`}c1Zk{IWpPt_vV zBhy?r^!uu(>)MLAi<)wKM)o(S#l?iRhK~#$v^cV|+K{1%(f=U*JUlv0$dfoRHZo*{ zGU+|sH@6vgX_I3ijh5o^@muWj%hwltUXQf2IdgV?`f6`Gx(5?iEUT1$L+Se z%E7Nj^lHBj>|6nD+86dER~VE#I(XkAFXYk2b-s~`(_6&W#V+G+gd z#Ud`_**H95v~S6TaisX{x%#Ou#^&U@!vPgF;ElN-a$hSIUvM+q`qiuytEsc^>s+sU zH@iB-@bMc?*?S;^b5XEW=+jPcs^7ws`yMn2&U)PVlUf#%4YzLBCViP+p*m0W8Nc<2 z^5jD7V(qp2Y?_j7~t z3`hN*p}slo5VLWECtZft?B<#=hN)AA`=V~xeXgLH;kX-fL0kbXoV@trN7POqM|6Jw zvE~g5(UEKV1?yk%?@LPt@CTXZ^oUeDSL-(BJ9mq($aq|#5nrDXOeuHRk?efAwob-y zhyAvE5~Bg?!Z!tq(5HFjl(pdK+|mvCpccNylFnI-__{w?U}coEkW>2Xsg;yVqDik z;l#~@bkDIO^Mb%Z6}il|x0vzTDCNwFOFrXad}E6ZF++M5LN|j~mWPa^+J2YHGPT_4 z?;kx{tkd-%fO}%>2WEVASxX`H+$F8tNl|+9dw26Ok(5?$O%LNZ2?gMhv|@%}{KY3& zBb5HPA&uNiJ{RXKDL+N95Ti>+Xo>s9U(>Wja=q5>IbJRiIb$)8dSyBpdvD!GgftQLN@ zZP>!d!{b?M$+eeE)Ji(v;(dh#PS&x>Hlfw#BQMX?<1HBk+J}RAHMbro^p36hu6<3^ zSrT#*()b{xC-bxf8#fcq^6b6m(RXy5hu!gC=e?!!RLGTDnCQ3D(NowT<&DHpA*~|5 zqrcwhgk3tCUbiqdleo&8|5DqkcdJW^4je5h(~gRpy(C|;iq{I*cJWs-@m}4xQQwy` zBJd={z(zi~NM(tp;1G?31BJi(_@o8qA~m<`GIzNOq1d)T`Tn5(oSNT#HA9uS$Y({8 zrQgbv%4*DYs4=gC&If?y$&F`-Pan;4hY`)A-Y31Rv8WTed=FJ5nx-e{Rl?yGDBO4Y zV(7K|Kr5bUZcp(W#O? zpO?_t`cRc-h@(vzHZ7$~fVr75jH88IeKBC;hzJK!{DSn9Fy$;Oeq8CS#_&QmMLq zI;UbaUIz=B;l1_pCKYm~+GlB4`tzACUPk>SJLNV=W4H8WK#%nXfyKT5-bS}n?(Zh@ zblOzcvTjHIHw4H~+Vzy1^e{^O&B($WgNq*e2rKy+dO}42Z9{8MKM*clz zp4XP9pjV}z@&m`SH`brCkJR`UJKts+l;dbR6?^>jY(AK@#AJ?(crbh=Y$cVMta6Q&6I3o58 z?_>er9idl^tnQWgXjHy4`x0B0XWBvZ_cv9hB68+;<6ln5gdELvl}@ORN*5jMrV;n) z7Ca^21ep4{CZX3nc_zD!Dd>5KYn-2w3lGZVej)dw^1CqauEOc8M|oYOvHL}y#XgY& zZR;1Maq_>!Q#_i`)xq;Yp{y%P1F<)T9@D%(rdb($o?7C3ulrOIy6?x9Ut_6*yRBo3 z&zf{|wW&nE@`=`pc|X=hm&?}->gow$T_0FhMrt#1pLL2GrR=1)+|XNDq#M!zHDmH;*wQ%xdXr1bQ#xXJKGx-NN7uIZMD~u3#Ep!y^F7v&x%V@p0hdhn|`+5 zHOWKB8*@bBQuZSus&T331+Eu~_~jIW`=__8pFPHYoPTmRbHCO0mC08#Z;!P+jyW-p zI}~q2{&Gpxt-f3^x-&$E<5b+M`nB-B3MJO6lXd6WFTU5GxfFX5-5__4uXpv_+GCIM zo`EJAhxY*=ddPU@&lY!e?4I2wcWtJaom#V#Wb5^`itJO!b&LUm_DLRW2D|QJ34*TV&ne#?75)z;;J{*I6Kdz*v-BMmu>3E z#~OK&Ovg6Y?v-aetez;DeZNYuJSQ>!Jsxe*97~ zZ19ss`_QyEhj!g854}3d@#w||IdR23H6-&`BllEwMx*dHVep#yRBu2(GkbJ?SxC;i z^b2*@j^Dx+&+%&6te5t0ov!5Np1-?saPIA^w~UH6XXjhyeu$_=m^Vp8ERFVdI%2-c zu~4k#+Ng4U4<1?Yy`Y4hTVL zy5B|BdS$|@csbis0)nuovbbZlwy~Yxghp-h_3Wd2{4Z+s_**{uP;rR4JyEh%^ud8A zk?kv;E3qPx` z+n1x4j(S~VvnZ{(*b%dPh70w&#PRdW@{(STjHpU|)%o1m8qUz|+^wxd+~iAPqU71k zVe4l5E+X5l9m88Yi$xb%lKVYZ4p97v)lNC<*sRqBQoq`z`xZWd{_&ZhcuBsLxQZV< z5c#FG&F^Atk88^PJfjm{TIm%!)|!od-#f_lvR=*BKi2tJpJ(LF;&ota=lIB zw__abp%%O(n7eZK=~1B+jDJzie1z6_X0b`;PgFTy&at1rU&%pxV@a#%iW!~JZjM)F zXG+<9_u(yEAkI_ZSjp96QmKoog$rS}u?>c{Y?QhWaDsJiKTK?IscU>qc(+FIBD(UH z=$9Dy-cFwdUW)2{P|Y2YF&OSf&7QUq7qEHRcYNt=jH58i<&LgvPsge(&8u8#7aQdX zz80aG``qq3s5L)oi7owF#l7a~l1ty>6=&(XVdF`Ywf;V}KK#r1p>Er|EZ%ItKbG_# zG2qIrkY=$eI=R_y&Og4X)_sZ2gn@?G;=0Qh?my^%i_LlBYHj(G=T{};?5*2Y^J;07 z@{)39?=)Yl?VNqBX<904y!a%W@raRsHBI4{?Xpqp-Kh)`wwQg?^#Ao%n*Yb z%f2pXEnX!ota_f)`{lNAsrpLx$I$~DJdU^b0?BZC?;i)L|yjAxsKC*L?99&_>8ZE4|nSNn4gC0|w=Vpm7 zIESO?rKjx7wtu;~Zw6ZOc$tRCo3xnOFEX4+*koOZr{h&odG0Kx#+#%qY~qxAvFS0| zvKvQV_q^w;q3gOm%t_QtQ?~iuU_=c}Zf_@vk9%uNhK{-m*S!1O0EbiKgA* z`aURRbep5e#{=ZoLKRV>}(;G&{YX@_V2oir;id> zoOItXF(t&Q1W?u(zh`@YPIe7n$QOQG#puyFA|TNeRJaVRY#s377>w3sEWG8?L37b1 zO=oi0IPhES*`FHeZ+v#EQl#S@|IMTaxY(={J0uxYi;MR?BL zIs4wT*dh-6-E%~Itt7;nF*Q->B)_BfYlZNYlZMoT54%n0IOm&X3!jVniCW%Fp0o4I zYYFEhlX%%J5|Xsi7F-8ba>`m944+|P?4dg})h+g-Vou*}d0liUTh(4xR;h})RhSq) z$Dqz4;aN=nlYL~c*q`Y&FlesiTtCfNI1(B-QvuoZPv5juGAQ7hE&M;~2IIg=6VpU^J3-0rm% z9F@@Sy(KjNsgPsmP18>>)=}zbE4wO@5e$(!ld-#cv0ZenF?MP3kq##0NX0Ezv6`!L zk9`8xDYSN?wcqvbG8GAn4`qr*vmY}1GAQj~{=-~u{W$k=%5BxGOB0)OO*fBzo3nlj zF6J?)i|cPRF((UNHwxEmlrAzKUYPjmdO1I=`^$;b#kd3}y7sQSf#2u{(!Y96%@PBb zCS*_7Nyi+N&Js;g&*T-l#r|1K@tEmBTZhXU;k9~EAGa5aFK6ar#sgS88|Jr`KeMSb z-F&*%ab8^Y+@f9m{7%@w~QHs&|o;I6|*MS|UT<{=elzpa;=}&{hnxC2y z$KAL~_sz5a*y&uV=jPeol2q>X3MU@NAMrJ>?7Y+GAYJC!?^UN+delbS8H`C#Q}it% zUQLlYEaD+(-_hCWR`gDOOl-BkL9k_KEwSGqi+pc5p3;kDXgzbmDUDp z4mAz(e9sSiMO*WhH}mo4>&nezt%mnh%O;Yx{G`kp%6OTF*5?(uTI|J+1t*6K7Nr?Q z;6K`}NWDaLnxj#5AN6BYeuDAy)Hlyz_YoVOm0Z5octJgGInj5}3`0k}*3~Rg`s9#X%TUz?>o$LE$xITx2}!Z ztDc)Vzw@hhj$7}J#_x-|dE{d`nVbd-WAs-~E82#Y3I)`Au9)ECR@9G9T_J1wV1Ykj zrA8UXJeJzIlTdtDe^x_x>{fuMuI?BiwBs}JoatCbz!%M&lNY$E9kLuU-_r4@;eRlv zcF0BrFm}?qOBj3JoYv)?;_I(FP7s;A*_kX-ArgAMB4hFdVRxVD%{h)7>N6Ib$!-eI z+!*rXyPnl@*?y>IZtPM#rsN&}>6^fv{8?*;L&N@0JaJqCmKqm(7#Pk%ERYS-&L%2ruqx zm!x%NmzvAuUc|mJU&*Q{=g<&U9gNjvJHXVX^R!VXh`P<~fWK_|!(x14{3g^dJnh;w zQzzNPAlW2J-J9XMbxtK#(mCEOY4-L4TN_8Jv$}JWf-AL|Q17abN~|$O*J*aw5OKxW z8e*?&Q>0{zyesu!m%Is8TeM_t9P0_%j?JI5y5Da+v!qR9GmES6yB<9bB|f*1AB|B?n{4Z)p$Ww9@&q%`fbyj)J#^^)J}e5 zyv@uZwd?q!3-8EOVr#L~9`&sJihi+d7 zG!|77`!5EGq;Fq8<06<9_5!#($kB1_T|&6%{%*?Xem;9z$@n`MtMBt~oYUEL-fBgB zwa&o?zkVS*ARt1O5J3Af{}V^}OCMD`)@Kt2S!8A=rpI*)Oo|#Pri99yD8Nu@z)`V&;sd2=fjMHapNJ1EPdA} zeeN}r)pQ&-+<8!YN?Po0i^~Qvb*z2-)9$G|#NA(_14UP^o|ye*>i7V-wBGc|HRQsC zMN2kjZT8uiSy#!Y@a+%2H;H$1K#$IvCh!w>o9=q$+}K9p!r4lurKsp{ ze0_2JRza#J7uV?RvMhXUtQtHm9=O?ovtM-V)R^Y?pD%sAU8D4g7$OutQgVq^(`7!u zPA810G}VK9o#h+*xpAmjOgo6v!?$merS9RXALBT`OaXV?Wf z?ao)dl}tMLx2`NWrT08Kz;Cd|td^A89Z>6$Lqs3uE%3$aG!!5E*t-*A5td&(8tk)N zY8(F|+M~jDCbg5wy6Eb)j*m~b$|{A<#(%1-oL6{ZuXrU@RpCmntJZU?{NUZR&_#^a zFMg`uI(?6Y)(&0uX%^e0Q~y=>?P(<{;0pdHW%$^FyiZ=Qz4W^?A|hvKXM^1WxI2NT z?KOSG)ljZ>R-Piqy4E?C9@8*c_0KS)m z@2vs?ABws=f0i$t+=bo*oREI}b93S3v;phV9d_5SBM%bT4K8^&avJuaGH#!YFYy^Q z;Wyo`In&?RXPP3b?r@hlz_vs_@Q5ylR&Dfr08wgI=aUuaraV6!Yn8GrqdOQqp+#WDh=$WL8*s#&Wip(?#AuNA~= z6~ql@ns~8ehoUP56f2E{tSXWy$LzI^XK{@k)3^FmVSb#k^0eVMii{F9=VN(4yD858 zw9nNd79Qr>cyPVX=CtXX@A+d(Omi)MmdszLgsJXShM#@s9Df^^KAl`h9-}b+uE$bT z(L}0Mfs?Wad)C?{U8(23&%6zznO2V;1JOEiYbht%T7S)qGixjV#=CWqyugc0@8iFe zdHD&PJz_lN%KJv-wqJWD5!>@Hgd@c4pqclto(Dvo`5#%o=OS+furT`+w~ADImHjNc zPPyWB-8bXfs{^m78qSRubDh({HH?=o$dmq*`7d>&PnRnuDR1yUqNY)p@>2{nf zsYln`Cw_coEuG*;pEO*fj7@eNchVrR9<#gkLLH;n#-BX!xZ?4T*zmY(3>Pd8SWubK zT5Ri@jUMDQ#WdZ$klA%sMl9LpS<?ITWP_YdmE`H;D9fH? zb5{O4%q%fHQD3?4D*2pjXgYL?-TO%Gr&PwR{2sBgeLs1PzuP#~_MZItv*(evq|ke* zvzPNb+g^-h_sC6;2m))i*zR%{mOFw4-gb981vw8U>D%c=jcT_E@tr3 zMm}6uAjX@<^)b+K%9vJNBT{aqNZ`6vF>@j#H-2=RPi9X-RZ+ zABg)L2?_^C2;2IJgIPoO=>m>0&9LOe+d0z~&}22y$hlD6cRqZ6M$Vh1B;tTt*V%+a z;OA)}H6dF1a>k;u5HB&)ft|T}Yhrff=YtdGlZT1R{8@EIm!6jPJ;45YupK8TdL~_w zo11}dfa%Kb;$4MF!jZUPpL>nT_8vkWA=RdwfsFT^U#3|UX4+f{lV%N&&heb7V3YjV z9Q|QV@eI9k-@8vje5umszn$%yu+rs=On4jj`GrZnMIf1>Wt?ZzM8fv<*wm{MhMr6| zBZnDMdx*NJ2QoTmtrnS@xLM6|WN34YaWs#MGwiBocp_asHn?HIN13j3hPmB8W4lN9 z>GuShDXf3JpsYTAlj*6->5%NC%XsL$sUfS0zPi|QvtuY8RZ*}b1_dRrDD8CY={-&Oxs>j6m`$;URbYq%FZ-x!Qk>+ z#_n;Wf1l17p^I}5t^6qTW$yHF=*vu>m?=__$#{IlJz_P_;=HNV2`WZ$O`Ol_y? zhn^^UPhS5fa@@J|x}{>@bhjdYG=$+5+0lI6zlpg#0AkN2%ERPjK z9&`(DDZdbWyua+)i-gMl@SZHMn%=hJ{>wt!_E`f%LBA_3ey{HG_2`^?aMexk^m*E* z+ntlH$B2R!7mKemsBhk~?Zns}$}jZgcZ${Rpbqq&#xQ1i_HX1on5M3`mM&nnu&b6v z*GL(Ti}G1GT-3>xExAr9S(1sS78#>dxhtv=$(Sl^oFYtx&19xKd?!Wt&d;n-p4d{+ zfcq9;{JYu2BBpHfW`ESF-o;D4sAs0@6~}VPGp-WXZ%ZbJv$E^TtOaFnFCCLxA3;AA zxOLn~=yN31(>t4;zZS;KW=?OFj(-pSS#RHTPoqBEtklM zK1n^m8ms#R&)srjL-mfYLn~t|gW}69cZX*zJ@1a^R!G*cTs?@zxKvfhPdsN4oAatv zt4?dLk(0OMVbWjtZHYBCia6$>V&Q&R(EfDWvG2R2W^H@}CH58XzI}v?|J$q$HIDAJ zits+7X8@j|Fk48wi2~BL!v+w@F$Z9f7$3$A$YP=w1S`ogd!3(T*O0aiHh`CzUKA9< zVh+MBIiMK@X0N&KEiL9W(r+^!@SnjrV2TB5t7#-)&J#%NL5O`eGA=z7>C1tc;(#4i zdVWBGAM+X3Li6W;6vF~ZY>?J*0+^pL@}Gp-Ll_=lKNdp`ZXU$=A#Fl`l`V&`NRtor zf6MmFhd|sw$1NH>$R~hYjv=31NJhB){pqvA0sH&C5NF%gRI~`}EEF>8g4YyL& zp2Ga63H)CNk>q}QI$)j?>R-99h@nH8bl|3?Ax@|njG&Iu{?{ag^c=wyPq`q9yE>S? z)=gL)h=LJN-w*Z3I2&PD5i+QoM+vxTf#Cu=_d^s5W*8#kNw|3irl=tyS}ZWB2;!e= zH}}(Xfd!TrUBqOlS4|RFjl?hjX*~3JK+<-vp&jP*2hI=Px5e}zc9WW@vU%x+fSUmr z3UKli#uU*BY9r(XQX?=zpr0E?8(|JNT)|8r7#8@=3wZ@1qXRj-F=GGg0g^AlqyUT+ zf`B@yWPl+)dTvlQ2qTWbpf*aV0sI2yFnISerstnr5RxmtmrJBpC`hCX93&_!m4FUG zsISdG3bO+ffB{!AE=Z3noD4UwV%S0M6pZp-haJhaBnseHA%+Q3+&sizpZf1ZLP1UP(w8hMw7F&K8(OVH&uN#M#hh6)g0!mtv9Lm6M~-&Gr5f3ogO zg%M`M;ibB>?WpiFU2?ZsXAanN{f|bQQ>B+j7tF^pd>~lT2aA?xh!-vzql2`oO^mmju30G*h^JlSd6Uxq?5tZi{ zW5{UEefccf>#(6vCDBb(yWCMV@1CHn@|#z;m3~Ic_3?1fd08^BX@AI(F4CdtG0}~a z8LMMt5Mi@s9cetr5UUCtG|*z!#u&PKSXP~v@!daPSC?0HI5r%d`;g6kyehiP-2v15 zL;J*0d4>}A!rTi?mSX}|M?N>7$1-@ap}yL)Rf{;Kn{yq!T{uMi>~nsokwJ0ni5%_n zHS>Ym+X}hSged<2)~-g~t@DAM9IuLh=N)lBNGt5#IaHS{HNY`=TEJdYB{9S3n7t-gF-RB-F<+Rmfr>21{~S1eAn zRtCL&aif)bDKA_5Ldg#T+4zf4gU4g9S#%CI4xCJ-8Cxwf)KisPcZe<;VIQR!xZ=8K zCVkh_>w9EdcFRa3p15yVDc1exbZ70w^r`3cy0(dr^;117Gd87v5I1cjLtfNfzw3H< zVQw@=gq5P8aWPL+T|qi)_|pBmUQ6t~byO71Gzas)&78G6`_VUM-vW(i#yy-For`?+ zojaZ1sMpG*?U%@ElgeiwOESwvDoK{P^@eQYS-(qt7BfCsXfn1g`1}_;lkA(d>n>@% zujIt!>vE;NYPoDqiJm@BEQ&K;Da~vUH}L@sUK`deQ6E&zGv~PNqS*Y#K=xgASx&HG zzhX1}mxE%m`7@$I-{dJTkhi-%x6)l-4wPqbS)f%dvM^V+%9I;?A1kkT@$9}ejt$o| z=ZCBv1CBA0_n)rbIM9~eW1tw+&-O@6v;T)SQ#%+NK-Kl~v>}1f)|@CJY^YmmUo2;M z>b9Xon^VZf6O*^wngt!e=J2yu#b@#X;umXb*OS3AT8lxG^xeKq8Rm*crH)VBk`A#` z&N)jaRlk;@>NL}eoRfbx@J7RO_=E7z;re$1>6BVsY^R@7#NLrOz$%{Owccbb8G?Du zsly>SHY;jM>8^FJ9M!iTYkFK@ zNiOkV#6wrl$EQBs)s_sIP&istkR0SL?aO*pnA`M3XP{x%YkbZ&zph1ksnAJKJE>|fmF@>tU9_Zcd+Qx2aBF&gB>9Bfc#Ye;tdK**Q`S+y%wmf# zcOF-YxF&F3NF? zY?VgKE+ zsxS7bjJ!hkpW_I`zZcGJeV-uS>QrYQpk@-d&D9lRC`#jSyoqfv+p?qKe8b{7_5C{g z)w*y+F%RAJZFCDxHr$E59Co`rQTNX2r9*R5pBiu8O3*lTW$=g$Q@G;?2P!7V%r&mb z0mj9F7hUZPovqGW7p+d*CN`ESlq{J74&UDet}lhi;Mu3s?&Si4Jlyk9_o25odPd9{ z4AT-?QU3GFvM;W+9iGos=u7^s#{MgcKpSh(lUyZpzofq8t!Q`f$J?5Z%~mbdJhzix z@7T+%ol7wFjNsdrrZ)5l*Gf7H0eZUSU+1^>gcnux5oRSt4W5N^d3|+V-WQ)9EL1$A3J1babTdTD9qM{MUTtFP+;{ zN0+c_8CNf4JUn)Cr0J&+@y)LQW>x>z8AXH3d2c;-&s-Wc^Tt$NNDpih9687GEIqc~ zLs2ZAhZV*CyZVvihhXCZCNt*9t&}^R-6@CXyBs|ozubCtleNRExwnyl47i_ReN;sE z-4LzF(^Cu!DpwCX%ko&MrUavS9#+iDJa6uuxcWxln|DMyF6{6PN1&W&BPn_1w*oJD zjbknUCy}{Sl`HRDthXHGk~aNPyTp2Y0_fr*ReIib$un$k+X+i2=D)v*Ix@r)>wlZ! z1j{PLEZbuYPxIP?&^EpF?){#6E^R5<>?b#=T<^twy?FP1leTvkPuv;`?~un<{p#aXpTzEs!Z8Y&2U0nS9(HVQ=GR=gwTgz z{*v9B7Fu~#lrMk%-sR6>S6wS?VPEPC^?O_|T(VLUaMXOER6=r~yZ$0WnvK=6L%oku zPy3e?llivQ#OL$OYENeyxJu>C=D*AaTRoi%tKS;p3f`esQ;a&oWK6eC{H>ixc*z*g z8+?L(muBNU&6nV`{#PT-!bEws#5mn6p|lhBKk^LBZ)W6k?V!LP)MedWz&c$ZZNOKuzGu)pzt(8b?@p zbT3`WTzKojTy=qI&Dr)9!Tp=1$M1)d{i(zuC9O>P_#?`~SwXYn>phZWp|9Vza@3p+ z=6UqnB{(}E_ri2omWyEfFTU`FAuN_zNwl!`sdHef#oQ z|K}u>O@mb?)jL#x`eCR{V%)&AAr&O4%+Hp^@PM@6F=a@hI1C+*vPGd%6!QyX@UPAU zp_=I_Qd|8Y0^W$yvw}BKSm?6~q&EDuMB2U5%1{jIf43&b0{=T zy;7P7NEC;T3&XTnwf`Y9Az%gI3J|hF39MqolK;BcfsaDuz!gF4L0H>=_bN0*u(aSOK`akaXZ}Ti5TXci3aQ`+cg3*}_xkop^*T%j z-RmksO3^>}63D?7GvT8!}HpUV`?fVe&umwg6{11#N;&oY2e zftrg5-ShL`LDb-?Bi0hZL8lEVKtdmjg^1a}EH|taa&ALT4RKf&7}5!t+kZ-|7GP=r-sL5I7eXGm`3TZ!kcj=ytz774;(y?vTM+g;;&td2%s&Jr zP$Lf=x*mmMpTQb|(0z-adroYj_&1IMs8N98y%LRGLo|on{$H$^B6M0%iO2px{P%xI zLE=^H4aDovB{C;?1axsl2OugzdG{s_`wn6GPvZ{AauAn^g)a1wG8NKE9T-xf#{mAy z^gLh)fb~Zx;G?6402LSF01_FnqD;>KYUE)>5!(O95U~CRmJ&`%5K@ErPqIn^9qRO4 z|E{S(M}OEtW-zrF%Ya-Vfo{I;!B%f$-ypC*{$vIMs^~EwcO5nuaiG%)#DOf}Vk0&J zxv(KmLandSn5@v><~Zrqp1>26h7pKjcg`AdM173wHm+k|7lTU`%8< zW#sl4i7Cmg%wPc}j{ffjm_67I1MVqe{-3BZ1Mpj$!<@KZuxZe75ISP&((ec2b?G_5 zbS~U7A`JGS6BmvJ9OQ>y2f>4(!|R?O+QcEvWJGbwNQ9x&=AJ|dQI8CUPR>ZIzz%s_ zDgyf(7yyD{!4eHzEV7h9$Iv|n7fo=>h|16%bWUI@8z=JbzBp`!Mk0lrD;v0E3HfWF5-0e-{!*;LrNM(i$lT`$7W#<5o*c*H&`kOO z;!6MHeq*s z`5+EN6#cg}(w(Ho0);1_n`yJ7xR;1Nuo)178)O;BtstKNKNJ`s`6Q%|^CWHyQS{Fy z!4E)W7_e|22YsWA6l_Sg8W3Out&4xZLjZBt1zy=e{_$MIWx;a;gkaHobDFe!7go@6 z0ZwFiY7qLMfE|J$r2`1T?2y?+TBYD2K(ie^KPW(n|MQM@8K(^fKpzI%yM9NSog`KO z1jB;u%=j^6U4z_@Xa>GHfZzMX(LXa_m8%?}9b>-`9*#NyZO2Cd^B^oaPk|B4 zVnI|6Fah+2Q68ANjc5G#F$>Z{QVxNTP{MmafD64SK;r_va6Mjy_d{F{t^;w&U;q&6Yh4;T?8`pOOjS?!hm@>KEleVIrvynm_&{6)FcbfwX6MY{oS)_-ZBy zvHb<783-xui|7Wex0;Q^_`Pp>!RZI_p$4zMz|$fM@_nN~_yFM^P=WA!48Qk5Cs=^F zA3gTZ7aTxn&AIw_mgoa-J)woCWg1WaADFEd1e09Evm+S|Er*%_i3jk?3%a3uX9>@M z=mqJj1q^ya^Ax{=mqlRk3U2NTy=9JD$M+*J$Pz6;f`$SEIQT#>He0{rBVYsw&C?-d z2$c2m07P~W4A{ZHLgpES)d$9XAzdoTDEyIeFwEKyf`wuz5J!=|h6mFUfKflFni$1X zu>L0;BwYYQe`r=4(opQh=`RJS&OkwhxDZ--_N-J0fNG~|Mv6Z-jT33*fm&gT|J;d% z_b(VEau!-&962eh5m&XYK{19A8h7ZafEE%~>;Q!!f+b}DNWvl;8@w~7ouJ?$l_EIc z`8micB}s}a$gGAP2@PfkX%s0E_A2cY6lTC=Aha6cbSYY4reLozg(>oj^%#X797PbS zWqe=?5K3z-BJKaH>pQ@*IG+Cjqww}S5K#dU1S|-m#)1_zDk_RKcEsMrZtRlS5^Gdk zTNJx7Dr(fzSh2){1$*!MHHrm$MgO1Ox%YkV@b~9=e1!ST&d$!x?#}Mr&EgqGyi&Zk zA&r>vz+3J{CE%7V(1afWWBhA@lN#b9*=3$G{j>*BR(jWz0=t z)EJ4LJqjJEtTU(qhj2|^K&igLkdItgOotdBR6?1t#h|(?ni8vIZ8Nkd_u{J_v#v9Q zvxj5&laby=4`ss+!xKWWoN4RrI9B$Y_cMmGakt?e2;+w=+)(JU)g+ z{>&$b1BMyojTptTtmb(5*2^P?a#R%VtnwwDG^pcS=pXH8l$D%J!wt>w;54>38BuuD z1;cw1K#>7w9(~OaNEKmN3ZZ7U_h&3E-`zG0CHKM5r`lMRU$ACf%`$wY#yYBGh*xZ^ z$8dL>QtP>41ffFl$`hb?(U%7L#vQ5C41Gy8ifgzAm){#I3Yvlv>bLMh@}^005R0EA zTa=%^8q~*p=((n(t_VHHAHevkK3OiRw0AdNB*}KIyp(Y!<2Guqm?vNeFIH~~#`+xD z_>z1~6T$vaE`+ z2C+Druat^0&L^5+vBVk+Iz2}j5C^5iLV`t0b(-Dr#;ZhgI2;4bSNYuBxQ_rV09|PH zWS{foP%&z?V-|a^&w*CN=)!s#~K;&Icd+5 zjcUkduOqJ#{fqIXqnoJ-%BU$uBzWbaowKz~78&!h(KC!Rd5ON=v_LMvs?5j2muIHY zKoJ*LN&)XVl1cOEd_2^wz5q|jXQvv~L}5ayO&l;4N8FQL%;?EHmK*PhT9I}H4>2d_ z^JC*zpw?0=)LKP$2ToT&??IbRq-#-mQ`3zetmIaeS9m=qDU-Jv!$}(vQ46-?i?H5X zcN$yMTHx57V^3^6OJj_Oc-VMi`0qJpY^$yrj=&XwNojx9h)lNJPH47ZHYug98_Sbs zI6Z13K=Q9(Yrc7Jj0VN+sc|pWKr=Du+us;Hse&dCtkuC~Q99-rU(k@@BxTljrc%_K zT45fnUMeQd0v@J6Ng^7^i+iv=shC3wNv3*47f+rMa0e-=KBfxPwe~ibRQ&u+>Qc&S z3Jx+_P%%7Uj-0m~2|_N1nbOEPY1M+x?D=xcX%8bz22v9qg=GbR5?R4?m0Dvzih>NQ z(y)d}%}wKIg7PNX6fe34hjfu_))S+J9a{+}pHs)QjOx3y)>18lau7Fi9GRBmlrM)txmbD}{?wf3gfBpK;>eCKsE#gU)$L31HFdVQNZ%I90KiaK~;2I_*y~?G@Hg;P)})8ThT4;xpbf zU+sw{=7vlfZ_3A_)}e&|6w_h?#E42=Cs$U2XPHI{`zZ*kTG6mV_|=dh@-is#t4vu` zLPS}&H(*lvb%SXac{qX}p>BR<_7+ntX<%Pa80~=NvJq zN3~d=;@GH-(68Jn(@UxiXEQ2u&PI%#-!7U;IYKuT7?Xz8(7FyssNr`_>LCesE)A84 zEYmcy3))dsghdMK_(HThZe|bBN(IqpG4dSz7N;cmm^V_h$T(Z%Kqb-7tmf7d9Z+-& zy6ouR06as@J;@Vc@rKIL(&pNfDi%g;$gXaMnTE!g>ymgOPx_3MYYE#B-i0pRB0it=+gi%r{sAo!Q5=1{800Vp{s<`?7^P;w3F z=R}{ZHHSMqteMh(lld4`DKr%dMejl3N zo1{1^+I!aAg4O_W1em=S9gsNHoR=l+LD)O-xj8?nA-v9kDo@{Fd2uz%pJXM+=wmfoSlpF`wJjY8a5hK)aSiP1p=>jyZVSs)GMdn;$!vp>bvTS^ zw@Q19iQItuCA)YSGw$ErEyu}Moz9u?uUv@DoQ@Z@o(#1tCo^NIyR_9+hhz0T5EQyX6(Snmw%Nj8e-kJ4H{F>>))Ei@X4bimPB9MZM;b!U8Vhv?c8V`m|Uj>r*nC z4lSVcjkZqKH1JutwS*ECYdxQv+5Hl>IlY=%M>&nd(3t#e>?MR7Q9oMG&_pN9B&0Oy zZ1p3_!Wv-qVhNWKZ>0CKN@NnJE+;QTe0Y*|3i&z(Yupf@hFaBK1`o}c6akkma}{y? zzAI?f$DgbdsnOh_9H^vR7-=0(0ES3)w%{t>K3qH6sy=EI-uG~d)m?a%f`_69iCNS; z;F@ey-cPrx8SH^pXKk+I;Ii#3>sv9Ga+%7k->p4JTh5_Wnr~GDF%q)PYEfD*vz89YSSA!vjuO-Pzb%7{)dC zSQn5KVLtF#lz>Cl{mzQ`X>Uo^>$WVdsR;2xW$vZQu(Q_Z8mrW}1FP&fZ@oi<%jw~N z-GPU{xNObRb`zgW{O@9AuYAkuErcr2EP;N5_%c+HBhJP)->SYiDz@7qT;2E1I*5i1 z^*tBbN&qmkA0NP5Vr{lL>X_#vu*n1Xx~&lQ z(xINVUDQg^F@gDQeMw1lyL#X=a1Hi68~tq|%<6BW1y(##-PG4+VDbNn*i)++I{MJl)(aok#?fg%+DGU4Ai#=>p1dGzCmyI5H zGI3bN+dc0ohS0dOI7`XsYdc1R-C57|p|;`V6OQRL`w33W7LBms;Dv9&M315=R^`bO zTNup=_L&& z>#z{UE7h;qwvj2YWFtf@hCH(kUtq|zyJs6LbXUMvK7t&5w=JGEc?oU%6qZa>jEB<- ziajKu&K>WW@1;OditkSpse;r;aEJ{Op18ZSkFOx;cpXW7gIheJ?^|CA;)N8P*bO2N zwC{@xvZy$zgpdepmgj$&+4whT@a{OtokkO6M6!T)@Ufhx>h%|5Do1WcZ%(%;ZJJ4H zreQH8MLtddo^0P+4A|4nr8Oi8?kyw*C`a2!w`ugy>lHkMC$B=e+euOrS>tvIym!HY zf?Y^|-b$rk7wI4BzEVA3i^+NM0|Ev+DDnB8BZ*O-s>m#PTXd`S|e z{>&aB1vAS>Y?+28N#%$gv`{5;kTg>B=ip)Lp9;`a2T)x3XN)w$@n@*gK3P}n>jd4O z%ct1?445WW6n)Wpnv{(v!%-7mou}aI^vf?bEHP%mtJ!u5t%C8=Sp-& zq6|!tYPiZM*An+9Iexs@KqeJn4d$pl1qps^9K%H|3+Ld{m{6t~q6?EoammUZCe@;W z8M;6kBr039Knfk#`(C89Co611M5krH-wU4n^k-X#o>yuus&(vH$b@b|jhIE=cW>jqEZAK^p0RU$MCDTd9yqk6Yv#D(>(9Ts z_oHF+wQcFEa}u&&^$e>pJEd|?QoF}5e=PH`;hwX7_WXFD*<-)<6*IRSy79xXWmen$ zO|zSS=vXd2>(r$N(MuOe=Tc4iG7kUj9l0R3Ly`ME{$8+S&J3%3x6YQlBl;ix-gB|( zVepwA$0yYPUr}3$KdZk!n!jejdgu6br0D86vqr3bsuXO;0wb{#V22Ul-7I8O@-+HOC0T&dt6c=i-4(p{T zL0_<5^7SbVfnB=|E7PQ*t6P2-$F*TB1E6and$?XIQk0kFPUNO~QUQlY@n4p@&WXSr zR(*qH7GmQzNWN|l1W~<+%O`+K*pam7?Bl#HE@jLvE)hBj$65LYsk$iax)Ie%%zvZ$ z_vSCMuiF%FHZV={#_mb2VhOn1GE{2jMkz$7c>no_0bSf(T*iCnuHeT&5&%{Uzuc>^ zP$<+i;p;1y@+ID23)Cru7h%$*$Zy*1t7B>vPC|=p!T`FFrmFTN4XQ17LZwBs8f^mg z&+=4Y+$M>xfLg|>+oJ?^&ZDS;EHhXp8-4^*U{th=ORuDFdM0eMpx z8x~=;|DxIN7FX}ETs^Dn$wImog|YpcG2x@LSQaXA8xq50Me=6@wjzajsV!;?qqYD# zq=j&CS+FRzltWi)X-eJPB83V&F5LMwdn#&Mj(_EJwI2Jy$v?+X$CFLlDw#!@#AE0G zehyxLI9@efnXPr4W!UP!Ri)4Tjp{A+G!Sk+D<(wcY#P~r0Yq%Wze+k$J!2jGnx=QJ zH;{ZU(89yrToGt`<6MLJi!E?Eb8JCtJCu@CMi-YQM9*$qN{rIqLFka zv`3Lj3g{7sY7Q09oU!A)`L${O0_n2@NaQ#>63i0rs!hw{NX8^Pl3(1O#xnD&zSwCe z;Bqqw9zQeCiQMGKjQJc1;+Lnnm(J~LZQlR6;SugN8Hy&=)HUaUrr4a)3ko{bN&N>> zt1fX!r4eM^1?q$q4yyZ{3|u$oXu}8&uUgAJ-gnN;wRp_DOKn{SNA{%=@;*&wH)hD> zUR)phl%^m5f!jEHv2U6aI<&{MqT- z@5B0SS8FT07qvZm>O`wQlLRUR<|+7QYcWiYA8alz6?6jAp4*G$cM5yVg;jWGN5oBY z!9vijE6vW1#WcPNg7ky(g)2)wi0NY1J}F$d-2QzKa>bpfiTe?HNc$x(A!YT}YsELg z_~#)hMyE~-ql3Sku-CK4@q?I`i^~C6yrPbEFx$Kz!4RLXO1oir_79|@p95VDtXjHc z5>SJ5Xp!!OFsR3=uFXriu4QM^5oB>GckW`Ke&Te+LQln)BX zE-tNgO0;Lm2c#aNc-8^b^s*#Z;`=${#(6mhl8`a&r1#`#tTnCuU0hn|WXxsb4@zBx z3^AsDtioj!VYuJUByOGsEkX86_q>ZjYRmBUBSySMEOG`5a&=t`>UMPSM+(-VKgk{Pp|y1|5~Fmi zYdR4tuIDT2ROpr~d?SBX7IR7pWFAMcxbO;x9O`i55qjgh!nyspi^_^C{7MRwBp-#^ z+xw9KT;fO6EKcn+gs8Z}FF&h(Of^B=F+f2-5%k+Jsg$U(U(bo9qc9QP3C`Wby`zXV zXOwFZcHOSwn88)tPGWoIA44 zQ;9nKgz7~LIW=xMQKv3eB`~{6w_O@uKO;oCw|;47%o_CmXIYOVBLt3 zr*{hP&BVI$q*Th`wyvvK^eL%?F5=;>k89!cY5>GM#r&tAK|b;Vbwpjgo`kWxFwy#N zma0=bcwHsf$x~8@ux9#$GW#}wH4dy*bS>~_@@c8QP^iOcSfJcNUbHwHe$ds+*|AMO z+DZ&V`LW-W&-$16ahajF;1{C8G9l_%2DKR185R@NnVdT6Hc@e*VX)9`!l>30^TAvl z;57QxWhax)NVNo0mnSt^$}q@%FzQ3`qHN$9L@lry+k6J{r$1-%8LaNvXQTjOChbjS z`rcdqid1QG7Slf$F#aqAOny()y=SFjqV7k3thJfY@Z-gDuc0O9ol|$TP0pcYY9Mnx zhY^c=%nCbg=eDzK+rQz($AWVAB?}?`r{&ymynIrkt08>PL)6A{4k&<)&s1lCJlRx6<>^>{ZM^LVP_n>jwYnWL@}tbYlty4(y!uK*g*+5!2p!B^DYx*de6`fwWu)hP_O3*;K$IY8rZ>U zi5mQLA}(Z#*rwvuuAzK#F1!${Zd04Gnd4F2H0AjPaIElkiJl;ry$*a?4?P~lQm?D> z(>R_sP=n)6I8Ud3{x^W<9ZWdCAI_$Yu*D$b9KAIh4A;fs*#v@nVX7EW@*dS^F7)=el;{x?lCaPeG# z=z$Yau<+EW8c5s(xBixDfnB#y^w~E!?x6D(<-_oc+qPM`%i|WhA_8B+@$)IUaoj^k zxO@lr(uKKkeiNOu(eYK9-h76}_Q61^qighsrJ9nsrLLGT($~gq-@E|daPaHhu@A!XEhwVr!Y6}IudH*za4tvle_<^ zohOEC$To*4x)_hmdZ6M*mVfF7uv1!vW}-;93^b@JD-J6Td&QNG3#lrMFS%G+}_|by( zl;f+OsJMEMU$CgE#i0Vxb)Z^x1V*KFs$tJ8R%H8Kd=xmWdj?TcU+JN|3|IUanc}I0igkfbid5Nc1&n>I;-A>_b%CBN!_B#`Ptq79uJx5iBX(id!0cHSwe0nNDWO zFV#qKGm5%i;C}~-8wMF}7?jx~9QTT@dv#%2^gwjoPRYfkvMP)Idt91V7swJ{;S87u z2yK1i21lX3W0(u8>R8juan>-F`AS_GUc7?7T`CYY>NQUExQ8{yg@kS?m56G;qOiD- zeXma0+X;|87^>hbLi6)y6$gKyVExHu`}C?{4F;?Jv}JI02WvidX@*Swc5CF`pZQUA zJOblLjbIlSIhy!yzLC6yK^t|gI3o(IWiSo?pkwXKq_S5I^p0w6b4a)#0+~BSalfCJ0wImJpqB z`TNz$Wg+DTIzxZ-U1t`tw)`Z~`o;oA&gMZyNwDkt?cy9_#chwY{k!%Fb!|!^D(-tM z%=SN5`z_`(pnn-bV?RsurP(G<4O~vtj>~bEC_g$B8eUvl`)w@Tr4lsMZ;-dIWG`~y z7;jdB-;8x%@b9`*CQ1VTM5tLtXP3@vIDaX&H%E2XrCqOOJqPPg5UrmfPqXYCsjldP zs4q~h*alv-B)?&jy4dU9tXqXpv@dE2)78?1ZTg}*sIfKrTz}@!Dn*jxxV|YJ5z{uv zOp)b?ly$P0H&XV2l;ciXZ)>n3Xs4 zFx-|?m}T01i*MfYJSB2b=I^Gu96!R$Q|*@E4rcxB(^q&wkKRo>*M$04VdPqBE9gJ78++l7 zEM`UX;Pb-NEZo!C(d|3U=1_#XyT0R0<;D4?kazw|T+&X+>j}&2<@x0$R@|Q{i=DCH zk4W5ntrS31+^$Kh&Cd9Yac!~mzbWeCB0AGy1#59)#eJK>^uUBKF74bQC95n! zxN#HRi>EANs%o0v?AT1q{#8oke(-aXWxLC*gcmjNK>2$yR37(lQc&~{r*^GPRNT8s zFM&iDK;2!JsACN>o$fB<)D?}0ipw?&IF;kR;nuAMheB9uqfE2;KqIIJRBGOq-xXng zomJPn&7rz&slcyozYC)CXztkm{2t!#9qfG~DEEZ&Y9R6BqE0VoR~8&}({L8X^Tph! zpZ6M%WG^H+lwaaWtu1Uut-p-o)G+2azZl4=*HtPm@TASB*qK_}4irYUabOR=zW{ zaV=EGIaj{h;8);(f^+O2b^LKGTavp8|DTySf1@iJ7l6j;9rfT5svkFql80QAp;f(1 zqT>2cdZDbXC#c&m6BT!d(qW)B6K0&Q?gn>=6}O4{cyN!n{%KQHW*sXRa9iZYT#LwI z^NQuQv4CKU%xXrd4t3HCm1O6!!}(ds{OUs7HnQSTzWL!#g1hP}>hPUlXXEqBw45K$ z4ah6$X^F#3YBZvCA30LE&@zrZ3$i1Xozfx;0*Mc{Bl&q| zPTCi2;K+I$b&|CF%uqtjOIPreh`z`}A<;YMuQnBD8JHZH)N7p*glrGgO5Q+uL;_LDv_&xb^Ds60D`vqmB1 zZs6O$-eAqRfT*mFPRb;~`aMtX86alGR#^*{6h;778&iC&j`bM}^iyZWQGRII*dKT; z-!o+Sq_O{uQ!C;~wTN7q)%KSuZcXq9bwxa<*5mm-shYt@d+h3t&OQzU=vR^%^NPq_ zgx3E%KQb}|#>w`{t@W_xTwDx8-p_o_LxFM6P?Hs>lDzFa{pYvGIRW4p?&P4Qs?n#e zvDMJz2553!U6WVh9Fq&%n~>LA)FbqY%3gia2YQw9&K(H1=t}%Z59%rA3&DTHf9tj& z$bX1HTQC25ZwJ3fCrb02Zy>ZBG=Lyv5Y6vw;tUR%h7oi#P@O7rICaJ-qBaUryCaF8 z>@LQUV<yciV6C^pE)(^o3okU%y+Bqfu`$Vi3FV`;#sF+az8PK&J=^(`M(MY z40%Wkv(q8!rfTiQ;M!l{srN&2pY7yKCw~7Kd9gb4mu~osek&NFCM+OGBq(hkDi;!d z81=l}onn|j|G*ZusZNz^EIC9@6ilZM#jgDXedEy+-E~Z3=7q{bh4sgd2#pwx5#*0^ zI{g8bIgMA`j^`EiH1HX7QX-4H!E9q?Z#Qq8zQIB~qbbb-ql-h;UR#NZET#c$bV+K( zyb?fO{Nq48+0zmfqOvg@Dt>?XfDEibr0Q86BLN)=Q>q|<`>Rwh@zvwLjsapQIcdA8dQlTT|)V>ujgN>-isevM+8Y@#?ZEp=8MW5C} zQ|smPXQ_5vMA>E9Ig5&9Y@h6~@p}}XriaZeyCdG--d;hS*FM#2W(tE>PQ!LV-|;09 zb#g^PBwE9xL@`16-HtwEgU2*NVg1yf&Ri?VbcEcd0yOxchfYuthBt6&k`zrJHyFCroH?3Eg!CW1x}F zi)+j!QMaqeRfK8$t3t{wrl|mV=E4N@2Zy>X)Ii8DN4iVZ06qRg10k;*O$K5B_Si6H z$O5ofYZvD4HSs_n{_#UXJz&)mn5rB74nM!=ZIm*Hdv%=B$_HJvm%3eoFs!lxsD zKqJGw2+H0t5$+ILSI#f2@*w7H$V3d|m+%MuQ~0M5 z4*no^^tHOF4{bF6P&4rN!lqsy`aWk(>#3n{dOg&4GMdWIigqVeM17n8QW|W9>RV90 zolf<&aVkIW1tb(C{}xsiFGDkBOz7b+Yr<| z-HF=2p*nr<_^im%`urZ|GXe84MS#w4g^725FYoj~k zbWOg)iZ+(piK1g0qiC08DjJdO9^hCz=EVca`Gt_9zqork-&$ZHbej6dnh^i_x*PA<~tau1LhmOfhJ5PexyXythb3xQ1$Cs1nr%r6=gVecdiAZZXyI} zpsTtDBYqF&UcmWoLxZLeb#M_ue>7E(Px~YlI&~AJ`8Ozaby6xVBUYpx(gdeb%^>C1 zv$wDW;Wi8xMB+>h!^#cgL_c+2Sw`S3JnEhF+SvPHAi zg}VL8S5IrhC;3|s`s48WnHv7$tyJSQYK27E8hqDW0R^8asT=mQqhMvfK(c>T0m zjYdJ4`dEPU3Qb|DZPd=nX#-V8KV!?<$Q4m3vxx!IIm{3Bs9N&9n9^=+_{YT9q@LzoX#Vc6&t#Uo5`eou!{AsngGUXcmi-JyD_eMS_q4l=g^1 z?*~^nwLGQYbiAx)>4gFfuWBHls~$d1HSgA(`U_t^dtj>8M+TQ}X$m2EC_NlJG_Bx+ zubA4~;P_I{-|&HkABjbYzy0iE>F?o@0hoar>n8CdSsH%i8>I)8UwT8|s)z@9Q+UQv zhK!?r&dwg!2l%d+4!oi;qNl+16E->earU|dRdbXlR2ARd@z}TbAkbP1AB&j6^8Z?iYS6;teWfG(|!)puObo^g`BL4lu zT}mjrfhI$nRQG$WGiI z)cg)cx(E7S-?-7Ui4}>NLY&5ky>VmEGw^@HZcwlGv-!l2bcQsiRcqTsR867X-BmTd~eSPilmQ#X^TSx`2@rgps44TLx_4Qre5k zW{rk`^erS7Ibv~zA65<_z-7j&rzJ5tO@`X~kyB(l@gs?>W?J}t3`8A9G|V+bE?Ige zXBZ2r&u*e3eJmMuJg4^EL)54}S}~%b8F*yziyZaMmh{!a5$BqtQ5`W7^ivr=yWu4m z63qrW->`i&4)vIh5`?6)bm}*vM9NP7Ele*shklk?ev(*`hPI&764Ui0{;r*- zEN_Q)w!s6a=DJ#aZxjE{pXCx_+O1f1%YP5hRs6kL{Z9SeykFFw?)VF8YW18-I`Z2( z8`(ehXv}@cXpF(AUy`F zfTn#WXx~J&FH(129B+bczhF%3Z9DxdvDTQRPF{T`L4Yq_eO`<(8_9IP7iJ21bz{?R z2;h&`TItM`gwIept4J7(q`IYr$M>BKDVt0V$crJZu4WB=&hag>21klr3Y$)z4@`Rx zJ)2nD^v-VT0$hRnOr6ACx(`-MeYfF^#;H0o^wO5e ztw!fs^g;!al{j(zj=9%wsIOay21kNk^850yOau5wXl9s7znDga>G|_AB=pt9uAQbr zXo*M-6EghLF8T(CmRBTbRuydC2UOIyzuh$8=kWiEdPJ>sPp@t6~X8?L0Pf%uaBTmLMN3}Zt-6qn{M%fe=auU<@E5<>;AHom)-;Xk^opYB&(qc{6eC&7Fr%RXI zOvqxaF}?UKse5-~Le5}`EuO8O>93oO@)=IZ#|JsWpw_(|rECm&jp-HHdp;vt z&O=MHFrf4;z1>g4k95cMu|oV`K2stvSVF&vmGKecT)Bhj&t-E_-ycIX<&gn7z&YYx zrj@E+4l{EyW@i1GHs>czp@g4|cthX5g<6Km&8_xW4UTllo=%}D`SOgrfte>9XIk}i zGf=UgHHDB*S!496^B{ESFAkh0v%fpHXg(48)yH|Ae$n1E#ldQ0?U?HIqE|N0Ac!YO z{>F9R8va@L9IMEnu-wyQftikCIQg2d#uA56w-WkZ{6I0yPp=hJ2sxYc<^BvkdLgtpJd$JzS?gT&KRKE*F=BRDvPvGxFIjQiY9KgnG*D6v7yiKhx&x1*hV% z52}b_^%l#8#nSuUQlwx7jPQC`6Kd&XXS4B(<)(t^+=p4G_}6tS5VY3TF{QBV#d0%Y z$p0AWK7T0#z$LC5Y#( z4wZ`~mfSThwY!3PRn`GASvKqqV{n!LJW(EpPi)2>IWJ<*bBxzR234F_6vuT82xS@`#Rcp=_$!4s^z7mPGDZ-6e4c%I`cR=)^xcIIyu_H_0 zh;u2v*A}wRnx4+ggoC`oGpvp}*~e8@B*S)Rlh(+TUZKR~eb4;B{|+tepyMyzlSB*t zFFjx^$0obRS}1fXNrNw0tFFF>4i-PK3l>}Y%_jTvFb#i+Kh;3E>7Ni4J>CJSiE{W> z{wjyUr#K*y!kfadlt*J(B5JvYk*AMXE6sB7f5-N%Q%{LXXC63v5uQ*XH1{cj-vZ)C zu5Vgz`}~Dkhplo@kqmN`NuyN`$9HTXe98us=0){i*8@7Rg`m6ZWt!cK_u7?G9(5;{ z$Zg@)yNMOY4)hk|n6NWXwqPvCcy_GcKomGitVkSAF=OCH)K%{kr&i~w!)b+A>P{Rd zp{|T#xt}91XZttGorH_T7OhfzIgA&IU6KAVe!06WCQYW#H#erCf`lwyK@Ap}Wul$9 zm|m)H0#x~>12QnLmnJ&45cp}1xBEqZ5RdB*q^J83e+M74Mzu#}kt(A^tww zRj*G`9)$7GISjG0rZEE28L3EEChEk2K^$g-|^&thG8_timI<=vpM z{*{KlONoEwPIclqxf4FL$|we8DS z!Ti@6^Pj%PYX^xHDcfn!{%jWn{EQADIG9)+hk`NbsBmovr&ec+($xvfC3DK! zm53f%!437x*I9NuUG6V*ZF&Gj^OWO7oABiDo@A#|U)S(g&Ew#``l-ODI@J>0!jg|Y zt7g$07q>kKQ3q>l@P7`+(kLWv)a^iOXCcWR6P zK(9nn3r8W1H+(#V`s3Sks2Z~;qNh)G#vJCVbtmZJVY#%3gJb6SpPz+RmcU`Wejojb z1^z2{7Fzu0Ue%*J27V1JkDYV_**u2i-TGHO;T?9Qdfh@$cqSCqyRYjcV(ov#{^7+D zD71PyQIWx(PSrC4n`RV*fbHK1cr%w+M;%oKY&;493lpS50TG|LrGMB*mvMdOmXjYYq?<8Sx9T#1pDANhbjPbCe(?#`j?}@qV&! z*xMXxc9tNXADo1O%2yX3PeoiotuXJ9Pe<`ffo?rxey(B3ee))1SQ;t zP5E2V!c`U|PLN#?W_rS1^saJ??LVcuN`>(y@)m`woQA9D!~4XCEd3Nd&?s2xn{y}NRpagCy;!LxmvV85)|s`^OVYPdrW)Z6$V4l; z-{~TH9;x|h!abBTY~&6&oI5m*(TUyVPON{NQD1UNKLY`GZA3-R ze#&WZI?9q1fha2m>sNK1fRMt(id6nI2A7r+&{)o>QBb&8fHW2$@rn*B||NPL0>wUi$cDB|2y%wpaR)uW>jP-P8qKNkNkqln0i^BR3qvvnV;KJe z2dS^qqx>*p#ccvUY}P$hcCRat;y;2Q`=tV8j+-3H8R>wC+W0D{=SFjC8Mg4M+U>hI zHRM-LjbOM{K=au`*fl_Xrx6q}4GrrMuJ--mDb><$phJx?oL<>-Gl>87bgMu6dQDZ< zdL5!B%_0cb5s=G`_{ALrxYIz>z~eVi|JSt|-0!A3TUNaZ=y93`!Zimpiuc%BC>792#jsj8 z)OFO>Z5sYD+pGn}U=f~B`WEDM-lM^B9Rkhl%Q*DoAq|8J5ooxIC9&z`?4JA$-bdJ4 z)z;P5;e?|QKJK?4d$fMGAmyZ3$&3q(s|9KCt!UE)_S_S zG9D1?^aoa7=Tx=lE-EbjgrH|xP}?#6MBe#*LJ5dEgK?|x@r0Mek1HIIoYX#EmfnM? zoOcA_CWin42@C(Rzvse8^k_RAPh>dyxQEfaO5V_bv!-M6~@a9mMsfNx>9rHU_Jy`kw zsd4U*VVk?2LYHTv8*AzKac`Bg0e}2YoohG?loUVM25Elk`*Z%XOnRt}T=9@(tx6S_ zOYoF%!fY*uOq%xst7Jx4?lVhk5t0Ia3&W)o`JEZgT>nFZ#~^1auLU@5tVVNc;|dO{ z86TEvOMT$@D?CS1OPLw&pYRe=g(| z;U)A~S$E`4z6oIHyt*2*y0~2L#aU~ykSFSnrpgltc-@y%D~ii37%sCgumR81DRy4I zJ3||wKkvdZ^+UyT7!|@r7hbI2e=7f?sz0y37mO2_>A7Q;Gb4x}7hss3pWx@a|7Fle z$lrq=)K6nUONk$sWB9PIPwi9qGw7Rw^LMTUK#U&Ek2ew&y^^DZT^qgPY6?O) zWB5Y^$J=}Pv}=Km`v*Q&RZ|kVp4pjKasyG+p1vHq1+$K?Wl1#SV0_fC66)QE;+1qo zk<(nT9;z?lmOOlxAf$)~E6H&L@#{do>DY^lC!cwWAfN~ig!Nu}OH+*BB0?{E3B6*P zafyL+kI2(EYGt3_ptZ~iSs1Pop#wOfOwwE6Z<;%biW@~}UAn`e*KHgSolG=(2Wn_% z2i2W*uBJvFBIz-ndI~k%j;iVK9=i?nn1IGK!I02fc8AJ}3rBDh{d-m8r1yBeauu8U zp1uoZoA9?=tzPWpdv(2h&IvvGF!KjBtO)xc`xdq&NiLlR5AHT(ur855KR8YV?)F0x z8-xEvqZe^PauO^02}d3$KByI6dh}Mp>&^jK7krCnDgRWn?aI0OZ=!75YW+K z1g-d}&S8SuXC$W2h@1dH1mFraN;W$$kW)a=7$ zOBIE_m}p%1|IVKQq6EFA8T}R2-Xsx>&Bd5)@=vH@e c%5G1Q>L%s3r?2bBl+T{Q`R1+1OzZOh0BSkhZvX%Q delta 52506 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 diff --git a/libs/calio-forge-1.19.2-1.6.0.2.jar b/libs/calio-forge-1.19.2-1.6.0.3.jar similarity index 79% rename from libs/calio-forge-1.19.2-1.6.0.2.jar rename to libs/calio-forge-1.19.2-1.6.0.3.jar index ba4f9be822840f9655dd7fb44c5872683b18ec3a..aab0bce69eac12e66d4d473dee422518758965be 100644 GIT binary patch delta 29183 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 delta 29126 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 G3jPNLY3VQk delta 24173 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 OY)qM> blockCondition, +public record MultiMineConfiguration(Holder> blockCondition, Holder> itemCondition, Holder> entityAction) implements IDynamicFeatureConfiguration { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - CalioCodecHelper.optionalField(Codec.FLOAT, "speed_multiplier") - .forGetter(x -> Optional.of(x.speedMultiplier)), ConfiguredBlockCondition.optional("block_condition") .forGetter(MultiMineConfiguration::blockCondition), ConfiguredItemCondition.optional("item_condition") .forGetter(MultiMineConfiguration::itemCondition), ConfiguredEntityAction.optional("entity_action") .forGetter(MultiMineConfiguration::entityAction) - ).apply(instance, (sm, bc, ic, ea) -> new MultiMineConfiguration(sm.orElse(1.0F), bc, ic, ea))); + ).apply(instance, MultiMineConfiguration::new)); } diff --git a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyBreedingPower.java b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyBreedingPower.java index 3c5fc7d..f9559fc 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyBreedingPower.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyBreedingPower.java @@ -1,6 +1,6 @@ package dev.limonblaze.originsclasses.common.apoli.power; -import dev.limonblaze.originsclasses.util.MathUtils; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBiEntityAction; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBiEntityCondition; @@ -18,7 +18,7 @@ public ModifyBreedingPower() { } public static int getBreedAmount(Player player, Animal actor, Animal target) { - return MathUtils.randomFloor(IPowerContainer.modify(player, OriginsClassesPowers.MODIFY_BREEDING.get(), 1.0D, + return CommonUtils.rollInt(IPowerContainer.modify(player, OriginsClassesPowers.MODIFY_BREEDING.get(), 1.0D, cp -> cp.get().isActive(player) && ConfiguredBiEntityCondition.check(cp.get().getConfiguration().parentsCondition(), actor, target), diff --git a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyCraftedFoodPower.java b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyCraftedFoodPower.java index bfc7b14..456ad96 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyCraftedFoodPower.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/ModifyCraftedFoodPower.java @@ -1,6 +1,6 @@ package dev.limonblaze.originsclasses.common.apoli.power; -import dev.limonblaze.originsclasses.util.NbtUtils; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredItemCondition; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower; @@ -29,7 +29,7 @@ public static ItemStack modify(Player player, ItemStack stack, ModifyCraftResult IPowerContainer.getPowers(player, OriginsClassesPowers.MODIFY_CRAFTED_FOOD.get()).stream() .filter(cp -> check(cp.get(), player.level, stack, type)) .forEach(cp -> tag.add(StringTag.valueOf(cp.get().getConfiguration().modifyFoodPower().power().toString()))); - if(!tag.isEmpty()) stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES).put(NbtUtils.MODIFY_FOOD_POWERS, tag); + if(!tag.isEmpty()) stack.getOrCreateTagElement(CommonUtils.ORIGINS_CLASSES).put(CommonUtils.MODIFY_FOOD_POWERS, tag); return stack; } diff --git a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/MultiMinePower.java b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/MultiMinePower.java index d4b6fb2..537a89a 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/MultiMinePower.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/MultiMinePower.java @@ -1,44 +1,27 @@ package dev.limonblaze.originsclasses.common.apoli.power; -import com.google.common.collect.ImmutableList; -import com.mojang.datafixers.util.Pair; -import dev.limonblaze.originsclasses.util.MultiMineMode; +import dev.limonblaze.originsclasses.OriginsClasses; +import dev.limonblaze.originsclasses.common.apoli.configuration.MultiMineConfiguration; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBlockCondition; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredItemCondition; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower; import io.github.edwinmindcraft.apoli.api.power.factory.PowerFactory; import io.github.edwinmindcraft.apoli.api.registry.ApoliRegistries; -import dev.limonblaze.originsclasses.client.OriginsClassesClient; -import dev.limonblaze.originsclasses.common.apoli.configuration.MultiMineConfiguration; -import dev.limonblaze.originsclasses.common.duck.SneakingStateSavingGameMode; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; +import java.util.ArrayList; import java.util.List; -import java.util.Optional; public class MultiMinePower extends PowerFactory { - private static ImmutableList FACTORIES; - public final MultiMineMode miner; - - public MultiMinePower(MultiMineMode miner) { + public final Range range; + + public MultiMinePower(Range range) { super(MultiMineConfiguration.CODEC); - this.miner = miner; - } - - public static List factories() { - if(FACTORIES == null) { - ImmutableList.Builder factories = ImmutableList.builder(); - ApoliRegistries.POWER_FACTORY.get().getValues().forEach(pf -> { - if(pf instanceof MultiMinePower mmp) factories.add(mmp); - }); - FACTORIES = factories.build(); - } - return FACTORIES; + this.range = range; } public static boolean shouldApply(ConfiguredPower cp, Player player, BlockPos pos, BlockState state) { @@ -47,31 +30,31 @@ public static boolean shouldApply(ConfiguredPower cp, Player player, Block ConfiguredBlockCondition.check(mmc.blockCondition(), player.level, pos, () -> state) && ConfiguredItemCondition.check(mmc.itemCondition(), player.level, player.getMainHandItem()); } - - public static Optional, Float>> getResult(Player player, BlockPos pos, BlockState state) { - List> cmmps = factories().stream() - .flatMap(pf -> IPowerContainer.getPowers(player, pf).stream()) + + public static List apply(Player player, BlockPos pos, BlockState state) { + List> cmmps = ApoliRegistries.POWER_FACTORY.get() + .getValues() + .stream() + .filter(pf -> pf instanceof MultiMinePower) + .flatMap(pf -> IPowerContainer.getPowers(player, (MultiMinePower) pf).stream()) .map(Holder::get) .filter(cp -> shouldApply(cp, player, pos, state)) .toList(); + OriginsClasses.LOGGER.debug(cmmps.size()); for(ConfiguredPower cmmp : cmmps) { - List affectBlocks = cmmp.getFactory().miner.getAffectedBlocks(player, state, pos); + List affectBlocks = cmmp.getFactory().range.getAffectedBlocks(player, state, pos); if(affectBlocks.size() > 0) { - return Optional.of(new Pair<>(affectBlocks, cmmp.getConfiguration().speedMultiplier())); + return affectBlocks; } } - return Optional.empty(); + return new ArrayList<>(); } - - public static float modifyBreakingSpeed(float speed, Player player, BlockPos pos, BlockState state) { - boolean processMultimine; - if(player instanceof ServerPlayer sp) { - SneakingStateSavingGameMode sneakingState = (SneakingStateSavingGameMode)sp.gameMode; - processMultimine = !sneakingState.wasSneakingWhenBlockBreakingStarted(); - } else { - processMultimine = OriginsClassesClient.MULTI_MINING; - } - return processMultimine ? speed * getResult(player, pos, state).map(Pair::getSecond).orElse(1.0F) : speed; + + @FunctionalInterface + public interface Range { + + List getAffectedBlocks(Player player, BlockState state, BlockPos pos); + } - + } diff --git a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/SneakCountingPower.java b/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/SneakCountingPower.java deleted file mode 100644 index 18bb0bd..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/common/apoli/power/SneakCountingPower.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.limonblaze.originsclasses.common.apoli.power; - -import io.github.edwinmindcraft.apoli.api.ApoliAPI; -import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower; -import io.github.edwinmindcraft.apoli.common.power.ResourcePower; -import io.github.edwinmindcraft.apoli.common.power.configuration.ResourceConfiguration; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; - -public class SneakCountingPower extends ResourcePower { - - @Override - public boolean canTick(ConfiguredPower configuration, Entity entity) { - return true; - } - - @Override - public void tick(ConfiguredPower cp, Entity entity) { - if(entity instanceof Player) { - ResourceConfiguration rc = cp.getConfiguration(); - if(entity.isShiftKeyDown()) { - this.increment(cp, entity); - } else { - this.assign(cp, entity, rc.initialValue()); - } - ApoliAPI.synchronizePowerContainer(entity); - } - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/OriginsClassesDataTypes.java b/src/main/java/dev/limonblaze/originsclasses/common/calio/OriginsClassesDataTypes.java similarity index 92% rename from src/main/java/dev/limonblaze/originsclasses/util/OriginsClassesDataTypes.java rename to src/main/java/dev/limonblaze/originsclasses/common/calio/OriginsClassesDataTypes.java index e927c3b..f60a37f 100644 --- a/src/main/java/dev/limonblaze/originsclasses/util/OriginsClassesDataTypes.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/calio/OriginsClassesDataTypes.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.util; +package dev.limonblaze.originsclasses.common.calio; import io.github.apace100.calio.data.SerializableDataType; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; diff --git a/src/main/java/dev/limonblaze/originsclasses/common/duck/SneakingStateSavingGameMode.java b/src/main/java/dev/limonblaze/originsclasses/common/duck/SneakingStateSavingGameMode.java deleted file mode 100644 index ddab2f5..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/common/duck/SneakingStateSavingGameMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package dev.limonblaze.originsclasses.common.duck; - -public interface SneakingStateSavingGameMode { - - boolean wasSneakingWhenBlockBreakingStarted(); - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/common/event/PowerEventHandler.java b/src/main/java/dev/limonblaze/originsclasses/common/event/PowerEventHandler.java index 2d51e0c..c06b5cc 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/event/PowerEventHandler.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/event/PowerEventHandler.java @@ -12,12 +12,12 @@ import dev.limonblaze.originsclasses.common.network.S2CInfiniteTrader; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; import dev.limonblaze.originsclasses.common.tag.OriginsClassesEntityTypeTags; -import dev.limonblaze.originsclasses.mixin.accessor.LivingEntityAccessor; +import dev.limonblaze.originsclasses.core.mixin.accessor.minecraft.LivingEntityAccessor; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.contents.TranslatableContents; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; @@ -93,23 +93,25 @@ public static void onPotionGained(MobEffectEvent.Added event) { //ModifyEnchantingLevel @SubscribeEvent(priority = EventPriority.LOWEST) public static void onEnchantmentLevel(EnchantmentLevelSetEvent event) { - NbtUtils.getOriginsClassesData(event.getItem(), NbtUtils.ENCHANTER, NbtType.UUID).ifPresent(uuid -> { - Player player = event.getLevel().getPlayerByUUID(uuid); - if(player != null) { - event.setEnchantLevel(Mth.floor(IPowerContainer.modify( - player, - OriginsClassesPowers.MODIFY_ENCHANTING_LEVEL.get(), - event.getEnchantLevel(), - cp -> cp.get().isActive(player) - ))); - } - }); + ItemStack stack = event.getItem(); + if(!stack.hasTag()) return; + CompoundTag entry = CommonUtils.getOriginsClassesTag(stack.getTag()); + if(!entry.contains(CommonUtils.ENCHANTER, Tag.TAG_INT_ARRAY)) return; + Player player = event.getLevel().getPlayerByUUID(entry.getUUID(CommonUtils.ENCHANTER)); + if(player != null) { + event.setEnchantLevel(Mth.floor(IPowerContainer.modify( + player, + OriginsClassesPowers.MODIFY_ENCHANTING_LEVEL.get(), + event.getEnchantLevel(), + cp -> cp.get().isActive(player) + ))); + } } //ModifyBoneMeal @SubscribeEvent(priority = EventPriority.LOWEST) public static void onBoneMeal(BonemealEvent event) { - int count = MathUtils.randomFloor(IPowerContainer.modify( + int count = CommonUtils.rollInt(IPowerContainer.modify( event.getEntity(), OriginsClassesPowers.MODIFY_BONE_MEAL.get(), 1.0D ), event.getEntity().getRandom()); @@ -148,7 +150,7 @@ public static void onInteractEntity(PlayerInteractEvent.EntityInteract event) { public static void onLivingDrops(LivingDropsEvent event) { if(event.getSource() instanceof EntityDamageSource eds && eds.getEntity() instanceof Player player) { LivingEntity target = event.getEntity(); - int amount = MathUtils.randomFloor(IPowerContainer.modify( + int amount = CommonUtils.rollInt(IPowerContainer.modify( player, OriginsClassesPowers.MODIFY_ENTITY_LOOT.get(), 1.0F, cp -> cp.get().isActive(player) && @@ -178,6 +180,7 @@ public static void onTooltip(ItemTooltipEvent event) { if(player == null) return; ItemStack stack = event.getItemStack(); List tooltip = event.getToolTip(); + if(ClientConfig.CONFIG.showModifyFoodTooltip.get() && stack.getFoodProperties(player) != null) { @@ -189,14 +192,15 @@ public static void onTooltip(ItemTooltipEvent event) { foodModifiers.addAll(config.foodModifiers().entries()); saturationModifiers.addAll(config.saturationModifiers().entries()); }); - foodModifiers.forEach(mod -> tooltip.add(ItemUtils.modifierTooltip(mod, FOOD_TRANSLATION_KEY))); - saturationModifiers.forEach(mod -> tooltip.add(ItemUtils.modifierTooltip(mod, SATURATION_MODIFIER_TRANSLATION_KEY))); + foodModifiers.forEach(mod -> tooltip.add(ClientUtils.modifierTooltip(mod, FOOD_TRANSLATION_KEY))); + saturationModifiers.forEach(mod -> tooltip.add(ClientUtils.modifierTooltip(mod, SATURATION_MODIFIER_TRANSLATION_KEY))); } + if(ClientConfig.CONFIG.showPotionBonusTooltip.get() && (stack.getItem() instanceof PotionItem || stack.getItem() instanceof TippedArrowItem) && - PotionUtils.hasPotionBonus(stack)) + stack.hasTag() && ClericHelper.getPotionBonus(stack.getTag())) { - tooltip.add(MutableComponent.create(new TranslatableContents(POTION_BONUS_TRANSLATION_KEY)).withStyle(ChatFormatting.BLUE)); + tooltip.add(ClientUtils.translate(POTION_BONUS_TRANSLATION_KEY).withStyle(ChatFormatting.BLUE)); } } diff --git a/src/main/java/dev/limonblaze/originsclasses/common/network/S2CInfiniteTrader.java b/src/main/java/dev/limonblaze/originsclasses/common/network/S2CInfiniteTrader.java index 426de80..81c9b6f 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/network/S2CInfiniteTrader.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/network/S2CInfiniteTrader.java @@ -1,6 +1,6 @@ package dev.limonblaze.originsclasses.common.network; -import dev.limonblaze.originsclasses.client.OriginsClassesClient; +import dev.limonblaze.originsclasses.OriginsClasses; import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -21,7 +21,7 @@ public void encode(FriendlyByteBuf buf) { @OnlyIn(Dist.CLIENT) private void handleSync() { - OriginsClassesClient.INFINITE_TRADER = this.infiniteTrader; + OriginsClasses.INFINITE_TRADER = this.infiniteTrader; } public void handle(Supplier contextSupplier) { diff --git a/src/main/java/dev/limonblaze/originsclasses/common/network/S2CMultiMining.java b/src/main/java/dev/limonblaze/originsclasses/common/network/S2CMultiMining.java index 4b5e71e..3b05f92 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/network/S2CMultiMining.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/network/S2CMultiMining.java @@ -1,6 +1,6 @@ package dev.limonblaze.originsclasses.common.network; -import dev.limonblaze.originsclasses.client.OriginsClassesClient; +import dev.limonblaze.originsclasses.OriginsClasses; import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -21,7 +21,7 @@ public void encode(FriendlyByteBuf buf) { @OnlyIn(Dist.CLIENT) private void handleSync() { - OriginsClassesClient.MULTI_MINING = this.multiMining; + OriginsClasses.MULTI_MINING = this.multiMining; } public void handle(Supplier contextSupplier) { diff --git a/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesConditions.java b/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesConditions.java index 0ef96ef..0f6f27e 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesConditions.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesConditions.java @@ -1,6 +1,7 @@ package dev.limonblaze.originsclasses.common.registry; import dev.limonblaze.originsclasses.OriginsClasses; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.power.factory.BiEntityCondition; import io.github.edwinmindcraft.apoli.api.power.factory.BlockCondition; import io.github.edwinmindcraft.apoli.api.power.factory.EntityCondition; @@ -12,7 +13,6 @@ import io.github.edwinmindcraft.apoli.common.condition.item.SimpleItemCondition; import dev.limonblaze.originsclasses.common.apoli.condition.item.ToolActionCondition; import dev.limonblaze.originsclasses.common.tag.OriginsClassesItemTags; -import dev.limonblaze.originsclasses.util.EntityUtils; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.item.*; @@ -28,7 +28,7 @@ public class OriginsClassesConditions { public static final DeferredRegister> BIENTITY_CONDITIONS = DeferredRegister.create(ApoliRegistries.BIENTITY_CONDITION_KEY, OriginsClasses.MODID); public static final RegistryObject YAW_DIFF = BIENTITY_CONDITIONS.register("yaw_diff", () -> - new DoubleComparingBiEntityCondition(EntityUtils::yawDiff)); + new DoubleComparingBiEntityCondition(CommonUtils::calcYawDiff)); public static final DeferredRegister> ENTITY_CONDITIONS = DeferredRegister.create(ApoliRegistries.ENTITY_CONDITION_KEY, OriginsClasses.MODID); public static final RegistryObject ANIMAL = ENTITY_CONDITIONS.register("animal", () -> diff --git a/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesPowers.java b/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesPowers.java index 4de2903..e357987 100644 --- a/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesPowers.java +++ b/src/main/java/dev/limonblaze/originsclasses/common/registry/OriginsClassesPowers.java @@ -2,7 +2,7 @@ import dev.limonblaze.originsclasses.OriginsClasses; import dev.limonblaze.originsclasses.common.apoli.power.*; -import dev.limonblaze.originsclasses.util.MultiMineMode; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.power.factory.PowerFactory; import io.github.edwinmindcraft.apoli.api.registry.ApoliRegistries; import io.github.edwinmindcraft.apoli.common.power.DummyPower; @@ -41,7 +41,7 @@ public class OriginsClassesPowers { public static final RegistryObject INFINITE_TRADE = POWER_FACTORIES.register("infinite_trade", DummyPower::new); public static final RegistryObject RARE_WANDERING_LOOT = POWER_FACTORIES.register("rare_wandering_loot", DummyPower::new); // Lumberjack - public static final RegistryObject LUMBERJACK = POWER_FACTORIES.register("lumberjack", () -> new MultiMinePower(MultiMineMode.LUMBERJACK)); + public static final RegistryObject LUMBERJACK = POWER_FACTORIES.register("lumberjack", () -> new MultiMinePower(CommonUtils::lumberjackMultiMineRange)); // Miner public static final RegistryObject NO_MINING_EXHAUSTION = POWER_FACTORIES.register("no_mining_exhaustion", DummyPower::new); // Adventurer diff --git a/src/main/java/dev/limonblaze/originsclasses/compat/OriginsClassesMixinPlugin.java b/src/main/java/dev/limonblaze/originsclasses/core/OriginsClassesMixinPlugin.java similarity index 97% rename from src/main/java/dev/limonblaze/originsclasses/compat/OriginsClassesMixinPlugin.java rename to src/main/java/dev/limonblaze/originsclasses/core/OriginsClassesMixinPlugin.java index 25585bb..51f46d5 100644 --- a/src/main/java/dev/limonblaze/originsclasses/compat/OriginsClassesMixinPlugin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/OriginsClassesMixinPlugin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.compat; +package dev.limonblaze.originsclasses.core; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; diff --git a/src/main/java/dev/limonblaze/originsclasses/core/helper/ServerPlayerGameModeHelper.java b/src/main/java/dev/limonblaze/originsclasses/core/helper/ServerPlayerGameModeHelper.java new file mode 100644 index 0000000..b91cf4c --- /dev/null +++ b/src/main/java/dev/limonblaze/originsclasses/core/helper/ServerPlayerGameModeHelper.java @@ -0,0 +1,7 @@ +package dev.limonblaze.originsclasses.core.helper; + +public interface ServerPlayerGameModeHelper { + + boolean wasSneakingWhenBlockBreakingStarted(); + +} diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LivingEntityAccessor.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LivingEntityAccessor.java similarity index 84% rename from src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LivingEntityAccessor.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LivingEntityAccessor.java index b7c57a6..d54a0cc 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LivingEntityAccessor.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LivingEntityAccessor.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.accessor; +package dev.limonblaze.originsclasses.core.mixin.accessor.minecraft; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LootTableAccessor.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LootTableAccessor.java similarity index 83% rename from src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LootTableAccessor.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LootTableAccessor.java index 7edb596..e001203 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/accessor/LootTableAccessor.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/accessor/minecraft/LootTableAccessor.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.accessor; +package dev.limonblaze.originsclasses.core.mixin.accessor.minecraft; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/client/ClientSideMerchantMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/ClientSideMerchantMixin.java similarity index 78% rename from src/main/java/dev/limonblaze/originsclasses/mixin/client/ClientSideMerchantMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/ClientSideMerchantMixin.java index 899e03d..ef7e735 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/client/ClientSideMerchantMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/ClientSideMerchantMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin.client; +package dev.limonblaze.originsclasses.core.mixin.client.minecraft; -import dev.limonblaze.originsclasses.client.OriginsClassesClient; +import dev.limonblaze.originsclasses.OriginsClasses; import net.minecraft.world.entity.npc.ClientSideMerchant; import net.minecraft.world.item.trading.MerchantOffer; import net.minecraftforge.api.distmarker.Dist; @@ -16,7 +16,7 @@ public class ClientSideMerchantMixin { @Inject(method = "notifyTrade", at = @At(value = "TAIL")) private void originsClasses$infiniteTrade(MerchantOffer offer, CallbackInfo ci) { - if(OriginsClassesClient.INFINITE_TRADER) --offer.uses; + if(OriginsClasses.INFINITE_TRADER) --offer.uses; } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/client/LocalPlayerMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/LocalPlayerMixin.java similarity index 94% rename from src/main/java/dev/limonblaze/originsclasses/mixin/client/LocalPlayerMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/LocalPlayerMixin.java index 4776cd4..da4ee64 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/client/LocalPlayerMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/client/minecraft/LocalPlayerMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.client; +package dev.limonblaze.originsclasses.core.mixin.client.minecraft; import com.mojang.authlib.GameProfile; import dev.limonblaze.originsclasses.common.apoli.power.ModifySpeedOnItemUsePower; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/apoli/ModifyFoodPowerMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apoli/ModifyFoodPowerMixin.java similarity index 71% rename from src/main/java/dev/limonblaze/originsclasses/mixin/compat/apoli/ModifyFoodPowerMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apoli/ModifyFoodPowerMixin.java index 58b261e..c0bff45 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/apoli/ModifyFoodPowerMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apoli/ModifyFoodPowerMixin.java @@ -1,12 +1,13 @@ -package dev.limonblaze.originsclasses.mixin.compat.apoli; +package dev.limonblaze.originsclasses.core.mixin.common.apoli; import dev.limonblaze.originsclasses.OriginsClasses; -import dev.limonblaze.originsclasses.util.NbtUtils; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.ApoliAPI; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredPower; import io.github.edwinmindcraft.apoli.common.power.ModifyFoodPower; import io.github.edwinmindcraft.apoli.common.power.configuration.ModifyFoodConfiguration; import net.minecraft.core.Registry; +import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; @@ -31,13 +32,22 @@ public class ModifyFoodPowerMixin { remap = false ) private static void originsClasses$bindModifyCraftedFoodPowers(Entity source, Level level, ItemStack stack, CallbackInfoReturnable>> cir) { - ListTag tagList = NbtUtils.getOriginsClassesData(stack, NbtUtils.MODIFY_FOOD_POWERS, Tag.TAG_STRING); - if(tagList.isEmpty()) return; + if(!stack.hasTag()) return; + CompoundTag entry = CommonUtils.getOriginsClassesTag(stack.getTag()); + if(!entry.contains(CommonUtils.MODIFY_FOOD_POWERS, Tag.TAG_LIST)) return; + ListTag powerIds; + try { + powerIds = entry.getList(CommonUtils.MODIFY_FOOD_POWERS, Tag.TAG_STRING); + } catch(Throwable throwable) { + OriginsClasses.LOGGER.error("Failed to read OriginsClasses.ModifyFoodPowers in {} due to incompatible type!", stack.getTag()); + return; + } + if(powerIds.isEmpty()) return; List> powers = cir.getReturnValue(); Registry> powerRegistry = ApoliAPI.getPowers(); - for(int i = 0; i < tagList.size(); ++i) { + for(int i = 0; i < powerIds.size(); ++i) { try { - ResourceLocation id = new ResourceLocation(tagList.getString(i)); + ResourceLocation id = new ResourceLocation(powerIds.getString(i)); ConfiguredPower cp = powerRegistry.get(id); if(cp == null) throw new IllegalStateException(String.format("Power %s was not registered", id)); if(cp.getConfiguration() instanceof ModifyFoodConfiguration && cp.getFactory() instanceof ModifyFoodPower) { @@ -45,6 +55,7 @@ public class ModifyFoodPowerMixin { } } catch(Exception exception) { OriginsClasses.LOGGER.error("Exception in applying ModifyFoodPowers from ModifyCraftedFoodPower!"); + OriginsClasses.LOGGER.error(exception); } } cir.setReturnValue(powers); diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/apotheosis/ApotheosisEnchantmentMenuMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apotheosis/ApotheosisEnchantmentMenuMixin.java similarity index 73% rename from src/main/java/dev/limonblaze/originsclasses/mixin/compat/apotheosis/ApotheosisEnchantmentMenuMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apotheosis/ApotheosisEnchantmentMenuMixin.java index fc9fc5b..bdf493d 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/apotheosis/ApotheosisEnchantmentMenuMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/apotheosis/ApotheosisEnchantmentMenuMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin.compat.apotheosis; +package dev.limonblaze.originsclasses.core.mixin.common.apotheosis; -import dev.limonblaze.originsclasses.util.NbtUtils; +import dev.limonblaze.originsclasses.util.CommonUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; @@ -25,16 +25,16 @@ public class ApotheosisEnchantmentMenuMixin { name = "toEnchant" ) private ItemStack originsClasses$storeEnchanter(ItemStack stack) { - stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES).putUUID(NbtUtils.ENCHANTER, this.player.getUUID()); + stack.getOrCreateTagElement(CommonUtils.ORIGINS_CLASSES).putUUID(CommonUtils.ENCHANTER, this.player.getUUID()); return stack; } @Inject(method = "slotsChanged", at = @At("TAIL")) private void originsClasses$clearEnchanter(Container inventoryIn, CallbackInfo ci) { ItemStack stack = inventoryIn.getItem(0); - CompoundTag ocNbt = stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES); - ocNbt.remove(NbtUtils.ENCHANTER); - if(ocNbt.isEmpty()) stack.removeTagKey(NbtUtils.ORIGINS_CLASSES); + CompoundTag entry = stack.getOrCreateTagElement(CommonUtils.ORIGINS_CLASSES); + entry.remove(CommonUtils.ENCHANTER); + if(entry.isEmpty()) stack.removeTagKey(CommonUtils.ORIGINS_CLASSES); } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/CookingPotResultSlotMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/CookingPotResultSlotMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/CookingPotResultSlotMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/CookingPotResultSlotMixin.java index 6c825f2..ac8ab8c 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/CookingPotResultSlotMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/CookingPotResultSlotMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.compat.farmersdelight; +package dev.limonblaze.originsclasses.core.mixin.common.farmersdelight; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; import net.minecraft.world.entity.player.Player; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/SkilletItemMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/SkilletItemMixin.java similarity index 94% rename from src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/SkilletItemMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/SkilletItemMixin.java index dc069d3..744e035 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/farmersdelight/SkilletItemMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/farmersdelight/SkilletItemMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.compat.farmersdelight; +package dev.limonblaze.originsclasses.core.mixin.common.farmersdelight; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; import net.minecraft.world.entity.player.Player; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractCauldronBlockMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractCauldronBlockMixin.java similarity index 82% rename from src/main/java/dev/limonblaze/originsclasses/mixin/AbstractCauldronBlockMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractCauldronBlockMixin.java index 68b79fd..44bbc8b 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractCauldronBlockMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractCauldronBlockMixin.java @@ -1,8 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.NbtType; -import dev.limonblaze.originsclasses.util.NbtUtils; -import dev.limonblaze.originsclasses.util.PotionUtils; +import dev.limonblaze.originsclasses.util.ClericHelper; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; import net.minecraft.core.BlockPos; @@ -13,6 +11,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.PotionItem; +import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.AbstractCauldronBlock; import net.minecraft.world.level.block.Blocks; @@ -34,11 +33,11 @@ public class AbstractCauldronBlockMixin { if(state.is(Blocks.WATER_CAULDRON) && state.getValue(LayeredCauldronBlock.LEVEL) > 0) { ItemStack stack = player.getItemInHand(hand); if(stack.getItem() instanceof PotionItem && - !net.minecraft.world.item.alchemy.PotionUtils.getPotion(stack).getEffects().isEmpty() && - NbtUtils.getOriginsClassesData(stack, NbtUtils.POTION_BONUS, NbtType.BYTE).isEmpty() + !PotionUtils.getPotion(stack).getEffects().isEmpty() && + !(stack.hasTag() && ClericHelper.getPotionBonus(stack.getTag())) ) { if(IPowerContainer.hasPower(player, OriginsClassesPowers.POTION_BONUS.get())) { - PotionUtils.addPotionBonus(stack); + ClericHelper.setPotionBonus(stack.getTag(), true); LayeredCauldronBlock.lowerFillLevel(state, world, pos); world.playSound(null, pos, SoundEvents.BOTTLE_FILL, SoundSource.BLOCKS, 1.0F, 1.0F); world.gameEvent(null, GameEvent.FLUID_PICKUP, pos); diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractFurnaceBlockEntityMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractFurnaceBlockEntityMixin.java similarity index 97% rename from src/main/java/dev/limonblaze/originsclasses/mixin/AbstractFurnaceBlockEntityMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractFurnaceBlockEntityMixin.java index 383ba66..62d5e68 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractFurnaceBlockEntityMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractFurnaceBlockEntityMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBlockCondition; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractVillagerMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractVillagerMixin.java similarity index 67% rename from src/main/java/dev/limonblaze/originsclasses/mixin/AbstractVillagerMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractVillagerMixin.java index 0ee957a..fa6f73c 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/AbstractVillagerMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AbstractVillagerMixin.java @@ -1,11 +1,9 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; -import dev.limonblaze.originsclasses.common.tag.OriginsClassesItemTags; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; -import dev.limonblaze.originsclasses.util.ItemUtils; +import dev.limonblaze.originsclasses.util.MerchantHelper; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.MinecraftServer; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; @@ -18,7 +16,6 @@ import net.minecraft.world.item.trading.MerchantOffer; import net.minecraft.world.item.trading.MerchantOffers; import net.minecraft.world.level.Level; -import net.minecraftforge.registries.ForgeRegistries; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -26,10 +23,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - @Mixin(AbstractVillager.class) public abstract class AbstractVillagerMixin extends AgeableMob { @@ -84,34 +77,31 @@ protected AbstractVillagerMixin(EntityType type, Level wor @Unique private MerchantOffers buildAdditionalOffers() { MerchantOffers offers = new MerchantOffers(); - MinecraftServer server = this.getServer(); - if(server != null) { - RandomSource random = RandomSource.create(); - Set blacklist = Objects.requireNonNull(ForgeRegistries.ITEMS.tags()) - .getTag(OriginsClassesItemTags.MERCHANT_BLACKLIST) - .stream() - .collect(Collectors.toSet()); - offers.add(new MerchantOffer( - new ItemStack(Items.EMERALD, random.nextInt(12) + 6), - ItemUtils.randomEnchantedItemStack( - ItemUtils.randomObtainableItem(this.getServer(), random, blacklist), - random, 0.5f, 30 - ), - 1, - 5, - 0.05F) - ); - Item desireditem = ItemUtils.randomObtainableItem(this.getServer(), random, blacklist); - offers.add(new MerchantOffer( - new ItemStack(desireditem, 1 + random.nextInt(Math.min(16, desireditem.getDefaultInstance().getMaxStackSize()))), - ItemUtils.randomEnchantedItemStack(ItemUtils.randomObtainableItem(this.getServer(), random, blacklist) - , random, 0.5F, 30 - ), - 1, - 5, - 0.05F) - ); - } + MerchantHelper helper = MerchantHelper.instance(); + RandomSource random = RandomSource.create(); + Item desireditem = helper.randomObtainableItem(random, helper.blacklistItems); + + offers.add(new MerchantOffer( + new ItemStack(Items.EMERALD, random.nextInt(12) + 6), + MerchantHelper.randomEnchantedItemStack( + helper.randomObtainableItem(random, helper.blacklistItems), + random, 0.5f, 30 + ), + 1, + 5, + 0.05F) + ); + + offers.add(new MerchantOffer( + new ItemStack(desireditem, 1 + random.nextInt(Math.min(16, desireditem.getDefaultInstance().getMaxStackSize()))), + MerchantHelper.randomEnchantedItemStack(helper.randomObtainableItem(random, helper.blacklistItems) + , random, 0.5F, 30 + ), + 1, + 5, + 0.05F) + ); + return offers; } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/AnvilMenuMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AnvilMenuMixin.java similarity index 96% rename from src/main/java/dev/limonblaze/originsclasses/mixin/AnvilMenuMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AnvilMenuMixin.java index 5bd1a59..afd5a26 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/AnvilMenuMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/AnvilMenuMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/ArrowMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ArrowMixin.java similarity index 73% rename from src/main/java/dev/limonblaze/originsclasses/mixin/ArrowMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ArrowMixin.java index 7b17bf3..4395c3d 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/ArrowMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ArrowMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.PotionUtils; +import dev.limonblaze.originsclasses.util.ClericHelper; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.projectile.Arrow; @@ -20,27 +20,27 @@ public class ArrowMixin { @Inject(method = "setEffectsFromItem", at = @At("TAIL")) private void originsClasses$initFromAdditionalPotionNbt(ItemStack arrow, CallbackInfo ci) { - this.hasPotionBonus = PotionUtils.hasPotionBonus(arrow); + this.hasPotionBonus = arrow.hasTag() && ClericHelper.getPotionBonus(arrow.getTag()); } @Inject(method = "addAdditionalSaveData", at = @At("TAIL")) private void originsClasses$writeAdditionalPotionNbt(CompoundTag nbt, CallbackInfo ci){ - if(hasPotionBonus) PotionUtils.addPotionBonus(nbt); + if(hasPotionBonus) ClericHelper.setPotionBonus(nbt, true); } @Inject(method = "readAdditionalSaveData", at = @At("TAIL")) private void originsClasses$readAdditionalPotionNbt(CompoundTag nbt, CallbackInfo ci){ - hasPotionBonus = PotionUtils.hasPotionBonus(nbt); + hasPotionBonus = ClericHelper.getPotionBonus(nbt); } - @Inject(method = "getPickupItem", at = @At("RETURN"), cancellable = true) + @Inject(method = "getPickupItem", at = @At("RETURN")) private void originsClasses$storeAdditionalPotionNbt(CallbackInfoReturnable cir) { - if(hasPotionBonus) cir.setReturnValue(PotionUtils.addPotionBonus(cir.getReturnValue())); + if(hasPotionBonus) ClericHelper.setPotionBonus(cir.getReturnValue().getOrCreateTag(), true); } @ModifyArg(method = "doPostHurtEffects", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;addEffect(Lnet/minecraft/world/effect/MobEffectInstance;Lnet/minecraft/world/entity/Entity;)Z"), index = 0) private MobEffectInstance originsClasses$handlePotionBonus(MobEffectInstance effect) { - return hasPotionBonus ? PotionUtils.applyPotionBonus(effect) : effect; + return hasPotionBonus ? ClericHelper.applyPotionBonus(effect) : effect; } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/BlockMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BlockMixin.java similarity index 84% rename from src/main/java/dev/limonblaze/originsclasses/mixin/BlockMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BlockMixin.java index c8b4260..ea66b66 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/BlockMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BlockMixin.java @@ -1,9 +1,9 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; +import dev.limonblaze.originsclasses.util.CommonUtils; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import io.github.edwinmindcraft.apoli.api.power.configuration.ConfiguredBlockCondition; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; -import dev.limonblaze.originsclasses.util.MathUtils; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -25,7 +25,7 @@ public abstract class BlockMixin { @Inject(method = "playerDestroy", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/Block;dropResources(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/item/ItemStack;)V")) private void originsClasses$additionalDrop(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack, CallbackInfo ci) { - int amount = MathUtils.randomFloor(IPowerContainer.modify(player, OriginsClassesPowers.MODIFY_BLOCK_LOOT.get(), 1.0F, cp -> cp.get().isActive(player) && ConfiguredBlockCondition.check(cp.get().getConfiguration().condition(), world, pos, () -> state)), world.random); + int amount = CommonUtils.rollInt(IPowerContainer.modify(player, OriginsClassesPowers.MODIFY_BLOCK_LOOT.get(), 1.0F, cp -> cp.get().isActive(player) && ConfiguredBlockCondition.check(cp.get().getConfiguration().condition(), world, pos, () -> state)), world.random); for(int i = 1; i < amount; ++i) { Block.dropResources(state, world, pos, blockEntity, player, stack); } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/BreedGoalMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BreedGoalMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/BreedGoalMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BreedGoalMixin.java index 7b8617a..953efaf 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/BreedGoalMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BreedGoalMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import dev.limonblaze.originsclasses.common.apoli.power.ModifyBreedingPower; import net.minecraft.server.level.ServerPlayer; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/BrewingRecipeRegistryMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BrewingRecipeRegistryMixin.java similarity index 69% rename from src/main/java/dev/limonblaze/originsclasses/mixin/BrewingRecipeRegistryMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BrewingRecipeRegistryMixin.java index ace8465..8fac6d6 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/BrewingRecipeRegistryMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/BrewingRecipeRegistryMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.PotionUtils; +import dev.limonblaze.originsclasses.util.ClericHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.PotionItem; import net.minecraftforge.common.brewing.BrewingRecipeRegistry; @@ -12,12 +12,12 @@ @Mixin(BrewingRecipeRegistry.class) public class BrewingRecipeRegistryMixin { - @Inject(method = "getOutput", at = @At("RETURN"), cancellable = true, remap = false) + @Inject(method = "getOutput", at = @At("RETURN"), remap = false) private static void originsClasses$handleAdditionalPotionNbt(ItemStack input, ItemStack ingredient, CallbackInfoReturnable cir) { ItemStack output = cir.getReturnValue(); if(output.getItem() instanceof PotionItem && input.hasTag()) { - if(PotionUtils.hasPotionBonus(input)) { - cir.setReturnValue(PotionUtils.addPotionBonus(output)); + if(ClericHelper.getPotionBonus(input.getTag())) { + ClericHelper.setPotionBonus(output.getOrCreateTag(), true); } } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/EnchantmentMenuMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/EnchantmentMenuMixin.java similarity index 77% rename from src/main/java/dev/limonblaze/originsclasses/mixin/EnchantmentMenuMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/EnchantmentMenuMixin.java index dfda581..97c12bc 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/EnchantmentMenuMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/EnchantmentMenuMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.NbtUtils; +import dev.limonblaze.originsclasses.util.CommonUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; @@ -30,7 +30,7 @@ public class EnchantmentMenuMixin { @ModifyVariable(method = "slotsChanged", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/ContainerLevelAccess;execute(Ljava/util/function/BiConsumer;)V")) private ItemStack originsClasses$storeEnchanter(ItemStack stack) { if(this.originsClasses$enchanter != null) { - stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES).putUUID(NbtUtils.ENCHANTER, this.originsClasses$enchanter.getUUID()); + stack.getOrCreateTagElement(CommonUtils.ORIGINS_CLASSES).putUUID(CommonUtils.ENCHANTER, this.originsClasses$enchanter.getUUID()); } return stack; } @@ -38,9 +38,9 @@ public class EnchantmentMenuMixin { @Inject(method = "slotsChanged", at = @At("TAIL")) private void originsClasses$clearEnchanter(Container inventory, CallbackInfo ci) { ItemStack stack = inventory.getItem(0); - CompoundTag ocNbt = stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES); - ocNbt.remove(NbtUtils.ENCHANTER); - if(ocNbt.isEmpty()) stack.removeTagKey(NbtUtils.ORIGINS_CLASSES); + CompoundTag entry = stack.getOrCreateTagElement(CommonUtils.ORIGINS_CLASSES); + entry.remove(CommonUtils.ENCHANTER); + if(entry.isEmpty()) stack.removeTagKey(CommonUtils.ORIGINS_CLASSES); } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/FurnaceResultSlotMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/FurnaceResultSlotMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/FurnaceResultSlotMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/FurnaceResultSlotMixin.java index 239ac4f..f17f6ad 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/FurnaceResultSlotMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/FurnaceResultSlotMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent.CraftingResultType; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/PlayerMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PlayerMixin.java similarity index 93% rename from src/main/java/dev/limonblaze/originsclasses/mixin/PlayerMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PlayerMixin.java index 85ed33a..6717704 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/PlayerMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PlayerMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/PotionUtilMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PotionUtilMixin.java similarity index 78% rename from src/main/java/dev/limonblaze/originsclasses/mixin/PotionUtilMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PotionUtilMixin.java index 59d43ed..1b085f7 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/PotionUtilMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/PotionUtilMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.PotionUtils; +import dev.limonblaze.originsclasses.util.ClericHelper; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.effect.MobEffectInstance; import org.spongepowered.asm.mixin.Mixin; @@ -18,8 +18,8 @@ public class PotionUtilMixin { @Inject(method = "getAllEffects(Lnet/minecraft/nbt/CompoundTag;)Ljava/util/List;", at = @At("RETURN"), cancellable = true) private static void originsClasses$modifyPotion(@Nullable CompoundTag nbt, CallbackInfoReturnable> cir) { if(nbt != null) { - if(PotionUtils.hasPotionBonus(nbt)) { - cir.setReturnValue(cir.getReturnValue().stream().map(PotionUtils::applyPotionBonus).collect(Collectors.toList())); + if(ClericHelper.getPotionBonus(nbt)) { + cir.setReturnValue(cir.getReturnValue().stream().map(ClericHelper::applyPotionBonus).collect(Collectors.toList())); } } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/ProjectileMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ProjectileMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/ProjectileMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ProjectileMixin.java index 143a687..19b11cf 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/ProjectileMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ProjectileMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/RepairItemRecipeMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/RepairItemRecipeMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/RepairItemRecipeMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/RepairItemRecipeMixin.java index 7a99756..4603145 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/RepairItemRecipeMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/RepairItemRecipeMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import io.github.edwinmindcraft.apoli.api.component.IPowerContainer; import dev.limonblaze.originsclasses.common.registry.OriginsClassesPowers; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/ResultSlotMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ResultSlotMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/ResultSlotMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ResultSlotMixin.java index 140fa95..dd3af6b 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/ResultSlotMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ResultSlotMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent.CraftingResultType; diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/ServerPlayerGameModeMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ServerPlayerGameModeMixin.java similarity index 71% rename from src/main/java/dev/limonblaze/originsclasses/mixin/ServerPlayerGameModeMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ServerPlayerGameModeMixin.java index 6f2b1cd..35b89ba 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/ServerPlayerGameModeMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/ServerPlayerGameModeMixin.java @@ -1,10 +1,9 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import com.mojang.datafixers.util.Pair; -import dev.limonblaze.originsclasses.common.apoli.power.MultiMinePower; -import dev.limonblaze.originsclasses.common.duck.SneakingStateSavingGameMode; import dev.limonblaze.originsclasses.common.OriginsClassesCommon; +import dev.limonblaze.originsclasses.common.apoli.power.MultiMinePower; import dev.limonblaze.originsclasses.common.network.S2CMultiMining; +import dev.limonblaze.originsclasses.core.helper.ServerPlayerGameModeHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; @@ -14,6 +13,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.network.PacketDistributor; +import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -22,16 +22,14 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.List; -import java.util.Optional; - @Mixin(ServerPlayerGameMode.class) -public abstract class ServerPlayerGameModeMixin implements SneakingStateSavingGameMode { +public abstract class ServerPlayerGameModeMixin implements ServerPlayerGameModeHelper { @Shadow protected ServerLevel level; @Final @Shadow protected ServerPlayer player; @Shadow public abstract void destroyAndAck(BlockPos pPos, int i, String reason); - + + @Shadow @Final private static Logger LOGGER; @Unique private BlockState justMinedState; @Unique private boolean performingMultiMine = false; @Unique private boolean wasSneakingWhenBlockBreakStarted = false; @@ -39,7 +37,10 @@ public abstract class ServerPlayerGameModeMixin implements SneakingStateSavingGa @Inject(method = "handleBlockBreakAction", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;getDestroyProgress(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)F", ordinal = 0)) private void originsClasses$saveSneakingState(BlockPos pPos, ServerboundPlayerActionPacket.Action pAction, Direction pDirection, int p_215123_, int p_215124_, CallbackInfo ci) { wasSneakingWhenBlockBreakStarted = player.isShiftKeyDown(); - OriginsClassesCommon.CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), new S2CMultiMining(!wasSneakingWhenBlockBreakStarted)); + OriginsClassesCommon.CHANNEL.send( + PacketDistributor.PLAYER.with(() -> player), + new S2CMultiMining(!wasSneakingWhenBlockBreakStarted) + ); } @Inject(method = "destroyAndAck", at = @At("HEAD")) @@ -47,20 +48,17 @@ public abstract class ServerPlayerGameModeMixin implements SneakingStateSavingGa justMinedState = level.getBlockState(pos); } - @Inject(method = "destroyAndAck", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 0)) + @Inject(method = "destroyAndAck", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayerGameMode;debugLogging(Lnet/minecraft/core/BlockPos;ZILjava/lang/String;)V", ordinal = 0)) private void originsClasses$multiMinePower(BlockPos pos, int i, String reason, CallbackInfo ci) { if(!wasSneakingWhenBlockBreakStarted && !performingMultiMine) { performingMultiMine = true; - Optional, Float>> result = MultiMinePower.getResult(player, pos, justMinedState); - result.ifPresent(pair -> { - ItemStack tool = player.getMainHandItem().copy(); - for(BlockPos bp : pair.getFirst()) { - destroyAndAck(bp, i, reason); - if(!player.getMainHandItem().sameItem(tool)) { - break; - } + ItemStack tool = player.getMainHandItem().copy(); + for(BlockPos bp : MultiMinePower.apply(player, pos, justMinedState)) { + destroyAndAck(bp, i, reason); + if(!player.getMainHandItem().sameItem(tool)) { + break; } - }); + } performingMultiMine = false; } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/TippedArrowRecipeMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/TippedArrowRecipeMixin.java similarity index 76% rename from src/main/java/dev/limonblaze/originsclasses/mixin/TippedArrowRecipeMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/TippedArrowRecipeMixin.java index 4a439cb..bed8900 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/TippedArrowRecipeMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/minecraft/TippedArrowRecipeMixin.java @@ -1,6 +1,6 @@ -package dev.limonblaze.originsclasses.mixin; +package dev.limonblaze.originsclasses.core.mixin.common.minecraft; -import dev.limonblaze.originsclasses.util.PotionUtils; +import dev.limonblaze.originsclasses.util.ClericHelper; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.TippedArrowRecipe; @@ -12,14 +12,14 @@ @Mixin(TippedArrowRecipe.class) public class TippedArrowRecipeMixin { - @Inject(method = "assemble(Lnet/minecraft/world/inventory/CraftingContainer;)Lnet/minecraft/world/item/ItemStack;", at = @At("RETURN"), cancellable = true) + @Inject(method = "assemble(Lnet/minecraft/world/inventory/CraftingContainer;)Lnet/minecraft/world/item/ItemStack;", at = @At("RETURN")) private void originsClasses$handleAdditionalPotionNbt(CraftingContainer inv, CallbackInfoReturnable cir) { ItemStack result = cir.getReturnValue(); if(!result.isEmpty()) { ItemStack input = inv.getItem(1 + inv.getWidth()); if(input.hasTag()) { - if(PotionUtils.hasPotionBonus(input)) { - cir.setReturnValue(PotionUtils.addPotionBonus(result)); + if(ClericHelper.getPotionBonus(input.getTag())) { + ClericHelper.setPotionBonus(result.getOrCreateTag(), true); } } } diff --git a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/tetra/WorkbenchTileMixin.java b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/tetra/WorkbenchTileMixin.java similarity index 95% rename from src/main/java/dev/limonblaze/originsclasses/mixin/compat/tetra/WorkbenchTileMixin.java rename to src/main/java/dev/limonblaze/originsclasses/core/mixin/common/tetra/WorkbenchTileMixin.java index a424dea..513fde7 100644 --- a/src/main/java/dev/limonblaze/originsclasses/mixin/compat/tetra/WorkbenchTileMixin.java +++ b/src/main/java/dev/limonblaze/originsclasses/core/mixin/common/tetra/WorkbenchTileMixin.java @@ -1,4 +1,4 @@ -package dev.limonblaze.originsclasses.mixin.compat.tetra; +package dev.limonblaze.originsclasses.core.mixin.common.tetra; import dev.limonblaze.originsclasses.common.event.ModifyCraftResultEvent; diff --git a/src/main/java/dev/limonblaze/originsclasses/util/ClericHelper.java b/src/main/java/dev/limonblaze/originsclasses/util/ClericHelper.java new file mode 100644 index 0000000..72fb7e3 --- /dev/null +++ b/src/main/java/dev/limonblaze/originsclasses/util/ClericHelper.java @@ -0,0 +1,29 @@ +package dev.limonblaze.originsclasses.util; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.effect.MobEffectInstance; + +public class ClericHelper { + + public static void setPotionBonus(CompoundTag nbt, boolean flag) { + CommonUtils.getOrCreateOriginsClassesTag(nbt).putBoolean(CommonUtils.POTION_BONUS, flag); + } + + public static boolean getPotionBonus(CompoundTag nbt) { + CompoundTag entry = CommonUtils.getOriginsClassesTag(nbt); + return entry.getBoolean(CommonUtils.POTION_BONUS); + } + + public static MobEffectInstance applyPotionBonus(MobEffectInstance effect) { + boolean instant = effect.getEffect().isInstantenous(); + return new MobEffectInstance( + effect.getEffect(), + instant ? effect.getDuration() : effect.getDuration() * 2, + instant ? effect.getAmplifier() + 1 : effect.getAmplifier(), + effect.isAmbient(), + effect.isVisible(), + effect.showIcon() + ); + } + +} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/ClientUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/ClientUtils.java new file mode 100644 index 0000000..d553191 --- /dev/null +++ b/src/main/java/dev/limonblaze/originsclasses/util/ClientUtils.java @@ -0,0 +1,35 @@ +package dev.limonblaze.originsclasses.util; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.contents.TranslatableContents; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; + +import static net.minecraft.world.item.ItemStack.ATTRIBUTE_MODIFIER_FORMAT; + +public class ClientUtils { + + public static MutableComponent translate(String key, Object... args) { + return MutableComponent.create(new TranslatableContents(key, args)); + } + + public static Component modifierTooltip(AttributeModifier modifier, String translationKey) { + double value = modifier.getAmount() * (modifier.getOperation() == AttributeModifier.Operation.ADDITION ? 1 : 100); + if (value > 0.0D) { + return translate( + "attribute.modifier.plus." + modifier.getOperation().toValue(), + ATTRIBUTE_MODIFIER_FORMAT.format(value), + translate(translationKey) + ).withStyle(ChatFormatting.BLUE); + } else { + value *= -1.0D; + return translate( + "attribute.modifier.take." + modifier.getOperation().toValue(), + ATTRIBUTE_MODIFIER_FORMAT.format(value), + translate(translationKey) + ).withStyle(ChatFormatting.RED); + } + } + +} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/MultiMineMode.java b/src/main/java/dev/limonblaze/originsclasses/util/CommonUtils.java similarity index 51% rename from src/main/java/dev/limonblaze/originsclasses/util/MultiMineMode.java rename to src/main/java/dev/limonblaze/originsclasses/util/CommonUtils.java index beaf450..0d2fd22 100644 --- a/src/main/java/dev/limonblaze/originsclasses/util/MultiMineMode.java +++ b/src/main/java/dev/limonblaze/originsclasses/util/CommonUtils.java @@ -1,18 +1,57 @@ package dev.limonblaze.originsclasses.util; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import java.util.*; -@FunctionalInterface -public interface MultiMineMode { +public class CommonUtils { + public static final String ORIGINS_CLASSES = "OriginsClasses"; + public static final String ENCHANTER = "Enchanter"; + public static final String MODIFY_FOOD_POWERS = "ModifyFoodPowers"; + public static final String POTION_BONUS = "PotionBonus"; + + public static CompoundTag getOriginsClassesTag(CompoundTag nbt) { + if(nbt.contains(ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { + return nbt.getCompound(ORIGINS_CLASSES); + } + return new CompoundTag(); + } + + public static CompoundTag getOrCreateOriginsClassesTag(CompoundTag nbt) { + if(nbt.contains(ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { + return nbt.getCompound(ORIGINS_CLASSES); + } + CompoundTag entry = new CompoundTag(); + nbt.put(ORIGINS_CLASSES, entry); + return entry; + } + + public static int rollInt(double d, RandomSource random) { + int i = (int) d; + return random.nextDouble() < d - i ? i + 1 : i; + } + + public static double calcYawDiff(Entity actor, Entity target) { + float yawTarget = target.getYRot(); + while(yawTarget < 0F) yawTarget += 360F; + yawTarget %= 360F; - List getAffectedBlocks(Player player, BlockState state, BlockPos pos); + float yawSelf = actor.getYRot(); + while(yawSelf < 0F) yawSelf += 360F; + yawSelf %= 360F; - MultiMineMode LUMBERJACK = (player, state, pos) -> { + return Math.abs(yawTarget - yawSelf); + } + + public static List lumberjackMultiMineRange(Player player, BlockState state, BlockPos pos) { Set affected = new HashSet<>(); Queue queue = new LinkedList<>(); queue.add(pos); @@ -40,8 +79,8 @@ public interface MultiMineMode { return new ArrayList<>(affected); } } else - if(newState.getBlock() instanceof LeavesBlock && - !(newState.hasProperty(LeavesBlock.PERSISTENT) && newState.getValue(LeavesBlock.PERSISTENT)) + if((newState.is(BlockTags.LEAVES) || newState.getBlock() instanceof LeavesBlock) && + !(newState.hasProperty(LeavesBlock.PERSISTENT) && newState.getValue(LeavesBlock.PERSISTENT)) ) { foundOneWithLeaves = true; } @@ -53,6 +92,6 @@ public interface MultiMineMode { affected.clear(); } return new ArrayList<>(affected); - }; - + } + } diff --git a/src/main/java/dev/limonblaze/originsclasses/util/EntityUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/EntityUtils.java deleted file mode 100644 index afcdbf5..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/EntityUtils.java +++ /dev/null @@ -1,19 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import net.minecraft.world.entity.Entity; - -public class EntityUtils { - - public static double yawDiff(Entity actor, Entity target) { - float yawTarget = target.getYRot(); - while(yawTarget < 0F) yawTarget += 360F; - yawTarget %= 360F; - - float yawSelf = actor.getYRot(); - while(yawSelf < 0F) yawSelf += 360F; - yawSelf %= 360F; - - return Math.abs(yawTarget - yawSelf); - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/ItemUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/ItemUtils.java deleted file mode 100644 index d3011ba..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/ItemUtils.java +++ /dev/null @@ -1,95 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import com.google.common.collect.Sets; -import dev.limonblaze.originsclasses.mixin.accessor.LootTableAccessor; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.contents.TranslatableContents; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.ai.attributes.AttributeModifier; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraft.world.level.storage.loot.LootPool; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.entries.CompositeEntryBase; -import net.minecraft.world.level.storage.loot.entries.LootItem; -import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; -import net.minecraft.world.level.storage.loot.entries.TagEntry; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.*; - -import static net.minecraft.world.item.ItemStack.ATTRIBUTE_MODIFIER_FORMAT; - -public class ItemUtils { - private static boolean INITIALIZED_OBTAINABLE_ITEMS; - private static final Set OBTAINABLE = new HashSet<>(); - - public static ItemStack randomEnchantedItemStack(Item item, RandomSource random, float chance, int power) { - ItemStack stack = new ItemStack(item); - if(item.isEnchantable(stack) && random.nextFloat() < chance) { - EnchantmentHelper.enchantItem(random, stack, 1 + random.nextInt(power), random.nextBoolean()); - } - return stack; - } - - public static Item randomObtainableItem(MinecraftServer server, RandomSource random, Set exclude) { - if(!INITIALIZED_OBTAINABLE_ITEMS) { - initObtainableItems(server); - } - Item[] obtainables; - if(exclude.isEmpty()) { - obtainables = OBTAINABLE.toArray(new Item[0]); - } else { - obtainables = Sets.difference(OBTAINABLE, exclude).toArray(new Item[0]); - } - return obtainables.length > 0 ? obtainables[random.nextInt(obtainables.length)] : Items.AIR; - } - - private static void initObtainableItems(MinecraftServer server) { - LootTables lootTables = server.getLootTables(); - for(ResourceLocation id : lootTables.getIds()) { - List pools = ((LootTableAccessor)lootTables.get(id)).getPools(); - Queue entryQueue = new LinkedList<>(); - for (LootPool pool : pools) { - LootPoolEntryContainer[] entries = pool.entries; - entryQueue.addAll(Arrays.asList(entries)); - } - while(!entryQueue.isEmpty()) { - LootPoolEntryContainer entry = entryQueue.remove(); - if(entry instanceof LootItem li) { - ItemUtils.OBTAINABLE.add(li.item); - } else if(entry instanceof TagEntry te) { - Objects.requireNonNull(ForgeRegistries.ITEMS.tags()).getTag(te.tag).forEach(ItemUtils.OBTAINABLE::add); - } else if(entry instanceof CompositeEntryBase ceb) { - entryQueue.addAll(Arrays.asList(ceb.children)); - } - } - } - INITIALIZED_OBTAINABLE_ITEMS = true; - } - - public static Component modifierTooltip(AttributeModifier modifier, String translationKey) { - double value = modifier.getAmount() * (modifier.getOperation() == AttributeModifier.Operation.ADDITION ? 1 : 100); - if (value > 0.0D) { - return MutableComponent.create(new TranslatableContents( - "attribute.modifier.plus." + modifier.getOperation().toValue(), - ATTRIBUTE_MODIFIER_FORMAT.format(value), - MutableComponent.create(new TranslatableContents(translationKey)) - )).withStyle(ChatFormatting.BLUE); - } else { - value *= -1.0D; - return MutableComponent.create(new TranslatableContents( - "attribute.modifier.take." + modifier.getOperation().toValue(), - ATTRIBUTE_MODIFIER_FORMAT.format(value), - MutableComponent.create(new TranslatableContents(translationKey)) - )).withStyle(ChatFormatting.RED); - } - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/MathUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/MathUtils.java deleted file mode 100644 index e66ee09..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/MathUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import net.minecraft.util.RandomSource; - -import java.util.Random; - -public class MathUtils { - - public static int randomFloor(double d, RandomSource random) { - int i = (int) d; - return random.nextDouble() < d - i ? i + 1 : i; - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/MerchantHelper.java b/src/main/java/dev/limonblaze/originsclasses/util/MerchantHelper.java new file mode 100644 index 0000000..ef869ca --- /dev/null +++ b/src/main/java/dev/limonblaze/originsclasses/util/MerchantHelper.java @@ -0,0 +1,105 @@ +package dev.limonblaze.originsclasses.util; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import dev.limonblaze.originsclasses.common.tag.OriginsClassesItemTags; +import dev.limonblaze.originsclasses.core.mixin.accessor.minecraft.LootTableAccessor; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimplePreparableReloadListener; +import net.minecraft.util.RandomSource; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTables; +import net.minecraft.world.level.storage.loot.entries.CompositeEntryBase; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.entries.TagEntry; +import net.minecraftforge.event.AddReloadListenerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.*; +import java.util.stream.Collectors; + +@Mod.EventBusSubscriber +public class MerchantHelper extends SimplePreparableReloadListener { + private static MerchantHelper INSTANCE; + private final LootTables lootTables; + public Set obtainableItems = ImmutableSet.of(); + public Set blacklistItems = ImmutableSet.of(); + + public MerchantHelper(LootTables lootTables) { + this.lootTables = lootTables; + } + + @Override + protected Void prepare(ResourceManager resourceManager, ProfilerFiller profiler) { + return null; + } + + @Override + protected void apply(Void nothing, ResourceManager resourceManager, ProfilerFiller profiler) { + ImmutableSet.Builder builder = ImmutableSet.builder(); + for(ResourceLocation id : lootTables.getIds()) { + List pools = ((LootTableAccessor)lootTables.get(id)).getPools(); + Queue entryQueue = new LinkedList<>(); + for (LootPool pool : pools) { + LootPoolEntryContainer[] entries = pool.entries; + entryQueue.addAll(Arrays.asList(entries)); + } + while(!entryQueue.isEmpty()) { + LootPoolEntryContainer entry = entryQueue.remove(); + if(entry instanceof LootItem li) { + builder.add(li.item); + } else if(entry instanceof TagEntry te) { + Objects.requireNonNull(ForgeRegistries.ITEMS.tags()).getTag(te.tag).forEach(builder::add); + } else if(entry instanceof CompositeEntryBase ceb) { + entryQueue.addAll(Arrays.asList(ceb.children)); + } + } + } + this.obtainableItems = builder.build(); + this.blacklistItems = ForgeRegistries.ITEMS.tags() + .getTag(OriginsClassesItemTags.MERCHANT_BLACKLIST) + .stream() + .collect(Collectors.toUnmodifiableSet()); + } + + public Item randomObtainableItem(RandomSource random, Set exclude) { + Item[] obtainables; + if(exclude.isEmpty()) { + obtainables = obtainableItems.toArray(new Item[0]); + } else { + obtainables = Sets.difference(obtainableItems, exclude).toArray(new Item[0]); + } + return obtainables.length > 0 ? obtainables[random.nextInt(obtainables.length)] : Items.AIR; + } + + public static ItemStack randomEnchantedItemStack(Item item, RandomSource random, float chance, int power) { + ItemStack stack = new ItemStack(item); + if(item.isEnchantable(stack) && random.nextFloat() < chance) { + EnchantmentHelper.enchantItem(random, stack, 1 + random.nextInt(power), random.nextBoolean()); + } + return stack; + } + + public static MerchantHelper instance() { + if(INSTANCE == null) { + throw new IllegalStateException("MerchantHelper haven't been initialized yet!"); + } + return INSTANCE; + } + + @SubscribeEvent + public static void addSelfToReloadListeners(AddReloadListenerEvent event) { + INSTANCE = new MerchantHelper(event.getServerResources().getLootTables()); + event.addListener(INSTANCE); + } + +} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/NbtType.java b/src/main/java/dev/limonblaze/originsclasses/util/NbtType.java deleted file mode 100644 index 40cc562..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/NbtType.java +++ /dev/null @@ -1,44 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import java.util.UUID; -import java.util.function.BiFunction; - -public class NbtType { - public static final NbtType BYTE = new NbtType<>(Tag.TAG_BYTE, CompoundTag::getByte); - public static final NbtType SHORT = new NbtType<>(Tag.TAG_SHORT, CompoundTag::getShort); - public static final NbtType INT = new NbtType<>(Tag.TAG_INT, CompoundTag::getInt); - public static final NbtType LONG = new NbtType<>(Tag.TAG_LONG, CompoundTag::getLong); - public static final NbtType FLOAT = new NbtType<>(Tag.TAG_FLOAT, CompoundTag::getFloat); - public static final NbtType DOUBLE = new NbtType<>(Tag.TAG_DOUBLE, CompoundTag::getDouble); - public static final NbtType BYTE_ARRAY = new NbtType<>(Tag.TAG_BYTE_ARRAY, CompoundTag::getByteArray); - public static final NbtType STRING = new NbtType<>(Tag.TAG_STRING, CompoundTag::getString); - public static final NbtType COMPOUND = new NbtType<>(Tag.TAG_COMPOUND, CompoundTag::getCompound); - public static final NbtType INT_ARRAY = new NbtType<>(Tag.TAG_INT_ARRAY, CompoundTag::getIntArray); - public static final NbtType LONG_ARRAY = new NbtType<>(Tag.TAG_LONG_ARRAY, CompoundTag::getLongArray); - public static final NbtType UUID = new NbtType<>(100, CompoundTag::getUUID) { - @Override - public boolean check(CompoundTag nbt, String key) { - return nbt.hasUUID(key); - } - }; - - private final int type; - private final BiFunction getter; - - public NbtType(int type, BiFunction getter) { - this.type = type; - this.getter = getter; - } - - public T get(CompoundTag nbt, String key) { - return this.getter.apply(nbt, key); - } - - public boolean check(CompoundTag nbt, String key) { - return nbt.contains(key, this.type); - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/NbtUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/NbtUtils.java deleted file mode 100644 index b893888..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/NbtUtils.java +++ /dev/null @@ -1,59 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; -import net.minecraft.world.item.ItemStack; - -import java.util.Optional; - -public class NbtUtils { - - public static final String ORIGINS_CLASSES = "OriginsClasses"; - public static final String ENCHANTER = "Enchanter"; - public static final String MODIFY_FOOD_POWERS = "ModifyFoodPowers"; - public static final String POTION_BONUS = "PotionBonus"; - - public static Optional getOriginsClassesData(ItemStack stack, String key, NbtType nbtType) { - return stack.hasTag() ? getOriginsClassesData(stack.getOrCreateTag(), key, nbtType) : Optional.empty(); - } - - public static T getOriginsClassesData(ItemStack stack, String key, NbtType nbtType, T defaultValue) { - return stack.hasTag() ? getOriginsClassesData(stack.getOrCreateTag(), key, nbtType, defaultValue) : defaultValue; - } - - public static ListTag getOriginsClassesData(ItemStack stack, String key, int type) { - return stack.hasTag() ? getOriginsClassesData(stack.getOrCreateTag(), key, type) : new ListTag(); - } - - public static Optional getOriginsClassesData(CompoundTag nbt, String key, NbtType nbtType) { - if(nbt.contains(ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { - CompoundTag ocNbt = nbt.getCompound(ORIGINS_CLASSES); - if(nbtType.check(ocNbt, key)) { - return Optional.of(nbtType.get(ocNbt, key)); - } - } - return Optional.empty(); - } - - public static T getOriginsClassesData(CompoundTag nbt, String key, NbtType nbtType, T defaultValue) { - if(nbt.contains(ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { - CompoundTag ocNbt = nbt.getCompound(ORIGINS_CLASSES); - if(nbtType.check(ocNbt, key)) { - return nbtType.get(ocNbt, key); - } - } - return defaultValue; - } - - public static ListTag getOriginsClassesData(CompoundTag nbt, String key, int type) { - if(nbt.contains(ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { - CompoundTag ocNbt = nbt.getCompound(ORIGINS_CLASSES); - if(ocNbt.contains(key, Tag.TAG_LIST)) { - return ocNbt.getList(key, type); - } - } - return new ListTag(); - } - -} diff --git a/src/main/java/dev/limonblaze/originsclasses/util/PotionUtils.java b/src/main/java/dev/limonblaze/originsclasses/util/PotionUtils.java deleted file mode 100644 index 724f958..0000000 --- a/src/main/java/dev/limonblaze/originsclasses/util/PotionUtils.java +++ /dev/null @@ -1,44 +0,0 @@ -package dev.limonblaze.originsclasses.util; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.item.ItemStack; - -public class PotionUtils { - - public static boolean hasPotionBonus(ItemStack stack) { - return NbtUtils.getOriginsClassesData(stack, NbtUtils.POTION_BONUS, NbtType.BYTE, (byte)0) != 0; - } - - public static boolean hasPotionBonus(CompoundTag nbt) { - return NbtUtils.getOriginsClassesData(nbt, NbtUtils.POTION_BONUS, NbtType.BYTE, (byte)0) != 0; - } - - public static ItemStack addPotionBonus(ItemStack stack) { - stack.getOrCreateTagElement(NbtUtils.ORIGINS_CLASSES).putBoolean(NbtUtils.POTION_BONUS, true); - return stack; - } - - public static void addPotionBonus(CompoundTag nbt) { - CompoundTag ocNbt; - if(!nbt.contains(NbtUtils.ORIGINS_CLASSES, Tag.TAG_COMPOUND)) { - ocNbt = new CompoundTag(); - nbt.put(NbtUtils.ORIGINS_CLASSES, ocNbt); - } else ocNbt = nbt.getCompound(NbtUtils.ORIGINS_CLASSES); - ocNbt.putBoolean(NbtUtils.POTION_BONUS, true); - } - - public static MobEffectInstance applyPotionBonus(MobEffectInstance effect) { - boolean instant = effect.getEffect().isInstantenous(); - return new MobEffectInstance( - effect.getEffect(), - instant ? effect.getDuration() : effect.getDuration() * 2, - instant ? effect.getAmplifier() + 1 : effect.getAmplifier(), - effect.isAmbient(), - effect.isVisible(), - effect.showIcon() - ); - } - -} diff --git a/src/main/resources/data/origins-classes/powers/tree_felling.json b/src/main/resources/data/origins-classes/powers/tree_felling.json index 404163e..f74f693 100644 --- a/src/main/resources/data/origins-classes/powers/tree_felling.json +++ b/src/main/resources/data/origins-classes/powers/tree_felling.json @@ -3,5 +3,9 @@ "item_condition": { "type": "origins_classes:tool_action", "tool_action": "axe_dig" + }, + "block_condition": { + "type": "apoli:in_tag", + "tag": "minecraft:logs" } } \ No newline at end of file diff --git a/src/main/resources/origins_classes.mixins.json b/src/main/resources/origins_classes.mixins.json index bc5d4b7..af288e0 100644 --- a/src/main/resources/origins_classes.mixins.json +++ b/src/main/resources/origins_classes.mixins.json @@ -1,39 +1,39 @@ { "required": true, "minVersion": "0.8", - "package": "dev.limonblaze.originsclasses.mixin", + "package": "dev.limonblaze.originsclasses.core.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "AbstractCauldronBlockMixin", - "AbstractFurnaceBlockEntityMixin", - "AbstractVillagerMixin", - "AnvilMenuMixin", - "ArrowMixin", - "BlockMixin", - "BreedGoalMixin", - "BrewingRecipeRegistryMixin", - "EnchantmentMenuMixin", - "FurnaceResultSlotMixin", - "PlayerMixin", - "PotionUtilMixin", - "ProjectileMixin", - "RepairItemRecipeMixin", - "ResultSlotMixin", - "ServerPlayerGameModeMixin", - "TippedArrowRecipeMixin", - "accessor.LivingEntityAccessor", - "accessor.LootTableAccessor", - "compat.apoli.ModifyFoodPowerMixin", - "compat.apotheosis.ApotheosisEnchantmentMenuMixin", - "compat.farmersdelight.CookingPotResultSlotMixin", - "compat.farmersdelight.SkilletItemMixin", - "compat.tetra.WorkbenchTileMixin" + "common.minecraft.AbstractCauldronBlockMixin", + "common.minecraft.AbstractFurnaceBlockEntityMixin", + "common.minecraft.AbstractVillagerMixin", + "common.minecraft.AnvilMenuMixin", + "common.minecraft.ArrowMixin", + "common.minecraft.BlockMixin", + "common.minecraft.BreedGoalMixin", + "common.minecraft.BrewingRecipeRegistryMixin", + "common.minecraft.EnchantmentMenuMixin", + "common.minecraft.FurnaceResultSlotMixin", + "common.minecraft.PlayerMixin", + "common.minecraft.PotionUtilMixin", + "common.minecraft.ProjectileMixin", + "common.minecraft.RepairItemRecipeMixin", + "common.minecraft.ResultSlotMixin", + "common.minecraft.ServerPlayerGameModeMixin", + "common.minecraft.TippedArrowRecipeMixin", + "accessor.minecraft.LivingEntityAccessor", + "accessor.minecraft.LootTableAccessor", + "common.apoli.ModifyFoodPowerMixin", + "common.apotheosis.ApotheosisEnchantmentMenuMixin", + "common.farmersdelight.CookingPotResultSlotMixin", + "common.farmersdelight.SkilletItemMixin", + "common.tetra.WorkbenchTileMixin" ], "client": [ - "client.ClientSideMerchantMixin", - "client.LocalPlayerMixin" + "client.minecraft.ClientSideMerchantMixin", + "client.minecraft.LocalPlayerMixin" ], - "plugin": "dev.limonblaze.originsclasses.compat.OriginsClassesMixinPlugin", + "plugin": "dev.limonblaze.originsclasses.core.OriginsClassesMixinPlugin", "refmap": "origins_classes.refmap.json", "injectors": { "defaultRequire": 1