From 0d616031f2dfbf927b17d69e3d2a10effe9981b6 Mon Sep 17 00:00:00 2001 From: AmyMialee <10999535+AmyMialee@users.noreply.github.com> Date: Sun, 29 May 2022 05:12:24 +0100 Subject: [PATCH] update --- .gitattributes | 2 - LICENSE | 2 +- build.gradle | 13 +- gradle.properties | 16 +- gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- gradlew.bat | 21 +- .../assets/minecraft/blockstates/light.json | 52 ---- .../minecraft/models/block/barrier.json | 6 - .../minecraft/models/block/light_00.json | 6 - .../minecraft/models/block/light_01.json | 6 - .../minecraft/models/block/light_02.json | 6 - .../minecraft/models/block/light_03.json | 6 - .../minecraft/models/block/light_04.json | 6 - .../minecraft/models/block/light_05.json | 6 - .../minecraft/models/block/light_06.json | 6 - .../minecraft/models/block/light_07.json | 6 - .../minecraft/models/block/light_08.json | 6 - .../minecraft/models/block/light_09.json | 6 - .../minecraft/models/block/light_10.json | 6 - .../minecraft/models/block/light_11.json | 6 - .../minecraft/models/block/light_12.json | 6 - .../minecraft/models/block/light_13.json | 6 - .../minecraft/models/block/light_14.json | 6 - .../minecraft/models/block/light_15.json | 6 - .../models/block/structure_void.json | 21 -- resource-pack/VisibleBarriers/pack.mcmeta | 7 - resource-pack/VisibleBarriers/pack.png | Bin 14499 -> 0 bytes settings.gradle | 1 - .../visiblebarriers/VisibleBarriers.java | 64 +---- .../VisibleBarriersClient.java | 50 ++++ .../VisibleBarriersCommand.java | 153 ----------- .../VisibleBarriersConfig.java | 10 - .../VisibleBarriersModMenu.java | 12 - .../mixin/ArmorStandEntityRendererMixin.java | 91 ------- .../mixin/BlockEntityInvoker.java | 12 - .../mixin/CommandManagerMixin.java | 22 -- .../mixin/CreativeInventoryScreenMixin.java | 45 --- .../mixin/EmptyEntityRendererMixin.java | 96 ------- .../mixin/EntityRendererMixin.java | 79 ------ .../{visibility => }/ItemStackMixin.java | 6 +- .../{visibility => blocks}/AirBlockMixin.java | 15 +- .../BarrierBlockMixin.java | 6 +- .../mixin/blocks/LightBlockMixin.java | 53 ++++ .../StructureVoidBlockMixin.java | 6 +- .../ArmorStandEntityRendererMixin.java | 39 +++ .../entities/EmptyEntityRendererMixin.java | 50 ++++ .../mixin/entities/EntityRendererMixin.java | 36 +++ .../EntityTypeMixin.java | 10 +- .../MarkerEntityMixin.java | 6 +- .../mixin/visibility/LightBlockMixin.java | 38 --- .../visiblebarriers/util/FloatyRenderer.java | 66 +++++ .../assets/visiblebarriers/lang/en_us.json | 3 +- .../assets/visiblebarriers/lang/ru_ru.json | 3 +- src/main/resources/fabric.mod.json | 17 +- .../resources/visible-barriers.mixins.json | 23 ++ .../resources/visiblebarriers.accesswidener | 1 - .../resources/visiblebarriers.mixins.json | 24 -- 59 files changed, 525 insertions(+), 1007 deletions(-) delete mode 100644 .gitattributes delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/blockstates/light.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/barrier.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_00.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_01.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_02.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_03.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_04.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_05.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_06.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_07.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_08.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_09.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_10.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_11.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_12.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_13.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_14.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/light_15.json delete mode 100644 resource-pack/VisibleBarriers/assets/minecraft/models/block/structure_void.json delete mode 100644 resource-pack/VisibleBarriers/pack.mcmeta delete mode 100644 resource-pack/VisibleBarriers/pack.png create mode 100644 src/main/java/amymialee/visiblebarriers/VisibleBarriersClient.java delete mode 100644 src/main/java/amymialee/visiblebarriers/VisibleBarriersCommand.java delete mode 100644 src/main/java/amymialee/visiblebarriers/VisibleBarriersConfig.java delete mode 100644 src/main/java/amymialee/visiblebarriers/VisibleBarriersModMenu.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/ArmorStandEntityRendererMixin.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/BlockEntityInvoker.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/CommandManagerMixin.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/CreativeInventoryScreenMixin.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/EmptyEntityRendererMixin.java delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/EntityRendererMixin.java rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => }/ItemStackMixin.java (75%) rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => blocks}/AirBlockMixin.java (86%) rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => blocks}/BarrierBlockMixin.java (80%) create mode 100644 src/main/java/amymialee/visiblebarriers/mixin/blocks/LightBlockMixin.java rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => blocks}/StructureVoidBlockMixin.java (80%) create mode 100644 src/main/java/amymialee/visiblebarriers/mixin/entities/ArmorStandEntityRendererMixin.java create mode 100644 src/main/java/amymialee/visiblebarriers/mixin/entities/EmptyEntityRendererMixin.java create mode 100644 src/main/java/amymialee/visiblebarriers/mixin/entities/EntityRendererMixin.java rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => entities}/EntityTypeMixin.java (71%) rename src/main/java/amymialee/visiblebarriers/mixin/{visibility => entities}/MarkerEntityMixin.java (86%) delete mode 100644 src/main/java/amymialee/visiblebarriers/mixin/visibility/LightBlockMixin.java create mode 100644 src/main/java/amymialee/visiblebarriers/util/FloatyRenderer.java create mode 100644 src/main/resources/visible-barriers.mixins.json delete mode 100644 src/main/resources/visiblebarriers.accesswidener delete mode 100644 src/main/resources/visiblebarriers.mixins.json diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/LICENSE b/LICENSE index 9f8f026..b13181a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,2 +1,2 @@ -Copyright (c) 2021 AmyMialee +Copyright (c) 2022 AmyMialee All rights reserved. diff --git a/build.gradle b/build.gradle index a53f7f7..264fd14 100644 --- a/build.gradle +++ b/build.gradle @@ -6,22 +6,11 @@ plugins { version = project.mod_version group = project.maven_group -loom { - accessWidenerPath = file("src/main/resources/visiblebarriers.accesswidener") -} - -repositories { - maven { url = "https://maven.shedaniel.me/" } - maven { url = "https://maven.terraformersmc.com/releases/" } -} - dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}" - modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" } processResources { @@ -39,4 +28,4 @@ publishing { } } repositories {} -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index 5c4e117..6fde675 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,14 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx2G +org.gradle.jvmargs=-Xmx1G # Fabric Properties +# check these on https://modmuss50.me/fabric.html minecraft_version=1.18.2 -yarn_mappings=1.18.2+build.2 -loader_version=0.13.3 +yarn_mappings=1.18.2+build.3 +loader_version=0.14.6 # Mod Properties -mod_version=1.18.2-fabric-1.4.1 +mod_version=1.18.2-fabric-1.5.0 maven_group=amymialee -archives_base_name=visiblebarriers +archives_base_name=visible-barriers # Dependencies -fabric_version=0.48.0+1.18.2 -cloth_config_version=6.2.57 -modmenu_version=3.1.1 \ No newline at end of file +# check this on https://modmuss50.me/fabric.html +fabric_version=0.53.4+1.18.2 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18328 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 Y(TzS~Xdo8@nTUZrK}a{fL*HNQe=4o%4FCWD delta 17568 zcmY(KV|OJCl&r%}$F^<}^)8cjvj zb^%saRLM$6)jX+(9JZa8`xf9|xbM5FhVKQ63WmOCQNNecpXDui{JKx0rcYmYM_-u_ zfV-a8~e0KeY_AHrYK}^ZE(i)u>GU4bnLR&a6E}(E(fE@K1lEbIOI{<)Zm%f_?J)T zj?0Gx(s@|{LoFmfp4uqvkd6dLv2>`wy;FCn&~EaTJI}L%o8&*r<%d@?M0!UZ9{re+ zEt=J~S;&6MZJ^*2$luZ%%|Q!rz>~yIBu~1r9O{tUI8Blod9Mw0%!-G`f!xDJ1VF}v zK|HVOX6uoQJT}7dC5-4vUE4sVLY=DFFWQrNp2J%i@wmbAEl>RSSSz&*v2qJq2);6n zkmEL84Dyf^vu_&1Lx3j4nJjAi;fYw{pF}QZ1t*5KKvEN zbN=9f@*`@cA9$@+no$1$&={}&wA*XBuP9hHjfIJxzE(xMHGis35r9wg$GhPC*K^k@ zlgtn{c&)Z4eky%ez{Ia@v$47+v&%hyaS7cM@lPcf6td^&fXY5GkS3k$hNR4=Aomn@@kqCbP`+`$`2~3U zhD-R0OBtdPoR)q9=b}Z=JECdzO59Pn#e6cRaJE0fW-+lYD|+7;o{I$jK4VX+Y1()~ z@{DJ;B9WVyao;0H0RZ1<%)61u?(HBSMEbWC9 zPg@=TrUj$E`*0C)Q$DJviSfF>GT?}$DUiEX?Ax)ypXU)uD zi5M!%;}oHJS0kEj9(4yIFY8N=%XPa8Yp)-W7vdI45ns+|Ss160<5(rl!x0yjny#eI zti=P5?w}?Jf)AILh|yfu3ZKY#l!JC4L&ec7{Z zSlwv)%SeSYh~tPOY4f7m%~e&5r_6~SUG&`z4O$)AtCRk>YK6?wEpEh$=$;3)+kNk2Pvf0eVEFA>y@4Ut@w!f+*{R2s9gQGj+SsbX__e`no_L z@{o2|f4J$A%d!kDM7f*vM76nBDbgV6`L;gPK{M40je7IBE^$rYB;~KZVK<$`G2$J{-u$xhqh8Xxet80; zNqmnh@S>jmd4a5%QfG!af6|06;gei4CpMyN!4wLkU#fr3PMUQ77}~bgZZfmw-Ar8C zoA8uuMclErVWhT{J%QB>^uvQslzfByU;QMJ-b~IRf`IT4B_g0u0;{#5J#k0f{9-}s zWgWeKCr}AD&}mT)FC@4nG?>H}kV$ok#U&AIC#3cz{Dm;t8x{#g-H1nBb251g%a#Qs zaL8ZawUCk{Q>9BMHHFW&NqQHZ#kZWr696)EYJA9zzp?3r{Qp{&8oog{vN~*cy&U8J zOx75Djnf)Z6v%)20U4|Fb{#fil37 z*_W=Oxm=$!##6@bN5DJnoUh^SXS3D!h%E1!1Nu8}u-|U+@Z*btj@Zv`aq1c2@FSx5 zgCfmWW2!+BQ2Eqw_+dxv;ikY#p6zF^IQ7(x@r&{+)#|$w2!gp+H95n&N;g%Mezz$S}kP*G=iWNvW2k7N5cwbC~;HRcW`*+J8*_#dcnH#otO zx&hAN5>4$LaDK(J`rieb0i)Ctje}CVaK0=Ir+0gJrn)^ciw=5^>RvRBgUTC2GG}F% z_)+!1h@HrXd$LE_W{Gp>KVJ17-6MUPUU9lE$-ONY4<l7O@(zi5paL_y)@=F6urPV;AFrmZj^5iZ;Mm|dK3Z*B@tdBF7a2FZPe^N37;RQ6V#ygihQQOJ zv!cp1k8^)pF_52VTnCxWOly%?+?bq~<&FlnZ)eJ`F-;y`vlTKml<=l7c`u-nhOn2# z4#DpMSqnx(-DoLB5a#S+N0AQEAJXAar@ZKaAKEP+7OhUYLvm3gBl9WDyq!fG`cHx7 zG-em^s{G#bYtcAvizLkFjn1ecTRdz?u1!Oe%iZ;D#OzewY&3GB*658SkcATeV#x9I zmxgWPLG&$2B~;{0oa_`VnT&BYL}E>adCavsN8uFGao&bGW*r{s?V)CdkCKwEsq-|zad=}DD zI3Fes<1_%T1K+D27VFXx=W1$8A^_Kz=@D8kbvVz$$&VwADoah}y^Psx*z&EmQ-6;i z#)G;`bMFt#jV4!`WeoF{04)=)1uqaNj!f*zV0>X2X{!Ls>=tGaniC;zVL1|#5RiL8 z77w;9Zcw^qu?M#D@q74Jn5#3vg#h%vaajXg`VkzAZ z6Mnnp3`Q(kKo7zvHt)2>5ptiSrOu->ypfV4D`l&eh~z!eREKLA&!vqZ7kMr#a|^Rx z7atZ;SjfWb2;$y9sg`rhtg1~_!=xHKw50(degK~ipfw3IffPH8D-$1^I|bvX&M0N` z{<~c>=heXOon)l_!AI3{3_lGNk~$2+=?>a1pA+|nLB?vmGLuyyN?q+5*ur_4bt_4E zYntSj4Bj;e{$RU45ye4tlsXV5m_G%7tddAQix?U7#j;ALokM_TlW3}o3qT77(cmIK z+@Z~=8IWqe8cjP5f;shBOO$wLMUkDQm z;G1TSR)pyk>@P*yP3vQ(&2EY=8*qxI#JbZ>3r+9wWjQ#U2K>&NQw<0VrXRTcJ5Vwr z?I&a!2|7~5R3+~sarD$h@2In2^TVZhC7$D>>$(p+?bc^IX{03xb~x$h^B;?f2j>FM zt21)mGXO~Saezy2$zX%#C-x|CIyIvM(&k_BKNU(~Lp=~5fBC#XhNzfGen3HefTIY5 z4VlLmrwF$E=vNM9$x7%3a&%7qG{1se@Z%m)HX$!7^U{c}yUX?|(` zn)eFM$51O$vec=E!tZ-Fi=I8j(O-E56D+wq_+;?Zvh9E*IiSZ!iDCB(+=(8_0@cQg zX}py?c)3kf7{IL2Pc&4{hFlY7#kH4IBwnQPRX!+v1-v>~IXXPJN9XQYM!q`BVy5&N zmiXu8*m3hBJ75FD$qVRxTyt>ZmanEG0BMgrZbiUB13|scr?-+$Uie+vclI6 z9){>sV94Zn<76lkDHg@R^RmIwej&iU^xgE>p0#il)BeL9wPLQ{5q5|_yjgnX28BS0 z(N*Bxt>PwyapB5$;w& z%tO2!-ni2qgU>~`eQl=G3PasHUMF?z8GRHpLIoQoQ5i8-U0fI3BF5+*r(cr0I*pU2 zobCQ>;Opq=!!+LEoz~T$1cMsTHP4JE`WSFZQ?q{LKD{5yW4E}R5}QD#`jZGy7s`|^ z(IYk1)Jy^K?^rP{W`@eGCS}HLK9G}=?PPwAxLr6U(Imb$BRhI~9>3Hk)lECY2m0tU z$s12~E(dFVMM2HCZOw35{|VpFKl4a{)VdyXK|t9Yz6hE}pw^B(K3lq#QNE_5c9gvn z*V)7&#;9+0dGULNPPJ$y-$D6z5$hgiY^U5YUQPqtZM^lh*YoZEr!uVTPKTbw%?(@o z_yrbvpF&3`9O4J9p{0I~6V=W64c87!-TnZ6WADzh#Ek$LC<$(~&wxVsy>?_-l@?v3 zvKy55*z}Vk4$-=&PGCdg#7e&1F=Pf-kh!z?wZ;9qVR^^9a`X18&I?Rqo6ME-N{frB z6xs!f#yg4n7YBa(v6@@@e1SNYmPYz2&G9C23^5Z|_|_K3%8z}x-piBU=*isvw8&{) z34@;9EmrxCwVz2XYlZuglm+`G4n5o2p$QiP88RPCz$nA@oQA6Z1PL9Z{T@9wsJN!C zKR(T34^}zuDxvRQ!plOI&Eilb_T!b|IyeP>0+N9Bs0bHamXWn~ZpH3Y0yvu*JKTma z5mjkkHV;u5%YW@>8Y+g49nv?iT%oG-n3&1S0zZ>TaKG4)lji_B5|*d7e!d6?P_QEo z!>@Lb2cb-UZC014jE1KlLm#QW0_S{pFu|pmU6`lLO|hnIVn>G~jRpDfnHiMfwNgOl zn}jHHD_!Yg-ZSV&oQ9}Jd+*rK3SDCK`b%ha^9IVK_M!+%eDoQi;8%pM8smh2I5@Ql zmHBTp?YN)Um1^5e;yI3{3uM%q(vYIVQQsTV$hm#_PYh#Qa!XCY7;_q24!G6DSMw!P z+T&iC%SU!Pl&!iHJ}1TU1(a1TK@mVq>Cp}W0R0?E?hB6kcF{TY`~aV{`bwG3>V86t z+QiexBMXYvvCvhwI zmjX3soPNTNDtvcpPGX1ksh2mQMi1d1PO8zlA0dVG3pTGqj}4CNqn7&-n?vBl>;T6M z8a<5S+&&Z9iu`QUFL=hdqk+V$1{46ij=n`pY43ocE~^a_`-bsmUyKDl)+bW`)6RMiNd z?b3=uaNUw4X&Fv8Xf7%a8!Lb{*2wG%YJ5M)^GrwGx1Z!X6o8SIiV()Q_1`-BM{d^7 zN{xnY^fhBj6R-<2#{Z6Nre?Fh?=y?uCs>>6-zc8gEv*({n|kGuVM?uBJQG@8TP&kSMpSalW#lL#%VqaqkqG5+1_(e$T!f5YITZ*C7A}{k)5*+x#=>+1zo1s`B2GvFYc@Z^2`LTNVw=e3#eg8gFY24Pfp zLH&~;5PXToe!ro{4R5XvQ>|oGDw3;l$_mq6HY*F$T{X)LXa?<*()O7^1=NhZGxGl0Mmo& zudKU>T{s~FvZ?@2xS<01hB^Y5%=c{)gG3m)v3e^(d7fW5fI*v@zWoxbN%`QZQig3ID6}=9QN*^3x%}GZ!q75p!4G&V4fKkXUK_KI8%>c{8~n+h0s50TmN(ltO;_ z60f9MF^P(H%l8;F3tWzHUEXiug4IuLO{O7Qo=WMq?_4pCnsHrPKjKf#{xRaZN9S?J zrd13}e!;AL>}*H#$kYvy#XJr7OeQ}4qIx}`dJ07@JcxcOeib`E(=Xt3$)91p(9BHIO$Hn}PqQ@{aNc8yPP&wz27f%iDfd za~2n5)fb&Vo)q(;r-$k*q7u>Mk@m5&PT8|9{$EM{Hu(Y;_-JW7|1}>pg!FJi z?SedIBBL=`VEY_rAZo)XrtrpwYoZ1icPj5&;Da4dm%f2)J!>j;VvOOyS-|xCkok)Q z>=nfph|T_@-FK86D7Ti@>Q^{vvDs*J$9dQ+0#5d&BcMtX4wRFh-!@JAq_}0VIq}FB zBRgi^p`yEdj+V9=4Q}qiTIXoJDe_GEPzVnl#jI5~_mBU%R$7gg^rDJlgAV5RdqnG{ zMAHD`itgzsqT&>DyGBzm%yi`F1!rSxafN>@v2PyL6v7zv6El;)v%1Q@2q z&mo2F#Q8kzrM=3xa|%{Gw;n!``O~~(cpt?zqWc3(&9T2?7C$@v0R!1H;w7KCZs;zw zj$C0sw}!$PUO<@t3j@3w?Z`S{pwmq`I7^{HK;RRZ7zKbN`KVV`0;WQg%73YUMOqL; zOFI$?fsr`+A2mrqd9<21#3pd@E07Ntt%on5^5Ux~G@ui8b9KL*KW>YnjE)O-mM$bi zo=v>uw`X%Yd~2R`V-t9N?$Ls1ghRsQSW!C?p<53XniJVPTq_Vw>C zwwyg<@wP8U#RVD4%Z5G#f8wK?(YOtm^JQZ~t z#+Cx%1C+*}Tb{R5YNUL05lR^*8Y~SpeH>zVYW;N@%1un^up2pHlY()dVPAEo{A4P_ zhZ06=T=&zApUy}3L)7M@&hNfD&=Vi%<}49MRKR3OO4w)FjLyEC3eTd75#g~lR6|+$ zcc&c?;$zN%iSbfVD%_KYQ;gM>mO|^kSQzQ;6^a0kXq!t`@k;Cvc8i?8ym{)1> z3230hEb^W765A2P|K)&Bt+ZN8HUb-Kc2sEoHOAoLQbBWLppm^OsTS8S+FjU+&O z1UM=46K`?ieL81D`ILFT<**XF#LvjCS41>t>DJcVXq*~un4am~)32{#d!#mMJ*>Ea z^r-4{8RujJrJ-#lyy^8SkvEo-VA<7ACyU}m`c!1;LHqUA)<~N`=VMGHpJ{TtFWYH? z`@i=ncByMPE2`xj2d^Bg*_RHjbfduUa{d+q{&rPDXJ>jn|mK8|zns9>pA0u%ps>=0OatFCZQ-ydba-k^S?x zpvEmKeC&SdWWk;2VtMH=Y%zGj!5Q>VkwL~gT6ktY@j)a709QaM&1-YW&TcE13*Y2< z!Vwq2$(}prw9--Xe10$O<1W^Z{T6|(ba50!<4A&UZ|Wc+#5sRjYlB9ytwK?6nq!SH za3~j|>65QO`g$7u;7DQMTN~JK$o7d2T)6eX-URMugaG$(CI+)7VQu1t)caF_dppiM zrZC@ydrqI4`9#D+XyQqL0m^^q%K6aZujz`MT*8lwo(h-plvi2>7{$tU(<-!S-`)k@2h#LI89P7`u}3xKxLqmN0*6^2~E9g<*hz;!@s9ko1VF!}4=)0W7NnHw{8u}#I)jFHNN=iaRP&Nkg^ zBWu4;gx_fO?aJg?tCPyEK&E9B);3#AeOlBQa&1MqWfz|AJ72Ot%}yG1|vyP(%*zj zWA;(h0B}G(P`#F8V?e$V?-F^UUa|@qO%OM1SCNQ~ma5svQ*u1yQ8GW|tfJHEiMN%e zd3-F_QUA!$MNVtBRy@I*Vu3B{q`!?>h4!`*N{Oz|IQc$qSFCA0Qm#<#CSN+oF~N2r zo_W>-f)PWV3pA0cPWw|+o@P0yb=JcWdO`4J;B+JId!CdRQ;Xv8{Ism~7KS#iPws*# z-|8vJfrjz$8#c|3N4z^s)qvOXgtyXTmStwlr|%~Z%=O{S{1;r05vss;_wJU()X2jr+w;V|NI>zyrPhJ8qf#-}P) z0c=e6^km5;7wz|`su-SOK4;ex9F{Y0)z3u=7++1hm6InP97YC4SmtgTU^d4Du4oRi zDVBtKc0&`|uEu5(|D;0P5{LbE7cs)LR8<=G^4Qip@b%d43VGo7dH~!$WOBO2bQiJR zY2LPW0iCc^8Mx^_xHPzike*!@^?u>?p}y*d3*eDqaz^@;si6ZjC6zF=dBAoQ5RN(} zl;=3%iq|k7&36Tn9+M3v%nh~kDoSTCXT4d{GK8PF+9eW7rSAij7o9Eh+WE8?UX~&M zL}SZ2)L`{TS&)~-=`cs6o24iBU%~|n*GvMQflyx)l1!Qk$LyL6xc#3N>}4D=Cc=hw z&S-(AyCp(aSe&sY#)h+kQMw`ZR%nsXO=LmuPK~Xkef2p82n(~n)J&-@jIobRxtEO~ zdFm6kyOLwHrcS1Gu-f1)>j@M^S+7SVvMi$*j9_c>mYlZYE(q`jvK1~R-uQUrJTypx zfTW)pBG9Q}u2|+t4@9nbq$>nu$l`+feo1=2Vp#EhWefNVQzf}U)y9Nkk3KB!LnxqJ zfjvc%_B)c{bAwUzzCDjgaLZIt&$IA2qwV#K2n{mfNY*6@OeUlp$B*Ev$PfG5m5D;7 z%=!Wr?&5V|2wqv||mN5r=1ZCK+KOB_+pkqFN4z(h-Y zjyYX?IAD6=2Ffp}&kEyz5M{>rigSE9c}#=t;p=WnGYY@7&$q|=mK=8gS$kD6yfgcF z%{N8rmUm=+Q>GQ|m5RrP^u9jmRX%XZFxN0{)Myp|BrTVB1t<~yA)^B-;99mK&+HGm z&&KjpEBFH$&PE!#lwMS;0=Ore>76_n9Gz#;b$&62n!FZFMQG=utMW%&iPh$p8DCPx zOpo)mozrC*(a6@6{vbBOamPSItimObCFY1o0JlWw{fG*DWp!zEVKR`0v81CY#2K07 zZ|${08tT5r>?^-X9olBa3g(7n89$XrSQ}+^W#HN5XC~LOU$}49(zgVGz)vux0a9?M zLvt+!C91Jop%Pl22xmR^I3ej#oFL_=*B)8}4(mYUCf}hQmkEFtBc3K-2`tp6(?-rJ z5Tj?NvWWz>%F(Oa`l^Yq)Sy`1yDg&MSN%nI)2$UD_)pb*$8C$=^~Zqa>ZF0%$v^m7 zYewv#cwuCkSBxeLFI z7HZ?wv78&nwDUVkg)IQTdD=}7oK=Mg&_Xv9K^?CoaPJj;j~gmx)iTV&4hs1*kaWq5X~fI3vTZz|3${2d!7y zj$JhXKg?v781&nV!=K452B|H4?3d^OgSj%!XxXQf-y51vk7LAXDguQld0$C>JvP}Y zoy1y}$TS3t+&)5{1epOGLr?g=kyn2^tALG*=mZbceV^6y9zf86WQbe@Il3*r@NMu-GP1Wel)zv!I za~jq9r-9XFWL7lm>pHrr)^;}4om-flf7bo{isgS!deXFPTKx&gu+J*g~ zRv_Ad8WQJX?`|SmgheCRJfd(et(mCDO09DdoCgp9*Jd z6;6#K8(>}heY{1cmT}f^`twZ?XI|UIclOac^tG4}XTE-laUA!-IEH9NQv-iUaY5~q zV>tjC)|&)HSGLxh$cGBo2^1(r+4C+=aqccasy?4X>|_h`I8!`CN0PBE-*K)ME^3-J zP=)aa734C>gKZ+WaP`hM2fprUpJK1tksDZ*sLUd-UL-%Eg9)}CKB<&hg8{-MXhIZo zLA)Z)A$a}yu6|9cPvq!Yvw7To>5VXni;l?_{&QA)9XDmtbhbpfe7C0yn-)&{PDg#9 z=tE02eDg*tyRChPqwG`*yd30zUrDJr>dK_s+Do>&@t!BvCD3lrdzh^rSaV6(yMN@q ztqK|!n$j%TD5|C_6eg@pZNo}=K2~yQN;5#dS zk&NgR4tUjU{H1SaOJm!*w2LfBh?kuLKE;=5FDzS7BxXjn<(pMHA1DC_pp8xpQNtxK zo8@k(y(ly$x>lVBQ^6}%RlgwA+#eCh$4<4loWNb-ltS0b*mNfk4 z8nb2i6T0!sNxlxP1#+nP&rS<9>pjh&WWnuZQ~DzbN3?Wjzd*N(Ys*TU;HP zfHmoAK8H!Vs;cpS7bF@QWyaZV&9605t-gaPec@~L3kf)e@U2F5^ytA}E)Y4oED5sZ zx{pjlN570J*_Y;s>n1n!Cl1emEIxCD0S>&2fnLlI<8-0I^R}|u$ep#;sI$;kHIc3v z(zsoG_+UW;mlg1L*GbXIa-BKYFScjR7tfS zm^%0j1-2yOe`CdJuuCLi2O?a+hhxEUx|#Jox>*KN@LBI?#GBOWSKp0>F3E+~qR>)L z>l?6W)F;x!j4hkQEbKxQPAOn3Lnb?oi~X}^RTqll^y!@9*s#?k4JZqeF2ivjRjoM} z5QdeaydsdUm?PCH;-1F_a$Y6{4`XKkUBR*ep^{#xxq*DPW!}YDh!9VZ4hI?9wX#=Y zQ>^2n-?;JrXS-vKbEUu{zkU^-ls#Oj-2r+H43986mS#xs&Gt$X-YsLtd@M8I>c;(hsVlPlCY;+z%7P7lWq7cf&D+ zO_WIBC3Uhjon2B@>43E+Pmm7*anS3;W+&g$VR#13PmwFXf>hb3on3}>qeJZzFm2V% zxdpk#`NCmP7=Dq+yGyTeO1S{d#cr+csX|Q(U~Y!dt}>7ytL_J1!z1obFmB*3HDoEQ zi}>9T;heTKs>=Ky=3VEPp>yb@{)lYhOr(h%sks(P5X`@$1YK$o^DtB>G11Z5&*l8F+ zC0*Z<{%Do@;mn@l^dP|IYAn$t)~uY-bm)}Q0&+(j7#Zs=$l0LO#x;)1CQc3?le960Bl4e z?7$T?D|QU!B@>OtM%d7xL>HnNM$5|IqQ>C8_eTRDZVT!jg4uoDTBIHKI;KHZ@r7;} zjj2}KR5fOy?n&nxL3XTT?=-kC)B+?W8cDZ1iY(bceJf?awB(yX^v!}-T<>tx-62lo z1)OY}g&Sh$B-qKvTbe>{>4ux1KjGrr1{1Z%Ra^t*e2KFU*W4Zl`=)VU`;|+?!SEf1 z|3)&9!s0QwGfH;Ku@W#c*n)hKLPE5OTHlF*F}ift7ZH5LFeqUfg4wqG4Lh)<0fu_j z!}NHX*o+sZQ9|6o#E%dZQVa$onV__Ra?yWu#X@eYg+!kX6~NG}=k47#C^KY4xFJJ6 zjHko{z?+o4dUVE~%x7)|p$0(bg}--G-# z#njVMvhPl2VR3;3-4UvU4rjT8Gr{ss26^$R@2z}tb2rEXG~6Z#06&8a4>z(Q%ZV{H zz6DnUrL4%4$m4aPxovhEMxpZJqfKR8c?%6=cl1&_8O7TB_zU7!;bT6E=DgOG&72Jc z4k^MEmKMF;{Vr}u&Yf0_6z?)o3~$Ia8v*>k0F1?#^^$P*kJTxZoMvfe( zH9`M7M=7`JjKE8359^o9#=RzBa2>>luH>P6JHf;eEPZ&`$D)td!;%~>y@TcH9b*K1 zHcZ#vR`UEL0E71kN(C0*Rz7jFffK-9QR#CX=8^F%bw!z)6w`x|&JjU%QeZ3-ez7F-YUXa)aqC(Wu)Ulu(@#~u zD>L_2@nCkqo%PYmir^f7{&IqGlhZvUL?g-;BwFH}~rl^nE z>jiy|Jnlr!(2^7hck(?juE1VBF2-h_iE>j|aySyXc47AEm2PXvcYgcND%3{AN$-d@Emn~K>k;;+J~ z*&dtS7i2-O-($FCd>s9)@))^QdQXw{21jX*KBuvn0uXym2B#H`$)|4&W@W&4X2`&y z&WBSy@H^`|dTUN(tCuLLl&-46EKaKHp8j1ybAC!V#nYC3&Ie}1aHl)ScKBOn0A*xr zrX8K#t=6;-8616Fo+Zn&0+whp*(to^mf^>N>Fmw`y_H#{0E?UB7*wMU;Vlsge7JUl ziC`J$ZuWZ-Tb0!K&7``?_cH7tT_o6p1B=@1Z@jBqTd+AJh7*`M!i@tx=g^RN_T&3X z8qF2t6(7pLI$$l-Mx?Zh6=O0=e5}YLXh&2U!>A^~pE#JqY0w);XVCl{&3S>Ru85kE z2e?@SQ9|(#W?y{-1OvX4Wcb;(24R>Mw5XX<$zM`}BB=lV#l~r9IQ{)JPnNXWH*Ovn zol~F`TyIaqE}?eCFiVqcEXQ(qIMazr;^sR;eUv77q5!hgd!v@$FJ_J%3E#N6@_UPA z6rz#A&om!>u>nvs#^udlX2rS=HGM?4{bY(Eeg?4>7tn`^7 zw_x+q@O+?LXa!s95pmeAW@}_QyeLhl?F!!34f)nVzW0L3KdcH8?X9>hU4xRYeV&jV z`w zYxxYOf#ff?xR7Hc&v&tJ7SGugH7`bbBOs5EDvV6miz*FyI(Spjx-K^KPCfH)cz*3K}&Kk-+{OlSc-t_*=oR?rqXZ#51X-VHKaffui1$B-kIBRp? zSTl{;*DJz&Ykn@`BJCNkXX2x3DzI4;pT9_@s7t!-xV-hIqE4VHf$9eq&V~JxfIrL4 zHz#5*I;aUoS(6?BcmmZ48qJ`v>TXiW^0Ey^jSBAB0K`D-qfq{y;TG~1m+DMiK8{EA zWz>jrzh3G8L4xyxLi_q95AKf%K2S-dL%+=l@)!Grp~M&c7Y@5Ep=#hzZY3%-w>0?`?U7x=n z`Mc;U$27mt_F$0OqKd(73~0sLkbIEZ#(r<^xeg!X#qLv}_bXnF;SQhB3AdLo_&t}i z(jcggpcJm|ud`2#H+#H1c_8?rT69+rcFQ&x?)%4CHvLjSXgO68x~-cDIhxgV>2da0 ztjWHeJQSd0&>hO4UKOv{<4HBr^%4a!xL(sLs0kNuN8eFcuv^k7Oj1yPRS^?Egd_NO zU8Pm0_qIRTexDlt*-$1Q3a0fjJ!M;z* z{xfBWQ`6h=#NB5u|4)eLXhLH{PnfWCJGQS2yj5;~ZlQx9-v=CjW#6|F1~_7QorEwf+?Pl|H&U551MIUm z3`9tsJ<);b=Mq4z5;*sOW49Qmbjmd)kqgqFDJ%BhS(EWn{_TH;^k&u#_FpCb#cdu{ju6^}!y{jmsx}!h z1}fs6LxFNQenWev9y@@PaHEk@$)p=5c|tL>u8qEmaFRqV1k{++0TV-r(`;GJ96RB5 z4Td6qMUhH{k7Uyvevz&FoX~njA6l-w9cGNT00viIqw9zO$0UrH%M6CoFu|r(H?J*Vj&hUO6~s+ECjhi?~hqyGjj-ygElDB2Y1aU!@NPA zs)U#41hMsp*W|=K_x0y1ju&*#V=Fo2gWT7rGW1P52=heRKEVx8s>odrGBh#T^ilXn zpE6>7;mVi%2-o=GkGw%ey(sd8ey45=|A3VOgI18pfm&_w$Ox#90%TbetD>59sn2^} z^f@c_ir7B1mn^Z{kPAP^7@Z)UOSz})p1v&BQG%xQ(!MK}(SP{A*t-|>5wRg2SN10I zVM&O75X!s$q5lH>l#Jta$8hl~sN)QW#A!6+Wlj9l9!;_lRm2V5v{rSkHJ^(;*V+iv5(H z*9_8(+{eh;xz0Gz92)0SLhV)`0P-)GW$CJufyt&0h;W+Ae$7L0xFUq%*LrhK9L+}x!VLMf^sSy>GfAiTWh z;`07MGz%v>zI;Xp$J2Z-=G*Jpxf4#5bpxoL1)0pN*)Pyh!d^n`rvVo)w39xL&a1LF zqL&K9Cp(}yLH`^!fuR47awZCG;xsDhWPw4-$kb9sC*J8P0`D+xJRk|J(ZPo~#p5u9 zsc5JId+auf?W3jFN+N*8M##Rm;Ga}Z?z%%2L_L#}>FKO47B5#{N9aPJ6WT>g*#SY= zb{6`RomxhYHVw&o|0o6>+xs27hz@pzLQG0EX{3kawv*%Kp0QF~zU05GzOwqMN7(zB zR8r!(tasG@0(lOS<5>K-YwmBeXv>`#&&V_zhM6p^$#qK2inGVKOl}bhrOHgkbm@iZ zH;%NHf;#q_l^{GKI5R~cDf!yhOW)z)Rc!=AX5szx$qZGGv*tG6UvwK6C2RAL0~Xq< zD+*vgd&qS&PKblV5y2h#i}pISOsGB$380y2LOAVclY5`isigI%^ zI=9WgB7Et?y5J?=8_b}f^_4>9{m6dcQg%-J{yDfC3F1^(S|Mmlw+J`cz>y9inQL^g z4Ve0eKYCh_bk7#7j(R%C3mL4ayisZ)<_<1UluruPZp`A2G2PLweJk|*1ltEs~Y`Ua+oP2#;aqfUQ!u%vS3NG_9!N?D&>m^Fj+$kLkV;bK+ z|6#$hu=8%&d@ywe@dg^4W&Jw*3wA)EJ<=m4?nW30CIA94RH|i=B}g z+iRrTLc8P65o9#}&3JoT5XKnxYJz2$;D~03a6nu2sZQ`;t7d3rr{N+^Um z%`r^#arL$?_p9i%q6tpuuq{6pFPy|7h_Wamn3JIq{!788-#7zp6&qdi`?nl6q{>D5 zoU7Y1^@$qLMS470t!3s=6HWD?xfi=`h24ao#WZa=$&$uxP>q8_jg`H2_2Oi_k_C`q zb}D3B3uswZRlDlG(~4{!@ZQWE-=Ni*V@6-*=Y6lyi0via#cTYuM+2od*13>A} z_Vj@qvQGuua}>AmG~mdBXhg`@WaLxwV`JZ-)_P$eCus-_I5Fv(UWpMvMeXPZXlztZ zsS)ff^gB{)z^B$oqNmIV&9OOO1l`uv))Mm$ZK=h&KU5O-j8zsh2@w@5mO-3PictI>=PLsyLL~J zSi73HCpO^@RrGQLN8)&Y6FEcjd7+UMr(|>o+!R8Q$&fVNdO@vstzW@GDSzspo;& zZe@rum~5&;JLaE3sO$kil{M$!tZ)@{33l4^(-qf)Uw2n_T&$^`6~|Znx{-e6xt_5v zX$YednXpers^D3!Hnoh)4ZE4iYe15j64#1~`WM%)FO>re3tV0SJe%_=dVh_sPO+=W zgHuL6gqJ41-p+-cEfN_(g!8ykSO?IGT657{71gomY05!NZo8Xe^Jk&Gt0uvzH_ofT z*ZBwJYU6!iQ?TnAGc4Nq2bLQba+spc=<=Sd6NBb;S)@Lyb%AiANzSNi$uh6LvB@5X zv(2yr`J#vuG@h|6(?t`j0n+2XchK3HSN=tbZeg7PNb+f-oa>a7u=Mvt{ROx-C+h?2 zJJGPzfH~x~kQcS4`+=mL&pA!SzwPf1w;RL-4@y{|j=SIVeOu#};J3&sjj%w_tb{W& zckY(~nGtk{^LIsWDR!1>4i1jgpVTvrY)y5*OKyG=L{*@Vv}n8o1$+qAA+I`MUcSkn zDj!cAN0!bWOS_w#%RypSCmtR89@a|8#M!AyEZU_;xHUE4{wk^_sb>xm~l>KrTyr0~zRE%bAt_>; z9o)^^T!#71nQ!LKxpM~&cjnyQN9w9X*At@9A|xlu4nhP^khq`)Uv|p zcdA!cQeU<;xV)+G^17TAKixO=Rlg;Qd#;jr>m)^s2WKXZ-Vc>*EBn;eBwbq?XpPbG zbxF++5+%X)N@f1UaL2Q_lE&&8pKS7JWXiW8Z)t1w9;>=>;%(2aiE7Cjbu7}k|7Uoyh; z?Gf)jY=1Ta%q6i$n2=#K1%eBMH%;7=v|b4;pnp!l;=Vji5Z+80Ig(c6?tw+C{ZL_8 zh>0E|lp9#?Uo0!bggBU_)M`rDS#lhlTj6Z?Vv#=@4Lp>DP*p|P3f$1oL%EEIa=hBl za?X>m{tUwldfXU6NP%eSPXKugZJxB=6V(P5=f|^498|4F6iX{#ZC;4-csHyZU^)Bg zjB*mPEplZTvMcUPT8(bQELn`-zp$KO@7zhV+f%xU5+euJ!QMR-o*Ljd>W0o^m`T!k zoPh7LpOQQ?!te(ffxssc5JwNp5{ZlCY9B2w%b9CV=3!c&kQ0PAj64+OVss&gW5y&X z$Rm))T_zq{i?Q6a6T(&4Zb}D*3Pa5aa6^Te<_zG=NFhRlc?Wzsg*WeUsILgXLl)B4 zX)5NAd!fzjfmLVb-uI)LR{plcLclo!rD&^i!;C>5;5-!{3~qrt)f8U5;Emx!JY21% zV(HLUn7l-xWoReVBSu?~LEAN|X|`^K_tyzrh4SHz&{>Z~!&zXyO*OXR1Q=)_For$} z&4?KK?h;XsA4cM#^*(`8)akrXVP!FGR1AR+sj6l)1=1fAD8ZkjQJ`x \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 5093609..107acd3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/resource-pack/VisibleBarriers/assets/minecraft/blockstates/light.json b/resource-pack/VisibleBarriers/assets/minecraft/blockstates/light.json deleted file mode 100644 index cff6467..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/blockstates/light.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "variants": { - "level=0": { - "model": "minecraft:block/light_00" - }, - "level=1": { - "model": "minecraft:block/light_01" - }, - "level=2": { - "model": "minecraft:block/light_02" - }, - "level=3": { - "model": "minecraft:block/light_03" - }, - "level=4": { - "model": "minecraft:block/light_04" - }, - "level=5": { - "model": "minecraft:block/light_05" - }, - "level=6": { - "model": "minecraft:block/light_06" - }, - "level=7": { - "model": "minecraft:block/light_07" - }, - "level=8": { - "model": "minecraft:block/light_08" - }, - "level=9": { - "model": "minecraft:block/light_09" - }, - "level=10": { - "model": "minecraft:block/light_10" - }, - "level=11": { - "model": "minecraft:block/light_11" - }, - "level=12": { - "model": "minecraft:block/light_12" - }, - "level=13": { - "model": "minecraft:block/light_13" - }, - "level=14": { - "model": "minecraft:block/light_14" - }, - "level=15": { - "model": "minecraft:block/light_15" - } - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/barrier.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/barrier.json deleted file mode 100644 index ab7a422..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/barrier.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "item/barrier" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_00.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_00.json deleted file mode 100644 index d6c485e..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_00.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_00" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_01.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_01.json deleted file mode 100644 index ba46271..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_01.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_01" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_02.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_02.json deleted file mode 100644 index ba16fc6..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_02.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_02" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_03.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_03.json deleted file mode 100644 index 8071c2b..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_03.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_03" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_04.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_04.json deleted file mode 100644 index d569200..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_04.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_04" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_05.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_05.json deleted file mode 100644 index 655212e..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_05.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_05" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_06.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_06.json deleted file mode 100644 index 3e66c4c..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_06.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_06" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_07.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_07.json deleted file mode 100644 index e9e1eb0..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_07.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_07" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_08.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_08.json deleted file mode 100644 index 957c5b1..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_08.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_08" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_09.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_09.json deleted file mode 100644 index f7756d9..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_09.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_09" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_10.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_10.json deleted file mode 100644 index 874b66f..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_10.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_10" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_11.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_11.json deleted file mode 100644 index af8eb2f..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_11.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_11" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_12.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_12.json deleted file mode 100644 index b48dc4b..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_12.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_12" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_13.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_13.json deleted file mode 100644 index 49f5387..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_13.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_13" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_14.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_14.json deleted file mode 100644 index ca0453e..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_14.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_14" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_15.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_15.json deleted file mode 100644 index e41c57d..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/light_15.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "minecraft:item/light_15" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/assets/minecraft/models/block/structure_void.json b/resource-pack/VisibleBarriers/assets/minecraft/models/block/structure_void.json deleted file mode 100644 index 52c3fab..0000000 --- a/resource-pack/VisibleBarriers/assets/minecraft/models/block/structure_void.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "0": "item/structure_void", - "particle": "item/structure_void" - }, - "elements": [ - { - "from": [5, 5, 5], - "to": [11, 11, 11], - "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#0"} - } - } - ] -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/pack.mcmeta b/resource-pack/VisibleBarriers/pack.mcmeta deleted file mode 100644 index 85789fe..0000000 --- a/resource-pack/VisibleBarriers/pack.mcmeta +++ /dev/null @@ -1,7 +0,0 @@ -{ - "pack": { - - "pack_format": 7, - "description": "Visible Barriers Resource Pack, Made by AmyMialee" - } -} \ No newline at end of file diff --git a/resource-pack/VisibleBarriers/pack.png b/resource-pack/VisibleBarriers/pack.png deleted file mode 100644 index b2ec57ad3e05854e44e814f0c545f6044fcb37a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14499 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 diff --git a/settings.gradle b/settings.gradle index 5b60df3..f91a4fe 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,5 @@ pluginManagement { repositories { - jcenter() maven { name = 'Fabric' url = 'https://maven.fabricmc.net/' diff --git a/src/main/java/amymialee/visiblebarriers/VisibleBarriers.java b/src/main/java/amymialee/visiblebarriers/VisibleBarriers.java index 53f6895..dafe3f2 100644 --- a/src/main/java/amymialee/visiblebarriers/VisibleBarriers.java +++ b/src/main/java/amymialee/visiblebarriers/VisibleBarriers.java @@ -1,35 +1,19 @@ package amymialee.visiblebarriers; -import me.shedaniel.autoconfig.AutoConfig; -import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.block.Blocks; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.util.InputUtil; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.Identifier; -import org.lwjgl.glfw.GLFW; -@Environment(EnvType.CLIENT) -public class VisibleBarriers implements ClientModInitializer { +public class VisibleBarriers implements ModInitializer { public final static String MODID = "visiblebarriers"; - public static VisibleBarriersConfig config = null; - private static KeyBinding keyBinding; + protected static boolean visible = false; + protected static boolean visibleAir = false; - private static boolean visible = false; - private static boolean visibleAir = false; - - public static final ItemGroup EXTRA_ITEMS = FabricItemGroupBuilder.create(new Identifier(MODID, "extra_items")).icon(() -> new ItemStack(Items.COMMAND_BLOCK)) + public static final ItemGroup VISIBLE_BARRIERS = FabricItemGroupBuilder.create(new Identifier(MODID, "visible_barriers")) + .icon(() -> new ItemStack(Items.BARRIER)) .appendItems(stacks -> { stacks.add(new ItemStack(Items.COMMAND_BLOCK)); stacks.add(new ItemStack(Items.CHAIN_COMMAND_BLOCK)); @@ -48,41 +32,11 @@ public class VisibleBarriers implements ClientModInitializer { stacks.add(new ItemStack(Items.FIREWORK_ROCKET)); stacks.add(new ItemStack(Items.FIREWORK_STAR)); stacks.add(new ItemStack(Items.SUSPICIOUS_STEW)); - }).build(); + }) + .build(); @Override - public void onInitializeClient() { - AutoConfig.register(VisibleBarriersConfig.class, Toml4jConfigSerializer::new); - config = AutoConfig.getConfigHolder(VisibleBarriersConfig.class).getConfig(); - - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.BARRIER, RenderLayer.getTranslucent()); - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.STRUCTURE_VOID, RenderLayer.getTranslucent()); - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.LIGHT, RenderLayer.getTranslucent()); - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.AIR, RenderLayer.getTranslucent()); - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.CAVE_AIR, RenderLayer.getTranslucent()); - BlockRenderLayerMap.INSTANCE.putBlock(Blocks.VOID_AIR, RenderLayer.getTranslucent()); - - keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( - "key.visiblebarriers.bind", - InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_B, - "category.visiblebarriers.bind" - )); - ClientTickEvents.END_CLIENT_TICK.register(client -> { - if (keyBinding.wasPressed()) { - visible = !visible; - if (Screen.hasShiftDown()) { - if (visible) { - visibleAir = true; - } - } - if (!visible) { - visibleAir = false; - } - client.worldRenderer.reload(); - } - }); - } + public void onInitialize() {} public static boolean isVisible() { return visible; diff --git a/src/main/java/amymialee/visiblebarriers/VisibleBarriersClient.java b/src/main/java/amymialee/visiblebarriers/VisibleBarriersClient.java new file mode 100644 index 0000000..affdda7 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/VisibleBarriersClient.java @@ -0,0 +1,50 @@ +package amymialee.visiblebarriers; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.block.Blocks; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.util.InputUtil; +import org.lwjgl.glfw.GLFW; + +@Environment(EnvType.CLIENT) +public class VisibleBarriersClient implements ClientModInitializer { + private static KeyBinding keyBinding; + + @Override + public void onInitializeClient() { + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.BARRIER, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.STRUCTURE_VOID, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.LIGHT, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.AIR, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.CAVE_AIR, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(Blocks.VOID_AIR, RenderLayer.getTranslucent()); + + keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( + "key.visiblebarriers.bind", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_B, + "category.visiblebarriers.bind" + )); + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (keyBinding.wasPressed()) { + VisibleBarriers.visible = !VisibleBarriers.visible; + if (Screen.hasShiftDown()) { + if (VisibleBarriers.visible) { + VisibleBarriers.visibleAir = true; + } + } + if (!VisibleBarriers.visible) { + VisibleBarriers.visibleAir = false; + } + client.worldRenderer.reload(); + } + }); + } +} diff --git a/src/main/java/amymialee/visiblebarriers/VisibleBarriersCommand.java b/src/main/java/amymialee/visiblebarriers/VisibleBarriersCommand.java deleted file mode 100644 index 1f7eb13..0000000 --- a/src/main/java/amymialee/visiblebarriers/VisibleBarriersCommand.java +++ /dev/null @@ -1,153 +0,0 @@ -package amymialee.visiblebarriers; - -import amymialee.visiblebarriers.mixin.BlockEntityInvoker; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.IntegerArgumentType; -import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import net.minecraft.block.BlockState; -import net.minecraft.block.InfestedBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.LockableContainerBlockEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.text.LiteralText; -import net.minecraft.util.Formatting; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.Objects; - -import static net.minecraft.server.command.CommandManager.argument; -import static net.minecraft.server.command.CommandManager.literal; - -public class VisibleBarriersCommand { - public static void register(CommandDispatcher dispatcher) { - LiteralArgumentBuilder literalArgumentBuilder = literal("visiblebarriers") - .requires((player) -> player.hasPermissionLevel(4)) - - .then(literal("lock") - .then(argument("password", StringArgumentType.string()) - .then(argument("radius", IntegerArgumentType.integer(0, 200)) - .executes(VisibleBarriersCommand::lock)))) - - .then(literal("unlock") - .then(argument("radius", IntegerArgumentType.integer(0, 200)) - .executes(VisibleBarriersCommand::unlock))) - - .then(literal("infest") - .then(argument("radius", IntegerArgumentType.integer(0, 200)) - .executes(VisibleBarriersCommand::infest))) - - .then(literal("extirpate") - .then(argument("radius", IntegerArgumentType.integer(0, 200)) - .executes(VisibleBarriersCommand::extirpate))); - - dispatcher.register(literalArgumentBuilder); - } - - private static int lock(CommandContext context) { -// int count = 0; -// World world = context.getSource().getWorld(); -// String password = StringArgumentType.getString(context, "password"); -// int radius = IntegerArgumentType.getInteger(context, "radius"); -// BlockPos pos = new BlockPos(context.getSource().getPosition()); -// for (int x = -radius; x < radius; x++) { -// for (int y = -radius; y < radius; y++) { -// for (int z = -radius; z < radius; z++) { -// BlockPos pos2 = pos.add(x, y, z); -// BlockEntity blockEntity = world.getBlockEntity(pos2); -// if (blockEntity instanceof LockableContainerBlockEntity) { -// NbtCompound compound = new NbtCompound(); -// ((BlockEntityInvoker) blockEntity).writeNbt(compound); -// if (Objects.equals(compound.getString("Lock"), "")) { -// count++; -// } -// compound.putString("Lock", password); -// blockEntity.readNbt(compound); -// } -// } -// } -// } -// if (context.getSource().getEntity() != null && context.getSource().getEntity() instanceof PlayerEntity player) { -// player.sendSystemMessage((new LiteralText(count + " containers locked.").formatted(Formatting.GRAY, Formatting.ITALIC)), player.getUuid()); -// } - return 1; - } - - private static int unlock(CommandContext context) { -// int count = 0; -// World world = context.getSource().getWorld(); -// int radius = IntegerArgumentType.getInteger(context, "radius"); -// BlockPos pos = new BlockPos(context.getSource().getPosition()); -// for (int x = -radius; x < radius; x++) { -// for (int y = -radius; y < radius; y++) { -// for (int z = -radius; z < radius; z++) { -// BlockPos pos2 = pos.add(x, y, z); -// BlockEntity blockEntity = world.getBlockEntity(pos2); -// if (blockEntity instanceof LockableContainerBlockEntity) { -// NbtCompound compound = new NbtCompound(); -// ((BlockEntityInvoker) blockEntity).writeNbt(compound); -// if (!Objects.equals(compound.getString("Lock"), "")) { -// count++; -// } -// compound.remove("Lock"); -// blockEntity.readNbt(compound); -// } -// } -// } -// } -// if (context.getSource().getEntity() != null && context.getSource().getEntity() instanceof PlayerEntity player) { -// player.sendSystemMessage((new LiteralText(count + " containers unlocked.").formatted(Formatting.GRAY, Formatting.ITALIC)), player.getUuid()); -// } - return 1; - } - - private static int infest(CommandContext context) { -// int count = 0; -// World world = context.getSource().getWorld(); -// int radius = IntegerArgumentType.getInteger(context, "radius"); -// BlockPos pos = new BlockPos(context.getSource().getPosition()); -// for (int x = -radius; x < radius; x++) { -// for (int y = -radius; y < radius; y++) { -// for (int z = -radius; z < radius; z++) { -// BlockPos pos2 = pos.add(x, y, z); -// BlockState blockState = world.getBlockState(pos2); -// if (InfestedBlock.isInfestable(blockState)) { -// count++; -// world.setBlockState(pos2, InfestedBlock.fromRegularState(blockState)); -// } -// } -// } -// } -// if (context.getSource().getEntity() != null && context.getSource().getEntity() instanceof PlayerEntity player) { -// player.sendSystemMessage((new LiteralText(count + " blocks infested.").formatted(Formatting.GRAY, Formatting.ITALIC)), player.getUuid()); -// } - return 1; - } - - private static int extirpate(CommandContext context) { -// int count = 0; -// World world = context.getSource().getWorld(); -// int radius = IntegerArgumentType.getInteger(context, "radius"); -// BlockPos pos = new BlockPos(context.getSource().getPosition()); -// for (int x = -radius; x < radius; x++) { -// for (int y = -radius; y < radius; y++) { -// for (int z = -radius; z < radius; z++) { -// BlockPos pos2 = pos.add(x, y, z); -// BlockState blockState = world.getBlockState(pos2); -// if (blockState.getBlock() instanceof InfestedBlock) { -// count++; -// world.setBlockState(pos2, ((InfestedBlock) blockState.getBlock()).toRegularState(blockState)); -// } -// } -// } -// } -// if (context.getSource().getEntity() != null && context.getSource().getEntity() instanceof PlayerEntity player) { -// player.sendSystemMessage((new LiteralText(count + " blocks extirpated.").formatted(Formatting.GRAY, Formatting.ITALIC)), player.getUuid()); -// } - return 1; - } -} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/VisibleBarriersConfig.java b/src/main/java/amymialee/visiblebarriers/VisibleBarriersConfig.java deleted file mode 100644 index 571d8b7..0000000 --- a/src/main/java/amymialee/visiblebarriers/VisibleBarriersConfig.java +++ /dev/null @@ -1,10 +0,0 @@ -package amymialee.visiblebarriers; - -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; - -@Config(name = VisibleBarriers.MODID) -public final class VisibleBarriersConfig implements ConfigData { - /// Decides if you can save items in the hotbar tab by dragging them in. - public boolean allowHotbarQuickSaving = false; -} diff --git a/src/main/java/amymialee/visiblebarriers/VisibleBarriersModMenu.java b/src/main/java/amymialee/visiblebarriers/VisibleBarriersModMenu.java deleted file mode 100644 index cb86406..0000000 --- a/src/main/java/amymialee/visiblebarriers/VisibleBarriersModMenu.java +++ /dev/null @@ -1,12 +0,0 @@ -package amymialee.visiblebarriers; - -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.autoconfig.AutoConfig; - -public class VisibleBarriersModMenu implements ModMenuApi { - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> AutoConfig.getConfigScreen(VisibleBarriersConfig.class, parent).get(); - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/ArmorStandEntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/ArmorStandEntityRendererMixin.java deleted file mode 100644 index dae0128..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/ArmorStandEntityRendererMixin.java +++ /dev/null @@ -1,91 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import amymialee.visiblebarriers.VisibleBarriers; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.ArmorStandEntityRenderer; -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.client.render.entity.model.ArmorStandArmorEntityModel; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.decoration.ArmorStandEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Random; - -@Mixin(ArmorStandEntityRenderer.class) -public abstract class ArmorStandEntityRendererMixin extends LivingEntityRenderer { - public ArmorStandEntityRendererMixin(EntityRendererFactory.Context ctx, ArmorStandArmorEntityModel model, float shadowRadius) { - super(ctx, model, shadowRadius); - } - - @Unique private ItemRenderer itemRenderer; - @Unique private final Random random = new Random(); - @Unique public float uniqueOffset; - @Unique private ItemStack itemStack; - - @Inject(method = "", at = @At("TAIL")) - public void ArmorStandEntityRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { - this.itemRenderer = context.getItemRenderer(); - this.uniqueOffset = this.random.nextFloat() * 3.1415927F * 2.0F; - } - - @Unique - public void render(ArmorStandEntity itemEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { - if (itemEntity.isInvisible() && VisibleBarriers.isVisible()) { - renderInvis(itemEntity, f, g, matrixStack, vertexConsumerProvider, i); - } - super.render(itemEntity, f, g, matrixStack, vertexConsumerProvider, i); - } - - @Unique - public void renderInvis(ArmorStandEntity itemEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { - matrixStack.push(); - if (this.itemStack == null) { - this.itemStack = Items.ARMOR_STAND.getDefaultStack().copy(); - } - int j = itemStack.isEmpty() ? 187 : Item.getRawId(itemStack.getItem()) + itemStack.getDamage(); - this.random.setSeed(j); - BakedModel bakedModel = this.itemRenderer.getModel(itemStack, itemEntity.world, null, itemEntity.getId()); - boolean bl = bakedModel.hasDepth(); - int k = 1; - float l = MathHelper.sin(((float) itemEntity.age * 8 + g) / 10.0F + this.uniqueOffset) * 0.1F + 0.1F; - float m = bakedModel.getTransformation().getTransformation(ModelTransformation.Mode.GROUND).scale.getY(); - matrixStack.translate(0.0D, l + 0.25F * m, 0.0D); - float n = (((float) itemEntity.age * 8 + g) / 20.0F + this.uniqueOffset); - matrixStack.multiply(Vec3f.POSITIVE_Y.getRadialQuaternion(-n)); - float o = bakedModel.getTransformation().ground.scale.getX(); - float p = bakedModel.getTransformation().ground.scale.getY(); - float q = bakedModel.getTransformation().ground.scale.getZ(); - float v; - float w; - if (!bl) { - float r = -0.0F * 0 * 0.5F * o; - v = -0.0F * 0 * 0.5F * p; - w = -0.09375F * 0 * 0.5F * q; - matrixStack.translate(r, v, w); - } - for (int u = 0; u < k; ++u) { - matrixStack.push(); - this.itemRenderer.renderItem(itemStack, ModelTransformation.Mode.GROUND, false, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV, bakedModel); - matrixStack.pop(); - if (!bl) { - matrixStack.translate(0.0F * o, 0.0F * p, 0.09375F * q); - } - } - matrixStack.pop(); - super.render(itemEntity, f, g, matrixStack, vertexConsumerProvider, i); - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/BlockEntityInvoker.java b/src/main/java/amymialee/visiblebarriers/mixin/BlockEntityInvoker.java deleted file mode 100644 index 4cd0c30..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/BlockEntityInvoker.java +++ /dev/null @@ -1,12 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.nbt.NbtCompound; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(BlockEntity.class) -public interface BlockEntityInvoker { -// @Invoker("writeNbt") -// void writeNbt(NbtCompound nbt); -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/CommandManagerMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/CommandManagerMixin.java deleted file mode 100644 index 39216bd..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/CommandManagerMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import amymialee.visiblebarriers.VisibleBarriersCommand; -import com.mojang.brigadier.CommandDispatcher; -import net.minecraft.server.command.CommandManager; -import net.minecraft.server.command.ServerCommandSource; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(CommandManager.class) -public class CommandManagerMixin { - @Shadow @Final private CommandDispatcher dispatcher; - - @Inject(method = "", at = @At("RETURN")) - private void onRegister(CommandManager.RegistrationEnvironment arg, CallbackInfo ci) { - VisibleBarriersCommand.register(dispatcher); - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/CreativeInventoryScreenMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/CreativeInventoryScreenMixin.java deleted file mode 100644 index 12761b9..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/CreativeInventoryScreenMixin.java +++ /dev/null @@ -1,45 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import amymialee.visiblebarriers.VisibleBarriers; -import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen; -import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.client.option.HotbarStorageEntry; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(CreativeInventoryScreen.class) -public abstract class CreativeInventoryScreenMixin extends AbstractInventoryScreen { - @Shadow private static int selectedTab; - - public CreativeInventoryScreenMixin(CreativeInventoryScreen.CreativeScreenHandler screenHandler, PlayerInventory playerInventory, Text text) { - super(screenHandler, playerInventory, text); - } - - @Inject(method = "onMouseClick", at = @At("HEAD"), cancellable = true) - protected void onMouseClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { - if (VisibleBarriers.config.allowHotbarQuickSaving) { - CreativeInventoryScreen this2 = ((CreativeInventoryScreen) ((Object) this)); - if (selectedTab == ItemGroup.HOTBAR.getIndex() && !this2.getScreenHandler().getCursorStack().isEmpty() && - slot != null) { - int barSlot = slotId % 9; - int barRow = slotId / 9; - assert this.client != null; - HotbarStorageEntry entry = this.client.getCreativeHotbarStorage().getSavedHotbar(barRow); - entry.set(barSlot, this2.getScreenHandler().getCursorStack()); - this.client.getCreativeHotbarStorage().save(); - slot.setStack(this2.getScreenHandler().getCursorStack()); - this2.getScreenHandler().setCursorStack(ItemStack.EMPTY); - ci.cancel(); - } - } - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/EmptyEntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/EmptyEntityRendererMixin.java deleted file mode 100644 index 24d9c66..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/EmptyEntityRendererMixin.java +++ /dev/null @@ -1,96 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import amymialee.visiblebarriers.VisibleBarriers; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.EmptyEntityRenderer; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.AreaEffectCloudEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.MarkerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.potion.PotionUtil; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Random; - -@Mixin(EmptyEntityRenderer.class) -public abstract class EmptyEntityRendererMixin extends EntityRenderer { - protected EmptyEntityRendererMixin(EntityRendererFactory.Context ctx) { - super(ctx); - } - - @Unique private ItemRenderer itemRenderer; - @Unique private final Random random = new Random(); - @Unique public float uniqueOffset; - @Unique private ItemStack itemStack; - - @Inject(method = "", at = @At("TAIL")) - public void EmptyEntityRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { - this.itemRenderer = context.getItemRenderer(); - this.uniqueOffset = this.random.nextFloat() * 3.1415927F * 2.0F; - } - - @Unique - public void render(T itemEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { - if (VisibleBarriers.isVisible()) { - matrixStack.push(); - if (this.itemStack == null) { - if (itemEntity instanceof AreaEffectCloudEntity) { - this.itemStack = Items.LINGERING_POTION.getDefaultStack().copy(); - PotionUtil.setPotion(itemStack, ((AreaEffectCloudEntity) itemEntity).getPotion()); - } else if (itemEntity instanceof MarkerEntity) { - this.itemStack = Items.STRUCTURE_BLOCK.getDefaultStack().copy(); - } else { - this.itemStack = Items.BARRIER.getDefaultStack().copy(); - } - } - assert itemStack != null; - int j = itemStack.isEmpty() ? 187 : Item.getRawId(itemStack.getItem()) + itemStack.getDamage(); - this.random.setSeed(j); - BakedModel bakedModel = this.itemRenderer.getModel(itemStack, itemEntity.world, null, itemEntity.getId()); - boolean bl = bakedModel.hasDepth(); - int k = 1; - float l = MathHelper.sin(((float) itemEntity.age * 8 + g) / 10.0F + this.uniqueOffset) * 0.1F + 0.1F; - float m = bakedModel.getTransformation().getTransformation(ModelTransformation.Mode.GROUND).scale.getY(); - matrixStack.translate(0.0D, l + 0.25F * m, 0.0D); - float n = (((float) itemEntity.age * 8 + g) / 20.0F + this.uniqueOffset); - matrixStack.multiply(Vec3f.POSITIVE_Y.getRadialQuaternion(-n)); - float o = bakedModel.getTransformation().ground.scale.getX(); - float p = bakedModel.getTransformation().ground.scale.getY(); - float q = bakedModel.getTransformation().ground.scale.getZ(); - float v; - float w; - if (!bl) { - float r = -0.0F * 0 * 0.5F * o; - v = -0.0F * 0 * 0.5F * p; - w = -0.09375F * 0 * 0.5F * q; - matrixStack.translate(r, v, w); - } - for (int u = 0; u < k; ++u) { - matrixStack.push(); - this.itemRenderer.renderItem(itemStack, ModelTransformation.Mode.GROUND, false, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV, bakedModel); - matrixStack.pop(); - if (!bl) { - matrixStack.translate(0.0F * o, 0.0F * p, 0.09375F * q); - } - } - matrixStack.pop(); - super.render(itemEntity, f, g, matrixStack, vertexConsumerProvider, i); - } - super.render(itemEntity, f, g, matrixStack, vertexConsumerProvider, i); - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/EntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/EntityRendererMixin.java deleted file mode 100644 index 5ce01e5..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/EntityRendererMixin.java +++ /dev/null @@ -1,79 +0,0 @@ -package amymialee.visiblebarriers.mixin; - -import amymialee.visiblebarriers.VisibleBarriers; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Random; - -@Mixin(EntityRenderer.class) -public class EntityRendererMixin { - @Unique private ItemRenderer itemRenderer; - @Unique private final Random random = new Random(); - @Unique public float uniqueOffset; - @Unique private ItemStack itemStack; - - @Inject(method = "", at = @At("TAIL")) - public void EntityRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { - this.itemRenderer = context.getItemRenderer(); - this.uniqueOffset = this.random.nextFloat() * 3.1415927F * 2.0F; - } - - @Inject(method = "render", at = @At("HEAD")) - public void render(T itemEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - if (VisibleBarriers.isVisible() && itemEntity instanceof LivingEntity living && living.hasStatusEffect(StatusEffects.INVISIBILITY)) { - if (this.itemStack == null) { - if (itemEntity.getPickBlockStack() != null) this.itemStack = itemEntity.getPickBlockStack().copy(); - if (this.itemStack == null) this.itemStack = Items.STRUCTURE_VOID.getDefaultStack().copy(); - } - matrixStack.push(); - int j = itemStack.isEmpty() ? 187 : Item.getRawId(itemStack.getItem()) + itemStack.getDamage(); - this.random.setSeed(j); - BakedModel bakedModel = this.itemRenderer.getModel(itemStack, itemEntity.world, null, itemEntity.getId()); - boolean bl = bakedModel.hasDepth(); - int k = 1; - float l = MathHelper.sin(((float) itemEntity.age * 8 + g) / 10.0F + this.uniqueOffset) * 0.1F + 0.1F; - float m = bakedModel.getTransformation().getTransformation(ModelTransformation.Mode.GROUND).scale.getY(); - matrixStack.translate(0.0D, l + 0.25F * m, 0.0D); - float n = (((float) itemEntity.age * 8 + g) / 20.0F + this.uniqueOffset); - matrixStack.multiply(Vec3f.POSITIVE_Y.getRadialQuaternion(-n)); - float o = bakedModel.getTransformation().ground.scale.getX(); - float p = bakedModel.getTransformation().ground.scale.getY(); - float q = bakedModel.getTransformation().ground.scale.getZ(); - if (!bl) { - float r = -0.0F * 0 * 0.5F * o; - float v = -0.0F * 0 * 0.5F * p; - float w = -0.09375F * 0 * 0.5F * q; - matrixStack.translate(r, v, w); - } - for (int u = 0; u < k; ++u) { - matrixStack.push(); - this.itemRenderer.renderItem(itemStack, ModelTransformation.Mode.GROUND, false, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV, bakedModel); - matrixStack.pop(); - if (!bl) { - matrixStack.translate(0.0F * o, 0.0F * p, 0.09375F * q); - } - } - matrixStack.pop(); - } - } -} diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/ItemStackMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/ItemStackMixin.java similarity index 75% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/ItemStackMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/ItemStackMixin.java index c03e682..b568092 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/ItemStackMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/ItemStackMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin; import amymialee.visiblebarriers.VisibleBarriers; import net.minecraft.item.ItemStack; @@ -10,9 +10,9 @@ @Mixin(ItemStack.class) public abstract class ItemStackMixin { @Inject(method = "isSectionVisible", at = @At(value = "HEAD"), cancellable = true) - private static void isSectionVisible(int flags, ItemStack.TooltipSection tooltipSection, CallbackInfoReturnable cir) { + private static void VisibleBarriers$ShowDetails(int flags, ItemStack.TooltipSection tooltipSection, CallbackInfoReturnable cir) { if (VisibleBarriers.isVisible()) { cir.setReturnValue(true); } } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/AirBlockMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/blocks/AirBlockMixin.java similarity index 86% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/AirBlockMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/blocks/AirBlockMixin.java index fdde789..be7437b 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/AirBlockMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/blocks/AirBlockMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin.blocks; import amymialee.visiblebarriers.VisibleBarriers; import net.minecraft.block.AirBlock; @@ -14,10 +14,15 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +@SuppressWarnings("deprecation") @Mixin(AirBlock.class) public abstract class AirBlockMixin extends Block { + public AirBlockMixin(Settings settings) { + super(settings); + } + @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) - public void getRenderType(BlockState state, CallbackInfoReturnable cir) { + public void VisibleBarriers$MakeVisible(BlockState state, CallbackInfoReturnable cir) { if (VisibleBarriers.isVisibleAir()) { cir.setReturnValue(BlockRenderType.MODEL); } @@ -32,8 +37,4 @@ public boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { return true; } - - public AirBlockMixin(Settings settings) { - super(settings); - } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/BarrierBlockMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/blocks/BarrierBlockMixin.java similarity index 80% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/BarrierBlockMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/blocks/BarrierBlockMixin.java index 4e2e3da..adad0c0 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/BarrierBlockMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/blocks/BarrierBlockMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin.blocks; import amymialee.visiblebarriers.VisibleBarriers; import net.minecraft.block.BarrierBlock; @@ -12,9 +12,9 @@ @Mixin(BarrierBlock.class) public class BarrierBlockMixin { @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) - public void getRenderType(BlockState state, CallbackInfoReturnable cir) { + public void VisibleBarriers$MakeVisible(BlockState state, CallbackInfoReturnable cir) { if (VisibleBarriers.isVisible()) { cir.setReturnValue(BlockRenderType.MODEL); } } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/blocks/LightBlockMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/blocks/LightBlockMixin.java new file mode 100644 index 0000000..428a434 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/mixin/blocks/LightBlockMixin.java @@ -0,0 +1,53 @@ +package amymialee.visiblebarriers.mixin.blocks; + +import amymialee.visiblebarriers.VisibleBarriers; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.LightBlock; +import net.minecraft.block.ShapeContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LightBlock.class) +public class LightBlockMixin { + @Inject(method = "onUse", at = @At("HEAD"), cancellable = true) + public void VisibleBarriers$AdventureBan(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + if (!world.isClient) { + if (!player.canModifyBlocks()) { + cir.setReturnValue(ActionResult.SUCCESS); + } + } + } + + @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) + public void VisibleBarriers$MakeVisible(BlockState state, CallbackInfoReturnable cir) { + if (VisibleBarriers.isVisible()) { + cir.setReturnValue(BlockRenderType.MODEL); + } + } + + @ModifyVariable(method = "", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private static AbstractBlock.Settings VisibleBarriers$NoCollision(AbstractBlock.Settings settings) { + return settings.noCollision(); + } + + @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) + public void VisibleBarriers$MakeOutlineVisible(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + if (VisibleBarriers.isVisible()) { + cir.setReturnValue(VoxelShapes.fullCube()); + } + } +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/StructureVoidBlockMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/blocks/StructureVoidBlockMixin.java similarity index 80% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/StructureVoidBlockMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/blocks/StructureVoidBlockMixin.java index e82ae2e..0644a1f 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/StructureVoidBlockMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/blocks/StructureVoidBlockMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin.blocks; import amymialee.visiblebarriers.VisibleBarriers; import net.minecraft.block.BlockRenderType; @@ -12,9 +12,9 @@ @Mixin(StructureVoidBlock.class) public class StructureVoidBlockMixin { @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) - public void getRenderType(BlockState state, CallbackInfoReturnable cir) { + public void VisibleBarriers$MakeVisible(BlockState state, CallbackInfoReturnable cir) { if (VisibleBarriers.isVisible()) { cir.setReturnValue(BlockRenderType.MODEL); } } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/entities/ArmorStandEntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/entities/ArmorStandEntityRendererMixin.java new file mode 100644 index 0000000..0272683 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/mixin/entities/ArmorStandEntityRendererMixin.java @@ -0,0 +1,39 @@ +package amymialee.visiblebarriers.mixin.entities; + +import amymialee.visiblebarriers.VisibleBarriers; +import amymialee.visiblebarriers.util.FloatyRenderer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.ArmorStandEntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.client.render.entity.model.ArmorStandArmorEntityModel; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.item.Items; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ArmorStandEntityRenderer.class) +public abstract class ArmorStandEntityRendererMixin extends LivingEntityRenderer { + public ArmorStandEntityRendererMixin(EntityRendererFactory.Context ctx, ArmorStandArmorEntityModel model, float shadowRadius) { + super(ctx, model, shadowRadius); + } + + @Unique private FloatyRenderer floater; + + @Inject(method = "", at = @At("TAIL")) + public void VisibleBarriers$GiveRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { + this.floater = new FloatyRenderer<>(context.getItemRenderer(), Items.ARMOR_STAND.getDefaultStack()); + } + + @Unique + public void render(ArmorStandEntity entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + if (entity.isInvisible() && VisibleBarriers.isVisible()) { + floater.render(entity, g, matrixStack, vertexConsumerProvider, i); + } + super.render(entity, f, g, matrixStack, vertexConsumerProvider, i); + } +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/entities/EmptyEntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/entities/EmptyEntityRendererMixin.java new file mode 100644 index 0000000..bd1eda7 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/mixin/entities/EmptyEntityRendererMixin.java @@ -0,0 +1,50 @@ +package amymialee.visiblebarriers.mixin.entities; + +import amymialee.visiblebarriers.VisibleBarriers; +import amymialee.visiblebarriers.util.FloatyRenderer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EmptyEntityRenderer; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.AreaEffectCloudEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MarkerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.potion.PotionUtil; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EmptyEntityRenderer.class) +public abstract class EmptyEntityRendererMixin extends EntityRenderer { + protected EmptyEntityRendererMixin(EntityRendererFactory.Context ctx) { + super(ctx); + } + + @Unique private FloatyRenderer floater; + + @Inject(method = "", at = @At("TAIL")) + public void VisibleBarriers$GiveRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { + this.floater = new FloatyRenderer<>(context.getItemRenderer(), Items.BARRIER.getDefaultStack()); + } + + @Unique + public void render(T entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + if (VisibleBarriers.isVisible()) { + if (entity instanceof AreaEffectCloudEntity potionEntity) { + ItemStack potion = Items.LINGERING_POTION.getDefaultStack().copy(); + PotionUtil.setPotion(potion, potionEntity.getPotion()); + floater.renderItem(potion, entity, g, matrixStack, vertexConsumerProvider, i); + } else if (entity instanceof MarkerEntity) { + floater.renderItem(Items.STRUCTURE_BLOCK.getDefaultStack(), entity, g, matrixStack, vertexConsumerProvider, i); + } else { + floater.render(entity, g, matrixStack, vertexConsumerProvider, i); + } + } + super.render(entity, f, g, matrixStack, vertexConsumerProvider, i); + } +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/entities/EntityRendererMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/entities/EntityRendererMixin.java new file mode 100644 index 0000000..ae968d1 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/mixin/entities/EntityRendererMixin.java @@ -0,0 +1,36 @@ +package amymialee.visiblebarriers.mixin.entities; + +import amymialee.visiblebarriers.VisibleBarriers; +import amymialee.visiblebarriers.util.FloatyRenderer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.item.Items; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EntityRenderer.class) +public class EntityRendererMixin { + @Unique private FloatyRenderer floater; + + @Inject(method = "", at = @At("TAIL")) + public void VisibleBarriers$GiveRenderer(EntityRendererFactory.Context context, CallbackInfo ci) { + this.floater = new FloatyRenderer<>(context.getItemRenderer(), Items.SILVERFISH_SPAWN_EGG.getDefaultStack()); + } + + @Inject(method = "render", at = @At("HEAD")) + public void VisibleBarriers$UseRenderer(T entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { + if (VisibleBarriers.isVisible() && entity.isInvisible()) { + if (entity.getPickBlockStack() != null) { + floater.renderItem(entity.getPickBlockStack(), entity, g, matrixStack, vertexConsumerProvider, i); + } else { + floater.render(entity, g, matrixStack, vertexConsumerProvider, i); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/EntityTypeMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/entities/EntityTypeMixin.java similarity index 71% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/EntityTypeMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/entities/EntityTypeMixin.java index c6e85a1..839d022 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/EntityTypeMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/entities/EntityTypeMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin.entities; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityDimensions; @@ -16,16 +16,16 @@ public class EntityTypeMixin { @Shadow private EntityDimensions dimensions; @Inject(method = "maxTrackingRange", at = @At("RETURN")) - public void maxTrackingRange(int maxTrackingRange, CallbackInfoReturnable> cir) { + public void VisibleBarriers$MinTrackingRange(int maxTrackingRange, CallbackInfoReturnable> cir) { if (this.maxTrackingRange == 0) { - this.maxTrackingRange = 8; + this.maxTrackingRange = 4; } } @Inject(method = "setDimensions", at = @At("RETURN")) - public void setDimensions(float width, float height, CallbackInfoReturnable> cir) { + public void VisibleBarriers$MinDimensions(float width, float height, CallbackInfoReturnable> cir) { if (this.dimensions.width == 0 && this.dimensions.height == 0) { this.dimensions = EntityDimensions.changing(0.4f, 0.4f); } } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/MarkerEntityMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/entities/MarkerEntityMixin.java similarity index 86% rename from src/main/java/amymialee/visiblebarriers/mixin/visibility/MarkerEntityMixin.java rename to src/main/java/amymialee/visiblebarriers/mixin/entities/MarkerEntityMixin.java index ff24e70..7353f07 100644 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/MarkerEntityMixin.java +++ b/src/main/java/amymialee/visiblebarriers/mixin/entities/MarkerEntityMixin.java @@ -1,4 +1,4 @@ -package amymialee.visiblebarriers.mixin.visibility; +package amymialee.visiblebarriers.mixin.entities; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; @@ -18,8 +18,8 @@ public MarkerEntityMixin(EntityType type, World world) { } @Inject(method = "createSpawnPacket", at = @At("HEAD"), cancellable = true) - public void createSpawnPacket(CallbackInfoReturnable> cir) { + public void VisibleBarriers$ForcePacket(CallbackInfoReturnable> cir) { cir.setReturnValue(new EntitySpawnS2CPacket((MarkerEntity)((Object)this))); cir.cancel(); } -} +} \ No newline at end of file diff --git a/src/main/java/amymialee/visiblebarriers/mixin/visibility/LightBlockMixin.java b/src/main/java/amymialee/visiblebarriers/mixin/visibility/LightBlockMixin.java deleted file mode 100644 index 4e7e353..0000000 --- a/src/main/java/amymialee/visiblebarriers/mixin/visibility/LightBlockMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package amymialee.visiblebarriers.mixin.visibility; - -import amymialee.visiblebarriers.VisibleBarriers; -import net.minecraft.block.*; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LightBlock.class) -public class LightBlockMixin { - @Inject(method = "getRenderType", at = @At("HEAD"), cancellable = true) - public void getRenderType(BlockState state, CallbackInfoReturnable cir) { - if (VisibleBarriers.isVisible()) { - cir.setReturnValue(BlockRenderType.MODEL); - } - } - - @ModifyVariable(method = "", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private static AbstractBlock.Settings injected(AbstractBlock.Settings settings) { - return settings.noCollision(); - } - - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - public void getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (VisibleBarriers.isVisible()) { - cir.setReturnValue(VoxelShapes.fullCube()); - } - } -} diff --git a/src/main/java/amymialee/visiblebarriers/util/FloatyRenderer.java b/src/main/java/amymialee/visiblebarriers/util/FloatyRenderer.java new file mode 100644 index 0000000..0731469 --- /dev/null +++ b/src/main/java/amymialee/visiblebarriers/util/FloatyRenderer.java @@ -0,0 +1,66 @@ +package amymialee.visiblebarriers.util; + +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3f; + +import java.util.Random; + +public class FloatyRenderer { + private final Random random = new Random(); + public float uniqueOffset = this.random.nextFloat() * 3.1415927F * 2.0F; + private final ItemRenderer renderer; + private final ItemStack stack; + + public FloatyRenderer(ItemRenderer renderer, ItemStack stack) { + this.renderer = renderer; + this.stack = stack; + } + + public void render(T entity, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + this.renderItem(stack, entity, g, matrixStack, vertexConsumerProvider, i); + } + + public void renderItem(ItemStack stack, T entity, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + matrixStack.push(); + assert stack != null; + int j = stack.isEmpty() ? 187 : Item.getRawId(stack.getItem()) + stack.getDamage(); + this.random.setSeed(j); + BakedModel bakedModel = this.renderer.getModel(stack, entity.world, null, entity.getId()); + boolean bl = bakedModel.hasDepth(); + int k = 1; + float l = MathHelper.sin(((float) entity.age * 8 + g) / 10.0F + this.uniqueOffset) * 0.1F + 0.1F; + float m = bakedModel.getTransformation().getTransformation(ModelTransformation.Mode.GROUND).scale.getY(); + matrixStack.translate(0.0D, l + 0.25F * m, 0.0D); + float n = (((float) entity.age * 8 + g) / 20.0F + this.uniqueOffset); + matrixStack.multiply(Vec3f.POSITIVE_Y.getRadialQuaternion(-n)); + float o = bakedModel.getTransformation().ground.scale.getX(); + float p = bakedModel.getTransformation().ground.scale.getY(); + float q = bakedModel.getTransformation().ground.scale.getZ(); + float v; + float w; + if (!bl) { + float r = -0.0F * 0 * 0.5F * o; + v = -0.0F * 0 * 0.5F * p; + w = -0.09375F * 0 * 0.5F * q; + matrixStack.translate(r, v, w); + } + for (int u = 0; u < k; ++u) { + matrixStack.push(); + this.renderer.renderItem(stack, ModelTransformation.Mode.GROUND, false, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV, bakedModel); + matrixStack.pop(); + if (!bl) { + matrixStack.translate(0.0F * o, 0.0F * p, 0.09375F * q); + } + } + matrixStack.pop(); + } +} diff --git a/src/main/resources/assets/visiblebarriers/lang/en_us.json b/src/main/resources/assets/visiblebarriers/lang/en_us.json index 64531c3..10df252 100644 --- a/src/main/resources/assets/visiblebarriers/lang/en_us.json +++ b/src/main/resources/assets/visiblebarriers/lang/en_us.json @@ -1,6 +1,5 @@ { "category.visiblebarriers.bind" : "Visible Barriers", "key.visiblebarriers.bind" : "Toggle Visibility", - "itemGroup.visiblebarriers.extra_items" : "Extra Items", - "config.visiblebarriers.allowHotbarQuickSaving" : "Allow saving directly to the Saved Hotbars tab." + "itemGroup.visiblebarriers.visible_barriers" : "Extra Items" } \ No newline at end of file diff --git a/src/main/resources/assets/visiblebarriers/lang/ru_ru.json b/src/main/resources/assets/visiblebarriers/lang/ru_ru.json index c48e5be..b210d64 100644 --- a/src/main/resources/assets/visiblebarriers/lang/ru_ru.json +++ b/src/main/resources/assets/visiblebarriers/lang/ru_ru.json @@ -1,6 +1,5 @@ { "category.visiblebarriers.bind" : "Visible Barriers", "key.visiblebarriers.bind" : "Переключить видимоÑÑ‚ÑŒ", - "itemGroup.visiblebarriers.extra_items" : "Дополнительные предметы", - "config.visiblebarriers.allowHotbarQuickSaving" : "Разрешить добавление прÑмо в «Сохранённые инÑтрументы»." + "itemGroup.visiblebarriers.visible_barriers" : "Дополнительные предметы" } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 72af73f..b13fb27 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -16,26 +16,19 @@ "environment": "*", "entrypoints": { "client": [ - "amymialee.visiblebarriers.VisibleBarriers" + "amymialee.visiblebarriers.VisibleBarriersClient" ], - "modmenu": [ - "amymialee.visiblebarriers.VisibleBarriersModMenu" + "main": [ + "amymialee.visiblebarriers.VisibleBarriers" ] }, - "accessWidener" : "visiblebarriers.accesswidener", "mixins": [ - "visiblebarriers.mixins.json" + "visible-barriers.mixins.json" ], "depends": { - "fabric": "*", - "cloth-config": "*" + "fabric": "*" }, "custom": { - "modupdater": { - "strategy": "curseforge", - "projectID": 507228, - "strict": false - }, "modmenu": { "links": { "modmenu.discord": "https://discord.gg/P4dUsxv6An" diff --git a/src/main/resources/visible-barriers.mixins.json b/src/main/resources/visible-barriers.mixins.json new file mode 100644 index 0000000..e3628b6 --- /dev/null +++ b/src/main/resources/visible-barriers.mixins.json @@ -0,0 +1,23 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "amymialee.visiblebarriers.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "ItemStackMixin", + "blocks.AirBlockMixin", + "blocks.BarrierBlockMixin", + "blocks.LightBlockMixin", + "blocks.StructureVoidBlockMixin", + "entities.EntityTypeMixin", + "entities.MarkerEntityMixin" + ], + "client": [ + "entities.ArmorStandEntityRendererMixin", + "entities.EmptyEntityRendererMixin", + "entities.EntityRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/resources/visiblebarriers.accesswidener b/src/main/resources/visiblebarriers.accesswidener deleted file mode 100644 index 0b8698b..0000000 --- a/src/main/resources/visiblebarriers.accesswidener +++ /dev/null @@ -1 +0,0 @@ -accessWidener v1 named diff --git a/src/main/resources/visiblebarriers.mixins.json b/src/main/resources/visiblebarriers.mixins.json deleted file mode 100644 index c1b30c6..0000000 --- a/src/main/resources/visiblebarriers.mixins.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "amymialee.visiblebarriers.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "ArmorStandEntityRendererMixin", - "BlockEntityInvoker", - "CommandManagerMixin", - "CreativeInventoryScreenMixin", - "EmptyEntityRendererMixin", - "EntityRendererMixin", - "visibility.AirBlockMixin", - "visibility.BarrierBlockMixin", - "visibility.EntityTypeMixin", - "visibility.ItemStackMixin", - "visibility.LightBlockMixin", - "visibility.MarkerEntityMixin", - "visibility.StructureVoidBlockMixin" - ], - "injectors": { - "defaultRequire": 1 - } -}